201772020113 李清華《面向對象程序設計(java)》第18周學習總結

1、實驗目的與要求java

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

(2) 綜合掌握java面向對象程序設計特色;編程

(3) 綜合掌握java GUI 程序設計結構;網絡

(4) 綜合掌握java多線程編程模型;多線程

(5) 綜合編程練習。併發

2、實驗內容和步驟app

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

任務2:綜合編程練習ide

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

 

任務3:本學期課程已結束,請彙總《面向對象程序設計課程學習進度條》的數據,統計我的專業能力提高的數據。並從學習內容、學習方法、學習心得幾個方面進行課程學習總結,也但願你對課程的不足提出建議和意見。

 學習內容:

Java語言特色與開發環境配置(第1章、第2章)

Java基本程序結構(第3章)

Java面向對象程序結構(第4章、第5章、第6章)

類、類間關係、類圖 

Java JDK預約義類/接口及其API(String-第3章、 Arrays-第3章、Files-第3章62頁、LocalDate-第4章、 Object-第5章、對象包裝器-第5章、Comparator-第6章、 異常類-第7章、ArrayList-第5+8章、第9章、第10-12章、 第14章)

— Java異常處理編程模型

— Java GUI編程模型 

Java併發程序設計(第14章) 

Java應用程序部署(第13章)

學習方法:

理論與實踐(實驗)學習相結合,課下自主學習:

1.理論課:老師講授基礎知識

2.實驗課:老師和助教演示示例程序,並進行相應的更改和創新

3.課下自主學習:

(1)結合書籍內容和相關的示例程序,並自主查閱資料,完成編程練習。

(2)編程練習完成後,助教進行網絡在線示範與講解;老師根據出現的問題,在課堂上進行講解。

學習心得:

通過一學期的學習,對面向對象編程有了一個清晰的概念,理解了Java歷久彌新的強大生命力。但在語法上還有一些東西沒有掌握,都須要儘快複習,之後也不能放下這門技能。還需繼續努力學習Java,提升本身的編程水平。

相關文章
相關標籤/搜索