2016-10-22 6 views
-1

私のコードに何が問題なのですか?私は1から6までの間に番号を入力するようユーザーに要求するように要求しているか、無効であると言い、別の試行を促す番号を入力しようとしています。ユーザーは3回しか試行できません。do while try catch with loop

import java.util.Scanner; 

public class Game { 

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int[] numbers = new int[6]; 

    System.out.println("Enter a number on a die from 1-6:"); 
    String dieinput = input.next(); 
    int invalidcount = 0; 
    System.out.println("Your number is: " + dieinput); 



    do{ 
    try 
    { 
     // the String to int conversion 
     int dienum = Integer.parseInt(dieinput.trim()); 
     int dienumOE = 0; 
     int count=0; 

     //test number input 
     if ((dienum >= 1) && (dienum<= 6)) 
      System.out.println("number is " + dienum + oddoreven(dienum)); 
     else 
      System.out.println("Invalid number, please enter a number 1-6"); 
      count++; 
      System.out.println("Count" + count); 
     } 
    catch (NumberFormatException nfe){ 
     System.out.println("Invalid number, please enter a number 1-6"); 
     System.out.println("Count" + count); 
     } 
    while (count <= 3 && count >=0); 
    } 
    } 





// Check if odd or even 
public static String oddoreven(int num) { 
    String result; 

    if (num % 2 == 0) 
     result = "even"; 
    else 
     result = "odd"; 
    return result; 
} 
} 
+1

無限ループ。各ループの開始時にカウントを0に設定しています。以下の答えを見てください。しかし、この変数をループ内でゼロに設定しないでください。 –

+0

完全な例を投稿してください - あなたのソースコードはコンパイルされません。 – GhostCat

+0

私はintカウンタを変更しましたが、do-whileはまだ正常に動作しています。提案? –

答えて

2

あなたの問題は、「間違った」スコープです:あなたはブロックを試してみてくださいの範囲内で宣言されているキャッチブロック内で変数を使用することはできません!

つまり、次のものが必要です。

int counter = 0; 
try { ... 
} catch (... 

あなたは試してみるとキャッチ両方をカウンタを使用したい場合は!

「ルール」は非常に単純です:変数は、「ブロック」、それはである実際にあなたのコードをコンパイルすることができなく

を閉じている}それまでにのみ表示されます! にコードの100行を書き、その後は、コンパイラを実行していない:

ので、本当レッスンはこちらよりのようなものです。できるだけ少ない行だけ書く - あなたが思うたびに:これはコンパイルするには "十分"なので、コンパイルをコンパイルしてください。そしてあなたに報告されたエラーを修正してください。 Javaコンパイラは、あなたが間違っていたことを伝える具体的なメッセージを与えるのに本当にうってつけです。しかし、さらにあなたが置く汚いコードは、取得するのは難しい!

そして、記録のために:あなたはあなたの面倒なコードをコンパイルするために使用すべき "リモート"コンパイラサービスではありません!

+0

*そして記録のために:SOはあなたの面倒なコードをコンパイルするために使うべき "リモート"コンパイラサービスではありません!これらの質問が重複しているため、再度回答する必要はありません。 – Tunaki