201771010124 王海珍 《面向對象設計 java》第十八週總結

1、實驗目的與要求java

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

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

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

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

(5) 綜合編程練習。安全

2、實驗內容和步驟多線程

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

任務2:綜合編程練習app

練習1:設計一個用戶信息採集程序,要求以下:框架

  

複製代碼
  1 package project1;  2  3 import java.awt.*;  4 import java.awt.event.*;  5 import javax.swing.*;  6 import javax.swing.border.*;  7  8 public class test extends JFrame {  9 public test() {  10 JPanel panel1 = new JPanel();  11 panel1.setPreferredSize(new Dimension(700, 45));  12 panel1.setLayout(new GridLayout(1, 4));  13 JLabel label1 = new JLabel("Name:");  14 JTextField j1 = new JTextField("");  15 JLabel label2 = new JLabel("Qualification:");  16 JComboBox<Object> j2 = new JComboBox<>();  17 j2.addItem("Graduate");  18 j2.addItem("Not Graduate");  19  panel1.add(label1);  20  panel1.add(j1);  21  panel1.add(label2);  22  panel1.add(j2);  23  24 JPanel panel2 = new JPanel();  25 panel2.setPreferredSize(new Dimension(700, 50));  26 panel2.setLayout(new GridLayout(1, 4));  27 JLabel label3 = new JLabel("Address:");  28 JTextArea j3 = new JTextArea();  29 JLabel label4 = new JLabel("Hobby:");  30 JPanel p = new JPanel();  31 p.setLayout(new GridLayout(3, 1));  32 p.setBorder(BorderFactory.createLineBorder(null));  33 JCheckBox c1 = new JCheckBox("Reading");  34 JCheckBox c2 = new JCheckBox("Singing");  35 JCheckBox c3 = new JCheckBox("Dancing");  36  p.add(c1);  37  p.add(c2);  38  p.add(c3);  39  panel2.add(label3);  40  panel2.add(j3);  41  panel2.add(label4);  42  panel2.add(p);  43  44 JPanel panel3 = new JPanel();  45 panel3.setPreferredSize(new Dimension(700, 150));  46 FlowLayout flowLayout1 = new FlowLayout(FlowLayout.CENTER, 50, 10);  47  panel3.setLayout(flowLayout1);  48 JLabel label5 = new JLabel("Sex:");  49 JPanel p1 = new JPanel();  50 p1.setLayout(new GridLayout(2, 1));  51 p1.setBorder(BorderFactory.createLineBorder(null));  52 ButtonGroup bu = new ButtonGroup();  53 JRadioButton jr1 = new JRadioButton("Male");  54 JRadioButton jr2 = new JRadioButton("Female");  55  bu.add(jr1);  56  bu.add(jr2);  57  p1.add(jr1);  58  p1.add(jr2);  59  panel3.add(label5);  60  panel3.add(p1);  61  add(panel1);  62  add(panel2);  63  add(panel3);  64  65 JPanel panel4 = new JPanel();  66 panel4.setPreferredSize(new Dimension(700, 150));  67 JButton b1 = new JButton("Validate");  68  panel4.add(b1);  69 JButton b2 = new JButton("Reset");  70  panel4.add(b2);  71  add(panel4);  72  73 FlowLayout flowLayout = new FlowLayout();  74 this.setLayout(flowLayout);  75 this.setTitle("Students Detail");  76 this.setBounds(200, 200, 800, 400);  77 this.setVisible(true);  78 this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);  79  80 b1.addActionListener(new ActionListener() {  81  82  @Override  83 public void actionPerformed(ActionEvent e) {  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  @Override 110 public void actionPerformed(ActionEvent e) { 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 test(); 124  } 125 126 }
複製代碼

 (1)  用戶信息輸入界面以下圖所示:

 (1)用戶點擊提交按鈕時,用戶輸入信息顯示控制檯界面;

(2)用戶點擊重置按鈕後,清空用戶已輸入信息;

 (3)點擊窗口關閉,程序退出。

 

 

練習2:採用GUI界面設計如下程序:

l  編制一個程序,將身份證號.txt 中的信息讀入到內存中;

l  按姓名字典序輸出人員信息;

l  查詢最大年齡的人員信息;

l  查詢最小年齡人員信息;

l  輸入你的年齡,查詢身份證號.txt中年齡與你最近人的姓名、身份證號、年齡、性別和出生地;

l  查詢人員中是否有你的同鄉。

l  輸入身份證信息,查詢所提供身份證號的人員信息,要求輸入一個身份證數字時,查詢界面就顯示知足查詢條件的查詢結果,且隨着輸入的數字的增多,查詢匹配的範圍逐漸縮小。

複製代碼
 1 package demo1;  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 demo1;  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("C:\\Users\\ASUS\\Desktop\\身份證號.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 buttonPanel = new JPanel();  66 buttonPanel.setLayout(new GridLayout(1, 7));  67 JButton jButton = new JButton("字典排序");  68 JButton jButton1 = new JButton("年齡最大和年齡最小");  69 JLabel lab = new JLabel("猜猜你的老鄉");  70 JTextField jt1 = new JTextField();  71 JLabel lab1 = new JLabel("找找同齡人(年齡相近):");  72 JTextField jt2 = new JTextField();  73 JLabel lab2 = new JLabel("輸入你的身份證號碼:");  74 JTextField jt3 = new JTextField();  75 JButton jButton2 = new JButton("退出");  76 jButton.setBounds(110, 90, 60, 30);  77 jButton1.setBounds(110, 90, 60, 30);  78 jt1.setBounds(110, 90, 60, 30);  79 jt2.setBounds(110, 90, 60, 30);  80 jt3.setBounds(110, 90, 60, 30);  81 jButton2.setBounds(110, 90, 60, 30);  82 jButton.addActionListener(new ActionListener() {  83 public void actionPerformed(ActionEvent e) {  84  Collections.sort(studentlist);  85  jt.setText(studentlist.toString());  86  }  87  });  88 jButton1.addActionListener(new ActionListener() {  89 public void actionPerformed(ActionEvent e) {  90 int max = 0, min = 100;  91 int j, k1 = 0, k2 = 0;  92 for (int i = 1; i < studentlist.size(); i++) {  93 j = studentlist.get(i).getage();  94 if (j > max) {  95 max = j;  96 k1 = i;  97  }  98 if (j < min) {  99 min = j; 100 k2 = i; 101  } 102 103  } 104 jt.setText("年齡最大:" + studentlist.get(k1) + "年齡最小:" + studentlist.get(k2)); 105  } 106  }); 107 jButton2.addActionListener(new ActionListener() { 108 public void actionPerformed(ActionEvent e) { 109  dispose(); 110 System.exit(0); 111  } 112  }); 113 jt1.addActionListener(new ActionListener() { 114 public void actionPerformed(ActionEvent e) { 115 String find = jt1.getText(); 116 String text=""; 117 String place = find.substring(0, 3); 118 for (int i = 0; i < studentlist.size(); i++) { 119 if (studentlist.get(i).getprovince().substring(1, 4).equals(place)) { 120 text+="\n"+studentlist.get(i); 121 jt.setText("老鄉:" + text); 122  } 123  } 124  } 125  }); 126 jt2.addActionListener(new ActionListener() { 127 public void actionPerformed(ActionEvent e) { 128 String yourage = jt2.getText(); 129 int a = Integer.parseInt(yourage); 130 int near = agenear(a); 131 int value = a - studentlist.get(near).getage(); 132 jt.setText("年齡相近:" + studentlist.get(near)); 133  } 134  }); 135 jt3.addActionListener(new ActionListener() { 136 public void actionPerformed(ActionEvent e) { 137 list = new ArrayList<>(); 138  Collections.sort(studentlist); 139 String key = jt3.getText(); 140 for (int i = 1; i < studentlist.size(); i++) { 141 if (studentlist.get(i).getnumber().contains(key)) { 142  list.add(studentlist.get(i)); 143 jt.setText("emmm!你多是:\n" + list); 144 //System.out.println("可能的人:" + studentlist.get(i)); 145 //jt.setText("可能的人:" + studentlist.get(i)); 146  } 147  } 148  } 149  }); 150  buttonPanel.add(jButton); 151  buttonPanel.add(jButton1); 152  buttonPanel.add(lab); 153  buttonPanel.add(jt1); 154  buttonPanel.add(lab1); 155  buttonPanel.add(jt2); 156  buttonPanel.add(lab2); 157  buttonPanel.add(jt3); 158  buttonPanel.add(jButton2); 159  add(buttonPanel, BorderLayout.SOUTH); 160  setSize(DEFAULT_WITH, DEFAULT_HEIGHT); 161  } 162 163 public static int agenear(int age) { 164 int min = 53, value = 0, k = 0; 165 for (int i = 0; i < studentlist.size(); i++) { 166 value = studentlist.get(i).getage() - age; 167 if (value < 0) 168 value = -value; 169 if (value < min) { 170 min = value; 171 k = i; 172  } 173  } 174 return k; 175  } 176 177 } 178 179 180 Main
複製代碼
複製代碼
 1 package demo1;  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 } 53 54 55 Student
複製代碼

 

 

練習3:採用GUI界面設計如下程序

l  編寫一個計算器類,能夠完成加、減、乘、除的操做

l  利用計算機類,設計一個小學生100之內數的四則運算練習程序,由計算機隨機產生10道加減乘除練習題,學生輸入答案,由程序檢查答案是否正確,每道題正確計10分,錯誤不計分,10道題測試結束後給出測試總分;

l  將程序中測試練習題及學生答題結果輸出到文件,文件名爲test.txt。

複製代碼
  1 package ui_test;  2  3 import java.awt.*;  4 import java.awt.event.ActionEvent;  5 import java.awt.event.ActionListener;  6 import java.io.BufferedOutputStream;  7 import java.io.File;  8 import java.io.FileOutputStream;  9 import java.io.IOException;  10 import java.util.ArrayList;  11  12 import javax.swing.*;  13  14 public class MyExGUI extends JFrame {  15 ArrayList<String> user_zongti = new ArrayList<String>();  16 ArrayList<String> user_zonganswer = new ArrayList<String>();  17 ArrayList<String> user_answer = new ArrayList<String>();  18 ArrayList<String> true_answer = new ArrayList<String>();  19 ArrayList<String> jta_timu = new ArrayList<String>();  20 ArrayList<String> jta_zong = new ArrayList<String>();  21 ArrayList<Integer> user_fenshu = new ArrayList<Integer>();  22 JMenuBar jm; // 菜單條組件  23 JMenu menu;// 菜單  24 JMenuItem item1, item2;// 菜單項  25 JMenu build; // 二級菜單  26  JMenuItem file, project;  27 TextArea answer_all = new TextArea();  28 TextField jta = new TextField();  29 TextField jta_answer = new TextField();  30 JLabel num_answer = new JLabel();  31  JLabel answer;  32 JToolBar jtb;// 工具條  33  JButton jb1, jb2, jb3, jb4, jb5, jb6, jb7, jb_next;  34 int answer_count;  35 int answer_fenshu;  36  37 public MyExGUI() {  38 // 建立菜單  39 jm = new JMenuBar();  40  41 menu = new JMenu("文件(F)");  42 menu.setMnemonic('f'); // 助記符  43  44 build = new JMenu("新建");  45  46 file = new JMenuItem("文件");  47 project = new JMenuItem("答題");  48 item1 = new JMenuItem("保存(S)");  49 item2 = new JMenuItem("退出");  50  51 answer = new JLabel("第 1 題");  52  53 // 添加菜單項至菜單上  54  build.add(file);  55  build.add(project);  56  57  menu.add(build);  58  menu.add(item1);  59  menu.add(item2);  60  menu.addSeparator();  61 // 將菜單加入至菜單欄  62  jm.add(menu);  63  64 JPanel contentPanel = new JPanel();  65 contentPanel.setLayout(null);  66 JLabel daan = new JLabel("答案");  67 JLabel dengyu = new JLabel("=");  68 num_answer = answer;  69 num_answer.setFont(new Font("宋體", Font.BOLD, 22));  70 jb_next = new JButton("下一題");  71 jta.setFont(new Font("宋體", Font.BOLD, 22));  72 jta_answer.setFont(new Font("宋體", Font.BOLD, 22));  73 jb_next.setFont(new Font("宋體", Font.BOLD, 22));  74 daan.setFont(new Font("宋體", Font.BOLD, 22));  75 dengyu.setFont(new Font("宋體", Font.BOLD, 22));  76  77  contentPanel.add(num_answer);  78  contentPanel.add(daan);  79  contentPanel.add(dengyu);  80  contentPanel.add(jta);  81  82  contentPanel.add(jta_answer);  83  contentPanel.add(answer_all);  84  contentPanel.add(jb_next);  85  86 num_answer.setBounds(90, 20, 130, 50);  87 daan.setBounds(250, 20, 90, 50);  88 jta.setBounds(50, 70, 150, 30);  89 dengyu.setBounds(205, 70, 20, 20);  90 jta_answer.setBounds(230, 70, 100, 30);  91 jb_next.setBounds(350, 70, 110, 30);  92 answer_all.setBounds(50, 120, 400, 300);  93  94 this.setJMenuBar(jm); // 添加菜單欄,不能設定位置,會自動放在最上部  95 this.add(contentPanel);  96  97 this.setTitle("在線答題系統");  98 this.setSize(600, 500);  99 this.setVisible(true); 100 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 101 item1.addActionListener(new ActionListener() { 102 public void actionPerformed(ActionEvent arg0) { 103 FileOutputStream outSTr = null; 104 BufferedOutputStream Buff = null; 105 boolean flag = true; 106  File file; 107 // String test ; 108 do { 109 // test = "test"+count; 110 111 String inputValue = JOptionPane.showInputDialog("Please input file name"); 112 file = new File(inputValue + "test.txt"); 113 if (!file.exists()) { 114 // 建立文件 115 try { 116 117 flag = file.createNewFile(); 118 119 } catch (IOException e) { 120  e.printStackTrace(); 121 122  } 123 flag = false; 124 } else { 125 126 JOptionPane.showMessageDialog(null, "該文件名已存在,請從新輸入", "ERROR", JOptionPane.ERROR_MESSAGE); 127 flag = true; 128  } 129 } while (flag); 130 // 寫入文件 131  String u_answer; 132 try { 133 outSTr = new FileOutputStream(file); 134 Buff = new BufferedOutputStream(outSTr); 135 System.out.println("選擇是後執行的代碼" + user_zongti.size() + user_answer.size()); 136 for (int i = 0; i < user_zongti.size(); i++) { 137 try { 138  Buff.write(user_zongti.get(i).getBytes()); 139 Buff.write(" ".getBytes()); 140 u_answer = user_answer.get(i); 141 if (u_answer.equals("")) 142 u_answer = "沒有做答"; 143 144  Buff.write(u_answer.getBytes()); 145 Buff.write("\r\n".getBytes()); 146 } catch (IOException e) { 147  e.printStackTrace(); 148 i--; 149  } 150  } 151  Buff.flush(); 152  Buff.close(); 153 154 } catch (IOException e) { 155  e.printStackTrace(); 156  } 157 try { 158  outSTr.close(); 159 } catch (IOException e) { 160  e.printStackTrace(); 161  } 162  user_zongti.clear(); 163  user_answer.clear(); 164  } 165  }); 166 167 project.addActionListener(new ActionListener() { 168 public void actionPerformed(ActionEvent arg0) { 169 arithmetic art = new arithmetic(); 170 true_answer = art.list_answer; 171 jta_timu = art.list_timu; 172 jta_zong = art.list; 173 answer_count = 1; 174 answer_all.setText(""); 175 for (int i = 0; i < art.list_timu.size(); i++) { 176  user_zongti.add(jta_zong.get(i)); 177  answer_all.append(jta_timu.get(i)); 178 answer_all.append("\r\n"); 179  } 180 num_answer.setText("第 " + answer_count + " 題"); 181 jta.setText(jta_timu.get(answer_count - 1)); 182 answer_count++; 183 184  } 185  }); 186 jb_next.addActionListener(new ActionListener() { 187 public void actionPerformed(ActionEvent arg0) { 188  String temp; 189 temp = jta_answer.getText(); 190 191 if (jta.getText().equals("")) { 192 JOptionPane.showMessageDialog(null, "錯誤,請導入題庫", "錯誤", JOptionPane.ERROR_MESSAGE); 193 return; 194  } 195 jta_answer.setText(""); 196 if (answer_count <= 10) { 197 if (isInteger(temp)) { 198 199  user_answer.add(temp); 200 System.out.println("選擇否後執行的代碼" + temp + "user_size" + user_answer.size()); 201 num_answer.setText("第 " + answer_count + " 題"); 202 jta.setText(jta_timu.get(answer_count - 1)); 203 answer_count++; 204 } else { 205 JOptionPane.showMessageDialog(null, "錯誤", "請輸入數字", JOptionPane.ERROR_MESSAGE); 206  } 207 } else { 208  user_answer.add(temp); 209 System.out.println("選擇否後執行的代碼" + temp + "user_size" + user_answer.size()); 210 answer_fenshu = 0; 211 for (int i = 0; i < user_answer.size(); i++) { 212 if (user_answer.get(i).equals(true_answer.get(i))) 213 answer_fenshu += 5; 214  } 215  user_fenshu.add(answer_fenshu); 216 Object[] options = { "是", "取消" }; 217 int res = JOptionPane.showOptionDialog(null, "是否查當作績", "答題完畢", JOptionPane.DEFAULT_OPTION, 218 JOptionPane.YES_NO_OPTION, null, options, options[0]); 219 if (res == JOptionPane.YES_OPTION) { 220 chart ct = new chart(user_fenshu); 221 ct.setVisible(true); 222 223 } else { 224 Object[] option = { "是", "取消" }; 225 int res1 = JOptionPane.showOptionDialog(null, "是否退出程序", "終止框", JOptionPane.DEFAULT_OPTION, 226 JOptionPane.YES_NO_OPTION, null, option, option[0]); 227 228 if (res1 == JOptionPane.YES_OPTION) { 229  dispose(); 230 System.exit(0); 231 232 } else { 233 234  } 235 236  } 237 238  } 239 240  } 241  }); 242 243 item2.addActionListener(new ActionListener() { 244 public void actionPerformed(ActionEvent e) { 245  dispose(); 246 System.exit(0); 247  } 248  }); 249 250  } 251 252 public static boolean isInteger(String str) { 253 for (int i = str.length(); --i >= 0;) { 254 if (!Character.isDigit(str.charAt(i))) { 255 return false; 256  } 257  } 258 return true; 259  } 260 }
複製代碼
複製代碼
 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 package ui_test;  2  3 import java.io.BufferedOutputStream;  4 import java.io.File;  5 import java.io.FileOutputStream;  6 import java.io.IOException;  7 import java.util.ArrayList;  8 import java.util.Random;  9 import java.util.Scanner;  10  11 public class arithmetic {  12 ArrayList<String> list = new ArrayList<String>();  13 ArrayList<String> list_timu = new ArrayList<String>();  14 ArrayList<String> list_answer = new ArrayList<String>();  15  16 public arithmetic() {  17 FileOutputStream outSTr = null;  18 BufferedOutputStream Buff = null;  19 int number_n = 10, count;  20  21 ArrayList<String> list_temp = new ArrayList<String>();  22 String[] operator = new String[] { "+", "-", "*", "/" };  23  24 Random rand = new Random();  25 File file1 = new File("test.txt");  26 if (file1.exists()) {  27 // 建立文件  28 try {  29  file1.createNewFile();  30 } catch (IOException e) {  31  e.printStackTrace();  32  }  33  }  34  35 while (number_n > 0) {  36 int[] number_temp = new int[rand.nextInt(2) + 3];  37 String[] str_temp = new String[number_temp.length - 1];  38 for (int i = 0; i < number_temp.length; i++) {  39 if (i < number_temp.length - 1) {  40 number_temp[i] = rand.nextInt(100);  41  list_temp.add(String.valueOf(number_temp[i]));  42 str_temp[i] = operator[rand.nextInt(4)];  43  list_temp.add(str_temp[i]);  44  45  }  46  47 else {  48 number_temp[i] = rand.nextInt(100);  49  list_temp.add(String.valueOf(number_temp[i]));  50  }  51  }  52  53 count = calculate_RPN(produce_RPN(list_temp));  54 if (count != -1) {  55  list_timu.add(transform_string(list_temp));  56  list_answer.add(String.valueOf(count));  57 list_temp.add(" = " + count);  58  list.add(transform_string(list_temp));  59 number_n--;  60  list_temp.clear();  61 } else  62  list_temp.clear();  63  System.out.println(number_n);  64  65  }  66 try {  67 outSTr = new FileOutputStream(file1);  68 Buff = new BufferedOutputStream(outSTr);  69 for (int i = 0; i < list.size(); i++) {  70 try {  71  Buff.write(list.get(i).getBytes());  72 Buff.write("\r\n".getBytes());  73 } catch (IOException e) {  74  e.printStackTrace();  75 i--;  76  }  77  }  78  Buff.flush();  79  Buff.close();  80  81 } catch (IOException e) {  82  e.printStackTrace();  83  }  84 // Buff.close();  85 try {  86  outSTr.close();  87 } catch (IOException e) {  88  e.printStackTrace();  89  }  90  91 for (int i = 0; i < list.size(); i++) {  92  System.out.print(list.get(i));  93  System.out.println();  94  }  95 System.out.print("計算完畢!");  96  97  }  98  99 public static int calculate_RPN(ArrayList<String> list_temp) { 100 int i = 0, t; 101 double a = 0, b = 0; 102  String l_temp; 103 Stack sk = new Stack(10); 104 for (t = 0; t < list_temp.size(); t++) { 105 l_temp = list_temp.get(i++); 106 if (!isInteger(l_temp)) { 107 b = sk.mypop(); 108 a = sk.mypop(); 109 switch (l_temp) { 110 case "+": 111 sk.mypush(a + b); 112 break; 113 case "-": 114 if(!(a<b)) { 115 sk.mypush(a - b); 116  } 117 else 118 return -1; 119 break; 120 case "*": 121 sk.mypush(a * b); 122 break; 123 case "/": 124 if (b == 0||a<b) 125 return -1; 126 sk.mypush(a / b); 127 break; 128  } 129 System.out.println("st.mytop: " + sk.mypeek()); 130 } else { 131 sk.mypush((double) Integer.parseInt(l_temp)); 132  } 133 134  } 135 if (!sk.myisempty()) { 136 a = sk.mypop(); 137 b = a - (int) a; 138 System.out.println("a: " + a); 139 if (a > 0 && b == 0) { 140 return (int) a; 141 } else 142 return -1; 143 } else 144 return -1; 145 146  } 147 148 public static ArrayList<String> produce_RPN(ArrayList<String> list_temp) { 149 int t = 0, i = 0; 150  String tmp; 151 Tack mytack = new Tack(10); 152 ArrayList<String> lt_temp = new ArrayList<String>(); 153 while (true) { 154 tmp = list_temp.get(i++); 155 if (isInteger(tmp)) { 156  lt_temp.add(tmp); 157 } else { 158 if (mytack.myisempty()) { 159  mytack.mypush(tmp); 160  } 161 162 else { 163 if (isCPriority(tmp, mytack.mypeek())) 164  mytack.mypush(tmp); 165 else { 166  lt_temp.add(mytack.mypop()); 167  mytack.mypush(tmp); 168  } 169 170  } 171  } 172 if (i >= list_temp.size()) { 173 while (!mytack.myisempty()) 174  lt_temp.add(mytack.mypop()); 175  System.out.println(transform_string(list_temp)); 176 list_temp = lt_temp; 177  System.out.println(list_temp); 178 return list_temp; 179  } 180  } 181 182  } 183 184 public static boolean isInteger(String str) { 185 for (int i = str.length(); --i >= 0;) { 186 if (!Character.isDigit(str.charAt(i))) { 187 return false; 188  } 189  } 190 return true; 191  } 192 193 public static boolean isCPriority(String str, String s) { 194 if ((str + s).equals("*+") || (str + s).equals("*-") || (str + s).equals("/+") || (str + s).equals("/-")) 195 return true; 196 else 197 return false; 198  } 199 200 public static String transform_string(ArrayList<String> list_temp) { 201 String s = ""; 202 for (int i = 0; i < list_temp.size(); i++) { 203 s += list_temp.get(i); 204  } 205 return s; 206 207  } 208 209 static class Stack { 210 int mytop; 211 double stk[]; 212 213 public Stack(int num) { 214 mytop = -1; 215 stk = new double[num]; 216  } 217 218 /* 出棧 */ 219 double mypop() { 220 double peek = stk[mytop]; 221 mytop--; 222 return peek; 223  } 224 225 /* 入棧 */ 226 void mypush(double x) { 227 mytop++; 228 stk[mytop] = x; 229 230  } 231 232 /* 判空 */ 233  Boolean myisempty() { 234 if (mytop == -1) 235 return true; 236 else 237 return false; 238  } 239 240 /* 取棧頂元素 */ 241 double mypeek() { 242 double peek = stk[mytop]; 243 return peek; 244  } 245 246 /* 棧大小 */ 247 int mysize() { 248 return mytop + 1; 249  } 250  } 251 252 static class Tack { 253 int mytop; 254  String tk[]; 255 256 public Tack(int num) { 257 mytop = -1; 258 tk = new String[num]; 259  } 260 261 /* 出棧 */ 262  String mypop() { 263 String peek = tk[mytop]; 264 mytop--; 265 return peek; 266  } 267 268 /* 入棧 */ 269 void mypush(String x) { 270 mytop++; 271 tk[mytop] = x; 272 273  } 274 275 /* 判空 */ 276  Boolean myisempty() { 277 if (mytop == -1) 278 return true; 279 else 280 return false; 281  } 282 283 /* 取棧頂元素 */ 284  String mypeek() { 285 String peek = tk[mytop]; 286 return peek; 287  } 288 289 /* 棧大小 */ 290 int mysize() { 291 return mytop + 1; 292  } 293 294  } 295 296 } 297 298 299 arithmetic
複製代碼
複製代碼
 1 package ui_test;  2  3 import java.awt.Color;  4 import java.awt.Graphics;  5 import java.awt.Graphics2D;  6 import java.util.ArrayList;  7 import java.util.Random;  8  9 import javax.swing.JFrame; 10 11 public class chart extends JFrame{ 12 //繪製柱形統計圖 13 ArrayList<Integer> ran=new ArrayList<Integer>(); 14 public chart(ArrayList<Integer> scores) 15  { 16 super(); 17  getContentPane().setForeground(Color.CYAN); 18  setForeground(Color.CYAN); 19  setBackground(Color.CYAN); 20 for(int i=0;i<scores.size();i++) 21  { 22  ran.add(scores.get(i)); 23  System.out.println(scores.get(i)); 24  } 25 26 setTitle("繪製柱形圖"); 27 setSize(600, 400); 28  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 29  } 30  @Override 31 public void paint(Graphics g){ 32 int Width = getWidth(); 33 int Height = getHeight(); 34 int leftMargin = 20;//柱形圖左邊界 35 int topMargin = 50;//柱形圖上邊界 36 Graphics2D g2 = (Graphics2D) g; 37 g2.setColor(Color.WHITE);//繪製白色背景 38 g2.fillRect(0, 0, Width, Height-100);//繪製矩形圖 39  g2.setColor(Color.black); 40 for(int i=0;i<=10;i++) 41  { 42 //繪製灰色橫線和百分比 43 g2.drawString((100-10*i)+" ", 15, topMargin+30*i); 44 g2.drawLine(10, topMargin+30*i, Width, topMargin+30*i);//繪製灰色橫線 45  } 46  g2.setColor(Color.RED); 47 for(int i=0;i<=ran.size();i++) 48  { 49 //繪製柱形圖 50 int step = (i+1)*40;//設置每一個柱形圖的水平間隔爲40 51 //繪製矩形 52 g2.fillRoundRect(leftMargin+step*2-5,(100-ran.get(i))*3+50, 40, 300-(100-ran.get(i))*3, 40, 10); 53 //列出測試輪數 54 g2.drawString("第"+(i+1)+"輪", leftMargin+step*2, 380); 55  } 56  } 57 58 59 } 60 61 62 chart
複製代碼

任務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章)

JAVA特色

簡單的、面向對象的、分佈式的、強壯的、安全的、 體系結構中立的、可移植的、解釋型的、高性能的、 多線程的、動態的語言。

JDK的安裝及配置 JDK平臺提供的Java編譯器(javac.exe)和 Java解釋器(java.exe)位於Java安裝目錄的 bin文件夾中,爲了能在任何目錄中使用編譯器 和解釋器,應在系統特性中設置Path

 

 JDK的安裝及配置

JDK安裝目錄的jre文件夾中包含着Java應用程 序運行時所須要的Java類庫,這些類庫被包含在jre\lib目錄下的壓縮文件rt.jar中

  

一個Java程序的開發過程 

 

 

 

 源文件的命名規則

若是源文件中有多個類,那麼只能有一個類是public類。若是有一個類是public類,那麼源文件的名字必須與這個類的名字徹底相同,擴展名是.java。 若是源文件沒有public類,那麼源文件的名字只要和某個類的名字相同,而且擴展名是.java就能夠了。 標識符、關鍵字和數據類型

 Java標識符的組成 熟悉Java關鍵字 Java數據類型     Java一維數組的定義、初始化和數組元素   的引用Java數據類型

運算符與表達式        

算術運算符,關係運算符,邏輯運算符,位運算符,賦值運算符,其餘運算符

Java流程控制語句

 控制語句, if語句, switch語句, 循環語句, while, do…while, for,break和continue語句, break——跳出switch結構;終止並跳出循環體。, continue——結束本次循環。

類、對象、繼承和接口

 類聲明 class People { … }  類體內容由兩部分構成:  類成員變量:用來刻畫類屬性;  類成員方法:用來刻畫類內操做。

局部變量 – 在方法體中定義的變量和方法的參數被稱爲局部變量。 類成員變量和局部變量的區別 類成員變量在整個類內都有效,局部變量只在定義它的方法內有效。  若是局部變量的名字與成員變量的名字相同,則成員變量被隱藏。

類成員方法 —方法的定義包括兩部分:方法聲明和方法體。 構造方法 —名字必須與類名徹底相同,沒有返回值類型; —構造方法能夠重載; —每一個類至少有一個構造方法,若程序員沒有定義構造方法,系統會自動產生一個默認構造方法,這個默認構造方法無參數,方法體爲空; —程序員爲類定義了構造方法,系統就再也不提供默認構造方法; — 用途:初始化類對象。

方法重載 —一個類中能夠有多個具備相同的名字的方法。但這些方法或者是參數的個數不一樣,或者是參數的類型不一樣建立對象需兩個步驟:對象聲明和爲對象分配內存 —對象聲明格式爲: 類名 對象名字; 如:People zhangPing; —爲聲明對象分配內存格式以下: 對象名= new 構造方法名(參數表); 如: zhangPing=new People(); —對象建立經常使用格式爲: 類名 對象名= new 構造方法名(參數表);;類、對象、繼承和接口 經過使用運算符「.」,對象能夠實現對所屬類具備訪問權限的成員變量訪問和成員方法調用。 沒有分配內存的對象稱做空對象,空對象不能使用,即不能讓空對象去調用方法。類、對象、繼承和接口 Static關鍵字 – 用static修飾的成員變量稱爲類(靜態)變量 – 用static修飾的方法稱爲類(靜態)方法 實例變量和類變量的區別 – 若是類的成員變量有類變量,那麼該類全部對象的類變量內存是相同的。 – 具備訪問權限的類變量能夠經過某個對象訪問,也可 以經過類名訪問。 – 具備訪問權限的實例變量僅能夠經過對象訪問,不能使用類名訪問。類、對象、繼承和接口實例方法和類方法的區別 – 實例方法能夠被類建立的任何對象調用執行。 – 類方法不只能夠被類建立的任何對象調用執行,也能夠直接經過類名調用 。 說明: - 類方法能夠調用其它類方法 - 類方法只能訪問static成員變量 - 類方法不能以任何形式引用this和super - 實例方法既能夠訪問實例成員變量也可訪問類成員變量 - 實例方法既能夠調用實例方法也能夠調用類方法 this關鍵字 - this表示類的當前對象。 - this能夠出如今實例方法和構造方法中,但不能夠出如今類方法中。 - this關鍵字出如今構造方法中時,表明使用該構造方法所建立的對象。 - this出如今類的實例方法中時,表明正在調用該方法的當前對象。 實現類繼承的方式 在類的聲明中,經過使用關鍵字extends來建立一個類的子類,格式以下: class 子類名 extends 父類名 { … } 類、對象、繼承和接口 繼承的規定 - Java只支持單繼承,不容許多繼承 - Java容許有多層繼承

方法的重寫 - 方法重寫是指:子類中定義一個方法,這個方法的名字、返回類型、參數個數和類型與從父類繼承的方法徹底相同。 - 子類重寫父類,被重寫的方法不能比父類擁有更嚴格的訪問權限方法重載與方法重寫的區別 

 成員變量的隱藏 - 子類中定義的成員變量和父類中的成員變量同名時,子類就隱藏了繼承的成員變量 。 super關鍵字 - 子類中訪問父類中被隱藏的成員變量 - super.成員變量 - 子類調用父類中的方法  調用父類中的特定構造方法 super()  調用父類中被重寫的方法 super.方法() 類、對象、繼承和接口 子類對象與父類對象之間的轉換 - 子類對象向父類對象轉換,自動轉型 父類對象=子類對象 - 父類對象向子類對象轉換,強制轉型 子類對象=(子類)父類對象類、對象、繼承和接口多態性有兩種表現形式: ①方法的多態性(方法重載) ②對象的多態性 對象多態性是在繼承應用上的一種擴展類、對象、繼承和接口final關鍵字 - final關鍵子可修飾類、方法成員、成員變量和方法中的參數。 - final類不能被繼承,即不能有子類 - 方法被修飾爲final方法,則這個方法不能被重寫。 - 一個成員變量被修飾爲final的,就是常量,常量必須賦給初值,並且不能再發生變化。 - 方法的參數被修飾爲final的,該參數的值不能被改變。 類、對象、繼承和接口 抽象類 - 用關鍵字abstract修飾的類稱爲abstract類(抽象類)。 abstract class A { „ } - abstract類不能被實例化; - abstract類能夠有abstract方法; - 對於abstract方法,只容許聲明,不容許實現,且要用 abstract關鍵字進行修飾; - 抽象類的子類必須重寫全部的抽象方法。 類、對象、繼承和接口 Java語言不支持多繼承性,即一個類只能有一個父類。單繼承性使得Java簡單,易於管理程序。爲了克服單繼承的缺點,Java使用了接口,一個類能夠實現多個接口。

成員變量的隱藏 - 子類中定義的成員變量和父類中的成員變量同名時,子類就隱藏了繼承的成員變量 。 super關鍵字 - 子類中訪問父類中被隱藏的成員變量 - super.成員變量 - 子類調用父類中的方法  調用父類中的特定構造方法 super()  調用父類中被重寫的方法 super.方法() 子類對象與父類對象之間的轉換 - 子類對象向父類對象轉換,自動轉型 父類對象=子類對象 - 父類對象向子類對象轉換,強制轉型 子類對象=(子類)父類對象 多態性有兩種表現形式: ①方法的多態性(方法重載) ②對象的多態性 對象多態性是在繼承應用上的一種擴展 final關鍵字 - final關鍵子可修飾類、方法成員、成員變量和方法中的參數。 - final類不能被繼承,即不能有子類 - 方法被修飾爲final方法,則這個方法不能被重寫。 - 一個成員變量被修飾爲final的,就是常量,常量必須賦給初值,並且不能再發生變化。 - 方法的參數被修飾爲final的,該參數的值不能被改變。類、對象、繼承和接口 抽象類 - 用關鍵字abstract修飾的類稱爲abstract類(抽象類)。 abstract class A { „ } - abstract類不能被實例化; - abstract類能夠有abstract方法; - 對於abstract方法,只容許聲明,不容許實現,且要用 abstract關鍵字進行修飾; - 抽象類的子類必須重寫全部的抽象方法。、對象、繼承和接口 Java語言不支持多繼承性,即一個類只能有一個父類。單繼承性使得Java簡單,易於管理程序。爲了克服單繼承的缺點,Java使用了接口,一個類能夠實現多個接口。

接口的聲明與使用 - 關鍵字interface來定義一個接口。 - 接口的定義與類的定義類似,包括接口的聲明和接口體。 - 接口體中包含常量定義和抽象方法定義兩部分。 如: interface Printable { int MAX=100; float sum(float x ,float y); } 接口使用規則 - 一個類能夠實現多個接口; - 若是一個類使用了某個接口,那麼這個類必須實現該接口的全部方法,即爲這些方法提供方法體。 class 類名 implements 接口A,接口B { … }

一個新的接口用extends關鍵字去繼承一個已有的接口,實現接口的多繼承 interface 接口A extends 接口1,接口2,接口3,接口4 { … }

 接口與抽象類的區別 

 package語句 - 必須是源文件中的第一條語句。在package語句以前,除了空白和註釋以外不能有任何語句。 - 若是不加package語句,則指定爲缺省包或無名包。 - 包對應着文件系統的目錄層次結構。 - 在package語句中,用「.」來指明包(目錄)的層次。 類、對象、繼承和接口 引入包中的類 import java.io.File; 引入整個包 import java.io.*; java默認導入的包 java.lang.* 在同一包中的類能夠互相引用,無需import語句。 類的訪問權限修飾符 - public 當兩個類不在同一個包中時,容許外部類訪問 - default 不能讓不一樣包的外部類訪問,但能夠在同一個包中不一樣類之間訪問類的其它修飾符 - final - abstract 方法的權限訪問修飾符 - public - protected - default(不加訪問說明符時) - private 方法的其它修飾符 - static - final - abstract - synchronized(多線程中介紹) 

public protected default privat

內部類 - Java支持在一個類中聲明另外一個類,這樣的類稱做內部類,而包含內部類的類成爲內部類的外嵌類。 - 內部類的類體中不能夠聲明類變量和類方法。外嵌類的類體中能夠用內部類聲明對象,做爲外嵌類的成員。 匿名內部類 - 匿名內部類沒有類名,因此建立匿名內部類時同時建立匿名內部類的對象 - 建立匿名內部類的語法格式以下所示

 

Lambda表達式 - Java 8 引入的一個新的功能,主要用途是提供一個函數化的語法來簡化編碼。 - Lambda表達式本質上是一個匿名方法。 

類、類間關係、類圖

類和類之間關係: is a,has a, use a - is a: 繼承,實現關係 - has a: 組合,聚合,關聯關係 - use a: 依賴關係 繼承關係 實現關係 public class Animal{} public class Dog extends Animal{} public interface UserService{} public class UserService implements UserService{} 組合關係 public class Heart{} publid class Stomach{} public class Person{ private Heart heart; private Stomach stomach; public Person(){ this.heart=new Heart(); this.stomach=new Stomach(); } } 聚合關係 public class Engine{} public class Gearbox{} publicc lass Car{ private Engine engine; private Gearbox gearbox; public Car(Engine engine, Gearbox gearbox){ this.engine=engine; this. gearbox=gearbox; } } 關聯關係 public class Car{} public class Person{ private Car car; public void setCar(){ this.car=car; } } 依賴關係 public class Train{ public void move(){} } public class Person{ public void move(Train train){ train.move(); } } 類圖:在OO程序設計中,進行類關係分析與設計的工具  

JDK預約義類及其API

JDK中預約義類API使用要求: - 導入類所在的包; - 掌握預約義類的名稱及其用途; - 掌握預約義類中定義的經常使用方法、方法參數要求、返回值類型

異常處理編程模型

捕獲異常編程框架 try { //此處是可能出現異常的代碼 } catch(Exception e) { //此處是若是發生異常的處理代碼 } finally { //此處是確定被執行的代碼 }

 拋出異常 - throws語句是在方法的聲明中使用來拋出異常,用來指定方法可能拋出異常,但不想在當前方法中處理這個異常。 - throw語句是在方法體內使用拋出異常類的對象,程序在執行到throw語句時當即終止,它後面的語句都不執行。 - 要捕捉throw拋出的異常,則必須使用try-catch語句。 異常處理編程模型  建立自定義異常類(*) 定義 extends Exception的子類 異常處理 Java GUI編程模型 掌握java.awt和java.swing包中各類

 GUI定義需 要的組件建立以及經常使用方法 Java中的事件處理機制 - 事件由用戶操做某個組件對象產生,被操做組件稱爲事件源。 - 一個組件能響應哪些事件,響應事件後需執行的語句序列存放在什麼位置,這些功能由事件監視器負責。 - 事件監視器是某個實現了監聽器接口類的對象。
-建立GUI中事件源,開發程序時,程序員須要作如下2件事:  向事件源註冊事件監視器 例如,文本框的事件監聽器註冊方法是: addActionListener(監視器);  建立該監視器對象的類,聲明實現相應的接口 在類中實現接口中要求的事件處理方法 Java GUI編程模型  Java中的每一個事件類都有一個相應的監視器接口,接口中聲明瞭一個或多個抽象的事件處理方法。若是一個類實現事件監視器接口,其對象就能夠做爲對應事件的監視器,具有監視和處理事件的能力。 Java GUI編程模型 GUI設計中編寫事件處理程序代碼 必須肯定事件源與事件監視器事件源的選擇一般比較容易,事件監視器必須是實現事件監視器接口的類對象 Soureobject.addXXXListener(監視器),將某個對象做爲本身的監視器建立監視器對象的類必須實現相應的事件接口 Class A implements XXXListener 當事件源發生事件時,監視器將調用接口中的相應方法對事件進行處理

1、實驗目的與要求

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

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

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

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

(5) 綜合編程練習。

2、實驗內容和步驟

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

任務2:綜合編程練習

練習1:設計一個用戶信息採集程序,要求以下:

  

複製代碼
  1 package project1;  2  3 import java.awt.*;  4 import java.awt.event.*;  5 import javax.swing.*;  6 import javax.swing.border.*;  7  8 public class test extends JFrame {  9 public test() {  10 JPanel panel1 = new JPanel();  11 panel1.setPreferredSize(new Dimension(700, 45));  12 panel1.setLayout(new GridLayout(1, 4));  13 JLabel label1 = new JLabel("Name:");  14 JTextField j1 = new JTextField("");  15 JLabel label2 = new JLabel("Qualification:");  16 JComboBox<Object> j2 = new JComboBox<>();  17 j2.addItem("Graduate");  18 j2.addItem("Not Graduate");  19  panel1.add(label1);  20  panel1.add(j1);  21  panel1.add(label2);  22  panel1.add(j2);  23  24 JPanel panel2 = new JPanel();  25 panel2.setPreferredSize(new Dimension(700, 50));  26 panel2.setLayout(new GridLayout(1, 4));  27 JLabel label3 = new JLabel("Address:");  28 JTextArea j3 = new JTextArea();  29 JLabel label4 = new JLabel("Hobby:");  30 JPanel p = new JPanel();  31 p.setLayout(new GridLayout(3, 1));  32 p.setBorder(BorderFactory.createLineBorder(null));  33 JCheckBox c1 = new JCheckBox("Reading");  34 JCheckBox c2 = new JCheckBox("Singing");  35 JCheckBox c3 = new JCheckBox("Dancing");  36  p.add(c1);  37  p.add(c2);  38  p.add(c3);  39  panel2.add(label3);  40  panel2.add(j3);  41  panel2.add(label4);  42  panel2.add(p);  43  44 JPanel panel3 = new JPanel();  45 panel3.setPreferredSize(new Dimension(700, 150));  46 FlowLayout flowLayout1 = new FlowLayout(FlowLayout.CENTER, 50, 10);  47  panel3.setLayout(flowLayout1);  48 JLabel label5 = new JLabel("Sex:");  49 JPanel p1 = new JPanel();  50 p1.setLayout(new GridLayout(2, 1));  51 p1.setBorder(BorderFactory.createLineBorder(null));  52 ButtonGroup bu = new ButtonGroup();  53 JRadioButton jr1 = new JRadioButton("Male");  54 JRadioButton jr2 = new JRadioButton("Female");  55  bu.add(jr1);  56  bu.add(jr2);  57  p1.add(jr1);  58  p1.add(jr2);  59  panel3.add(label5);  60  panel3.add(p1);  61  add(panel1);  62  add(panel2);  63  add(panel3);  64  65 JPanel panel4 = new JPanel();  66 panel4.setPreferredSize(new Dimension(700, 150));  67 JButton b1 = new JButton("Validate");  68  panel4.add(b1);  69 JButton b2 = new JButton("Reset");  70  panel4.add(b2);  71  add(panel4);  72  73 FlowLayout flowLayout = new FlowLayout();  74 this.setLayout(flowLayout);  75 this.setTitle("Students Detail");  76 this.setBounds(200, 200, 800, 400);  77 this.setVisible(true);  78 this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);  79  80 b1.addActionListener(new ActionListener() {  81  82  @Override  83 public void actionPerformed(ActionEvent e) {  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  @Override 110 public void actionPerformed(ActionEvent e) { 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 test(); 124  } 125 126 }
複製代碼

 (1)  用戶信息輸入界面以下圖所示:

 (1)用戶點擊提交按鈕時,用戶輸入信息顯示控制檯界面;

(2)用戶點擊重置按鈕後,清空用戶已輸入信息;

 (3)點擊窗口關閉,程序退出。

 

 

練習2:採用GUI界面設計如下程序:

l  編制一個程序,將身份證號.txt 中的信息讀入到內存中;

l  按姓名字典序輸出人員信息;

l  查詢最大年齡的人員信息;

l  查詢最小年齡人員信息;

l  輸入你的年齡,查詢身份證號.txt中年齡與你最近人的姓名、身份證號、年齡、性別和出生地;

l  查詢人員中是否有你的同鄉。

l  輸入身份證信息,查詢所提供身份證號的人員信息,要求輸入一個身份證數字時,查詢界面就顯示知足查詢條件的查詢結果,且隨着輸入的數字的增多,查詢匹配的範圍逐漸縮小。

複製代碼
 1 package demo1;  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 demo1;  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("C:\\Users\\ASUS\\Desktop\\身份證號.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 buttonPanel = new JPanel();  66 buttonPanel.setLayout(new GridLayout(1, 7));  67 JButton jButton = new JButton("字典排序");  68 JButton jButton1 = new JButton("年齡最大和年齡最小");  69 JLabel lab = new JLabel("猜猜你的老鄉");  70 JTextField jt1 = new JTextField();  71 JLabel lab1 = new JLabel("找找同齡人(年齡相近):");  72 JTextField jt2 = new JTextField();  73 JLabel lab2 = new JLabel("輸入你的身份證號碼:");  74 JTextField jt3 = new JTextField();  75 JButton jButton2 = new JButton("退出");  76 jButton.setBounds(110, 90, 60, 30);  77 jButton1.setBounds(110, 90, 60, 30);  78 jt1.setBounds(110, 90, 60, 30);  79 jt2.setBounds(110, 90, 60, 30);  80 jt3.setBounds(110, 90, 60, 30);  81 jButton2.setBounds(110, 90, 60, 30);  82 jButton.addActionListener(new ActionListener() {  83 public void actionPerformed(ActionEvent e) {  84  Collections.sort(studentlist);  85  jt.setText(studentlist.toString());  86  }  87  });  88 jButton1.addActionListener(new ActionListener() {  89 public void actionPerformed(ActionEvent e) {  90 int max = 0, min = 100;  91 int j, k1 = 0, k2 = 0;  92 for (int i = 1; i < studentlist.size(); i++) {  93 j = studentlist.get(i).getage();  94 if (j > max) {  95 max = j;  96 k1 = i;  97  }  98 if (j < min) {  99 min = j; 100 k2 = i; 101  } 102 103  } 104 jt.setText("年齡最大:" + studentlist.get(k1) + "年齡最小:" + studentlist.get(k2)); 105  } 106  }); 107 jButton2.addActionListener(new ActionListener() { 108 public void actionPerformed(ActionEvent e) { 109  dispose(); 110 System.exit(0); 111  } 112  }); 113 jt1.addActionListener(new ActionListener() { 114 public void actionPerformed(ActionEvent e) { 115 String find = jt1.getText(); 116 String text=""; 117 String place = find.substring(0, 3); 118 for (int i = 0; i < studentlist.size(); i++) { 119 if (studentlist.get(i).getprovince().substring(1, 4).equals(place)) { 120 text+="\n"+studentlist.get(i); 121 jt.setText("老鄉:" + text); 122  } 123  } 124  } 125  }); 126 jt2.addActionListener(new ActionListener() { 127 public void actionPerformed(ActionEvent e) { 128 String yourage = jt2.getText(); 129 int a = Integer.parseInt(yourage); 130 int near = agenear(a); 131 int value = a - studentlist.get(near).getage(); 132 jt.setText("年齡相近:" + studentlist.get(near)); 133  } 134  }); 135 jt3.addActionListener(new ActionListener() { 136 public void actionPerformed(ActionEvent e) { 137 list = new ArrayList<>(); 138  Collections.sort(studentlist); 139 String key = jt3.getText(); 140 for (int i = 1; i < studentlist.size(); i++) { 141 if (studentlist.get(i).getnumber().contains(key)) { 142  list.add(studentlist.get(i)); 143 jt.setText("emmm!你多是:\n" + list); 144 //System.out.println("可能的人:" + studentlist.get(i)); 145 //jt.setText("可能的人:" + studentlist.get(i)); 146  } 147  } 148  } 149  }); 150  buttonPanel.add(jButton); 151  buttonPanel.add(jButton1); 152  buttonPanel.add(lab); 153  buttonPanel.add(jt1); 154  buttonPanel.add(lab1); 155  buttonPanel.add(jt2); 156  buttonPanel.add(lab2); 157  buttonPanel.add(jt3); 158  buttonPanel.add(jButton2); 159  add(buttonPanel, BorderLayout.SOUTH); 160  setSize(DEFAULT_WITH, DEFAULT_HEIGHT); 161  } 162 163 public static int agenear(int age) { 164 int min = 53, value = 0, k = 0; 165 for (int i = 0; i < studentlist.size(); i++) { 166 value = studentlist.get(i).getage() - age; 167 if (value < 0) 168 value = -value; 169 if (value < min) { 170 min = value; 171 k = i; 172  } 173  } 174 return k; 175  } 176 177 } 178 179 180 Main
複製代碼
複製代碼
 1 package demo1;  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 } 53 54 55 Student
複製代碼

 

 

練習3:採用GUI界面設計如下程序

l  編寫一個計算器類,能夠完成加、減、乘、除的操做

l  利用計算機類,設計一個小學生100之內數的四則運算練習程序,由計算機隨機產生10道加減乘除練習題,學生輸入答案,由程序檢查答案是否正確,每道題正確計10分,錯誤不計分,10道題測試結束後給出測試總分;

l  將程序中測試練習題及學生答題結果輸出到文件,文件名爲test.txt。

複製代碼
  1 package ui_test;  2  3 import java.awt.*;  4 import java.awt.event.ActionEvent;  5 import java.awt.event.ActionListener;  6 import java.io.BufferedOutputStream;  7 import java.io.File;  8 import java.io.FileOutputStream;  9 import java.io.IOException;  10 import java.util.ArrayList;  11  12 import javax.swing.*;  13  14 public class MyExGUI extends JFrame {  15 ArrayList<String> user_zongti = new ArrayList<String>();  16 ArrayList<String> user_zonganswer = new ArrayList<String>();  17 ArrayList<String> user_answer = new ArrayList<String>();  18 ArrayList<String> true_answer = new ArrayList<String>();  19 ArrayList<String> jta_timu = new ArrayList<String>();  20 ArrayList<String> jta_zong = new ArrayList<String>();  21 ArrayList<Integer> user_fenshu = new ArrayList<Integer>();  22 JMenuBar jm; // 菜單條組件  23 JMenu menu;// 菜單  24 JMenuItem item1, item2;// 菜單項  25 JMenu build; // 二級菜單  26  JMenuItem file, project;  27 TextArea answer_all = new TextArea();  28 TextField jta = new TextField();  29 TextField jta_answer = new TextField();  30 JLabel num_answer = new JLabel();  31  JLabel answer;  32 JToolBar jtb;// 工具條  33  JButton jb1, jb2, jb3, jb4, jb5, jb6, jb7, jb_next;  34 int answer_count;  35 int answer_fenshu;  36  37 public MyExGUI() {  38 // 建立菜單  39 jm = new JMenuBar();  40  41 menu = new JMenu("文件(F)");  42 menu.setMnemonic('f'); // 助記符  43  44 build = new JMenu("新建");  45  46 file = new JMenuItem("文件");  47 project = new JMenuItem("答題");  48 item1 = new JMenuItem("保存(S)");  49 item2 = new JMenuItem("退出");  50  51 answer = new JLabel("第 1 題");  52  53 // 添加菜單項至菜單上  54  build.add(file);  55  build.add(project);  56  57  menu.add(build);  58  menu.add(item1);  59  menu.add(item2);  60  menu.addSeparator();  61 // 將菜單加入至菜單欄  62  jm.add(menu);  63  64 JPanel contentPanel = new JPanel();  65 contentPanel.setLayout(null);  66 JLabel daan = new JLabel("答案");  67 JLabel dengyu = new JLabel("=");  68 num_answer = answer;  69 num_answer.setFont(new Font("宋體", Font.BOLD, 22));  70 jb_next = new JButton("下一題");  71 jta.setFont(new Font("宋體", Font.BOLD, 22));  72 jta_answer.setFont(new Font("宋體", Font.BOLD, 22));  73 jb_next.setFont(new Font("宋體", Font.BOLD, 22));  74 daan.setFont(new Font("宋體", Font.BOLD, 22));  75 dengyu.setFont(new Font("宋體", Font.BOLD, 22));  76  77  contentPanel.add(num_answer);  78  contentPanel.add(daan);  79  contentPanel.add(dengyu);  80  contentPanel.add(jta);  81  82  contentPanel.add(jta_answer);  83  contentPanel.add(answer_all);  84  contentPanel.add(jb_next);  85  86 num_answer.setBounds(90, 20, 130, 50);  87 daan.setBounds(250, 20, 90, 50);  88 jta.setBounds(50, 70, 150, 30);  89 dengyu.setBounds(205, 70, 20, 20);  90 jta_answer.setBounds(230, 70, 100, 30);  91 jb_next.setBounds(350, 70, 110, 30);  92 answer_all.setBounds(50, 120, 400, 300);  93  94 this.setJMenuBar(jm); // 添加菜單欄,不能設定位置,會自動放在最上部  95 this.add(contentPanel);  96  97 this.setTitle("在線答題系統");  98 this.setSize(600, 500);  99 this.setVisible(true); 100 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 101 item1.addActionListener(new ActionListener() { 102 public void actionPerformed(ActionEvent arg0) { 103 FileOutputStream outSTr = null; 104 BufferedOutputStream Buff = null; 105 boolean flag = true; 106  File file; 107 // String test ; 108 do { 109 // test = "test"+count; 110 111 String inputValue = JOptionPane.showInputDialog("Please input file name"); 112 file = new File(inputValue + "test.txt"); 113 if (!file.exists()) { 114 // 建立文件 115 try { 116 117 flag = file.createNewFile(); 118 119 } catch (IOException e) { 120  e.printStackTrace(); 121 122  } 123 flag = false; 124 } else { 125 126 JOptionPane.showMessageDialog(null, "該文件名已存在,請從新輸入", "ERROR", JOptionPane.ERROR_MESSAGE); 127 flag = true; 128  } 129 } while (flag); 130 // 寫入文件 131  String u_answer; 132 try { 133 outSTr = new FileOutputStream(file); 134 Buff = new BufferedOutputStream(outSTr); 135 System.out.println("選擇是後執行的代碼" + user_zongti.size() + user_answer.size()); 136 for (int i = 0; i < user_zongti.size(); i++) { 137 try { 138  Buff.write(user_zongti.get(i).getBytes()); 139 Buff.write(" ".getBytes()); 140 u_answer = user_answer.get(i); 141 if (u_answer.equals("")) 142 u_answer = "沒有做答"; 143 144  Buff.write(u_answer.getBytes()); 145 Buff.write("\r\n".getBytes()); 146 } catch (IOException e) { 147  e.printStackTrace(); 148 i--; 149  } 150  } 151  Buff.flush(); 152  Buff.close(); 153 154 } catch (IOException e) { 155  e.printStackTrace(); 156  } 157 try { 158  outSTr.close(); 159 } catch (IOException e) { 160  e.printStackTrace(); 161  } 162  user_zongti.clear(); 163  user_answer.clear(); 164  } 165  }); 166 167 project.addActionListener(new ActionListener() { 168 public void actionPerformed(ActionEvent arg0) { 169 arithmetic art = new arithmetic(); 170 true_answer = art.list_answer; 171 jta_timu = art.list_timu; 172 jta_zong = art.list; 173 answer_count = 1; 174 answer_all.setText(""); 175 for (int i = 0; i < art.list_timu.size(); i++) { 176  user_zongti.add(jta_zong.get(i)); 177  answer_all.append(jta_timu.get(i)); 178 answer_all.append("\r\n"); 179  } 180 num_answer.setText("第 " + answer_count + " 題"); 181 jta.setText(jta_timu.get(answer_count - 1)); 182 answer_count++; 183 184  } 185  }); 186 jb_next.addActionListener(new ActionListener() { 187 public void actionPerformed(ActionEvent arg0) { 188  String temp; 189 temp = jta_answer.getText(); 190 191 if (jta.getText().equals("")) { 192 JOptionPane.showMessageDialog(null, "錯誤,請導入題庫", "錯誤", JOptionPane.ERROR_MESSAGE); 193 return; 194  } 195 jta_answer.setText(""); 196 if (answer_count <= 10) { 197 if (isInteger(temp)) { 198 199  user_answer.add(temp); 200 System.out.println("選擇否後執行的代碼" + temp + "user_size" + user_answer.size()); 201 num_answer.setText("第 " + answer_count + " 題"); 202 jta.setText(jta_timu.get(answer_count - 1)); 203 answer_count++; 204 } else { 205 JOptionPane.showMessageDialog(null, "錯誤", "請輸入數字", JOptionPane.ERROR_MESSAGE); 206  } 207 } else { 208  user_answer.add(temp); 209 System.out.println("選擇否後執行的代碼" + temp + "user_size" + user_answer.size()); 210 answer_fenshu = 0; 211 for (int i = 0; i < user_answer.size(); i++) { 212 if (user_answer.get(i).equals(true_answer.get(i))) 213 answer_fenshu += 5; 214  } 215  user_fenshu.add(answer_fenshu); 216 Object[] options = { "是", "取消" }; 217 int res = JOptionPane.showOptionDialog(null, "是否查當作績", "答題完畢", JOptionPane.DEFAULT_OPTION, 218 JOptionPane.YES_NO_OPTION, null, options, options[0]); 219 if (res == JOptionPane.YES_OPTION) { 220 chart ct = new chart(user_fenshu); 221 ct.setVisible(true); 222 223 } else { 224 Object[] option = { "是", "取消" }; 225 int res1 = JOptionPane.showOptionDialog(null, "是否退出程序", "終止框", JOptionPane.DEFAULT_OPTION, 226 JOptionPane.YES_NO_OPTION, null, option, option[0]); 227 228 if (res1 == JOptionPane.YES_OPTION) { 229  dispose(); 230 System.exit(0); 231 232 } else { 233 234  } 235 236  } 237 238  } 239 240  } 241  }); 242 243 item2.addActionListener(new ActionListener() { 244 public void actionPerformed(ActionEvent e) { 245  dispose(); 246 System.exit(0); 247  } 248  }); 249 250  } 251 252 public static boolean isInteger(String str) { 253 for (int i = str.length(); --i >= 0;) { 254 if (!Character.isDigit(str.charAt(i))) { 255 return false; 256  } 257  } 258 return true; 259  } 260 }
複製代碼
複製代碼
 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 package ui_test;  2  3 import java.io.BufferedOutputStream;  4 import java.io.File;  5 import java.io.FileOutputStream;  6 import java.io.IOException;  7 import java.util.ArrayList;  8 import java.util.Random;  9 import java.util.Scanner;  10  11 public class arithmetic {  12 ArrayList<String> list = new ArrayList<String>();  13 ArrayList<String> list_timu = new ArrayList<String>();  14 ArrayList<String> list_answer = new ArrayList<String>();  15  16 public arithmetic() {  17 FileOutputStream outSTr = null;  18 BufferedOutputStream Buff = null;  19 int number_n = 10, count;  20  21 ArrayList<String> list_temp = new ArrayList<String>();  22 String[] operator = new String[] { "+", "-", "*", "/" };  23  24 Random rand = new Random();  25 File file1 = new File("test.txt");  26 if (file1.exists()) {  27 // 建立文件  28 try {  29  file1.createNewFile();  30 } catch (IOException e) {  31  e.printStackTrace();  32  }  33  }  34  35 while (number_n > 0) {  36 int[] number_temp = new int[rand.nextInt(2) + 3];  37 String[] str_temp = new String[number_temp.length - 1];  38 for (int i = 0; i < number_temp.length; i++) {  39 if (i < number_temp.length - 1) {  40 number_temp[i] = rand.nextInt(100);  41  list_temp.add(String.valueOf(number_temp[i]));  42 str_temp[i] = operator[rand.nextInt(4)];  43  list_temp.add(str_temp[i]);  44  45  }  46  47 else {  48 number_temp[i] = rand.nextInt(100);  49  list_temp.add(String.valueOf(number_temp[i]));  50  }  51  }  52  53 count = calculate_RPN(produce_RPN(list_temp));  54 if (count != -1) {  55  list_timu.add(transform_string(list_temp));  56  list_answer.add(String.valueOf(count));  57 list_temp.add(" = " + count);  58  list.add(transform_string(list_temp));  59 number_n--;  60  list_temp.clear();  61 } else  62  list_temp.clear();  63  System.out.println(number_n);  64  65  }  66 try {  67 outSTr = new FileOutputStream(file1);  68 Buff = new BufferedOutputStream(outSTr);  69 for (int i = 0; i < list.size(); i++) {  70 try {  71  Buff.write(list.get(i).getBytes());  72 Buff.write("\r\n".getBytes());  73 } catch (IOException e) {  74  e.printStackTrace();  75 i--;  76  }  77  }  78  Buff.flush();  79  Buff.close();  80  81 } catch (IOException e) {  82  e.printStackTrace();  83  }  84 // Buff.close();  85 try {  86  outSTr.close();  87 } catch (IOException e) {  88  e.printStackTrace();  89  }  90  91 for (int i = 0; i < list.size(); i++) {  92  System.out.print(list.get(i));  93  System.out.println();  94  }  95 System.out.print("計算完畢!");  96  97  }  98  99 public static int calculate_RPN(ArrayList<String> list_temp) { 100 int i = 0, t; 101 double a = 0, b = 0; 102  String l_temp; 103 Stack sk = new Stack(10); 104 for (t = 0; t < list_temp.size(); t++) { 105 l_temp = list_temp.get(i++); 106 if (!isInteger(l_temp)) { 107 b = sk.mypop(); 108 a = sk.mypop(); 109 switch (l_temp) { 110 case "+": 111 sk.mypush(a + b); 112 break; 113 case "-": 114 if(!(a<b)) { 115 sk.mypush(a - b); 116  } 117 else 118 return -1; 119 break; 120 case "*": 121 sk.mypush(a * b); 122 break; 123 case "/": 124 if (b == 0||a<b) 125 return -1; 126 sk.mypush(a / b); 127 break; 128  } 129 System.out.println("st.mytop: " + sk.mypeek()); 130 } else { 131 sk.mypush((double) Integer.parseInt(l_temp)); 132  } 133 134  } 135 if (!sk.myisempty()) { 136 a = sk.mypop(); 137 b = a - (int) a; 138 System.out.println("a: " + a); 139 if (a > 0 && b == 0) { 140 return (int) a; 141 } else 142 return -1; 143 } else 144 return -1; 145 146  } 147 148 public static ArrayList<String> produce_RPN(ArrayList<String> list_temp) { 149 int t = 0, i = 0; 150  String tmp; 151 Tack mytack = new Tack(10); 152 ArrayList<String> lt_temp = new ArrayList<String>(); 153 while (true) { 154 tmp = list_temp.get(i++); 155 if (isInteger(tmp)) { 156  lt_temp.add(tmp); 157 } else { 158 if (mytack.myisempty()) { 159  mytack.mypush(tmp); 160  } 161 162 else { 163 if (isCPriority(tmp, mytack.mypeek())) 164  mytack.mypush(tmp); 165 else { 166  lt_temp.add(mytack.mypop()); 167  mytack.mypush(tmp); 168  } 169 170  } 171  } 172 if (i >= list_temp.size()) { 173 while (!mytack.myisempty()) 174  lt_temp.add(mytack.mypop()); 175  System.out.println(transform_string(list_temp)); 176 list_temp = lt_temp; 177  System.out.println(list_temp); 178 return list_temp; 179  } 180  } 181 182  } 183 184 public static boolean isInteger(String str) { 185 for (int i = str.length(); --i >= 0;) { 186 if (!Character.isDigit(str.charAt(i))) { 187 return false; 188  } 189  } 190 return true; 191  } 192 193 public static boolean isCPriority(String str, String s) { 194 if ((str + s).equals("*+") || (str + s).equals("*-") || (str + s).equals("/+") || (str + s).equals("/-")) 195 return true; 196 else 197 return false; 198  } 199 200 public static String transform_string(ArrayList<String> list_temp) { 201 String s = ""; 202 for (int i = 0; i < list_temp.size(); i++) { 203 s += list_temp.get(i); 204  } 205 return s; 206 207  } 208 209 static class Stack { 210 int mytop; 211 double stk[]; 212 213 public Stack(int num) { 214 mytop = -1; 215 stk = new double[num]; 216  } 217 218 /* 出棧 */ 219 double mypop() { 220 double peek = stk[mytop]; 221 mytop--; 222 return peek; 223  } 224 225 /* 入棧 */ 226 void mypush(double x) { 227 mytop++; 228 stk[mytop] = x; 229 230  } 231 232 /* 判空 */ 233  Boolean myisempty() { 234 if (mytop == -1) 235 return true; 236 else 237 return false; 238  } 239 240 /* 取棧頂元素 */ 241 double mypeek() { 242 double peek = stk[mytop]; 243 return peek; 244  } 245 246 /* 棧大小 */ 247 int mysize() { 248 return mytop + 1; 249  } 250  } 251 252 static class Tack { 253 int mytop; 254  String tk[]; 255 256 public Tack(int num) { 257 mytop = -1; 258 tk = new String[num]; 259  } 260 261 /* 出棧 */ 262  String mypop() { 263 String peek = tk[mytop]; 264 mytop--; 265 return peek; 266  } 267 268 /* 入棧 */ 269 void mypush(String x) { 270 mytop++; 271 tk[mytop] = x; 272 273  } 274 275 /* 判空 */ 276  Boolean myisempty() { 277 if (mytop == -1) 278 return true; 279 else 280 return false; 281  } 282 283 /* 取棧頂元素 */ 284  String mypeek() { 285 String peek = tk[mytop]; 286 return peek; 287  } 288 289 /* 棧大小 */ 290 int mysize() { 291 return mytop + 1; 292  } 293 294  } 295 296 } 297 298 299 arithmetic
複製代碼
複製代碼
 1 package ui_test;  2  3 import java.awt.Color;  4 import java.awt.Graphics;  5 import java.awt.Graphics2D;  6 import java.util.ArrayList;  7 import java.util.Random;  8  9 import javax.swing.JFrame; 10 11 public class chart extends JFrame{ 12 //繪製柱形統計圖 13 ArrayList<Integer> ran=new ArrayList<Integer>(); 14 public chart(ArrayList<Integer> scores) 15  { 16 super(); 17  getContentPane().setForeground(Color.CYAN); 18  setForeground(Color.CYAN); 19  setBackground(Color.CYAN); 20 for(int i=0;i<scores.size();i++) 21  { 22  ran.add(scores.get(i)); 23  System.out.println(scores.get(i)); 24  } 25 26 setTitle("繪製柱形圖"); 27 setSize(600, 400); 28  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 29  } 30  @Override 31 public void paint(Graphics g){ 32 int Width = getWidth(); 33 int Height = getHeight(); 34 int leftMargin = 20;//柱形圖左邊界 35 int topMargin = 50;//柱形圖上邊界 36 Graphics2D g2 = (Graphics2D) g; 37 g2.setColor(Color.WHITE);//繪製白色背景 38 g2.fillRect(0, 0, Width, Height-100);//繪製矩形圖 39  g2.setColor(Color.black); 40 for(int i=0;i<=10;i++) 41  { 42 //繪製灰色橫線和百分比 43 g2.drawString((100-10*i)+" ", 15, topMargin+30*i); 44 g2.drawLine(10, topMargin+30*i, Width, topMargin+30*i);//繪製灰色橫線 45  } 46  g2.setColor(Color.RED); 47 for(int i=0;i<=ran.size();i++) 48  { 49 //繪製柱形圖 50 int step = (i+1)*40;//設置每一個柱形圖的水平間隔爲40 51 //繪製矩形 52 g2.fillRoundRect(leftMargin+step*2-5,(100-ran.get(i))*3+50, 40, 300-(100-ran.get(i))*3, 40, 10); 53 //列出測試輪數 54 g2.drawString("第"+(i+1)+"輪", leftMargin+step*2, 380); 55  } 56  } 57 58 59 } 60 61 62 chart
複製代碼

任務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章)

JAVA特色

簡單的、面向對象的、分佈式的、強壯的、安全的、 體系結構中立的、可移植的、解釋型的、高性能的、 多線程的、動態的語言。

JDK的安裝及配置 JDK平臺提供的Java編譯器(javac.exe)和 Java解釋器(java.exe)位於Java安裝目錄的 bin文件夾中,爲了能在任何目錄中使用編譯器 和解釋器,應在系統特性中設置Path

 

 JDK的安裝及配置

JDK安裝目錄的jre文件夾中包含着Java應用程 序運行時所須要的Java類庫,這些類庫被包含在jre\lib目錄下的壓縮文件rt.jar中

  

一個Java程序的開發過程 

 

 

 

 源文件的命名規則

若是源文件中有多個類,那麼只能有一個類是public類。若是有一個類是public類,那麼源文件的名字必須與這個類的名字徹底相同,擴展名是.java。 若是源文件沒有public類,那麼源文件的名字只要和某個類的名字相同,而且擴展名是.java就能夠了。 標識符、關鍵字和數據類型

 Java標識符的組成 熟悉Java關鍵字 Java數據類型     Java一維數組的定義、初始化和數組元素   的引用Java數據類型

運算符與表達式        

算術運算符,關係運算符,邏輯運算符,位運算符,賦值運算符,其餘運算符

Java流程控制語句

 控制語句, if語句, switch語句, 循環語句, while, do…while, for,break和continue語句, break——跳出switch結構;終止並跳出循環體。, continue——結束本次循環。

類、對象、繼承和接口

 類聲明 class People { … }  類體內容由兩部分構成:  類成員變量:用來刻畫類屬性;  類成員方法:用來刻畫類內操做。

局部變量 – 在方法體中定義的變量和方法的參數被稱爲局部變量。 類成員變量和局部變量的區別 類成員變量在整個類內都有效,局部變量只在定義它的方法內有效。  若是局部變量的名字與成員變量的名字相同,則成員變量被隱藏。

類成員方法 —方法的定義包括兩部分:方法聲明和方法體。 構造方法 —名字必須與類名徹底相同,沒有返回值類型; —構造方法能夠重載; —每一個類至少有一個構造方法,若程序員沒有定義構造方法,系統會自動產生一個默認構造方法,這個默認構造方法無參數,方法體爲空; —程序員爲類定義了構造方法,系統就再也不提供默認構造方法; — 用途:初始化類對象。

方法重載 —一個類中能夠有多個具備相同的名字的方法。但這些方法或者是參數的個數不一樣,或者是參數的類型不一樣建立對象需兩個步驟:對象聲明和爲對象分配內存 —對象聲明格式爲: 類名 對象名字; 如:People zhangPing; —爲聲明對象分配內存格式以下: 對象名= new 構造方法名(參數表); 如: zhangPing=new People(); —對象建立經常使用格式爲: 類名 對象名= new 構造方法名(參數表);;類、對象、繼承和接口 經過使用運算符「.」,對象能夠實現對所屬類具備訪問權限的成員變量訪問和成員方法調用。 沒有分配內存的對象稱做空對象,空對象不能使用,即不能讓空對象去調用方法。類、對象、繼承和接口 Static關鍵字 – 用static修飾的成員變量稱爲類(靜態)變量 – 用static修飾的方法稱爲類(靜態)方法 實例變量和類變量的區別 – 若是類的成員變量有類變量,那麼該類全部對象的類變量內存是相同的。 – 具備訪問權限的類變量能夠經過某個對象訪問,也可 以經過類名訪問。 – 具備訪問權限的實例變量僅能夠經過對象訪問,不能使用類名訪問。類、對象、繼承和接口實例方法和類方法的區別 – 實例方法能夠被類建立的任何對象調用執行。 – 類方法不只能夠被類建立的任何對象調用執行,也能夠直接經過類名調用 。 說明: - 類方法能夠調用其它類方法 - 類方法只能訪問static成員變量 - 類方法不能以任何形式引用this和super - 實例方法既能夠訪問實例成員變量也可訪問類成員變量 - 實例方法既能夠調用實例方法也能夠調用類方法 this關鍵字 - this表示類的當前對象。 - this能夠出如今實例方法和構造方法中,但不能夠出如今類方法中。 - this關鍵字出如今構造方法中時,表明使用該構造方法所建立的對象。 - this出如今類的實例方法中時,表明正在調用該方法的當前對象。 實現類繼承的方式 在類的聲明中,經過使用關鍵字extends來建立一個類的子類,格式以下: class 子類名 extends 父類名 { … } 類、對象、繼承和接口 繼承的規定 - Java只支持單繼承,不容許多繼承 - Java容許有多層繼承

方法的重寫 - 方法重寫是指:子類中定義一個方法,這個方法的名字、返回類型、參數個數和類型與從父類繼承的方法徹底相同。 - 子類重寫父類,被重寫的方法不能比父類擁有更嚴格的訪問權限方法重載與方法重寫的區別 

 成員變量的隱藏 - 子類中定義的成員變量和父類中的成員變量同名時,子類就隱藏了繼承的成員變量 。 super關鍵字 - 子類中訪問父類中被隱藏的成員變量 - super.成員變量 - 子類調用父類中的方法  調用父類中的特定構造方法 super()  調用父類中被重寫的方法 super.方法() 類、對象、繼承和接口 子類對象與父類對象之間的轉換 - 子類對象向父類對象轉換,自動轉型 父類對象=子類對象 - 父類對象向子類對象轉換,強制轉型 子類對象=(子類)父類對象類、對象、繼承和接口多態性有兩種表現形式: ①方法的多態性(方法重載) ②對象的多態性 對象多態性是在繼承應用上的一種擴展類、對象、繼承和接口final關鍵字 - final關鍵子可修飾類、方法成員、成員變量和方法中的參數。 - final類不能被繼承,即不能有子類 - 方法被修飾爲final方法,則這個方法不能被重寫。 - 一個成員變量被修飾爲final的,就是常量,常量必須賦給初值,並且不能再發生變化。 - 方法的參數被修飾爲final的,該參數的值不能被改變。 類、對象、繼承和接口 抽象類 - 用關鍵字abstract修飾的類稱爲abstract類(抽象類)。 abstract class A { „ } - abstract類不能被實例化; - abstract類能夠有abstract方法; - 對於abstract方法,只容許聲明,不容許實現,且要用 abstract關鍵字進行修飾; - 抽象類的子類必須重寫全部的抽象方法。 類、對象、繼承和接口 Java語言不支持多繼承性,即一個類只能有一個父類。單繼承性使得Java簡單,易於管理程序。爲了克服單繼承的缺點,Java使用了接口,一個類能夠實現多個接口。

成員變量的隱藏 - 子類中定義的成員變量和父類中的成員變量同名時,子類就隱藏了繼承的成員變量 。 super關鍵字 - 子類中訪問父類中被隱藏的成員變量 - super.成員變量 - 子類調用父類中的方法  調用父類中的特定構造方法 super()  調用父類中被重寫的方法 super.方法() 子類對象與父類對象之間的轉換 - 子類對象向父類對象轉換,自動轉型 父類對象=子類對象 - 父類對象向子類對象轉換,強制轉型 子類對象=(子類)父類對象 多態性有兩種表現形式: ①方法的多態性(方法重載) ②對象的多態性 對象多態性是在繼承應用上的一種擴展 final關鍵字 - final關鍵子可修飾類、方法成員、成員變量和方法中的參數。 - final類不能被繼承,即不能有子類 - 方法被修飾爲final方法,則這個方法不能被重寫。 - 一個成員變量被修飾爲final的,就是常量,常量必須賦給初值,並且不能再發生變化。 - 方法的參數被修飾爲final的,該參數的值不能被改變。類、對象、繼承和接口 抽象類 - 用關鍵字abstract修飾的類稱爲abstract類(抽象類)。 abstract class A { „ } - abstract類不能被實例化; - abstract類能夠有abstract方法; - 對於abstract方法,只容許聲明,不容許實現,且要用 abstract關鍵字進行修飾; - 抽象類的子類必須重寫全部的抽象方法。、對象、繼承和接口 Java語言不支持多繼承性,即一個類只能有一個父類。單繼承性使得Java簡單,易於管理程序。爲了克服單繼承的缺點,Java使用了接口,一個類能夠實現多個接口。

接口的聲明與使用 - 關鍵字interface來定義一個接口。 - 接口的定義與類的定義類似,包括接口的聲明和接口體。 - 接口體中包含常量定義和抽象方法定義兩部分。 如: interface Printable { int MAX=100; float sum(float x ,float y); } 接口使用規則 - 一個類能夠實現多個接口; - 若是一個類使用了某個接口,那麼這個類必須實現該接口的全部方法,即爲這些方法提供方法體。 class 類名 implements 接口A,接口B { … }

一個新的接口用extends關鍵字去繼承一個已有的接口,實現接口的多繼承 interface 接口A extends 接口1,接口2,接口3,接口4 { … }

 接口與抽象類的區別 

 package語句 - 必須是源文件中的第一條語句。在package語句以前,除了空白和註釋以外不能有任何語句。 - 若是不加package語句,則指定爲缺省包或無名包。 - 包對應着文件系統的目錄層次結構。 - 在package語句中,用「.」來指明包(目錄)的層次。 類、對象、繼承和接口 引入包中的類 import java.io.File; 引入整個包 import java.io.*; java默認導入的包 java.lang.* 在同一包中的類能夠互相引用,無需import語句。 類的訪問權限修飾符 - public 當兩個類不在同一個包中時,容許外部類訪問 - default 不能讓不一樣包的外部類訪問,但能夠在同一個包中不一樣類之間訪問類的其它修飾符 - final - abstract 方法的權限訪問修飾符 - public - protected - default(不加訪問說明符時) - private 方法的其它修飾符 - static - final - abstract - synchronized(多線程中介紹) 

public protected default privat

內部類 - Java支持在一個類中聲明另外一個類,這樣的類稱做內部類,而包含內部類的類成爲內部類的外嵌類。 - 內部類的類體中不能夠聲明類變量和類方法。外嵌類的類體中能夠用內部類聲明對象,做爲外嵌類的成員。 匿名內部類 - 匿名內部類沒有類名,因此建立匿名內部類時同時建立匿名內部類的對象 - 建立匿名內部類的語法格式以下所示

 

Lambda表達式 - Java 8 引入的一個新的功能,主要用途是提供一個函數化的語法來簡化編碼。 - Lambda表達式本質上是一個匿名方法。 

類、類間關係、類圖

類和類之間關係: is a,has a, use a - is a: 繼承,實現關係 - has a: 組合,聚合,關聯關係 - use a: 依賴關係 繼承關係 實現關係 public class Animal{} public class Dog extends Animal{} public interface UserService{} public class UserService implements UserService{} 組合關係 public class Heart{} publid class Stomach{} public class Person{ private Heart heart; private Stomach stomach; public Person(){ this.heart=new Heart(); this.stomach=new Stomach(); } } 聚合關係 public class Engine{} public class Gearbox{} publicc lass Car{ private Engine engine; private Gearbox gearbox; public Car(Engine engine, Gearbox gearbox){ this.engine=engine; this. gearbox=gearbox; } } 關聯關係 public class Car{} public class Person{ private Car car; public void setCar(){ this.car=car; } } 依賴關係 public class Train{ public void move(){} } public class Person{ public void move(Train train){ train.move(); } } 類圖:在OO程序設計中,進行類關係分析與設計的工具  

JDK預約義類及其API

JDK中預約義類API使用要求: - 導入類所在的包; - 掌握預約義類的名稱及其用途; - 掌握預約義類中定義的經常使用方法、方法參數要求、返回值類型

異常處理編程模型

捕獲異常編程框架 try { //此處是可能出現異常的代碼 } catch(Exception e) { //此處是若是發生異常的處理代碼 } finally { //此處是確定被執行的代碼 }

 拋出異常 - throws語句是在方法的聲明中使用來拋出異常,用來指定方法可能拋出異常,但不想在當前方法中處理這個異常。 - throw語句是在方法體內使用拋出異常類的對象,程序在執行到throw語句時當即終止,它後面的語句都不執行。 - 要捕捉throw拋出的異常,則必須使用try-catch語句。 異常處理編程模型  建立自定義異常類(*) 定義 extends Exception的子類 異常處理 Java GUI編程模型 掌握java.awt和java.swing包中各類

 GUI定義需 要的組件建立以及經常使用方法 Java中的事件處理機制 - 事件由用戶操做某個組件對象產生,被操做組件稱爲事件源。 - 一個組件能響應哪些事件,響應事件後需執行的語句序列存放在什麼位置,這些功能由事件監視器負責。 - 事件監視器是某個實現了監聽器接口類的對象。-建立GUI中事件源,開發程序時,程序員須要作如下2件事:  向事件源註冊事件監視器 例如,文本框的事件監聽器註冊方法是: addActionListener(監視器);  建立該監視器對象的類,聲明實現相應的接口 在類中實現接口中要求的事件處理方法 Java GUI編程模型  Java中的每一個事件類都有一個相應的監視器接口,接口中聲明瞭一個或多個抽象的事件處理方法。若是一個類實現事件監視器接口,其對象就能夠做爲對應事件的監視器,具有監視和處理事件的能力。 Java GUI編程模型 GUI設計中編寫事件處理程序代碼 必須肯定事件源與事件監視器事件源的選擇一般比較容易,事件監視器必須是實現事件監視器接口的類對象 Soureobject.addXXXListener(監視器),將某個對象做爲本身的監視器建立監視器對象的類必須實現相應的事件接口 Class A implements XXXListener 當事件源發生事件時,監視器將調用接口中的相應方法對事件進行處理

相關文章
相關標籤/搜索