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++);
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,提高自己的编程水平。

posted on 2018-12-30 16:33  bmwb  阅读(218)  评论(1编辑  收藏  举报

导航