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