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 }

 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 }

  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 }

练习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 }

  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 }

 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 }

练习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 }

  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 }

  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 }

任务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,提高自己的编程水平。

原文地址:https://www.cnblogs.com/bmwb/p/10199840.html

时间: 2024-11-05 15:55:47

201772020113 李清华《面向对象程序设计(java)》第18周学习总结的相关文章

201771010123汪慧和《面向对象程序设计Java》第二周学习总结

一.理论知识部分 1.标识符由字母.下划线.美元符号和数字组成, 且第一个符号不能为数字.标识符可用作: 类名.变量名.方法名.数组名.文件名等.第二部分:理论知识学习部分 2.关键字就是Java语言中已经被赋予特定意义 的一些单词. ?常见有:class.public.try.catch.if. float.import.void等. 关键字不做变量名. 3.Java有三种注释的方式:   // 注释内容由//一直到此行结束. /*和*/ 定义一个注释块.  /**开始,*/结束 这种注释方法

201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结

项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11475377.html 作业学习目标 学习并掌握Java Application程序结构: 学习并掌握Java语言的数据类型与变量: 学会使用Java运算符构造各类表达式: 掌握Java Application输入输出技术: 掌握Java流程控制技术(分支.循环): 掌握Math类.Strin

20182329 2019-2020-1 《数据结构与面向对象程序设计》第1周学习总结

20182329 2019-2020-1 <数据结构与面向对象程序设计>第1周学习总结 教材学习内容总结 git代码托管代码 Java的基本编程 jdb代码调试 教材学习中的问题和解决过程 问题1:在课本自学过程中,有一题是Java中有什么是不可能被识别的,我做错了一道(12345)可以被识别. 问题1解决方案:后来询问学长数字不与命令相匹配时不是有效的标识符,且标识符不能以数字为开头. 问题2:在自己对于课本代码编译时,发现自己main处显示错误 问题2解决方案:一开始我以为是我main的方

20182328 2019-2020-1 《数据结构与面向对象程序设计》第4周学习总结

20182328 2019-2020-1 <数据结构与面向对象程序设计>第4周学习总结 教材学习内容总结 1.对类和对象进一步的了解. 2.学习静态类和静态方法. 3.学习类之间不同类型的关系. 4.学习方法的设计及重载. 5.学习了如何调试. 教材学习中的问题和解决过程 问题1:为什么有的变量可以重名? 问题1解决方案:在方法内声明的局部变量可以和在类一级声明的实例变量有同样的名字. 问题2:方法重载的用处是什么? 问题2解决方案:方法可能面临会有不用的参数列表,这时会用到重载,方便调用.

学号 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结

学号 2019-2020-1 <数据结构与面向对象程序设计>第X周学习总结 教材学习内容总结 super和this: this 一是引用隐式参数. 二是调用该类其他构造器. super 调用父类的方法. 调用父类的构造器. 通过super关键字来实现对父类成员的访问,用来引用当前对象的父类,super与this引用不是类似的概念,因为super不是一个对象引用,不能将super赋给另一个对象变量,它只是一个指示编译器调用超类方法的特殊关键字,super指向父类,this是指向自己的引用. 继承

20182328 2019-2020-1 《数据结构与面向对象程序设计》第5周学习总结

20182328 2019-2020-1 <数据结构与面向对象程序设计>第5周学习总结 教材学习内容总结 1.继承的概念 2.函数的构建 3.super的用法 4.类层次结构的具体介绍 5.方法的重写 6.设计继承 教材学习中的问题和解决过程 问题1:构造方法可以继承吗? 问题1解决方案:构造方法是用来创建某个类型的对象,字典类有一个称为Book的构造方法没有意义 问题2:java为什么是单继承? 问题2解决方案:Java语言中,多继承容易带来安全隐患:当多个父类中定义了相同功能,而且功能内容

学号 2019-2020-20182318 《数据结构与面向对象程序设计》第7周学习总结

学号 2019-2020-20182318 <数据结构与面向对象程序设计>第7周学习总结 教材学习内容总结 十二章在讲编程中的时间复杂度的概念,时间复杂度越低,程序运行效率越高.时间复杂度的计算可通过寻找运行次数最多的程序,计算他的运行次数,取n的最高次方的极数,即为程序的时间复杂度. 栈可以理解为一类数据的集合,栈中的元素可以写入,也可以读出.元素存在先后次序.先入栈的先被读出.栈可用数组,链表两种形式实现.应注意使用数组的实现链表时要注意数组大小,在push过程中可添加扩大数组大小的程序.

20182306 2019-2020-1 《数据结构与面向对象程序设计》第八周学习总结

目录 20182306 2019-2020-1 <数据结构与面向对象程序设计>第八周学习总结 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题总结 结对及互评 评分标准 点评模板: 点评过的同学博客和代码 其他(感悟.思考等,可选) 学习进度条 参考资料 20182306 2019-2020-1 <数据结构与面向对象程序设计>第八周学习总结 教材学习内容总结 查找 线性查找即按顺序从前向后一个一个进行查找,但是为了提高代码运行效率,可

20182328 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结

20182328 2019-2020-1 <数据结构与面向对象程序设计>第十周学习总结 教材学习内容总结 图的概念 图由顶点和边组成. 邻接的(adjacent):图中的两个顶点之间有一条连通边. 邻居:邻接顶点. 自循环(环):连通一个顶点及其自身的边. 路径:由一个顶点到达另一个顶点. 路径长度:路径边的条数(顶点数 - 1). 环路:一种首顶点和末顶点相同且没有重边的路径.没有环路则是无环的(acyclic). 图的种类 无向图:是一种边为无序结点对的图. 完全的:无向图拥有最大数目的连

学号20182317 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结

学号20182317 2019-2020-1 <数据结构与面向对象程序设计>第十周学习总结 教材学习内容总结 三种常用的查找算法(顺序查查找,折半查找,二叉排序树查找) 图 基本概念: 1.顶点(vertex) 表示某个事物或对象.由于图的术语没有标准化,因此,称顶点为点.节点.结点.端点等都是可以的. 2.边(edge) 通俗点理解就是两个点相连组合成一条边,表示事物与事物之间的关系.需要注意的是边表示的是顶点之间的逻辑关系,粗细长短都无所谓的.包括上面的顶点也一样,表示逻辑事物或对象,画的