1. 程式人生 > >201772020113 李清華《面向物件程式設計(java)》第18周學習總結

201772020113 李清華《面向物件程式設計(java)》第18周學習總結

1、實驗目的與要求

(1) 綜合掌握java基本程式結構;

(2) 綜合掌握java面向物件程式設計特點;

(3) 綜合掌握java GUI 程式設計結構;

(4) 綜合掌握java多執行緒程式設計模型;

(5) 綜合程式設計練習。

2、實驗內容和步驟

任務1:填寫課程課後調查問卷,網址:https://www.wjx.cn/jq/33108969.aspx。

任務2:綜合程式設計練習

練習1:設計一個使用者資訊採集程式,要求如下:

(1)  使用者資訊輸入介面如下圖所示:

 

(1)使用者點選提交按鈕時,使用者輸入資訊顯示控制檯介面;

(2)使用者點選重置按鈕後,清空使用者已輸入資訊;

(3)點選視窗關閉,程式退出。

 1 package fff;
 2 import java.awt.EventQueue;
 3 
 4 import javax.swing.JFrame;
 5 
 6 public class Main {
 7     public static void main(String[] args) {
 8         EventQueue.invokeLater(() -> {
 9             DemoJFrame page = new DemoJFrame();
10         });
11     }
12 }
View Code
 1 package fff;
 2 import java.awt.Dimension;
 3 import java.awt.Toolkit;
 4 import java.awt.Window;
 5 
 6 public class WinCenter {
 7     public static void center(Window win){
 8         Toolkit tkit = Toolkit.getDefaultToolkit();
 9         Dimension sSize = tkit.getScreenSize();
10 Dimension wSize = win.getSize(); 11 if(wSize.height > sSize.height){ 12 wSize.height = sSize.height; 13 } 14 if(wSize.width > sSize.width){ 15 wSize.width = sSize.width; 16 } 17 win.setLocation((sSize.width - wSize.width)/ 2, (sSize.height - wSize.height)/ 2); 18 } 19 }
View Code
  1 package fff;
  2 import java.awt.*;
  3 import java.awt.event.*;
  4 import javax.swing.*;
  5 import javax.swing.border.*;
  6 public class DemoJFrame extends JFrame {
  7     public DemoJFrame() {
  8         JPanel panel1 = new JPanel();
  9         panel1.setPreferredSize(new Dimension(700, 45));
 10         panel1.setLayout(new GridLayout(1, 4));
 11         JLabel label1 = new JLabel("Name:");
 12         JTextField j1 = new JTextField("");
 13         JLabel label2 = new JLabel("Qualification:");
 14         JComboBox<Object> j2 = new JComboBox<>();
 15         j2.addItem("chuzhong");
 16         j2.addItem("gaozhong");
 17         j2.addItem("undergraduate");
 18         panel1.add(label1);
 19         panel1.add(j1);
 20         panel1.add(label2);
 21         panel1.add(j2);
 22 
 23         JPanel panel2 = new JPanel();
 24         panel2.setPreferredSize(new Dimension(700, 65));
 25         panel2.setLayout(new GridLayout(1, 4));
 26         JLabel label3 = new JLabel("Address:");
 27         JTextArea j3 = new JTextArea();
 28         JLabel label4 = new JLabel("Hobby:");
 29         JPanel p = new JPanel();
 30         p.setLayout(new GridLayout(3, 1));
 31         p.setBorder(BorderFactory.createLineBorder(null));
 32         JCheckBox c1 = new JCheckBox("Reading");
 33         JCheckBox c2 = new JCheckBox("Singing");
 34         JCheckBox c3 = new JCheckBox("Dancing");
 35         p.add(c1);
 36         p.add(c2);
 37         p.add(c3);
 38         panel2.add(label3);
 39         panel2.add(j3);
 40         panel2.add(label4);
 41         panel2.add(p);
 42 
 43         JPanel panel3 = new JPanel();
 44         panel3.setPreferredSize(new Dimension(700, 150));
 45         FlowLayout flowLayout1 = new FlowLayout(FlowLayout.LEFT, 70, 40);
 46         panel3.setLayout(flowLayout1);
 47         JLabel label5 = new JLabel("Sex:");
 48         JPanel p1 = new JPanel();
 49         p1.setLayout(new GridLayout(2,1));
 50         p1.setBorder(BorderFactory.createLineBorder(null));
 51         ButtonGroup bu = new ButtonGroup();
 52         JRadioButton jr1 = new JRadioButton("Male");
 53         JRadioButton jr2 = new JRadioButton("Female");
 54         bu.add(jr1);
 55         bu.add(jr2);
 56         p1.add(jr1);
 57         p1.add(jr2);
 58         panel3.add(label5);
 59         panel3.add(p1);
 60         add(panel1);
 61         add(panel2);
 62         add(panel3);
 63 
 64         JPanel panel4 = new JPanel();
 65         panel4.setPreferredSize(new Dimension(700, 150));
 66         JButton b1 = new JButton("Validate");
 67         panel4.add(b1);
 68         JButton b2 = new JButton("Reset");
 69         panel4.add(b2);
 70         add(panel4);
 71 
 72         FlowLayout flowLayout = new FlowLayout();
 73         this.setLayout(flowLayout);
 74         this.setTitle("Students Detail");
 75         this.setBounds(300, 300, 800, 400);
 76         this.setVisible(true);
 77         this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
 78 
 79         b1.addActionListener(new ActionListener() {
 80 
 81         
 82             public void actionPerformed(ActionEvent e) {
 83                 // TODO 自動生成的方法存根
 84                 String xueli = j2.getSelectedItem().toString();
 85                 System.out.println("Name:" + j1.getText());
 86                 System.out.println("Qualification:" + xueli);
 87                 String hobbystring = "Hobby:";
 88                 if (c1.isSelected()) {
 89                     hobbystring += "Reading";
 90                 }
 91                 if (c2.isSelected()) {
 92                     hobbystring += "Singing";
 93                 }
 94                 if (c3.isSelected()) {
 95                     hobbystring += "Dancing";
 96                 }
 97                 System.out.println("Address:" + j3.getText());
 98                 if (jr1.isSelected()) {
 99                     System.out.println("Sex:Male");
100                 }
101                 if (jr2.isSelected()) {
102                     System.out.println("Sex:Female");
103                 }
104                 System.out.println(hobbystring);
105             }
106         });
107         b2.addActionListener(new ActionListener() {
108 
109             public void actionPerformed(ActionEvent e) {
110                 // TODO 自動生成的方法存根
111                 j1.setText(null);
112                 j3.setText(null);
113                 j2.setSelectedIndex(0);
114                 c1.setSelected(false);
115                 c2.setSelected(false);
116                 c3.setSelected(false);
117                 bu.clearSelection();
118             }
119         });
120     }
121 
122     public static void main(String args[]) {
123         new DemoJFrame();
124     }
125 
126 }
View Code

 

