2014-04-01 72 views
3

我正在計算字符串中元音的數量。問題是,它正確編譯,但是當我運行它的命令行窗口說「異常在線程‘主’顯示java.lang.NullPointerExceptionCountVowels.main(CountVowels.java:25如何解決空指針異常?

import javax.swing.JOptionPane; 

public class CountVowels 
{ 
    public static void main(String[] args) 
    { 
     String thingy = JOptionPane.showInputDialog("Please enter a sentence, and I will count the vowels."); 
     int count = 0; 

     char[] chars = new char[thingy.length()]; 
     String[] letters = new String[thingy.length()]; 

     for(int i = 0; i < thingy.length(); ++i) 
     { 
      chars[i] = thingy.charAt(i); 
     } 

     for(int i = 0; i < letters.length; ++i) 
     { 
      letters[i].valueOf(chars[i]); 
     } 

     for(int i = 0; i < chars.length; ++i) 
     { 
      if(letters[i].equals("a") || letters[i].equals("e") || letters[i].equals("i") || letters[i].equals("o") || letters[i].equals("u")) 
      { 
       ++count; 
      } 
     } 
     System.out.println("There are " + count + " vowels in the string + " + thingy); 
    } 
} 

是什麼原因導致這個問題,我怎麼能解決這個問題,我怎樣才能防止它在未來再次發生

線25是我的if語句:

if(letters[i].equals("a") || letters[i].equals("e") || letters[i].equals("i") || letters[i].equals("o") || letters[i].equals("u")) 
       { 
        ++count; 
       } 
+1

而且這是第25行? –

+0

這行代碼並沒有做你認爲它是:'letters [i] .valueOf(chars [i]);' – GriffeyDog

回答

3

letters[i].valueOf(chars[i]); 

什麼都不做。如果將其更改爲

letters[i] = String.valueOf(chars[i]); 

您將設置letters中的所有元素爲相應的字符。這應該修復你的NullPointerException

您也可以通過使用正則表達式有點掛羊頭賣狗肉的節省了大量的代碼:

import javax.swing.JOptionPane; 

public class CountVowels 
{ 
    public static void main(String[] args) 
    { 
     String input = JOptionPane.showInputDialog("Please enter a sentence, and I will count the vowels."); 
     String[] letters = input.split("(?<=.)(?=.)"); 

     int count = 0; 

     for(int i = 0; i < letters.length; i++) 
     { 
      if(letters[i].matches("[aeiou]")) 
      { 
       count++; 
      } 
     } 
     System.out.println("There are " + count + " vowels in the string + " + input); 
    } 
} 
+0

真棒,這工作。謝謝! – Beninemm

0

陣列letters爲空。它包含null值。

+0

for(int i = 0; i Beninemm

+0

@Beninemm不,它沒有。 –

+0

不可以。您可以在調試模式下檢查它。 – PetrS

1

嘗試使用這個:

letters[i] = "" + chars[i]; 

而且,你不需要去通過所有創建新的數組從字符串到字符串到字符串的麻煩。閱讀關於從字符串(這樣你就可以只檢查在thingy對象的字母,而無需創建多個陣列)

Get string character by index - Java

+0

感謝您的信息,這肯定會節省我一些時間 – Beninemm

0

。在你的代碼誤訪問每個字符的信息這個問題。當您使用字符串操作時,應該爲返回字符串進行深入處理。請參閱docs

letters [i] = String.valueOf(chars [i]);

1

試試這個:

 import javax.swing.JOptionPane; 
     class CountVowels 
    { 
     public static void main(String[] args) 
    { 
     String thingy = JOptionPane.showInputDialog("Please enter a sentence, and I will count the vowels."); 
    int count = 0; 
    char[] c=thingy.toCharArray(); 
    for(int i = 0; i < c.length; ++i) 
    { 
     if(c[i]=='a' || c[i]=='e' || c[i]=='i' || c[i]=='o' || c[i]=='u') 
     { 
      ++count; 
     } 
     } 
    System.out.println("There are " + count + " vowels in the string + " + thingy); 
    } 
} 

輸出: enter image description here