如何修复空指针异常?

时间:2014-04-01 15:24:57

标签: java

我正在尝试计算字符串中的元音数量。问题是它正确编译,但是当我运行它时,命令窗口会显示"线程'主要'中的异常。位于 CountVowels.main的 java.lang.NullPointerException 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;
                }

5 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:1)

请尝试使用此代码:

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

此外,您不需要经历创建从String到Chars到String的新数组的所有麻烦。阅读此问题以获取有关从String访问每个字符的更多信息(这样您就可以检查thingy对象中的字母而无需创建更多数组)

Get string character by index - Java

答案 2 :(得分: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

答案 3 :(得分:0)

数组letters为空。它包含null个值。

答案 4 :(得分:0)

您的代码中存在错误。当您使用String进行操作时,应该使用返回字符串进行进一步处理。请参阅docs

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