當前位置:首頁 » 編程語言 » java龜兔賽跑

java龜兔賽跑

發布時間: 2023-01-14 08:42:10

java龜兔賽跑問題

先讓兔子進入阻塞狀態,然後等烏龜跑完終點後喚醒兔子線程就行;下面是各個方法的配套使用(網上的,總結的很不錯)1. sleep() 方法:sleep() 允許 指定以毫秒為單位的一段時間作為參數,它使得線程在指定的時間
內進入阻塞狀態,不能得到CPU 時間,指定的時間一過,線程重新進入可執行狀態。
典型地,sleep() 被用在等待某個資源就緒的情形:測試發現條件不滿足後,讓線程阻塞一段時間後
重新測試,直到條件滿足為止。
2. suspend() 和 resume() 方法:兩個方法配套使用,suspend()使得線程進入阻塞狀態,並且不會
自動恢復,必須其對應的resume() 被調用,才能使得線程重新進入可執行狀態。典型地,suspend() 和
resume() 被用在等待另一個線程產生的結果的情形:測試發現結果還沒有產生後,讓線程阻塞,另一個
線程產生了結果後,調用 resume() 使其恢復。
3. yield() 方法:yield() 使得線程放棄當前分得的 CPU 時間,但是不使線程阻塞,即線程仍處於
可執行狀態,隨時可能再次分得 CPU 時間。調用 yield() 的效果等價於調度程序認為該線程已執行了足
夠的時間從而轉到另一個線程。
4. wait() 和 notify() 方法:兩個方法配套使用,wait() 使得線程進入阻塞狀態,它有兩種形式
,一種允許指定以毫秒為單位的一段時間作為參數,另一種沒有參數,前者當對應的 notify() 被調用或
者超出指定時間時線程重新進入可執行狀態,後者則必須對應的 notify() 被調用。

詳情請見http://blog.csdn.net/small____fish/article/details/7726468

❷ JAVA的程序設計,設計一個龜兔賽跑的線程類模擬參與賽跑。

感覺挺有趣的,試著寫了個~

public static void main(String[] arg) {
new wugui().run();
new tuzi().run();
}

