-6

我使用 while 循环制作了一个数字游戏,但有人告诉我我应该使用 do while 来代替。我想知道如何将它从这种格式转移到做while。

import java.util.Scanner; 

public class SS_Un6As2 {

   public static void main(String[] args) {

   int guess = 0;

   int randomNumber = (int) (Math.random() *100) +1;

   Scanner scan = new Scanner(System.in);

   boolean running = true;

       while(running){
           System.out.println("Guess your number");
          guess = scan.nextInt();
           if(guess == randomNumber) {
                System.out.println("You are correct");
             break;
           }
           else if (guess > randomNumber){
               System.out.println("Too high.");
           }              
           else if (guess < randomNumber){
               System.out.println("Too low");
          }
           else {
               System.out.println("Try again");

           }
       }

   System.out.println("Thanks for playing");
    }
}
4

4 回答 4

6

解决您的问题

while(running){
       System.out.println("Guess your number");
      guess = scan.nextInt();
       if(guess == randomNumber) {
            System.out.println("You are correct");
         break;
       }
       else if (guess > randomNumber){
           System.out.println("Too high.");
       }              
       else if (guess < randomNumber){
           System.out.println("Too low");
      }
       else {
           System.out.println("Try again");

       }
   }

变成

    do {
       System.out.println("Guess your number");
      guess = scan.nextInt();
       if(guess == randomNumber) {
            System.out.println("You are correct");
         break;
       }
       else if (guess > randomNumber){
           System.out.println("Too high.");
       }              
       else if (guess < randomNumber){
           System.out.println("Too low");
      }
       else {
           System.out.println("Try again");

       }
   }
   while(running);

区别

在 awhile loop中,代码可以运行0-*多次。(0到很多)。在一个do-while循环中,代码可以运行1-*多次。

堆栈溢出精神

试着把这个地方想象成最后的手段。我用谷歌搜索do while loop java,第一个链接就是这个,它完美地解释了你的问题。将来,也许您应该先使用自己的研究方法,然后再依赖我们的方法。

为你编辑

Afor loop是不同的,因为它会运行x时间。像这样:

for(int x = 0; x < 5; x++)
{
   System.out.println("Hello " + x);
}
   /**
    * OUTPUT:
    * Hello 0
    * Hello 1
    * Hello 2
    * Hello 3
    * Hello 4
    */

将 While 循环应用于您的问题

循环中do-while有一个条件语句,在while.

do {
}
while(something is true)

将其视为您的if statement. 现在你希望这是真的,直到这个人猜到了12时间。从逻辑上讲,您想要计算猜测的次数,因此我们将引入一个int被调用的guesses. 而你只想guesses到达12而不是更多,所以这就是我们的出发点。

do {
   // Some code goes here.
   guesses ++;
   // Increase the number of guesses if they got it wrong.
}
while(correct = false && guesses < 12)

我所做的是组成一个名为 的变量correct,它告诉这个人是否正确。guesses每次他们做出错误的猜测时,我都会增加价值。这意味着循环只会在以下情况下停止:

  • 人猜对了
  • 该人进行了 12 次尝试

于 2013-07-20T21:42:04.047 回答
1
  do{
          System.out.println("Guess your number");
          guess = scan.nextInt();

           if(guess == randomNumber) 
           {
               System.out.println("You are correct");
               break;
           }
           else if (guess > randomNumber)
           {
               System.out.println("Too high.");
           }              
           else if (guess < randomNumber)
           {
               System.out.println("Too low");
           }
           else 
           {
               System.out.println("Try again");
           }
    } while(running);
于 2013-07-20T21:41:56.890 回答
1

在你的情况下,这很容易:

       boolean running = true;    
       do {
           System.out.println("Guess your number");
           guess = scan.nextInt();
           if(guess == randomNumber) {
                System.out.println("You are correct");
             break;
           }
           else if (guess > randomNumber){
               System.out.println("Too high.");
           }              
           else if (guess < randomNumber){
               System.out.println("Too low");
           }
           else {
               System.out.println("Try again");

           }
       } while (running)

通常,您可以通过以下方式将任意while 循环转换为do-while 循环

while (condition) {
  ...
}

会变成

if (condition) {
  do {
    ...
  } while (condition)
}
于 2013-07-20T21:42:20.373 回答
1

如果您在break猜测随机数时使用,那么使用运行作为控件来跳出循环是没有意义的。发生这种情况时,我会简单地改变跑步方式。此外,您打印出“再试一次”的行将永远不会运行,因此您可以删除 else 块。它看起来像这样。

do{
          System.out.println("Guess your number");
          guess = scan.nextInt();

          if(guess == randomNumber) 
          {
               System.out.println("You are correct");
               running = false;
          }
           else if (guess > randomNumber)
          {
               System.out.println("Too high.");
          }              
          else if (guess < randomNumber)
          {
               System.out.println("Too low");
          }
} while(running);
于 2013-07-21T01:20:57.887 回答