2012-07-18 30 views
0

我在Java中爲什麼我在此代碼中獲取StringIndexOutOfBoundsException?

Exception in thread "main" 

    java.lang.StringIndexOutOfBoundsException: String index out of range: 0 

這裏得到以下錯誤消息是我的代碼 -

public static void main(String[] args) { 

    double gissade = 70; 
    int input; 
    java.util.Scanner in = new java.util.Scanner(System.in); 

    char spelaIgen = 'j'; 
    // char input2; 

    int antal = 1; 

    while (spelaIgen == 'j') { 
     System.out.print("gissa ett number?"); 
     Input = in.nextInt(); 

     if (input < gissade) { 
      System.out.println("du har gissat för lågt försök igen"); 
      antal++; 
     } else if (input > gissade) { 
      System.out.println("du har gissat för högt försök igen"); 

      antal++; 
     } 
     if (input == gissade) { 
      System.out.println("du har gissat rätt"); 
      System.out.println("efter " + antal + " försök"); 
     } 

     System.out.println("vill du försöka igen? j/n"); 
     char input2 = in.nextLine().charAt(0); 
     // String s1=in.nextLine(); 
     // char c1=s1.charAt(0); 

     // if (input=='n'); 
     // System.exit(0); 

    } 
} 
+1

Ser ut som att input2 blir den tommasträngen,tänkocksåefter om gissade och Input ska ha olika typer - 「Input」äretdåligtvariablenamn,dessa ska ejbörjamed stor bokstav。哦,在代碼中使用英語。 – esej 2012-07-18 12:34:58

回答

4

這是因爲nextInt()不會消耗換行,所以當您試圖得到一個空字符串要做readLine(),並嘗試執行

"".charAt(0); 

它引發你的異常。

嘗試在您的nextInt()之後加入額外的nextLine()

一個好習慣是總是使用nextLine(),然後解析你得到的字符串。爲了讓您的int例如,你可以這樣做:

String intInput; 
do { 
    System.out.print("gissa ett nummer?"); 
    intInput = in.nextLine(); 
while(!intInput.matches("\\d+")); 
int number = Integer.parseInt(intInput); 

這將重複,直到你輸入正確的數字。

相關問題