練習2:採用GUI介面設計以下程式:

l  編制一個程式,將身份證號.txt 中的資訊讀入到記憶體中;

l  按姓名字典序輸出人員資訊;

l  查詢最大年齡的人員資訊;

l  查詢最小年齡人員資訊;

l  輸入你的年齡,查詢身份證號.txt中年齡與你最近人的姓名、身份證號、年齡、性別和出生地;

l  查詢人員中是否有你的同鄉。

l  輸入身份證資訊,查詢所提供身份證號的人員資訊,要求輸入一個身份證數字時,查詢介面就顯示滿足查詢條件的查詢結果,且隨著輸入的數字的增多,查詢匹配的範圍逐漸縮小。

 1 package Demo;
 2 
 3 import java.awt.*;
 4 import javax.swing.*;
 5 
 6 public class ButtonTest {
 7     public static void main(String[] args) {
 8         EventQueue.invokeLater(() -> {
 9             JFrame frame = new Main();
10             frame.setTitle("身份證");
11             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
12             frame.setVisible(true);
13         });
14     }
15 }
View Code
  1 package Demo;
  2 
  3 import java.io.BufferedReader;
  4 import java.io.File;
  5 import java.io.FileInputStream;
  6 import java.io.InputStreamReader;
  7 import java.io.FileNotFoundException;
  8 import java.io.IOException;
  9 import java.util.ArrayList;
 10 import java.util.Arrays;
 11 import java.util.Collections;
 12 import java.util.Scanner;
 13 import java.awt.*;
 14 import javax.swing.*;
 15 import java.awt.event.*;
 16 
 17 public class Main extends JFrame {
 18     private static ArrayList<Student> studentlist;
 19     private static ArrayList<Student> list;
 20     private JPanel panel;
 21     private JPanel buttonPanel;
 22     private static final int DEFAULT_WITH = 600;
 23     private static final int DEFAULT_HEIGHT = 300;
 24 
 25     public Main() {
 26         studentlist = new ArrayList<>();
 27         Scanner scanner = new Scanner(System.in);
 28         File file = new File("studentfile.txt");
 29         try {
 30             FileInputStream fis = new FileInputStream(file);
 31             BufferedReader in = new BufferedReader(new InputStreamReader(fis));
 32             String temp = null;
 33             while ((temp = in.readLine()) != null) {
 34 
 35                 Scanner linescanner = new Scanner(temp);
 36 
 37                 linescanner.useDelimiter(" ");
 38                 String name = linescanner.next();
 39                 String number = linescanner.next();
 40                 String sex = linescanner.next();
 41                 String age = linescanner.next();
 42                 String province = linescanner.nextLine();
 43                 Student student = new Student();
 44                 student.setName(name);
 45                 student.setnumber(number);
 46                 student.setsex(sex);
 47                 int a = Integer.parseInt(age);
 48                 student.setage(a);
 49                 student.setprovince(province);
 50                 studentlist.add(student);
 51 
 52             }
 53         } catch (FileNotFoundException e) {
 54             System.out.println("學生資訊檔案找不到");
 55             e.printStackTrace();
 56         } catch (IOException e) {
 57             System.out.println("學生資訊檔案讀取錯誤");
 58             e.printStackTrace();
 59         }
 60         panel = new JPanel();
 61         panel.setLayout(new BorderLayout());
 62         JTextArea jt = new JTextArea();
 63         panel.add(jt);
 64         add(panel, BorderLayout.NORTH);
 65 
 66         buttonPanel = new JPanel();
 67         buttonPanel.setLayout(new GridLayout(1, 7));
 68         JButton jButton = new JButton("字典排序");
 69         JButton jButton1 = new JButton("年齡最大和年齡最小");
 70         JLabel lab = new JLabel("猜猜你的老鄉");
 71         JTextField jt1 = new JTextField();
 72         JLabel lab1 = new JLabel("找找同齡人(年齡相近):");
 73         JTextField jt2 = new JTextField();
 74         JLabel lab2 = new JLabel("輸入你的身份證號碼:");
 75         JTextField jt3 = new JTextField();
 76         JButton jButton2 = new JButton("退出");
 77 
 78         jButton.addActionListener(new ActionListener() {
 79             public void actionPerformed(ActionEvent e) {
 80                 Collections.sort(studentlist);
 81                 jt.setText(studentlist.toString());
 82             }
 83         });
 84         jButton1.addActionListener(new ActionListener() {
 85             public void actionPerformed(ActionEvent e) {
 86                 int max = 0, min = 100;
 87                 int j, k1 = 0, k2 = 0;
 88                 for (int i = 1; i < studentlist.size(); i++) {
 89                     j = studentlist.get(i).getage();
 90                     if (j > max) {
 91                         max = j;
 92                         k1 = i;
 93                     }
 94                     if (j < min) {
 95                         min = j;
 96                         k2 = i;
 97                     }
 98 
 99                 }
100                 jt.setText("年齡最大:" + studentlist.get(k1) + "年齡最小:" + studentlist.get(k2));
101             }
102         });
103         jButton2.addActionListener(new ActionListener() {
104             public void actionPerformed(ActionEvent e) {
105                 dispose();
106                 System.exit(0);
107             }
108         });
109         jt1.addActionListener(new ActionListener() {
110             public void actionPerformed(ActionEvent e) {
111                 String find = jt1.getText();
112                 String text = "";
113                 String place = find.substring(0, 3);
114                 for (int i = 0; i < studentlist.size(); i++) {
115                     if (studentlist.get(i).getprovince().substring(1, 4).equals(place)) {
116                         text += "\n" + studentlist.get(i);
117                         jt.setText("老鄉:" + text);
118                     }
119                 }
120             }
121         });
122         jt2.addActionListener(new ActionListener() {
123             public void actionPerformed(ActionEvent e) {
124                 String yourage = jt2.getText();
125                 int a = Integer.parseInt(yourage);
126                 int near = agenear(a);
127                 int value = a - studentlist.get(near).getage();
128                 jt.setText("年齡相近:" + studentlist.get(near));
129             }
130         });
131 
132         jt3.addKeyListener(new KeyAdapter() {
133             public void keyTyped(KeyEvent e) {
134                 list = new ArrayList<>();
135                 Collections.sort(studentlist);
136                 String key = jt3.getText();
137 
138                 for (int i = 1; i < studentlist.size(); i++) {
139                     if (studentlist.get(i).getnumber().contains(key)) {
140                         list.add(studentlist.get(i));
141                         jt.setText("emmm!你可能是:\n" + list);
142                     }
143                 }
144             }
145 
146         });
147         buttonPanel.add(jButton);
148         buttonPanel.add(jButton1);
149         buttonPanel.add(lab);
150         buttonPanel.add(jt1);
151         buttonPanel.add(lab1);
152         buttonPanel.add(jt2);
153         buttonPanel.add(lab2);
154         buttonPanel.add(jt3);
155         buttonPanel.add(jButton2);
156         add(buttonPanel, BorderLayout.SOUTH);
157         setSize(DEFAULT_WITH, DEFAULT_HEIGHT);
158     }
159 
160     public static int agenear(int age) {
161         int min = 53, value = 0, k = 0;
162         for (int i = 0; i < studentlist.size(); i++) {
163             value = studentlist.get(i).getage() - age;
164             if (value < 0)
165                 value = -value;
166             if (value < min) {
167                 min = value;
168                 k = i;
169             }
170         }
171         return k;
172     }
173 
174 }
View Code
 1 package Demo;
 2 
 3 public class Student implements Comparable<Student> {
 4 
 5     private String name;
 6     private String number ;
 7     private String sex ;
 8     private int age;
 9     private String province;
10    
11     public String getName() {
12         return name;
13     }
14     public void setName(String name) {
15         this.name = name;
16     }
17     public String getnumber() {
18         return number;
19     }
20     public void setnumber(String number) {
21         this.number = number;
22     }
23     public String getsex() {
24         return sex ;
25     }
26     public void setsex(String sex ) {
27         this.sex =sex ;
28     }
29     public int getage() {
30 
31         return age;
32         }
33         public void setage(int age) {
34             // int a = Integer.parseInt(age);
35         this.age= age;
36         }
37 
38     public String getprovince() {
39         return province;
40     }
41     public void setprovince(String province) {
42         this.province=province ;
43     }
44 
45     public int compareTo(Student o) {
46        return this.name.compareTo(o.getName());
47     }
48 
49     public String toString() {
50         return  name+"\t"+sex+"\t"+age+"\t"+number+"\t"+province+"\n";
51     }    
52 }
View Code

 

