日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

201771010126 王燕《面向对象程序设计(Java)》第十六周学习总结

發(fā)布時(shí)間:2024/4/13 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 201771010126 王燕《面向对象程序设计(Java)》第十六周学习总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

實(shí)驗(yàn)十六??線程技術(shù)

實(shí)驗(yàn)時(shí)間?2017-12-8

1、實(shí)驗(yàn)?zāi)康呐c要求

(1)?掌握線程概念;

‐多線程 是進(jìn)程執(zhí)行過(guò)中產(chǎn)生的多條線索。 是進(jìn)程執(zhí)行過(guò)中產(chǎn)生的多條線索。 是進(jìn)程執(zhí)行過(guò)中產(chǎn)生的多條線索。 是進(jìn)程執(zhí)行過(guò)中產(chǎn)生的多條線索。
‐線程是比進(jìn)執(zhí)行更小的單位。
‐線程不能獨(dú)立存在,必須于進(jìn) 中同一線程不能獨(dú)立存在,必須于進(jìn) 中同一線程不能獨(dú)立存在,必須于進(jìn) 中同一線程不能獨(dú)立存在,必須于進(jìn) 中同一程的各線間共享進(jìn)空數(shù)據(jù)。 程的各線間共享進(jìn)空數(shù)據(jù)。
‐每個(gè)線程有它自身的產(chǎn)生、存在和消亡過(guò), 每個(gè)線程有它自身的產(chǎn)生、存在和消亡過(guò), 每個(gè)線程有它自身的產(chǎn)生、存在和消亡過(guò), 每個(gè)線程有它自身的產(chǎn)生、存在和消亡過(guò), 是一個(gè)動(dòng)態(tài)的概念。
‐多線程意味著一個(gè)序的行語(yǔ)句可以看上去幾 多線程意味著一個(gè)序的行語(yǔ)句可以看上去幾 多線程意味著一個(gè)序的行語(yǔ)句可以看上去幾 多線程意味著一個(gè)序的行語(yǔ)句可以看上去幾 乎在同一時(shí)間內(nèi)運(yùn)行。
‐線程創(chuàng)建、銷毀和切換的負(fù)荷遠(yuǎn)小于進(jìn),又稱 線程創(chuàng)建、銷毀和切換的負(fù)荷遠(yuǎn)小于進(jìn),又稱 線程創(chuàng)建、銷毀和切換的負(fù)荷遠(yuǎn)小于進(jìn),又稱 線程創(chuàng)建、銷毀和切換的負(fù)荷遠(yuǎn)小于進(jìn),又稱 為輕量級(jí)進(jìn)程( lightweight process lightweight process lightweight process )。

(2)?掌握線程創(chuàng)建的兩種技術(shù);

Java 實(shí)現(xiàn)多線程有兩種途徑:
‐創(chuàng)建 Thread 類的子

  首先需從 Thread 類派生出一個(gè)子, 在該子類中 重寫(xiě) run() 方法。
  例:
  class class hand extends Thread hand extends Thread hand extends Threadhand extends Thread hand extends Thread hand extends Thread hand extends Thread hand extends Thread hand extends Thread         ?????? hand extends Thread
  {    
  public void run() public void run() public void run() public void run() public void run()
  {……} {……}
  }
  然后用創(chuàng)建該子類的對(duì)象
  Lefthand left=new Lefthand ();
  Righthand right=new Righthand ();
  . 最后用 start() 方法啟動(dòng)線程
  left.start ();
  right.start ();

