日韩性视频-久久久蜜桃-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 | 狼人狠狠干 | 国产 日韩 欧美 在线 | 亚洲天堂五月天 | 你懂的在线免费观看 | 欧美极品一区二区三区 | 大尺度做爰啪啪床戏 | 精品欧美乱码久久久久久1区2区 | 国产又粗又猛又黄又爽视频 | 国产精品v亚洲精品v日韩精品 | 国产成人综合在线视频 | 69xx视频在线观看 | 中文字幕有码无码人妻av蜜桃 | 日本熟妇人妻xxxxx | 91免费看大片 | 99久久99久久精品国产片果冻 | 美女扒开下面让男人捅 | 二区三区在线视频 | 青青草视频免费 | www.av在线播放 | 国产精品一二三四五 | 成人毛片基地 | 午夜激情免费 | 黑人极品ⅴideos精品欧美棵 | 国产噜噜噜噜噜久久久久久久久 | 欧美日韩综合精品 | 欧美大肚乱孕交hd孕妇 | 公车激情云雨小说 | 国产 日韩 欧美 精品 | 老汉色av| 男人插女人网站 | 99re伊人 | av资源免费 | 欧美日韩高清不卡 | 做视频| 在线免费观看欧美大片 | 亚洲午夜av久久乱码 | 日本少妇xxxx软件 | 精品在线视频免费观看 | 少妇的被肉日常np | 免费毛片a | 成人在线免费电影 | www.一区| 国产亚洲精品久久久久久打不开 | 五月天综合在线 | 草久久久| 69sex久久精品国产麻豆 | av大帝在线 | 91久久久久久久久久久久久 | 亚洲国产精品成人无久久精品 | av毛片一区 | 国产精品伦一区二区三区 | 加勒比视频在线观看 | 婷婷深爱网 | 欧美永久视频 | 国产激情一区 | 熟女一区二区三区视频 | 国产夜色视频 | 在线免费观看一区二区 | 色综合中文网 | 亚洲美女毛片 | 好男人视频www | 欧美特级黄 | 涩涩涩涩涩涩涩涩涩涩 | 激情文学综合网 | 五月天综合久久 | 69xxx免费视频 | 91 在线视频 | h片在线观看视频 | 国产美女黄网站 | 国内av自拍| 肌肉猛男裸体gay网站免费 | 久久久久久中文 | 国产欧美日韩精品在线观看 | 久久麻豆av | 久久这里有精品 | 欧美午夜精品久久久久久蜜 | 亚洲大色网 | 亚洲色成人一区二区三区小说 | 91最新视频 | 日韩资源网 | 久热国产精品 | 韩国裸体网站 | 免费黄色看片网站 | 涩涩屋视频在线观看 | 青青草视频 | 亚洲欧美日韩中文字幕在线观看 | 91热精品| 国产秋霞| 国产大片av | 亚洲国产精品久久久久 | 午夜视频网站 | 日韩免费视频 | 美女在线一区 |