練習3:採用GUI介面設計以下程式

l  編寫一個計算器類,可以完成加、減、乘、除的操作

l  利用計算機類,設計一個小學生100以內數的四則運算練習程式,由計算機隨機產生10道加減乘除練習題,學生輸入答案,由程式檢查答案是否正確,每道題正確計10分,錯誤不計分,10道題測試結束後給出測試總分;

l  將程式中測試練習題及學生答題結果輸出到檔案,檔名為test.txt。

 1 package ui_test;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         MyExGUI lg = new MyExGUI();
 7         //new MyExGUI();
 8 
 9     }
10 
11 }
View Code
  1 import java.awt.*;
  2 import java.awt.event.ActionEvent;
  3 import java.awt.event.ActionListener;
  4 import java.io.BufferedOutputStream;
  5 import java.io.File;
  6 import java.io.FileOutputStream;
  7 import java.io.IOException;
  8 import java.util.ArrayList;
  9 
 10 import javax.swing.*;
 11 
 12 public class MyExGUI extends JFrame {
 13     ArrayList<String> user_zongti = new ArrayList<String>();
 14     ArrayList<String> user_zonganswer = new ArrayList<String>();
 15     ArrayList<String> user_answer = new ArrayList<String>();
 16     ArrayList<String> true_answer = new ArrayList<String>();
 17     ArrayList<String> jta_timu = new ArrayList<String>();
 18     ArrayList<String> jta_zong = new ArrayList<String>();
 19     ArrayList<Integer> user_fenshu = new ArrayList<Integer>();
 20     JMenuBar jm; // 選單條元件
 21     JMenu menu;// 選單
 22     JMenuItem item1, item2;// 選單項
 23     JMenu build; // 二級選單
 24     JMenuItem file, project;
 25     TextArea answer_all = new TextArea();
 26     TextField jta = new TextField();
 27     TextField jta_answer = new TextField();
 28     JLabel num_answer = new JLabel();
 29     JLabel answer;
 30     JToolBar jtb;// 工具條
 31     JButton jb1, jb2, jb3, jb4, jb5, jb6, jb7, jb_next;
 32     int answer_count;
 33     int answer_fenshu;
 34 
 35     public MyExGUI() {
 36         // 建立選單
 37         jm = new JMenuBar();
 38 
 39         menu = new JMenu("檔案(F)");
 40         menu.setMnemonic('f'); // 助記符
 41 
 42         build = new JMenu("新建");
 43 
 44         file = new JMenuItem("檔案");
 45         project = new JMenuItem("答題");
 46         item1 = new JMenuItem("儲存(S)");
 47         item2 = new JMenuItem("退出");
 48 
 49         answer = new JLabel("第 1 題");
 50 
 51         // 新增選單項至選單上
 52         build.add(file);
 53         build.add(project);
 54 
 55         menu.add(build);
 56         menu.add(item1);
 57         menu.add(item2);
 58         menu.addSeparator();
 59         // 將選單加入至選單欄
 60         jm.add(menu);
 61 
 62         JPanel contentPanel = new JPanel();
 63         contentPanel.setLayout(null);
 64         JLabel daan = new JLabel("答案");
 65         JLabel dengyu = new JLabel("=");
 66         num_answer = answer;
 67         num_answer.setFont(new Font("宋體", Font.BOLD, 22));
 68         jb_next = new JButton("下一題");
 69         jta.setFont(new Font("宋體", Font.BOLD, 22));
 70         jta_answer.setFont(new Font("宋體", Font.BOLD, 22));
 71         jb_next.setFont(new Font("宋體", Font.BOLD, 22));
 72         daan.setFont(new Font("宋體", Font.BOLD, 22));
 73         dengyu.setFont(new Font("宋體", Font.BOLD, 22));
 74 
 75         contentPanel.add(num_answer);
 76         contentPanel.add(daan);
 77         contentPanel.add(dengyu);
 78         contentPanel.add(jta);
 79 
 80         contentPanel.add(jta_answer);
 81         contentPanel.add(answer_all);
 82         contentPanel.add(jb_next);
 83 
 84         num_answer.setBounds(90, 20, 130, 50);
 85         daan.setBounds(250, 20, 90, 50);
 86         jta.setBounds(50, 70, 150, 30);
 87         dengyu.setBounds(205, 70, 20, 20);
 88         jta_answer.setBounds(230, 70, 100, 30);
 89         jb_next.setBounds(350, 70, 110, 30);
 90         answer_all.setBounds(50, 120, 400, 300);
 91 
 92         this.setJMenuBar(jm); // 新增選單欄,不能設定位置,會自動放在最上部
 93         this.add(contentPanel);
 94 
 95         this.setTitle("線上答題系統");
 96         this.setSize(600, 500);
 97         this.setVisible(true);
 98         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 99         item1.addActionListener(new ActionListener() {
100             public void actionPerformed(ActionEvent arg0) {
101                 FileOutputStream outSTr = null;
102                 BufferedOutputStream Buff = null;
103                 boolean flag = true;
104                 File file;
105                 // String test ;
106                 do {
107                     // test = "test"+count;
108 
109                     String inputValue = JOptionPane.showInputDialog("Please input file name");
110                     file = new File(inputValue + "test.txt");
111                     if (!file.exists()) {
112                         // 建立檔案
113                         try {
114 
115                             flag = file.createNewFile();
116 
117                         } catch (IOException e) {
118                             e.printStackTrace();
119 
120                         }
121                         flag = false;
122                     } else {
123 
124                         JOptionPane.showMessageDialog(null, "該檔名已存在,請重新輸入", "ERROR", JOptionPane.ERROR_MESSAGE);
125                         flag = true;
126                     }
127                 } while (flag);
128                 // 寫入檔案
129                 String u_answer;
130                 try {
131                     outSTr = new FileOutputStream(file);
132                     Buff = new BufferedOutputStream(outSTr);
133                     System.out.println("選擇是後執行的程式碼" + user_zongti.size() + user_answer.size());
134                     for (int i = 0; i < user_zongti.size(); i++) {
135                         try {
136                             Buff.write(user_zongti.get(i).getBytes());
137                             Buff.write("    ".getBytes());
138                             u_answer = user_answer.get(i);
139                             if (u_answer.equals(""))
140                                 u_answer = "沒有作答";
141 
142                             Buff.write(u_answer.getBytes());
143                             Buff.write("\r\n".getBytes());
144                         } catch (IOException e) {
145                             e.printStackTrace();
146                             i--;
147                         }
148                     }
149                     Buff.flush();
150                     Buff.close();
151 
152                 } catch (IOException e) {
153                     e.printStackTrace();
154                 }
155                 try {
156                     outSTr.close();
157                 } catch (IOException e) {
158                     e.printStackTrace();
159                 }
160                 user_zongti.clear();
161                 user_answer.clear();
162             }
163         });
164 
165         project.addActionListener(new ActionListener() {
166             public void actionPerformed(ActionEvent arg0) {
167                 arithmetic art = new arithmetic();
168                 true_answer = art.list_answer;
169                 jta_timu = art.list_timu;
170                 jta_zong = art.list;
171                 answer_count = 1;
172                 answer_all.setText("");
173                 for (int i = 0; i < art.list_timu.size(); i++) {
174                     user_zongti.add(jta_zong.get(i));
175                     answer_all.append(jta_timu.get(i));
176                     answer_all.append("\r\n");
177                 }
178                 num_answer.setText("第 " + answer_count + " 題");
179                 jta.setText(jta_timu.get(answer_count - 1));
180                 answer_count++;
181 
182             }
183         });
184         jb_next.addActionListener(new ActionListener() {
185             public void actionPerformed(ActionEvent arg0) {
186                 String temp;
187                 temp = jta_answer.getText();
188 
189                 if (jta.getText().equals("")) {
190                     JOptionPane.showMessageDialog(null, "錯誤,請匯入題庫", "錯誤", JOptionPane.ERROR_MESSAGE);
191                     return;
192                 }
193                 jta_answer.setText("");
194                 if (answer_count <= 10) {
195                     if (isInteger(temp)) {
196 
197                         user_answer.add(temp);
198                         System.out.println("選擇否後執行的程式碼" + temp + "user_size" + user_answer.size());
199                         num_answer.setText("第 " + answer_count + " 題");
200                         jta.setText(jta_timu.get(answer_count - 1));
201                         answer_count++;
202                     } else {
203                         JOptionPane.showMessageDialog(null, "錯誤", "請輸入數字", JOptionPane.ERROR_MESSAGE);
204                     }
205                 } else {
206                     user_answer.add(temp);
207                     System.out.println("選擇否後執行的程式碼" + temp + "user_size" + user_answer.size());
208                     answer_fenshu = 0;
209                     for (int i = 0; i < user_answer.size(); i++) {
210                         if (user_answer.get(i).equals(true_answer.get(i)))
211                             answer_fenshu += 5;
212                     }
213                     user_fenshu.add(answer_fenshu);
214                     Object[] options = { "是", "取消" };
215                     int res = JOptionPane.showOptionDialog(null, "是否檢視成績", "答題完畢", JOptionPane.DEFAULT_OPTION,
216                             JOptionPane.YES_NO_OPTION, null, options, options[0]);
217                     if (res == JOptionPane.YES_OPTION) {
218                         chart ct = new chart(user_fenshu);
219                         ct.setVisible(true);
220 
221                     } else {
222                         Object[] option = { "是", "取消" };
223                         int res1 = JOptionPane.showOptionDialog(null, "是否退出程式", "終止框", JOptionPane.DEFAULT_OPTION,
224                                 JOptionPane.YES_NO_OPTION, null, option, option[0]);
225 
226                         if (res1 == JOptionPane.YES_OPTION) {
227                             dispose();
228                             System.exit(0);
229 
230                         } else {
231 
232                         }
233 
234                     }
235 
236                 }
237 
238             }
239         });
240 
241         item2.addActionListener(new ActionListener() {
242             public void actionPerformed(ActionEvent e) {
243                 dispose();
244                 System.exit(0);
245             }
246         });
247 
248     }
249 
250     public static boolean isInteger(String str) {
251         for (int i = str.length(); --i >= 0;) {
252             if (!Character.isDigit(str.charAt(i))) {
253                 return false;
254             }
255         }
256         return true;
257     }
258 
259 }
View Code
  1 import java.io.BufferedOutputStream;
  2 import java.io.File;
  3 import java.io.FileOutputStream;
  4 import java.io.IOException;
  5 import java.util.ArrayList;
  6 import java.util.Random;
  7 import java.util.Scanner;
  8 
  9 public class arithmetic {
 10     ArrayList<String> list = new ArrayList<String>();
 11     ArrayList<String> list_timu = new ArrayList<String>();
 12     ArrayList<String> list_answer = new ArrayList<String>();
 13 
 14     public arithmetic() {
 15         FileOutputStream outSTr = null;
 16         BufferedOutputStream Buff = null;
 17         int number_n = 10, count;
 18 
 19         ArrayList<String> list_temp = new ArrayList<String>();
 20         String[] operator = new String[] { "+", "-", "*", "/" };
 21 
 22         Random rand = new Random();
 23         File file1 = new File("test.txt");
 24         if (file1.exists()) {
 25             // 建立檔案
 26             try {
 27                 file1.createNewFile();
 28             } catch (IOException e) {
 29                 e.printStackTrace();
 30             }
 31         }
 32 
 33         while (number_n > 0) {
 34             int[] number_temp = new int[rand.nextInt(2) + 3];
 35             String[] str_temp = new String[number_temp.length - 1];
 36             for (int i = 0; i < number_temp.length; i++) {
 37                 if (i < number_temp.length - 1) {
 38                     number_temp[i] = rand.nextInt(100);
 39                     list_temp.add(String.valueOf(number_temp[i]));
 40                     str_temp[i] = operator[rand.nextInt(4)];
 41                     list_temp.add(str_temp[i]);
 42 
 43                 }
 44 
 45                 else {
 46                     number_temp[i] = rand.nextInt(100);
 47                     list_temp.add(String.valueOf(number_temp[i]));
 48                 }
 49             }
 50 
 51             count = calculate_RPN(produce_RPN(list_temp));
 52             if (count != -1) {
 53                 list_timu.add(transform_string(list_temp));
 54                 list_answer.add(String.valueOf(count));
 55                 list_temp.add(" = " + count);
 56                 list.add(transform_string(list_temp));
 57                 number_n--;
 58                 list_temp.clear();
 59             } else
 60                 list_temp.clear();
 61             System.out.println(number_n);
 62 
 63         }
 64         try {
 65             outSTr = new FileOutputStream(file1);
 66             Buff = new BufferedOutputStream(outSTr);
 67             for (int i = 0; i < list.size(); i++) {
 68                 try {
 69                     Buff.write(list.get(i).getBytes());
 70                     Buff.write("\r\n".getBytes());
 71                 } catch (IOException e) {
 72                     e.printStackTrace();
 73                     i--;
 74                 }
 75             }
 76             Buff.flush();
 77             Buff.close();
 78 
 79         } catch (IOException e) {
 80             e.printStackTrace();
 81         }
 82         // Buff.close();
 83         try {
 84             outSTr.close();
 85         } catch (IOException e) {
 86             e.printStackTrace();
 87         }
 88 
 89         for (int i = 0; i < list.size(); i++) {
 90             System.out.print(list.get(i));
 91             System.out.println();
 92         }
 93         System.out.print("計算完畢!");
 94 
 95     }
 96 
 97     public static int calculate_RPN(ArrayList<String> list_temp) {
 98         int i = 0, t;
 99         double a = 0, b = 0;
100         String l_temp;
101         Stack sk = new Stack(10);
102         for (t = 0; t < list_temp.size(); t++) {
103             l_temp = list_temp.get(i++);
104             if (!isInteger(l_temp)) {
105                 b = sk.mypop();
106                 a = sk.mypop();
107                 switch (l_temp) {
108                 case "+":
109                     sk.mypush(a + b);
110                     break;
111                 case "-":
112                     if(!(a<b)) {
113                     sk.mypush(a - b);
114                     }
115                     else
116                         return -1;
117                     break;
118                 case "*":
119                     sk.mypush(a * b);
120                     break;
121                 case "/":
122                     if (b == 0||a<b)
123                         return -1;
124                     sk.mypush(a / b);
125                     break;
126                 }
127                 System.out.println("st.mytop: " + sk.mypeek());
128             } else {
129                 sk.mypush((double) Integer.parseInt(l_temp));
130             }
131 
132         }
133         if (!sk.myisempty()) {
134             a = sk.mypop();
135             b = a - (int) a;
136             System.out.println("a:  " + a);
137             if (a > 0 && b == 0) {
138                 return (int) a;
139             } else
140                 return -1;
141         } else
142             return -1;
143 
144     }
145 
146     public static ArrayList<String> produce_RPN(ArrayList<String> list_temp) {
147         int t = 0, i = 0;
148         String tmp;
149         Tack mytack = new Tack(10);
150         ArrayList<String> lt_temp = new ArrayList<String>();
151         while (true) {
152             tmp = list_temp.get(i++);
1