2016-07-07 11 views
-2

なぜ私のコードが無限ループに巻き込まれるのか分かりません。コードが間違って書かれているのでしょうか? 出力がエラーに無限ループに巻き込まれる

public class HelloWorld 
{ 
    public static void main(String[] args) 
    { 
    //Not sure if it's a better way but I did this way: 
final int TRIES = 5; 
int heads = 0; 
for(int i=0; i<=TRIES; i++) 
{ 
    Scanner input = new Scanner(System.in); 
    System.out.print("Do you wanna continue? Y or N? "); 
    char c = input.next().charAt(0); 
    c = Character.toUpperCase(c); 
    if(c =='y'){ 
    int r = (int) Math.random * 2) + 1; //A number between 1 & 2 

     if(r == 1) 
     { 
     System.out.print("heads"); 
     heads++; 
     } 
     else{ 
     System.out.print("Lost"); 
     } 
    } 

    else{ 
     System.out.print(heads); 
    } 
    } 
} 

}

+2

このコードはコンパイルされません。 –

+0

* "またはインデント" *これは、JVM自体ではなく、StackOverflowユーザーまたはコードの可読性に問題を引き起こします。 – Tom

+0

無限ループはありません。あなたは6回ループして終了します(コードをコンパイルするのに十分なだけ固定した後)。ループインデックスに影響を与えることは何もしていません。何が無限ループだと思いますか? – azurefrog

答えて

1

を与えていない私はどちらかわからないが、私はこのコードは正常に動作すべきだと思う:

import java.util.Scanner; 
import java.util.Random; 
public class HelloWorld { 
    public static void main(String[] args) { 
     //Not sure if it's a better way but I did this way: 
     final int TRIES = 5; 
     int heads = 0; 
     for(int i=0; i<=TRIES; i++) { 
      Scanner input = new Scanner(System.in); 
      System.out.print("Do you wanna continue? Y or N? "); 
      char c = input.next().charAt(0); 
      c = Character.toUpperCase(c); 
      if(c =='Y') { 
       int r = (int) (Math.random() * 2) + 1; //A number between 1 & 2 
       if(r == 1) { 
        System.out.println("heads"); 
        heads++; 
       } else { 
        System.out.println("Lost"); 
       } 
      } else { 
       System.out.print(heads); 
      } 
     } 
    } 
} 
+0

それはありません。 「N」に答えると、「あなたは続行しますか?」と依頼し続けるでしょう。繰り返す。 ---また、あなたはあなたが何を変えたのか、なぜそれをやったのか説明しませんでした。つまり、その答えはそれほど有用ではありません。このコードには少なくとも2つの問題が残っています。 – Andreas

+0

ありがとうalot ..コンパイル..私のエラーは1つの余分なカージングブレース..私も多くを助けた..私も投票したuを –

1
public class HelloWorld 
{ 
    public static void main(String[] args) 
    { 
     //Not sure if it's a better way but I did this way: 
     final int TRIES = 5; 
     int heads = 0; 
     for(int i=0; i<=TRIES; i++) 
     { 
      Scanner input = new Scanner(System.in); 
      System.out.print("Do you wanna continue? Y or N? "); 
      char c = input.next().charAt(0); 
      c = Character.toUpperCase(c); 
      if(c =='Y'){ 
       int r = (int) (Math.random() * 2) + 1; //A number between 1 & 2 

       if(r == 1) 
       { 
        System.out.println("heads"); 
        heads++; 
       } 
       else{ 
        System.out.println("Lost"); 
       } 
      } 

      else{ 
       System.out.println(heads); 
       break; 
      } 
     } 
    } 

} 

私はわかりませんよあなたは達成しようとしていますが、このコードはコンパイルされ、さらに続行したくないと言ったときにループを停止します。 breakを使うのはベストプラクティスではありませんが、動作します。あなたのTRIES変数によって与えられた制限であるため、最大5回までしか聞こえません。あなたが入力した文字を回した

boolean stop = false; 
    while(!stop) 
    { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Do you wanna continue? Y or N? "); 
     char c = input.next().charAt(0); 
     c = Character.toUpperCase(c); 
     if(c =='Y'){ 
      int r = (int) (Math.random() * 2) + 1; //A number between 1 & 2 

      if(r == 1) 
      { 
       System.out.println("heads"); 
       heads++; 
      } 
      else{ 
       System.out.println("Lost"); 
      } 
     } 

     else{ 
      System.out.println(heads); 
      stop=true; 
     } 

注:ユーザーが継続したくない場合、あなたはそのようなブール変数としばらく、使用したいmigth停止し、無限ループを実行する場合大文字に変換し、それを 'y'と比較すると、常にfalseになります。

+0

私はこの問題を解決するには2つの方法を使用して好きです..ありがとうたくさん!残念ながら私は1つだけの回答を選択する必要があります.. –