1. 程式人生 > >201771010124 王海珍 《面向物件設計 java》第十八週總結

201771010124 王海珍 《面向物件設計 java》第十八週總結

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 }
複製程式碼

 (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 }
複製程式碼 複製程式碼
  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
複製程式碼 複製程式碼
 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
複製程式碼

 

 

練習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 }
複製程式碼 複製程式碼
 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 }
複製程式碼 複製程式碼
  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  mytack.mypush(tmp); 165 else { 166  lt_temp.add(mytack.mypop()); 167  mytack.mypush(tmp); 168  } 169 170  } 171  } 172 if (i >= list_temp.size()) { 173 while (!mytack.myisempty()) 174  lt_temp.add(mytack.mypop()); 175  System.out.println(transform_string(list_temp)); 176 list_temp = lt_temp; 177  System.out.println(list_temp); 178 return list_temp; 179  } 180  } 181 182  } 183 184 public static boolean isInteger(String str) { 185 for (int i = str.length(); --i >= 0;) { 186 if (!Character.isDigit(str.charAt(i))) { 187 return false; 188  } 189  } 190 return true; 191  } 192 193 public static boolean isCPriority(String str, String s) { 194 if ((str + s).equals("*+") || (str + s).equals("*-") || (str + s).equals("/+") || (str + s).equals("/-")) 195 return true; 196 else 197 return false; 198  } 199 200 public static String transform_string(ArrayList<String> list_temp) { 201 String s = ""; 202 for (int i = 0; i < list_temp.size(); i++) { 203 s += list_temp.get(i); 204  } 205 return s; 206 207  } 208 209 static class Stack { 210 int mytop; 211 double stk[]; 212 213 public Stack(int num) { 214 mytop = -1; 215 stk = new double[num]; 216  } 217 218 /* 出棧 */ 219 double mypop() { 220 double peek = stk[mytop]; 221 mytop--; 222 return peek; 223  } 224 225 /* 入棧 */ 226 void mypush(double x) { 227 mytop++; 228 stk[mytop] = x; 229 230  } 231 232 /* 判空 */ 233  Boolean myisempty() { 234 if (mytop == -1) 235 return true; 236 else 237 return false; 238  } 239 240 /* 取棧頂元素 */ 241 double mypeek() { 242 double peek = stk[mytop]; 243 return peek; 244  } 245 246 /* 棧大小 */ 247 int mysize() { 248 return mytop + 1; 249  } 250  } 251 252 static class Tack { 253 int mytop; 254  String tk[]; 255 256 public Tack(int num) { 257 mytop = -1; 258 tk = new String[num]; 259  } 260 261 /* 出棧 */ 262  String mypop() { 263 String peek = tk[mytop]; 264 mytop--; 265 return peek; 266  } 267 268 /* 入棧 */ 269 void mypush(String x) { 270 mytop++; 271 tk[mytop] = x; 272 273  } 274 275 /* 判空 */ 276  Boolean myisempty() { 277 if (mytop == -1) 278 return true; 279 else 280 return false; 281  } 282 283 /* 取棧頂元素 */ 284  String mypeek() { 285 String peek = tk[mytop]; 286 return peek; 287  } 288 289 /* 棧大小 */ 290 int mysize() { 291 return mytop + 1; 292  } 293 294  } 295 296 } 297 298 299 arithmetic