2013-01-13 111 views
1

我不太確定,問題在哪裏。 代碼工作正常,但是,當我鍵入幾句話,即:擺脫數組中的null。 Java

這表明我:

null。

我的猜測是在字符串k或數組大小。 所以我想,我需要以某種方式輸入「結束」的工作,對嗎?

public static void main(String[] args) { 
    Scanner sc = new Scanner(System. in); 


    String type; 
    String word; 
    String words[] = new String[100]; 
    int i = 1; 

    String k = "end"; 
    System.out.println("Type a word: "); 
    word = sc.next(); 


    while (word.compareToIgnoreCase(k) != 0) { 

    words[i] = word; 
    i = i + 1; 
    word = sc.next(); 
    } 

    System.out.println("What type A,B,C:"); 
    typ = sc.next(); 

    if (typ.equals("B")) { 
    int lenght = words.length; 
    lenght = i + 1; 
    i = 1; 
    while (i < lenght) { 
     System.out.print(words[i]); 
     System.out.println(); 

     i = i + 1; 
    } 
    } 
} 
} 
+0

當然,還有兩個更多的選擇來設置文本格式A和C. 但我想現在把重點放在「空」的東西。 – Fokuz

+2

一個建議:在發佈'int lenght = words.lenght;'什麼都不做(在下一行覆蓋''lenght'''''''''''''''))之前嘗試清理代碼。正確的拼寫是「長度」(儘管這與編程無關) – SJuan76

回答

2

你只需要到最後一個字添加到陣列中:

while (word.compareToIgnoreCase(k) != 0) { 

    words[i] = word; 
    i = i + 1; 
    word = sc.next(); 
} 
words[i] = word; // Add the last item entered 

順便說一句,我會用List<String>代替String[],並呼籲words.add(word)建議。首先,這意味着您不必跟蹤您的索引(i)。更重要的是,這個列表可以隨你喜歡,並且只會使用盡可能多的內存。

+0

真棒,謝謝! 我知道,那很簡單。 :] – Fokuz

0

數組從「0」開始,而不是「1」。

// Better 
int i = 0 
... 
while (word.compareToIgnoreCase(k) != 0) { 
    words[i++] = word; 
    word = sc.next(); 
} 

i = 0; 
while (i < length) { 
    System.out.print(words[i++]); 
    System.out.println(); 
} 

有幾件事情你的邏輯我不明白,但我想你可能想每次添加一個「單詞」。

而且我幾乎可以肯定你可能想從索引「0」開始,並停在「長度爲1」。因爲「數組[長度]」和所有後續元素將默認爲「空」。

0

你的問題是,在你添加東西到數組的第一個循環中,你在完成賦值後增加計數器。這意味着您的索引在末尾表示長度+1。

因此,您從1開始(儘管Java數組從0開始,所以您從不爲數組中的第一個條目賦值,也不確定這是故意的)。

因此,當你添加貓索引變爲2

再往下你然後加1後,長度,與

lenght = I + 1;

最簡單的答案是刪除這一行,儘管還有很多其他的重構因素可以減少代碼量。

0
String type; 
    String word; 
    String words[] = new String[100]; 
    int i = 0; 

    String k = "end"; 
    System.out.println("Type a word: "); 
    word = sc.next(); 
words[i] = word; 

    while (word.compareToIgnoreCase(k) != 0) {  
    i = i + 1; 
    word = sc.next(); 
    words[i] = word; 
    } 

    System.out.println("What type A,B,C:"); 
    typ = sc.next(); 

    if (typ.equals("B")) { 
    int lenght = words.length; 
    i = 0; 
    while (i < lenght-1) { 
     System.out.print(words[i]); 
     System.out.println(); 

     i = i + 1; 
    } 
    } 
} 

}