2013-06-28 69 views
1

我有一個輸入檢查函數,它接受來自用戶的輸入。 (它應該是小寫字母和數字,用於戰艦遊戲)。該功能需要從輸入中刪除空格,小寫字母,並檢查以確保第一個字符是字母,第二個字符是數字。字母必須是從a到g,數字從1到7.我寫了一些代碼,但由於某種原因出錯後,程序結束。它應該說錯誤消息並等待新的輸入。我做錯了什麼?這是我的代碼。java中的輸入檢查方法

 inputLine = is.readLine(); 
     inputLine = inputLine.replaceAll("\\s", ""); 
     inputLine = inputLine.toLowerCase(); 
     if (inputLine.length() == 0) 
      inputLine = null; 
     else if (inputLine.length() > 2) { 
      System.out.println("Invalid input, please enter column (a-g) and row (1-7)"); 
      inputLine = null; 
     } else { 
      if (Character.isLetter(inputLine.charAt(0))) { 
       char i = inputLine.charAt(0); 
       if (i < 'a' || i > 'g') { 
        System.out.println("Invalid input, please enter a letter a to g"); 
        inputLine = null; 
       } 
       int row = i - 'a'; 
       if (Character.isDigit(inputLine.charAt(1))) { 
        int k = (inputLine.charAt(1) - '0'); 
        if (k < 1 || k > 7) { 
         System.out.println("Invalid input, please enter a digit 1 to 7"); 
         inputLine = null; 
        } 
       } 
      } 
     } 
    } catch (IOException e) { 
     System.out.println("IOException: " + e); 
    } 
    return inputLine; 
} 
+0

請正確縮進此代碼。 –

+0

你說你想在發生錯誤之後等待新的輸入,在你的程序中代碼是指向那個需求的?也許一個循環返回到請求新輸入的起點。 – Sello

+0

我該怎麼做?有什麼建議? – mer063

回答

0

下面的代碼塊將拋出空指針異常。如果第一個字符無效且第一個字符if被執行,則inputline被設置爲null。然後在下一個if中,您正在調用inputline(現在爲空)的方法,並引發異常。而不是在做inputline=null;,將其更改爲return null;,並立即返回null。

if (i<'a' || i>'g') 
{ 
    System.out.println("Invalid input, please enter a letter a to g"); 
    inputLine = null; 
} 
int row = i -'a'; 
if (Character.isDigit(inputLine.charAt(1))) 
+0

謝謝。我試着將「inputLine = null」改爲「return null;」 ,但它仍然無法正常工作..程序只是當我輸入錯誤的輸入時退出..例如d23 ..或f5 .. – mer063

+0

它拋出什麼異常? – jlars62