2015-11-06 62 views
1

我试图转换同时while循环和程序甚至编译,但没有任何反应。 原始do-while循环代码:尝试转换同时循环到while循环

import java.util.Scanner; 

public class CoinFlip 
{ 
    public static void main(String[] args) 
    { 
     Scanner keyboard = new Scanner(System.in); 

     String coin, again; 
     int flip, streak = 0; 

     do 
     { 
      flip = 1 + (int)(Math.random()*2); 

      if (flip == 1) 
       coin = "HEADS"; 
      else 
       coin = "TAILS"; 

      System.out.println("You flip a coin and it is... " + coin); 

      if (flip == 1) 
      { 
       streak++; 
       System.out.println("\tThat's " + streak + " in a row...."); 
       System.out.print("\tWould you like to flip again (y/n)? "); 
       again = keyboard.next(); 
      } 
      else 
      { 
       streak = 0; 
       again = "n"; 
      } 
     } while (again.equals("y")); 

     System.out.println("Final score: " + streak); 
    } 
} 

如何它看起来像后,我试图做while循环从do-while循环:

import java.util.Scanner; 

public class CoinFlip2 
{ 
    public static void main(String[] args) 
    { 
     Scanner keyboard = new Scanner(System.in); 

     String coin, again; 
     int flip, streak = 0; 
     again = keyboard.next(); 
     //flip = 1 + (int) (Math.random()*2); 

     while (again.equals("y")) 
     { 
      flip = 1 + (int) (Math.random()*2); 
      if (flip == 1) 
      { 
       coin = "HEADS"; 
      } 
      else 
      { 
       coin = "TAILS"; 
      System.out.println("You flip a coin and it is..." + coin); 
      } 
      if (flip == 1) 
      { 
       streak++; 
       System.out.println("\tThat's " + streak + " in a row...."); 
       System.out.print("\tWould you like to flip again (y/n)? "); 
       //again = keyboard.next(); 
      } 
      else 
      { 
       streak = 0; 
       again = "n"; 
      } 
      System.out.println("Final score: " + streak); 
     } 
    } 
} 

代码编译没有问题,但我看到后运行空白输出它。

+2

DO-while循环保证至少运行一次,而循环都没有。你得到一个空白的输出,因为你正在等待第11行的键盘输入 –

+0

你不能。 'do-while'loops和'while'循环是不可互换的,至少没有额外的布尔变量。你为什么要尝试? – EJP

回答

2

那是因为你从来没有初始化again变量y,所以它永远不匹配状态,以进入while

public static void main(String[] args) { 
    Scanner keyboard = new Scanner(System.in); 

    String coin, again = "y"; 
    int flip, streak = 0; 
    // flip = 1 + (int) (Math.random()*2); 

    while (again.equals("y")) { 
     flip = 1 + (int) (Math.random() * 2); 
     if (flip == 1) { 
      coin = "HEADS"; 
     } else { 
      coin = "TAILS"; 
      System.out.println("You flip a coin and it is..." + coin); 
     } 
     if (flip == 1) { 
      streak++; 
      System.out.println("\tThat's " + streak + " in a row...."); 
      System.out.print("\tWould you like to flip again (y/n)? "); 
      again = keyboard.next(); 
      // again = keyboard.next(); 
     } else { 
      streak = 0; 
      again = "n"; 
     } 
    } 
    System.out.println("Final score: " + streak); 
    keyboard.close(); 
} 

OUTPUT:

That's 1 in a row.... 
Would you like to flip again (y/n)? y 
You flip a coin and it is...TAILS 
Final score: 0 
1

初始化您again"y"

String coin, again; 
int flip, streak = 0; 
again = "y"; 
... 

,并要求在while循环的键盘输入:

if (flip == 1) 
{ 
    streak++; 
    System.out.println("\tThat's " + streak + " in a row...."); 
    System.out.print("\tWould you like to flip again (y/n)? "); 
    again = keyboard.next(); 
} 
+0

谢谢那块岩石! 我理解正确,如果 again = keyboard.next(); 在这里被评论,然后程序总是自动为我输入“y”? – Anonymous

+0

那么它不会再''再次'所以你会遇到一个无限循环! – ParkerHalo