‐在程序中定義實(shí)現(xiàn) Runnable 接口的類

  首先設(shè)計(jì)一個(gè)實(shí)現(xiàn) Runnable Runnable 接口的類; 接口的類; 接口的類; 接口的類; 接口的類;
  . 然后在類中根據(jù)需要重寫(xiě) run 方法;
  . 再創(chuàng)建該類對(duì)象,以此為參數(shù)立 再創(chuàng)建該類對(duì)象,以此為參數(shù)立 ThreadThread Thread類的對(duì)象;
  . 調(diào)用 Thread Thread Thread 類對(duì)象的 start start start方法啟動(dòng)線程,將 方法啟動(dòng)線程,將 方法啟動(dòng)線程,將 方法啟動(dòng)線程,將 方法啟動(dòng)線程,將 方法啟動(dòng)線程,將 方法啟動(dòng)線程,將 方法啟動(dòng)線程,將 CPU 執(zhí)                    ????????? 行權(quán)轉(zhuǎn)交到 run 方法。 方法。 方法。
   用Runnable() (見(jiàn)教材 (見(jiàn)教材 (見(jiàn)教材 632 頁(yè)) 接口實(shí)現(xiàn)線程 接口實(shí)現(xiàn)線程 接口實(shí)現(xiàn)線程 接口實(shí)現(xiàn)線

(3)?理解和掌握線程的優(yōu)先級(jí)屬性及調(diào)度方法;

  Java 提供一個(gè) 線程調(diào)度器 來(lái)監(jiān)控程序啟動(dòng)后進(jìn)入 來(lái)監(jiān)控程序啟動(dòng)后進(jìn)入 來(lái)監(jiān)控程序啟動(dòng)后進(jìn)入 來(lái)監(jiān)控程序啟動(dòng)后進(jìn)入 來(lái)監(jiān)控程序啟動(dòng)后進(jìn)入 來(lái)監(jiān)控程序啟動(dòng)后進(jìn)入 來(lái)監(jiān)控程序啟動(dòng)后進(jìn)入 來(lái)監(jiān)控程序啟動(dòng)后進(jìn)入       ?????? 監(jiān)控程序啟動(dòng)后進(jìn)入 來(lái)監(jiān)控程序啟動(dòng)后進(jìn)入 可運(yùn)行狀態(tài)的 所有線程。調(diào)度器按照可運(yùn)行狀態(tài)的 所有線程。調(diào)度器按照可運(yùn)行狀態(tài)的 所有線程。調(diào)度器按照可運(yùn)行狀態(tài)的 所有線程。調(diào)度器按照優(yōu)先級(jí)決定應(yīng)調(diào)?????? 度 哪些線程來(lái)執(zhí)行。 優(yōu)先級(jí)決定應(yīng)調(diào)度哪些線程來(lái)執(zhí)行。
– 處于可運(yùn)行狀態(tài)的線程首先進(jìn)入 就緒隊(duì) 列排就緒隊(duì) 列排就緒隊(duì) 列排就緒隊(duì) 列排就緒隊(duì) 列排就緒隊(duì) 列排等 候處理器資源,同一時(shí)刻在就緒隊(duì)列中的線程可 候處理器資源,同一時(shí)刻在就緒隊(duì)列中的線程可 候處理器資源,同一時(shí)刻在就緒隊(duì)列中的線程可 候處理器資源,同一時(shí)刻在就緒隊(duì)列中的線程可 能有多個(gè)。 Java 的多線程系統(tǒng)會(huì)給每個(gè)自動(dòng) 的多線程系統(tǒng)會(huì)給每個(gè)自動(dòng) 的多線程系統(tǒng)會(huì)給每個(gè)自動(dòng) 的多線程系統(tǒng)會(huì)給每個(gè)自動(dòng) 的多線程系統(tǒng)會(huì)給每個(gè)自動(dòng) 的多線程系統(tǒng)會(huì)給每個(gè)自動(dòng) 的多線程系統(tǒng)會(huì)給每個(gè)自動(dòng) 的多線程系統(tǒng)會(huì)給每個(gè)自動(dòng) 的多線程系統(tǒng)會(huì)給每個(gè)自動(dòng) 的多線程系統(tǒng)會(huì)給每個(gè)自動(dòng) 的多線程系統(tǒng)會(huì)給每個(gè)自動(dòng) 的多線程系統(tǒng)會(huì)給每個(gè)自動(dòng) 的多線程系統(tǒng)會(huì)給每個(gè)自動(dòng) 的多線程系統(tǒng)會(huì)給每個(gè)自動(dòng) 分配一個(gè)線程的優(yōu)先級(jí)。

Java 的線程調(diào)度采用優(yōu)先級(jí)策略 :
? 優(yōu)先級(jí)高的執(zhí)行,低后;
? 多線程系統(tǒng)會(huì)自動(dòng)為每個(gè)分配一優(yōu)先級(jí),缺省時(shí),繼承其父類的優(yōu)先級(jí);
? 任務(wù)緊急的線程,其優(yōu)先級(jí)較高;
? 同優(yōu)先級(jí)的線程按“進(jìn)出”隊(duì)列原則;
多線程調(diào)度

(4)?掌握線程同步的概念及實(shí)現(xiàn)技術(shù);

多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 多線程并發(fā)運(yùn)行不確定性問(wèn)題解決方案: 引入線 引入線 引入線 程同步機(jī)制 程同步機(jī)制 程同步機(jī)制 程同步機(jī)制 程同步機(jī)制 ,使得另一線程要用該方法 使得另一線程要用該方法 使得另一線程要用該方法 使得另一線程要用該方法 使得另一線程要用該方法 使得另一線程要用該方法 使得另一線程要用該方法 使得另一線程要用該方法 使得另一線程要用該方法 使得另一線程要用該方法 使得另一線程要用該方法 使得另一線程要用該方法 ,就只 能等待 。
? 在Java 中解決多線程同步問(wèn)題 的方法有兩種: 的方法有兩種: 的方法有兩種: 的方法有兩種: 的方法有兩種: 的方法有兩種: 的方法有兩種:
-Java SE 5.0中引入 ReentrantLock ReentrantLock ReentrantLockReentrantLock ReentrantLock類(P 648648648頁(yè))。
-在共享內(nèi)存的類方法前加 在共享內(nèi)存的類方法前加 在共享內(nèi)存的類方法前加 在共享內(nèi)存的類方法前加 在共享內(nèi)存的類方法前加 在共享內(nèi)存的類方法前加 在共享內(nèi)存的類方法前加 在共享內(nèi)存的類方法前加 在共享內(nèi)存的類方法前加 在共享內(nèi)存的類方法前加 在共享內(nèi)存的類方法前加 synchronizedsynchronizedsynchronized synchronized synchronized synchronizedsynchronized修飾符 修飾符 修飾符 。

2、實(shí)驗(yàn)內(nèi)容和步驟

實(shí)驗(yàn)1:測(cè)試程序并進(jìn)行代碼注釋。

測(cè)試程序1:

l?在elipse?IDE中調(diào)試運(yùn)行ThreadTest,結(jié)合程序運(yùn)行結(jié)果理解程序;

l?掌握線程概念;

l?掌握用Thread的擴(kuò)展類實(shí)現(xiàn)線程的方法;

l?利用Runnable接口改造程序,掌握用Runnable接口創(chuàng)建線程的方法。

class?Lefthand?extends?Thread?{?

???public?void?run()

???{

???????for(int?i=0;i<=5;i++)

???????{??System.out.println("You?are?Students!");

???????????try{???sleep(500);???}

???????????catch(InterruptedException?e)

???????????{?System.out.println("Lefthand?error.");}????

???????}?

??}?

}

class?Righthand?extends?Thread?{

????public?void?run()

????{

?????????for(int?i=0;i<=5;i++)

?????????{???System.out.println("I?am?a?Teacher!");

?????????????try{??sleep(300);??}

?????????????catch(InterruptedException?e)

?????????????{?System.out.println("Righthand?error.");}

?????????}

????}

}

public?class?ThreadTest?

{

?????static?Lefthand?left;

?????static?Righthand?right;

?????public?static?void?main(String[]?args)

?????{?????left=new?Lefthand();

???????????right=new?Righthand();

???????????left.start();

???????????right.start();

?????}

}

?

1 package test; 2 3 class Lefthand extends Thread { 4 public void run() 5 { 6 for(int i=0;i<=5;i++) 7 { System.out.println("You are Students!"); 8 try{ sleep(500); } 9 catch(InterruptedException e) 10 { System.out.println("Lefthand error.");} 11 } 12 } 13 } 14 class Righthand extends Thread { 15 public void run() 16 { 17 for(int i=0;i<=5;i++) 18 { System.out.println("I am a Teacher!"); 19 try{ sleep(300); } 20 catch(InterruptedException e) 21 { System.out.println("Righthand error.");} 22 } 23 } 24 } 25 public class ThreadTest 26 { 27 static Lefthand left; 28 static Righthand right; 29 public static void main(String[] args) 30 { Runnable left1 = new Lefthand(); 31 Runnable right1 = new Righthand() ; 32 Thread left = new Thread(left1); 33 Thread right = new Thread(right1); 34 left.start(); 35 right.start(); 36 37 } 38 } View Code

?

測(cè)試程序2

l?在Elipse環(huán)境下調(diào)試教材625頁(yè)程序14-1、14-2?14-3,結(jié)合程序運(yùn)行結(jié)果理解程序;

l?在Elipse環(huán)境下調(diào)試教材631頁(yè)程序14-4,結(jié)合程序運(yùn)行結(jié)果理解程序;

l?對(duì)比兩個(gè)程序,理解線程的概念和用途;

l?掌握線程創(chuàng)建的兩種技術(shù)。

?

1 package bounce; 2 3 import java.awt.geom.*; 4 5 /** 6 * A ball that moves and bounces off the edges of a rectangle 7 * @version 1.33 2007-05-17 8 * @author Cay Horstmann 9 */ 10 public class Ball 11 { 12 private static final int XSIZE = 15; 13 private static final int YSIZE = 15; 14 private double x = 0; 15 private double y = 0; 16 private double dx = 1; 17 private double dy = 1; 18 19 /** 20 * Moves the ball to the next position, reversing direction if it hits one of the edges 21 */ 22 public void move(Rectangle2D bounds) 23 { 24 x += dx; 25 y += dy; 26 if (x < bounds.getMinX()) 27 { 28 x = bounds.getMinX(); 29 dx = -dx; 30 } 31 if (x + XSIZE >= bounds.getMaxX()) 32 { 33 x = bounds.getMaxX() - XSIZE; 34 dx = -dx; 35 } 36 if (y < bounds.getMinY()) 37 { 38 y = bounds.getMinY(); 39 dy = -dy; 40 } 41 if (y + YSIZE >= bounds.getMaxY()) 42 { 43 y = bounds.getMaxY() - YSIZE; 44 dy = -dy; 45 } 46 } 47 48 /** 49 * Gets the shape of the ball at its current position. 50 */ 51 public Ellipse2D getShape() 52 { 53 return new Ellipse2D.Double(x, y, XSIZE, YSIZE); 54 } 55 } View Code 1 package bounce; 2 3 import java.awt.*; 4 import java.util.*; 5 import javax.swing.*; 6 7 /** 8 * The component that draws the balls. 9 * @version 1.34 2012-01-26 10 * @author Cay Horstmann 11 */ 12 public class BallComponent extends JPanel 13 { 14 private static final int DEFAULT_WIDTH = 450; 15 private static final int DEFAULT_HEIGHT = 350; 16 17 private java.util.List<Ball> balls = new ArrayList<>(); 18 19 /** 20 * Add a ball to the component. 21 * @param b the ball to add 22 */ 23 public void add(Ball b) 24 { 25 balls.add(b); 26 } 27 28 public void paintComponent(Graphics g) 29 { 30 super.paintComponent(g); // erase background 31 Graphics2D g2 = (Graphics2D) g; 32 for (Ball b : balls) 33 { 34 g2.fill(b.getShape()); 35 } 36 } 37 38 public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); } 39 } View Code 1 package bounce; 2 3 import java.awt.*; 4 import java.awt.event.*; 5 import javax.swing.*; 6 7 /** 8 * Shows an animated bouncing ball. 9 * @version 1.34 2015-06-21 10 * @author Cay Horstmann 11 */ 12 public class Bounce 13 { 14 public static void main(String[] args) 15 { 16 EventQueue.invokeLater(() -> { 17 JFrame frame = new BounceFrame(); 18 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 19 frame.setVisible(true); 20 }); 21 } 22 } 23 24 /** 25 * The frame with ball component and buttons. 26 */ 27 class BounceFrame extends JFrame 28 { 29 private BallComponent comp; 30 public static final int STEPS = 1000; 31 public static final int DELAY = 3; 32 33 /** 34 * Constructs the frame with the component for showing the bouncing ball and 35 * Start and Close buttons 36 */ 37 public BounceFrame() 38 { 39 setTitle("Bounce"); 40 comp = new BallComponent(); 41 add(comp, BorderLayout.CENTER); 42 JPanel buttonPanel = new JPanel(); 43 addButton(buttonPanel, "Start", event -> addBall()); 44 addButton(buttonPanel, "Close", event -> System.exit(0)); 45 add(buttonPanel, BorderLayout.SOUTH); 46 pack(); 47 } 48 49 /** 50 * Adds a button to a container. 51 * @param c the container 52 * @param title the button title 53 * @param listener the action listener for the button 54 */ 55 public void addButton(Container c, String title, ActionListener listener) 56 { 57 JButton button = new JButton(title); 58 c.add(button); 59 button.addActionListener(listener); 60 } 61 62 /** 63 * Adds a bouncing ball to the panel and makes it bounce 1,000 times. 64 */ 65 public void addBall() 66 { 67 try 68 { 69 Ball ball = new Ball(); 70 comp.add(ball); 71 72 for (int i = 1; i <= STEPS; i++) 73 { 74 ball.move(comp.getBounds()); 75 comp.paint(comp.getGraphics()); 76 Thread.sleep(DELAY); 77 } 78 } 79 catch (InterruptedException e) 80 { 81 } 82 } 83 } View Code

?

1 package bounceThread; 2 3 import java.awt.geom.*; 4 5 /** 6 A ball that moves and bounces off the edges of a 7 rectangle 8 * @version 1.33 2007-05-17 9 * @author Cay Horstmann 10 */ 11 public class Ball 12 { 13 private static final int XSIZE = 15; 14 private static final int YSIZE = 15; 15 private double x = 0; 16 private double y = 0; 17 private double dx = 1; 18 private double dy = 1; 19 20 /** 21 Moves the ball to the next position, reversing direction 22 if it hits one of the edges 23 */ 24 public void move(Rectangle2D bounds) 25 { 26 x += dx; 27 y += dy; 28 if (x < bounds.getMinX()) 29 { 30 x = bounds.getMinX(); 31 dx = -dx; 32 } 33 if (x + XSIZE >= bounds.getMaxX()) 34 { 35 x = bounds.getMaxX() - XSIZE; 36 dx = -dx; 37 } 38 if (y < bounds.getMinY()) 39 { 40 y = bounds.getMinY(); 41 dy = -dy; 42 } 43 if (y + YSIZE >= bounds.getMaxY()) 44 { 45 y = bounds.getMaxY() - YSIZE; 46 dy = -dy; 47 } 48 } 49 50 /** 51 Gets the shape of the ball at its current position. 52 */ 53 public Ellipse2D getShape() 54 { 55 return new Ellipse2D.Double(x, y, XSIZE, YSIZE); 56 } 57 } View Code 1 package bounceThread; 2 3 import java.awt.*; 4 import java.util.*; 5 import javax.swing.*; 6 7 /** 8 * The component that draws the balls. 9 * @version 1.34 2012-01-26 10 * @author Cay Horstmann 11 */ 12 public class BallComponent extends JComponent 13 { 14 private static final int DEFAULT_WIDTH = 450; 15 private static final int DEFAULT_HEIGHT = 350; 16 17 private java.util.List<Ball> balls = new ArrayList<>(); 18 19 /** 20 * Add a ball to the panel. 21 * @param b the ball to add 22 */ 23 public void add(Ball b) 24 { 25 balls.add(b); 26 } 27 28 public void paintComponent(Graphics g) 29 { 30 Graphics2D g2 = (Graphics2D) g; 31 for (Ball b : balls) 32 { 33 g2.fill(b.getShape()); 34 } 35 } 36 37 public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); } 38 } View Code 1 package bounceThread; 2 3 import java.awt.*; 4 import java.awt.event.*; 5 6 import javax.swing.*; 7 8 /** 9 * Shows animated bouncing balls. 10 * @version 1.34 2015-06-21 11 * @author Cay Horstmann 12 */ 13 public class BounceThread 14 { 15 public static void main(String[] args) 16 { 17 EventQueue.invokeLater(() -> { 18 JFrame frame = new BounceFrame(); 19 frame.setTitle("BounceThread"); 20 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 21 frame.setVisible(true); 22 }); 23 } 24 } 25 26 /** 27 * The frame with panel and buttons. 28 */ 29 class BounceFrame extends JFrame 30 { 31 private BallComponent comp; 32 public static final int STEPS = 1000; 33 public static final int DELAY = 5; 34 35 36 /** 37 * Constructs the frame with the component for showing the bouncing ball and 38 * Start and Close buttons 39 */ 40 public BounceFrame() 41 { 42 comp = new BallComponent(); 43 add(comp, BorderLayout.CENTER); 44 JPanel buttonPanel = new JPanel(); 45 addButton(buttonPanel, "Start", event -> addBall()); 46 addButton(buttonPanel, "Close", event -> System.exit(0)); 47 add(buttonPanel, BorderLayout.SOUTH); 48 pack(); 49 } 50 51 /** 52 * Adds a button to a container. 53 * @param c the container 54 * @param title the button title 55 * @param listener the action listener for the button 56 */ 57 public void addButton(Container c, String title, ActionListener listener) 58 { 59 JButton button = new JButton(title); 60 c.add(button); 61 button.addActionListener(listener); 62 } 63 64 /** 65 * Adds a bouncing ball to the canvas and starts a thread to make it bounce 66 */ 67 public void addBall() 68 { 69 Ball ball = new Ball(); 70 comp.add(ball); 71 Runnable r = () -> { 72 try 73 { 74 for (int i = 1; i <= STEPS; i++) 75 { 76 ball.move(comp.getBounds()); 77 comp.repaint(); 78 Thread.sleep(DELAY); 79 } 80 } 81 catch (InterruptedException e) 82 { 83 } 84 }; 85 Thread t = new Thread(r); 86 t.start(); 87 } 88 } View Code

?

?測(cè)試程序3:分析以下程序運(yùn)行結(jié)果并理解程序。

class?Race?extends?Thread?{

??public?static?void?main(String?args[])?{

????Race[]?runner=new?Race[4];

????for(int?i=0;i<4;i++)?runner[i]=new?Race(?);

???for(int?i=0;i<4;i++)?runner[i].start(?);

???runner[1].setPriority(MIN_PRIORITY);

???runner[3].setPriority(MAX_PRIORITY);}

??public?void?run(?)?{

??????for(int?i=0;?i<1000000;?i++);

??????System.out.println(getName()+"線程的優(yōu)先級(jí)是"+getPriority()+"已計(jì)算完畢!");

????}

}

?

?

測(cè)試程序4

l?教材642頁(yè)程序模擬一個(gè)有若干賬戶的銀行,隨機(jī)地生成在這些賬戶之間轉(zhuǎn)移錢(qián)款的交易。每一個(gè)賬戶有一個(gè)線程。在每一筆交易中,會(huì)從線程所服務(wù)的賬戶中隨機(jī)轉(zhuǎn)移一定數(shù)目的錢(qián)款到另一個(gè)隨機(jī)賬戶。

l?在Elipse環(huán)境下調(diào)試教材642頁(yè)程序14-5、14-6,結(jié)合程序運(yùn)行結(jié)果理解程序;

1 package unsynch; 2 3 import java.util.*; 4 5 /** 6 * A bank with a number of bank accounts. 7 * @version 1.30 2004-08-01 8 * @author Cay Horstmann 9 */ 10 public class Bank 11 { 12 private final double[] accounts; 13 14 /** 15 * Constructs the bank. 16 * @param n the number of accounts 17 * @param initialBalance the initial balance for each account 18 */ 19 public Bank(int n, double initialBalance) 20 { 21 accounts = new double[n]; 22 Arrays.fill(accounts, initialBalance); 23 } 24 25 /** 26 * Transfers money from one account to another. 27 * @param from the account to transfer from 28 * @param to the account to transfer to 29 * @param amount the amount to transfer 30 */ 31 public void transfer(int from, int to, double amount) 32 { 33 if (accounts[from] < amount) return; 34 System.out.print(Thread.currentThread()); 35 accounts[from] -= amount; 36 System.out.printf(" %10.2f from %d to %d", amount, from, to); 37 accounts[to] += amount; 38 System.out.printf(" Total Balance: %10.2f%n", getTotalBalance()); 39 } 40 41 /** 42 * Gets the sum of all account balances. 43 * @return the total balance 44 */ 45 public double getTotalBalance() 46 { 47 double sum = 0; 48 49 for (double a : accounts) 50 sum += a; 51 52 return sum; 53 } 54 55 /** 56 * Gets the number of accounts in the bank. 57 * @return the number of accounts 58 */ 59 public int size() 60 { 61 return accounts.length; 62 } 63 } View Code 1 package unsynch; 2 3 /** 4 * This program shows data corruption when multiple threads access a data structure. 5 * @version 1.31 2015-06-21 6 * @author Cay Horstmann 7 */ 8 public class UnsynchBankTest 9 { 10 public static final int NACCOUNTS = 100; 11 public static final double INITIAL_BALANCE = 1000; 12 public static final double MAX_AMOUNT = 1000; 13 public static final int DELAY = 10; 14 15 public static void main(String[] args) 16 { 17 Bank bank = new Bank(NACCOUNTS, INITIAL_BALANCE); 18 for (int i = 0; i < NACCOUNTS; i++) 19 { 20 int fromAccount = i; 21 Runnable r = () -> { 22 try 23 { 24 while (true) 25 { 26 int toAccount = (int) (bank.size() * Math.random()); 27 double amount = MAX_AMOUNT * Math.random(); 28 bank.transfer(fromAccount, toAccount, amount); 29 Thread.sleep((int) (DELAY * Math.random())); 30 } 31 } 32 catch (InterruptedException e) 33 { 34 } 35 }; 36 Thread t = new Thread(r); 37 t.start(); 38 } 39 } 40 } View Code

綜合編程練習(xí)

編程練習(xí)1

  • 設(shè)計(jì)一個(gè)用戶信息采集程序,要求如下:
  • 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 } View Code

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

    ??

    (2)?用戶點(diǎn)擊提交按鈕時(shí),用戶輸入信息顯示控制臺(tái)界面;

    ??

    (3)?用戶點(diǎn)擊重置按鈕后,清空用戶已輸入信息;

    ?

    (4)?點(diǎn)擊窗口關(guān)閉,程序退出。

    2.創(chuàng)建兩個(gè)線程,每個(gè)線程按順序輸出5次“你好”,每個(gè)“你好”要標(biāo)明來(lái)自哪個(gè)線程及其順序號(hào)。

    1 package project2; 2 3 class Lefthand implements Runnable { 4 public void run() { 5 for (int i = 0; i < 5; i++) { 6 System.out.println(i + 1 + ":a.你好!"); 7 try { 8 Thread.sleep(500); 9 } catch (InterruptedException e) { 10 System.out.println("Lefthand error."); 11 } 12 } 13 } 14 } 15 16 class Righthand implements Runnable { 17 public void run() { 18 for (int i = 0; i < 5; i++) { 19 System.out.println(i + 1 + ":b.你好!"); 20 try { 21 Thread.sleep(300); 22 } catch (InterruptedException e) { 23 System.out.println("Righthand error."); 24 } 25 } 26 } 27 } 28 29 public class test { 30 public static void main(String[] args) { 31 Runnable left = new Lefthand(); 32 Thread l = new Thread(left); 33 Runnable right = new Righthand(); 34 Thread r = new Thread(right); 35 l.start(); 36 r.start(); 37 } 38 } View Code

    3.?完善實(shí)驗(yàn)十五?GUI綜合編程練習(xí)程序。

    練習(xí)一:

    1 package project3; 2 3 public class Student implements Comparable<Student> { 4 5 private String name; 6 private String number ; 7 private String sex ; 8 private int age; 9 private String province; 10 11 public String getName() { 12 return name; 13 } 14 public void setName(String name) { 15 this.name = name; 16 } 17 public String getnumber() { 18 return number; 19 } 20 public void setnumber(String number) { 21 this.number = number; 22 } 23 public String getsex() { 24 return sex ; 25 } 26 public void setsex(String sex ) { 27 this.sex =sex ; 28 } 29 public int getage() { 30 31 return age; 32 } 33 public void setage(int age) { 34 // int a = Integer.parseInt(age); 35 this.age= age; 36 } 37 38 public String getprovince() { 39 return province; 40 } 41 public void setprovince(String province) { 42 this.province=province ; 43 } 44 45 public int compareTo(Student o) { 46 return this.name.compareTo(o.getName()); 47 } 48 49 public String toString() { 50 return name+"\t"+sex+"\t"+age+"\t"+number+"\t"+province+"\n"; 51 } 52 } View Code 1 package project3; 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\\身份證號(hào).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("學(xué)生信息文件找不到"); 55 e.printStackTrace(); 56 } catch (IOException e) { 57 System.out.println("學(xué)生信息文件讀取錯(cuò)誤"); 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("猜猜你的老鄉(xiāng)"); 70 JTextField jt1 = new JTextField(); 71 JLabel lab1 = new JLabel("找找同齡人(年齡相近):"); 72 JTextField jt2 = new JTextField(); 73 JLabel lab2 = new JLabel("輸入你的身份證號(hào)碼:"); 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("老鄉(xiāng):" + 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 } View Code 1 package project3; 2 3 import java.awt.*; 4 import javax.swing.*; 5 6 public class ButtonTest { 7 public static void main(String[] args) { 8 EventQueue.invokeLater(() -> { 9 JFrame frame = new Main(); 10 frame.setTitle("身份證"); 11 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 12 frame.setVisible(true); 13 }); 14 } 15 } View Code

    練習(xí)二:

    1 package project4; 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;// 菜單項(xiàng) 25 JMenu build; // 二級(jí)菜單 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 // 創(chuàng)建菜單 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 // 添加菜單項(xiàng)至菜單上 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); // 添加菜單欄,不能設(shè)定位置,會(huì)自動(dòng)放在最上部 95 this.add(contentPanel); 96 97 this.setTitle("在線答題系統(tǒng)"); 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 // 創(chuàng)建文件 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, "該文件名已存在,請(qǐng)重新輸入", "ERROR", JOptionPane.ERROR_MESSAGE); 127 flag = true; 128 } 129 } while (flag); 130 // 寫(xiě)入文件 131 String u_answer; 132 try { 133 outSTr = new FileOutputStream(file); 134 Buff = new BufferedOutputStream(outSTr); 135 System.out.println("選擇是后執(zhí)行的代碼" + 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 = "沒(méi)有作答"; 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, "錯(cuò)誤,請(qǐng)導(dǎo)入題庫(kù)", "錯(cuò)誤", 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("選擇否后執(zhí)行的代碼" + 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, "錯(cuò)誤", "請(qǐng)輸入數(shù)字", JOptionPane.ERROR_MESSAGE); 206 } 207 } else { 208 user_answer.add(temp); 209 System.out.println("選擇否后執(zhí)行的代碼" + 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, "是否查看成績(jī)", "答題完畢", 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 261 } View Code 1 package project4; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 MyExGUI lg = new MyExGUI(); 7 //new MyExGUI(); 8 9 } 10 11 } View Code 1 package project4; 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 // 創(chuàng)建文件 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("計(jì)算完畢!"); 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 } View Code

    實(shí)驗(yàn)總結(jié):
    通過(guò)這一周的學(xué)習(xí),掌握了線程的概念,線程創(chuàng)建的兩種技術(shù),以及多線程運(yùn)行的原理,理解和掌握了線程的優(yōu)先級(jí)屬性及調(diào)度方法,線程同步的概念及實(shí)現(xiàn)技術(shù)。

    在編程中布局方面的問(wèn)題較為困難,展現(xiàn)出來(lái)的界面看起來(lái)不是很美觀,對(duì)布局的內(nèi)容還有待進(jìn)一步的理解。

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/wy201771010126/p/10125839.html

    總結(jié)

    以上是生活随笔為你收集整理的201771010126 王燕《面向对象程序设计(Java)》第十六周学习总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产黄a三级三级看三级 | 日韩精品中文字幕一区 | 暗呦丨小u女国产精品 | 欧美亚州 | 在线观看欧美国产 | 亚洲成人动漫在线观看 | 中文在线视频观看 | 人妻内射一区二区在线视频 | 久久与婷婷 | 一亲二脱三插 | 中文一区二区在线观看 | 国产又爽又黄游戏 | 少妇一级淫免费观看 | 91一区二区三区 | 在线免费看黄视频 | 亚洲视频小说 | 欧美精品一区二区三区三州 | 成人图片小说 | 欧美日韩亚洲国产 | 日韩精品无码一区二区三区 | a级黄色片免费看 | 操一操视频 | 免费网站av | 在哪看毛片 | 亚洲国产成人在线观看 | 国产麻豆成人传媒免费观看 | 一级a毛片免费观看久久精品 | av片亚洲| av天天看 | 米奇狠狠干 | 国产丝袜高跟 | 欧美呦呦呦 | 68日本xxxxxⅹxxx59 | 三级国产视频 | 日韩欧美在线观看免费 | 国产三级三级在线观看 | 青青视频免费看 | 久久精品无码一区二区三区毛片 | 伊人春色影院 | 欧美一区永久视频免费观看 | 97视频精品 | 欧美 日韩 高清 | 国产精品一区二区久久 | 原创av| caopeng视频 | www.99视频| 日本一级大片 | 国产一区二区在线免费观看视频 | 男女啪啪在线观看 | 春宵av | 久久国产毛片 | 91麻豆免费看 | 91中文字日产乱幕4区 | 国产伊人网 | www.浪潮av.com| 日韩在线不卡视频 | 亚洲成av人片久久 | 黄页网站在线看 | 久久久久久久国产精品美女 | 欧美亚洲国产成人 | 成人在线观看免费 | 欧美xxxxxxxxx | 亚洲女人视频 | 一级视频在线 | 免费看毛片网站 | 日韩午夜激情电影 | 国产精品va无码一区二区 | 好男人www社区在线视频夜恋 | 人人超碰人人 | 国产精品久久一区 | 97视频在线观看免费高清完整版在线观看 | 亚洲不卡在线播放 | 欧美成人午夜精品免费 | 亚洲午夜无码久久久久 | 欧美视频亚洲视频 | 天天爽夜夜 | 蜜臂av| 日韩av中文字幕在线播放 | 欧美影视一区二区三区 | 国产91精品一区 | 国产精品美女久久久久久久 | 中文字幕永久在线播放 | 天天看天天摸 | 翔田千里一区二区三区av | 3d动漫精品啪啪一区二区竹菊 | 亚洲精品国产乱伦 | 国产精品丝袜一区二区 | 国产探花一区二区三区 | 免费的黄色片 | 色播激情| 男人天堂网在线观看 | 黄色网一级片 | 免费av片| 天堂av免费 | 韩国不卡av| 日日舔夜夜摸 | 91成人观看 | 女同hd系列中文字幕 | 热逼视频 |