2016-08-22 8 views
-11

これは自分の知識をテストするためのランダムな方程式をユーザに与え、エラーは表示されないようにするためのコードです。コードを実行すると、Eclipseでコンパイルされません。私がintelliJ Ideaで実行すると、コードは表示されず、何もできません。私のJavaコードをコンパイルするには?

package logical; 
import java.util.Random; 
import java.util.Scanner; 

public class logical { 
@SuppressWarnings("resource") 
public static void main (String args[]){ 

    int qn1, qn2; //Numbers for the question 
    int ua; //The users answer 
    int answer; //The actual answer 
    int counter = 0; //Controls the number of questions that can be answered 
    int tally = 0; //Number of correct responses 
    String again = "y"; 
    Scanner in = new Scanner(System.in); 
    Random dice = new Random(); 
    while(again == ("y") || again == ("Y")){ 
    for(counter=1;counter>=5;counter++){ 
    qn1 = 1+dice.nextInt(40); 
    qn2 = 1+dice.nextInt(40); 
    answer = qn1 + qn2; 
     System.out.printf("What is %d + %d",qn1,qn2); 
     ua = in.nextInt(); 
     if(ua == answer){ 
      System.out.println("That is correct!"); 
      counter++; 
      tally++; 
     } 
     else{ 
      System.out.println("Sorry, that is wrong! The correct answer is " + answer); 
     } 
     System.out.println("Would you like to try again?(Y/N)"); 
     again = in.next(); 
     if(again=="y" || again=="Y"){ 
      counter=0; 
     }else { 
      System.out.println("Thanks for playing your results were " + tally + " out of 5"); 
     } 
     } 

    } 
    System.out.println("Thanks for taking the math challenge!"); 
} 
} 
+8

あなたのコンパイルエラーメッセージは.....ですか? –

+0

ここで論理エラーが発生しました 'again ==(" y ")' == 'を使用しないで' equals() 'メソッドを使って文字列を比較する必要があります –

+3

中括弧のそれらの醜いコメントを削除してください。私はあなたが大学で何を教えていたか気にしないので、読むのが難しくなります。 – byxor

答えて

0

コードは無限ループです。なぜならcounter開始1で、

for(counter=1;counter>=5;counter++){ 

すぐに終了し、あなたはそれを期待している:whileループ内の唯一のものである、そして、この

while(again == ("y") || again == ("Y")){ 


これは、真のアウトを開始します

これを実行すると、whileループは何もせずに永遠にループします。

  1. .equals.equalsIgnoreCase、ない==で文字列を比較します。

  2. forループを修正しました。

  3. コードを正しくインデントします。

0

問題は、ループ

for(counter=1;counter>=5;counter++){...} 

counter=0が初期化されるためです。しかし、ループは、カウンタ値が5または5を超えた後にのみ実行されるため、ループに入りません。しかし、あなたはループ内の "カウンタ"値を増やしていました。したがって、出力は印刷されません。

0

コード内の真犯人は以下の通りです: - 私は言及したいと思います

String again = "y"; 
     ////////DECLARATION/////////////// 
     Scanner in = new Scanner(System.in); 
     Random dice = new Random(); 
     ////////NOW THE MAGIC HAPPENS///// 
     while(again == ("y") || again == ("Y")){ 
      for(counter=1;counter>=5;counter++){ 

いくつかのポイント:

  1. ブール条件ループを変えるチャンスを得ることはありませんしながら、下。
  2. forループの下のカウンタ変数は常に失敗します。
  3. したがって、実行はwhileループとforループの間に期待し続け、決してプロセスを終了しません。

これがわかります。

関連する問題