2016-10-22 34 views
-1

我的代碼有什麼問題?我正在嘗試請求提示用戶輸入一個數字,如果它不在1和6之間,或者它應該表示無效的數字並提示另一次嘗試。用戶可能只有3次嘗試。做循環試try catch

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編譯器非常擅長給你提供特定的消息,告訴你你做錯了什麼;但更多凌亂的代碼,你得到更難!

並記錄:SO不是一個「遠程」編譯器服務,您應該使用它來讓您的雜亂代碼編譯!

+0

*對於記錄:SO不是一個「遠程」編譯器服務,您應該使用它來讓您的雜亂代碼編譯!*這很有趣,因爲您這樣做了。這些問題有重複,不需要再回答。 – Tunaki