1. 程式人生 > >201771010126 王燕《面向物件程式設計(java)》第十八週學習總結

201771010126 王燕《面向物件程式設計(java)》第十八週學習總結

實驗十八  總複習

實驗時間 2018-12-30

1、實驗目的與要求

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

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

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

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

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

2、實驗內容和步驟

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

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

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

  

  1 package project1;
2 3 import java.awt.*; 4 import java.awt.event.*; 5 import javax.swing.*; 6 import javax.swing.border.*; 7 8 public class test extends JFrame { 9 public test() { 10 JPanel panel1 = new JPanel(); 11 panel1.setPreferredSize(new Dimension(700, 45)); 12 panel1.setLayout(new
GridLayout(1, 4)); 13 JLabel label1 = new JLabel("Name:"); 14 JTextField j1 = new JTextField(""); 15 JLabel label2 = new JLabel("Qualification:"); 16 JComboBox<Object> j2 = new JComboBox<>(); 17 j2.addItem("Graduate"); 18 j2.addItem("Not Graduate");
19 panel1.add(label1); 20 panel1.add(j1); 21 panel1.add(label2); 22 panel1.add(j2); 23 24 JPanel panel2 = new JPanel(); 25 panel2.setPreferredSize(new Dimension(700, 50)); 26 panel2.setLayout(new GridLayout(1, 4)); 27 JLabel label3 = new JLabel("Address:"); 28 JTextArea j3 = new JTextArea(); 29 JLabel label4 = new JLabel("Hobby:"); 30 JPanel p = new JPanel(); 31 p.setLayout(new GridLayout(3, 1)); 32 p.setBorder(BorderFactory.createLineBorder(null)); 33 JCheckBox c1 = new JCheckBox("Reading"); 34 JCheckBox c2 = new JCheckBox("Singing"); 35 JCheckBox c3 = new JCheckBox("Dancing"); 36 p.add(c1); 37 p.add(c2); 38 p.add(c3); 39 panel2.add(label3); 40 panel2.add(j3); 41 panel2.add(label4); 42 panel2.add(p); 43 44 JPanel panel3 = new JPanel(); 45 panel3.setPreferredSize(new Dimension(700, 150)); 46 FlowLayout flowLayout1 = new FlowLayout(FlowLayout.CENTER, 50, 10); 47 panel3.setLayout(flowLayout1); 48 JLabel label5 = new JLabel("Sex:"); 49 JPanel p1 = new JPanel(); 50 p1.setLayout(new GridLayout(2, 1)); 51 p1.setBorder(BorderFactory.createLineBorder(null)); 52 ButtonGroup bu = new ButtonGroup(); 53 JRadioButton jr1 = new JRadioButton("Male"); 54 JRadioButton jr2 = new JRadioButton("Female"); 55 bu.add(jr1); 56 bu.add(jr2); 57 p1.add(jr1); 58 p1.add(jr2); 59 panel3.add(label5); 60 panel3.add(p1); 61 add(panel1); 62 add(panel2); 63 add(panel3); 64 65 JPanel panel4 = new JPanel(); 66 panel4.setPreferredSize(new Dimension(700, 150)); 67 JButton b1 = new JButton("Validate"); 68 panel4.add(b1); 69 JButton b2 = new JButton("Reset"); 70 panel4.add(b2); 71 add(panel4); 72 73 FlowLayout flowLayout = new FlowLayout(); 74 this.setLayout(flowLayout); 75 this.setTitle("Students Detail"); 76 this.setBounds(200, 200, 800, 400); 77 this.setVisible(true); 78 this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); 79 80 b1.addActionListener(new ActionListener() { 81 82 @Override 83 public void actionPerformed(ActionEvent e) { 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 @Override 110 public void actionPerformed(ActionEvent e) { 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 test(); 124 } 125 126 }
View Code

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

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

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

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

 

 

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

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

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

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

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

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

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

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

 1 package demo1;
 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 demo1;
  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("C:\\Users\\ASUS\\Desktop\\身份證號.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         buttonPanel = new JPanel();
 66         buttonPanel.setLayout(new GridLayout(1, 7));
 67         JButton jButton = new JButton("字典排序");
 68         JButton jButton1 = new JButton("年齡最大和年齡最小");
 69         JLabel lab = new JLabel("猜猜你的老鄉");
 70         JTextField jt1 = new JTextField();
 71         JLabel lab1 = new JLabel("找找同齡人(年齡相近):");
 72         JTextField jt2 = new JTextField();
 73         JLabel lab2 = new JLabel("輸入你的身份證號碼:");
 74         JTextField jt3 = new JTextField();
 75         JButton jButton2 = new JButton("退出");
 76         jButton.setBounds(110, 90, 60, 30);
 77         jButton1.setBounds(110, 90, 60, 30);
 78         jt1.setBounds(110, 90, 60, 30);
 79         jt2.setBounds(110, 90, 60, 30);
 80         jt3.setBounds(110, 90, 60, 30);
 81         jButton2.setBounds(110, 90, 60, 30);
 82         jButton.addActionListener(new ActionListener() {
 83             public void actionPerformed(ActionEvent e) {
 84                 Collections.sort(studentlist);
 85                 jt.setText(studentlist.toString());
 86             }
 87         });
 88         jButton1.addActionListener(new ActionListener() {
 89             public void actionPerformed(ActionEvent e) {
 90                 int max = 0, min = 100;
 91                 int j, k1 = 0, k2 = 0;
 92                 for (int i = 1; i < studentlist.size(); i++) {
 93                     j = studentlist.get(i).getage();
 94                     if (j > max) {
 95                         max = j;
 96                         k1 = i;
 97                     }
 98                     if (j < min) {
 99                         min = j;
100                         k2 = i;
101                     }
102 
103                 }
104                 jt.setText("年齡最大:" + studentlist.get(k1) + "年齡最小:" + studentlist.get(k2));
105             }
106         });
107         jButton2.addActionListener(new ActionListener() {
108             public void actionPerformed(ActionEvent e) {
109                 dispose();
110                 System.exit(0);
111             }
112         });
113         jt1.addActionListener(new ActionListener() {
114             public void actionPerformed(ActionEvent e) {
115                 String find = jt1.getText();
116                 String text="";
117                 String place = find.substring(0, 3);
118                 for (int i = 0; i < studentlist.size(); i++) {
119                     if (studentlist.get(i).getprovince().substring(1, 4).equals(place)) {
120                         text+="\n"+studentlist.get(i);
121                         jt.setText("老鄉:" + text);
122                     }
123                 }
124             }
125         });
126         jt2.addActionListener(new ActionListener() {
127             public void actionPerformed(ActionEvent e) {
128                 String yourage = jt2.getText();
129                 int a = Integer.parseInt(yourage);
130                 int near = agenear(a);
131                 int value = a - studentlist.get(near).getage();
132                 jt.setText("年齡相近:" + studentlist.get(near));
133             }
134         });
135         jt3.addActionListener(new ActionListener() {
136             public void actionPerformed(ActionEvent e) {
137                 list = new ArrayList<>();
138                 Collections.sort(studentlist);
139                 String key = jt3.getText();
140                 for (int i = 1; i < studentlist.size(); i++) {
141                     if (studentlist.get(i).getnumber().contains(key)) {                        
142                         list.add(studentlist.get(i));                        
143                         jt.setText("emmm!你可能是:\n" + list);
144                         //System.out.println("可能的人:" + studentlist.get(i));
145                         //jt.setText("可能的人:" + studentlist.get(i));
146                     }                    
147                 }
148             }
149         });
150         buttonPanel.add(jButton);
151         buttonPanel.add(jButton1);
152         buttonPanel.add(lab);
153         buttonPanel.add(jt1);
154         buttonPanel.add(lab1);
155         buttonPanel.add(jt2);
156         buttonPanel.add(lab2);
157         buttonPanel.add(jt3);
158         buttonPanel.add(jButton2);
159         add(buttonPanel, BorderLayout.SOUTH);
160         setSize(DEFAULT_WITH, DEFAULT_HEIGHT);
161     }
162 
163     public static int agenear(int age) {
164         int min = 53, value = 0, k = 0;
165         for (int i = 0; i < studentlist.size(); i++) {
166             value = studentlist.get(i).getage() - age;
167             if (value < 0)
168                 value = -value;
169             if (value < min) {
170                 min = value;
171                 k = i;
172             }
173         }
174         return k;
175     }
176 
177 }
178 
179 
180 Main
View Code
 1 package demo1;
 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 }
53 
54 
55 Student
View Code

 

 

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

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

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

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

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