私はnullポインタの例外を取得し続けていると私は理由を把握することはできません。私はいくつかのテストを実行している、それは私がPangrams main()からそれを実行するとき、私はnullポインタの例外を得るときですが、私は何も問題は全くありません。私は以下のコード、テスト、スタックトレースを含んでいます。どんな助けでも大歓迎となり、事前に感謝します!ここで私はテストを実行するとNullPointerExceptionを見つけることができません
import java.util.Map;
import java.util.TreeMap;
public class Pangrams {
private static TreeMap<Character, Integer> letterCount;
public static void main(String[] args) {
Pangrams pan = new Pangrams();
System.out.println(pan.isPangram("the quick brown fox jumps over the lazy dog"));
pan.getLetterCount();
}
public Pangrams() {
letterCount = new TreeMap<>();
populateMap();
}
public static boolean isPangram(String text) {
if(text.length() < 26) return false;
addToMap(text);
for(Map.Entry<Character, Integer> entry : letterCount.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
if(!(entry.getValue() >= 1)) {
return false;
}
}
return true;
}
public static void populateMap() {
for(char x = 'a'; x <= 'z'; x++) {
letterCount.put(Character.valueOf(x), 0);
}
}
public static void addToMap(String text) {
char[] textArray = text.toLowerCase().replace(" ", "").toCharArray();
// System.out.println(textArray.length);
for(char letter : textArray) {
if(letterCount.containsKey(letter)) {
int count = letterCount.get(letter);
letterCount.put(letter, ++count);
System.out.println(letterCount.get(letter));
}
else if(!Character.isWhitespace(letter)) {
letterCount.put(letter, 1);
}
}
}
public static void getLetterCount() {
for(Map.Entry<Character, Integer> entry : letterCount.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
テストです:ここでは
import org.junit.Test;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
public class PangramTest {
@Test
public void emptySentence() {
assertFalse(Pangrams.isPangram(""));
}
@Test
public void testLowercasePangram() {
assertTrue(Pangrams.isPangram("the quick brown fox jumps over the lazy dog"));
}
@Test
public void missingCharacterX() {
assertFalse(Pangrams.isPangram("a quick movement of the enemy will jeopardize five gunboats"));
}
@Test
public void mixedCaseAndPunctuation() {
assertTrue(Pangrams.isPangram("\"Five quacking Zephyrs jolt my wax bed.\""));
}
@Test
public void nonAsciiCharacters() {
assertTrue(Pangrams.isPangram("Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich."));
}
}
は、完全なスタックトレースです:
java.lang.NullPointerException
at Pangrams.addToMap(Pangrams.java:47)
at Pangrams.isPangram(Pangrams.java:24)
at PangramTest.testLowercasePangram(PangramTest.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:253)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
、これ' letterCount'がインスタンス化されることはありません。 –
サイドノート:あなたはあなたの**コア**メソッドを公開するだけです。あなたはあなたが外から呼び出されたいものです。しかし、あなたのメソッドのほとんどが公開されているので、テストを書くことも検討してください。あなたの "全体"ロジックが非常に複雑でテストでもバグを理解するのに役立たない場合、小さなユニット(他のメソッドのようなもの)をテストして、どれくらいうまく動作するかを確認してください。もう一つは、静的なものと非静的なものを混在させることです。それを避けてください。非静的メソッドで静的フィールドを操作することはめったにありません。 – GhostCat
Pangrams.isPangramこれは静的として呼び出すので、@ JonnyHenlyはTreeMap <文字、整数> letterCountがインスタンス化されていないと言っています – striker