java - 为什么我会收到空​​指针异常?

标签 java string arraylist nullpointerexception

当我在主方法中的任何字符串上调用 calculateStringValue 方法时,它工作得很好。当我尝试调用 printStringsWithValues 方法中的方法时,出现空指针异常。这与 ArrayList 中的字符串有关系吗?

public static void main(String[] args){

    List<String> testList = new ArrayList<>();
    testList.add("apple");
    testList.add("hello");
    printStringsWithValues(testList);}


public static void printStringsWithValues(List<String> strings)
{
    for (String string : strings) {

        System.out.println(string + ",    " + calculateStringValue(string));
    }
}

public static int calculateStringValue(String word)
{
    int value = 0;

    for(int j=0; j < word.length(); j++)
    {
        if(letterValueMap.containsKey(word.charAt(j)))
        {
            value += letterValueMap.get(word.charAt(j));
        }    
        else{
            return -1;
        }
    }
    return value; 
}

最佳答案

使用 letterValueMap 类型的上下文推断,我假设它是 Map<Character, Integer> ,所以我尝试创建这种类型的 map 并分配一些任意值以测试您的代码。

这就是我所做的

首先声明一个 letterValueMap 变量,然后使用静态初始化 block 为其提供一些值

public class NullPointerHandler {

    private static Map<Character, Integer> letterValueMap;
    static {
        letterValueMap = new HashMap<Character, Integer>();
        for (int i = 'a'; i<= 'a'+25; i++) {
            letterValueMap.put((char)i, i);
        }

        for (int i = 'A'; i<= 'A'+25; i++) {
            letterValueMap.put((char)i, i);
        }

        letterValueMap.put(' ', 32);
    }

然后我简单地使用你的代码的其他部分不变(除了我添加了一些用于测试目的的单词)!

        public static void main(String[] args){

            List<String> testList = new ArrayList<String>();
            testList.add("apple");
            testList.add("hello");
            testList.add("ROME");
            testList.add("rome");
            testList.add("Julius Cesar");
            printStringsWithValues(testList);
        }

        public static void printStringsWithValues(List<String> strings)
        {
            for (String string : strings) {

            System.out.println(string + ",    " + calculateStringValue(string));
        }
    }

    public static int calculateStringValue(String word)
    {
        int value = 0;

        for(int j=0; j < word.length(); j++)
        {
            if(letterValueMap.containsKey(word.charAt(j)))
            {
                value += letterValueMap.get(word.charAt(j));
            }    
            else{
                return -1;
            }
        }
        return value; 
    }

}

测试它给了我预期的结果,没有生成任何空指针异常

No null pointer

关于java - 为什么我会收到空​​指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29907995/

相关文章:

ruby - 如何在 Ruby 中转换字符串

java - 当 response.body 为空时,Unirest.delete() 会阻止任何进一步的 Unirest 方法

java - "is prime"算法运行时间

继承中的 Java 内存使用

c - C 中的字符串反转 : What is it I am doing wrong?

string - 给定一个没有空格的短语,添加空格以组成正确的句子

java - java中如何从hashmap中获取arraylist?

java - 如何将排序的Arraylist转换为BST

java - 具有 2 个变量的 CPLEX 项

java - 如何在 Else 条件下动态访问在 if 条件下创建的 ArrayList?