当我在主方法中的任何字符串上调用 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;
}
}
测试它给了我预期的结果,没有生成任何空指针异常
关于java - 为什么我会收到空指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29907995/