static class wugui {
final int su = 4;// 烏龜的速度是每秒4米
public static boolean hasEnd = false;// 是否已經跑到終點
public void run() {
new Thread() {
public void run() {
int distance = 0;
while (distance < 100) {
try {
Thread.sleep(1000);
distance += su;
System.out.println("小烏龜跑了" + distance + "米");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
hasEnd = true;
if (tuzi.hasEnd) {
System.out.println("嗚嗚,差一點點就贏了~");
} else {
System.out.println("勝利是屬於有準備的人的,你的自大害了你!-------烏龜贏了");
}
}
}.start();
}
}

static class tuzi {
final int su = 5;// 兔子的速度是每秒5米
public static boolean hasEnd = false;// 是否已經跑到終點
public void run() {
new Thread() {
@Override
public void run() {
int distance = 0;// 跑了多少米
boolean hasXiuXi = false;// 是否休息過
while (distance < 100) {
try {
Thread.sleep(1000);
distance += su;
System.out.println("小兔子跑了" + distance + "米");
if (distance > 50 && !hasXiuXi) {
System.out.println("小兔子累了,決定休息一會兒~");
Thread.sleep((long) (10000 * Math.random()));
System.out.println("小兔子休息夠了,又開始跑了,決一勝負吧!");
hasXiuXi = true;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
hasEnd = true;
if (wugui.hasEnd) {
System.out.println("嗚嗚,早知道就不休息了~");
} else {
System.out.println("哇哈哈,你個戰5渣也想贏我~~做夢去吧!!-------兔子贏了");
}
}
}.start();
}
}

❸ JAVA編程題龜兔賽跑

class Animal {
public double speed;

public void run(int length) {
System.out.println(length/this.speed);
}
}
class Rabbit extends Animal {
Rabbit(int speed) {
super.speed = speed;
}
@Override
public void run(int length) {
System.out.println("Rabbit time = "+length/this.speed +" seconds");
}

}
class Tortoise extends Animal {
Tortoise(int speed) {
super.speed = speed;
}

@Override
public void run(int length) {
System.out.println("Tortoise time = "+length/this.speed +" seconds");
}
}
public class Match {
public static int length = 100;

private static void begin(Rabbit r,Tortoise t) {
r.run(length);
t.run(length);
}

public static void main(String[] args) {
Rabbit r = new Rabbit(20);
Tortoise t = new Tortoise(5);
begin(r,t);
}
}

❹ java演算法題——龜兔賽跑

packagep1;

importjava.util.Scanner;

/**
*龜兔賽跑
*
*@authoryugi
*/
publicclassTortoiseHare
{
publicstaticfinalStringT="T";
publicstaticfinalStringR="R";
publicstaticfinalStringD="D";

privatestaticvoidrace(intv1,intv2,intt,ints,intl,
intstart1,intstart2,ints1,ints2,inttime,
booleanrest)
{
if(
v1<0||v2<0||t<0||s<0||l<0
||v1>100||v2>100||t>300||s>10||l>10000
||l%v1!=0||l%v2!=0
)
{
try
{
thrownewException("參數輸入不合標准!");
}
catch(Exceptione)
{}
}
else
{
//兔子或烏龜已經到達終點
if(s1>=l||s2>=l)
{
if(s1>s2)
{
System.out.println(R);
System.out.println(time+start1);
}
elseif(s1<s2)
{
System.out.println(T);
System.out.println(start2);
}
else
{
System.out.println(D);
System.out.println(start2);
}
return;
}

//兔子開始休息
if(!rest&&s1-s2>=t)
{
rest=true;
time+=s;
}

//兔子休息了s秒(不包括s秒,第s秒開始行動,題目意思不是s秒之後)
if(rest&&start2-start1>=s)
{
//開始跑了(不休息)
rest=false;
}

//兔子不休息的時候跑
if(!rest)
{
start1++;
s1=v1*start1;
}

//烏龜總在跑
start2++;
s2=v2*start2;

//遞歸調用
race(v1,v2,t,s,l,start1,start2,s1,s2,time,rest);
}
}

publicstaticvoidmain(String[]args)
{
System.out.println("輸入只有一行,包含用空格隔開的五個正整數v1,v2,t,s,l,"+
" 其中(v1,v2<=100;t<=300;s<=10;l<=10000且為v1,v2的公倍數)"+
" 退出輸入n/N,否則繼續:");
Scannerscanner=newScanner(System.in);
Stringline=null;
Stringreg="^([1-9]\d*|\d)\s+([1-9]\d*|\d)\s+([1-9]\d*|\d)\s+([1-9]\d*|\d)\s+([1-9]\d*|\d)$";
while(scanner.hasNextLine())
{
line=scanner.nextLine().trim();
if("n".equalsIgnoreCase(line))
{
break;
}
if(!line.matches(reg))
{
System.err.println("輸入不對,重新輸入:");
}
else
{
String[]input=line.split("\s+");
intv1=Integer.parseInt(input[0]);
intv2=Integer.parseInt(input[1]);
intt=Integer.parseInt(input[2]);
ints=Integer.parseInt(input[3]);
intl=Integer.parseInt(input[4]);
race(v1,v2,t,s,l,0,0,0,0,0,false);
System.out.println("退出輸入n/N,否則繼續:");
}
}
scanner.close();
}
}

❺ 用JAVA多線程實現龜兔賽跑

程序如下:

/**
*
* GuiTuSaiPao.java
* @author Antonio
* 2009年9月2日20:16:33
* 實現Runnable介面中的run方法
*
*/
public class GuiTuSaiPao implements Runnable {
private String name;
private int length=0;

public GuiTuSaiPao(){}

public GuiTuSaiPao(String name){
this.name=name;
}

public void run(){
while(true){
//每次停500毫秒
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
//向前跑十米
length+=10;
System.out.println(name+"已跑了"+length+"米.");
//到達終點
if(length>=100){
System.out.println(name+",已經到達終點!");
//結束賽跑,break
break;
}
}
}

public static void main(String[] args) {
GuiTuSaiPao wugui=new GuiTuSaiPao("烏龜");
GuiTuSaiPao tuzi=new GuiTuSaiPao("兔子");
Thread thread=new Thread(wugui);
Thread thread2=new Thread(tuzi);
//啟動線程
thread.start();
thread2.start();

}

}

輸出結果:(不一定每次都一樣!)
烏龜已跑了10米.
兔子已跑了10米.
兔子已跑了20米.
烏龜已跑了20米.
烏龜已跑了30米.
兔子已跑了30米.
兔子已跑了40米.
烏龜已跑了40米.
兔子已跑了50米.
烏龜已跑了50米.
烏龜已跑了60米.
兔子已跑了60米.
烏龜已跑了70米.
兔子已跑了70米.
烏龜已跑了80米.
兔子已跑了80米.
兔子已跑了90米.
烏龜已跑了90米.
兔子已跑了100米.
兔子,已經到達終點!
烏龜已跑了100米.
烏龜,已經到達終點!

完全看rp,這就是線程!

給分吧,哈哈

熱點內容
商湯科技存儲負責人 發布:2025-07-15 01:24:21 瀏覽:251
文件夾如何批量替換文件名 發布:2025-07-15 01:19:15 瀏覽:67
ftp上傳網頁 發布:2025-07-15 01:13:09 瀏覽:181
音樂文件夾圖標 發布:2025-07-15 01:03:41 瀏覽:494
安卓機怎麼反向充電 發布:2025-07-15 01:03:40 瀏覽:500
電腦使用華為雲伺服器 發布:2025-07-15 00:48:10 瀏覽:533
中考應該如何排解壓力 發布:2025-07-15 00:17:54 瀏覽:362
安卓第三方應用軟體是什麼 發布:2025-07-15 00:12:06 瀏覽:149
程序業務配置存儲 發布:2025-07-14 23:52:16 瀏覽:685
csdn編程挑戰 發布:2025-07-14 23:52:08 瀏覽:791