2015-11-06 3 views
1

Я пытаюсь преобразовать do-while while while и программу даже скомпилировать, но ничего не происходит. Оригинал сделай, а код цикла:Попытка конвертировать do-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); 
    } 
} 

Как это выглядит после того, как я пытался сделать в то время как цикл из делать-то время цикла:

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(); 
} 

ВЫВОД:

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"; 
... 

и попросить ввода с клавиатуры в вашем время цикла:

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

Смежные вопросы