Java案例分析

【案例8-1】 龟兔赛跑

2024-10-25 17 0

简介 1.任务描述 众所周知的“龟兔赛跑”故事,兔子因为太过自信,比赛中途休息而导致乌龟赢得了比赛。本案例要求编写一个程序模拟龟兔赛跑,乌龟的速度为1米/1000毫秒,兔子的速度为1.2米/1000毫秒,等兔子跑到第600米时选择休息120000毫秒,结果乌龟赢得了比赛。

【案例8-1  龟兔赛跑

【案例介绍】

  1.任务描述

众所周知的“龟兔赛跑”故事,兔子因为太过自信,比赛中途休息而导致乌龟赢得了比赛。本案例要求编写一个程序模拟龟兔赛跑,乌龟的速度为1米/1000毫秒,兔子的速度为1.2米/1000毫秒,等兔子跑到第600米时选择休息120000毫秒,结果乌龟赢得了比赛。

2.运行结果

运行结果如图8-1所示。

upfile

8-1 运行结果

【案例目标】

l  学会分析龟兔赛跑任务实现的逻辑思路。

l  能够独立完成龟兔赛跑程序的源代码编写、编译以及运行。

l  能够在程序中使用多线程完成逻辑思路。

【案例思路】

(1)     查看运行结果分析后,首先创建一个Torist()方法作为乌龟线程的内部类,在Torist()方法中使用sleep模拟乌龟跑步。

(2)     查看运行结果分析后,创建一个Rabbit()方法作为兔子线程的内部类,在Rabbit()方法中使用sleep模拟乌龟跑步。

(3)     最后在main方法中调用Torist()与Rabbit()方法实现龟兔赛跑。

【案例代码】

龟兔赛跑小程序的代码如文件8-1所示。

文件8-1  Race.java

 1   package chapter0801;

 2   public class Race {

 3       private int toristDistance;//乌龟跑过的距离

 4       private int rabbitDistance;//兔子跑过的距离

 5        /**

 6        * 乌龟线程内部类

 7        */

 8       class Torist extends Thread {

 9           @Override

 10         public void run() {

 11             //分析编程代码

 12             for (int i = 1; i <= 800; i++) {

 13                 //判断兔子是否到达终点

 14                 if (rabbitDistance == 800) {

 15                     //当兔子先800的时候 兔子就已经赢了

 16                     System.out.println("兔子赢得了比赛,此时乌龟才跑了" +

 17                     toristDistance + "");

 18                     break;

 19            } else {

 20                     //乌龟开始跑

 21                     toristDistance += 1;

 22                     //判断距离是否是100的倍数

 23                      if (toristDistance % 100 == 0) {

 24                          try {

 25                              if (rabbitDistance == 600) {

 26                                 System.out.println("乌龟跑了" + toristDistance +

 27                                 "米,此时兔子在睡觉");

 28                             } else {

 29                                 System.out.println("乌龟跑了" + toristDistance +

 30                        "米,此时兔子过的距离是" + rabbitDistance + "");

 31                             }

 32                             Thread.sleep(1000);

 33                         } catch (InterruptedException e) {

 34                             e.printStackTrace();

 35                         }

 36                     }

 37                 }

 38             }

 39         }

 40      }

 41   /**

 42    * 兔子线程内部类

 43    */

 44     class Rabbit extends Thread {

 45         @Override

 46         public void run() {

 47             //分析编程代码

 48             for (int i = 1; i <= 800 / 1.2; i++) {

 49                 //判断兔子是否到达终点

 50                 if (toristDistance == 800) {

 51                     //当兔子先1000的时候 兔子就已经赢了

 52                     System.out.println("乌龟赢得了比赛,此时兔子跑了" +  

 53                     rabbitDistance + "");

 54                     break;

 55            } else {

 56                     //乌龟开始跑

 57                     rabbitDistance += 5;

 58                     //判断距离是否是100的倍数

 59                     if (rabbitDistance % 100 == 0) {

 60                         try {

 61                             System.out.println("兔子跑了" + rabbitDistance + "

 62            米,乌龟跑过了" + toristDistance + "");

 63                             if (rabbitDistance == 600) {

 64                                 System.out.println("兔子觉得自己怎么能可以赢得比赛,

 65            所以选择睡一会");

 66                                 Thread.sleep(120000);

 67                             }

 68                             Thread.sleep(1000);

 69                         } catch (InterruptedException e) {

 70                             e.printStackTrace();

 71                         }

 72                     }

 73                 }

 74             }

 75         }

 76     }

 77     //测试

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

 79         //1 外部类实例构建

 80         Race outer = new Race();

 81          //2 乌龟线程实例构建

 82          Rabbit rabbit = outer.new Rabbit();

 83          Torist torist = outer.new Torist();

 84          //3 依次启动

 85          //在现实中 也不可能两个同时跑 这样也是很公平的

 86          rabbit.start();

 87          torist.start();

 88      }

 89  }

8~40行代码是乌龟线程的内部类,使用for循环嵌套Threadsleep()方法模拟乌龟跑步,第44~76行代码是兔子线程的内部类,与乌龟线程的内部类类似,第78~88行代码是启动线程,模拟乌龟兔子赛跑。

 

 

 

 

 


点赞 0

文章评论

欢迎您:

阿文博客

人生的价值,并不是用时间,而是用深度量去衡量的。——列夫·托尔斯泰

69 文章 1879 浏览 0 评论