2013-10-24 37 views
0

這是一個存儲10個唯一字符串的程序。如果用戶輸入數組中已經存在的字符串,用戶將會收到錯誤。我的代碼對於我輸入的第一個字符串非常適用,但在此之後拋出異常,我不知道爲什麼。我如何解決這個問題並使其工作?Java - 在for循環中使用「continue」時未處理的異常錯誤?

P.S.我不想使用Set。我想用數組來完成它。

編輯:錯誤名稱:異常線程 「main」 顯示java.lang.NullPointerException Java結果:1個

感謝。

public static void main(String[] args) { 
     Scanner keyboard = new Scanner(System.in); 
     int stringNumber = 0; 
     String[] stringArray = new String[10]; 

     for (int i = 0; i <= stringArray.length; i++) { 

      boolean itemExists = false; 

      out.println("\nEnter a string"); 
      String input = keyboard.next(); 

      if (i > 0) { 
       for (int j = 0; j < stringArray.length; j++) { 
        if (stringArray[j].equalsIgnoreCase(input)) { 
         itemExists = true; 
         out.println("Item \"" + input + "\" already exists."); 
         break; 
        } else { 
         continue; // Unhandled exception error. If I don't have "continue" here, the program doesn't work properly after the first number. 
        } 
       } 
      } 

      if (itemExists == false) { 
       stringArray[stringNumber] = input; 
       out.println("\"" + stringArray[stringNumber] + "\"" + " has been stored."); 
      } else { 
       out.println("Try again."); 
      } 

      PrintArray(stringArray); 
      stringNumber++; 

     } 

    } 

    public static void PrintArray(String[] stringArray) { 

     for (int i = 0; i <= 9; i++) { 
      if (stringArray[i] == null) { 
       out.print(" "); 
      } else { 
       out.print("\nYour strings:"); 
       out.print(" " +stringArray[i] + " "); 
      } 
     } 
    } 
+1

它是一個異常或編譯器錯誤?在這兩種情況下,請發佈堆棧跟蹤或完成錯誤消息。 –

+0

在原帖子中添加錯誤消息 – Gregg1989

+0

您因爲邏輯複雜而迷路,試圖將其拆分爲不同的方法。 –

回答

1

你的問題是這個if (stringArray[j].equalsIgnoreCase(input)) {,你refern爲null元素,你數組不包含什麼。

就可以解決這個

if (input.equalsIgnoreCase(stringArray[j])) {

現在你比較值agains可能是空的數組項。

檢查示例代碼

private final static Scanner keyboard = new Scanner(System.in); 
    private final static String[] stringArray = new String[10]; 

    public static void main(String[] args) { 

     int stringNumber = 0; 
     for (int i = 0; i < stringArray.length; i++) { 

      System.out.println("\nEnter a string"); 

      String input = readNextItem(); 

      if(isInputExist(input)) { 
       System.out.println("Item \"" + input + "\" already exists."); 
       System.out.println("Try again."); 
      } else { 
       stringArray[stringNumber++] = input; 
       System.out.println("\"" + input + "\"" + " has been stored."); 
      } 

      printArray(stringArray); 
     } 

    } 

    private static String readNextItem() { 
     return keyboard.next(); 
    } 

    private static boolean isInputExist(String input) { 

     for(String stored : stringArray) { 
      if(input.equalsIgnoreCase(stored)) { 
       return true; 
      } 
     } 
     return false; 
    } 
0

由於您正在訪問空數組,因此您將收到NullPointerException。在第二個循環中,您正在遍歷整個stringArray數組,但是您插入了第一個i元素。

更改此:

for (int j = 0; j < stringArray.length; j++) { 

與此:

for (int j = 0; j < i; j++) { 

附: 我建議你使用Set來代替數組。

這裏有集版本:

int numStrings = 10; 
    Set<String> inserted = new HashSet<String>(); 

    while(inserted.size()<=numStrings) { 
     out.println("\nEnter a string"); 
     String input = keyboard.next(); 
     if (inserted.contains(input)) { 
      out.println("Item \"" + input + "\" already exists."); 
      out.println("Try again."); 
     } else { 
      inserted.add(input); 
      out.println("\"" + input + "\"" + " has been stored."); 
     } 
    } 

    out.println(inserted); 
0

問題是這樣的內循環:

  for (int j = 0; j < stringArray.length; j++) { 
       if (stringArray[j].equalsIgnoreCase(input)) { 
        itemExists = true; 
        out.println("Item \"" + input + "\" already exists."); 
        break; 
       } else { 
        continue; // Unhandled exception error. If I don't have "continue" here, the program doesn't work properly after the first number. 
       } 
      } 

它不是繼續聲明引起該問題,它是你調用

stringArray[j].equalsIgnoreCase(input) 

in if - stringArray [j]尚未填充與一個字符串,它會導致NullPointerException。你可以只扭轉式:

input.equalsIgnoreCase(stringArray[j]) 

(這是假設「輸入」從來都不是NULL)