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