我是一个初学者,所以如果我犯的错误是相当明显的,请道歉。
基本上,我试图创建一个算法来测试给定字符串是否是字符串列表的覆盖字符串。字符串是字符串列表的封面字符串,如果它包含从左到右顺序排列的每个字符串中的字符例如,“house”和“hotel”的覆盖字符串是“ahogjutsel”,而非覆盖字符串的示例是“ahogjutsutel”。
我试图创建一个算法,目的是遍历字符串列表中的每个单词,并通过测试索引值来查看它是否按从左到右的顺序出现在封面字符串中当运行我的代码时,我得到一个“java.lang.ExceptionInInitializerRor”。
任何帮助我为什么会得到这个错误或如何改进我的代码将非常有帮助和感激。

public class StringProcessing {

public static ArrayList<String> stringList = new ArrayList<>();
public static int size = stringList.size();
public static String list1 = "cat";
public static String list2 = "dog";
public static String list3 = "bird";

public static String coverString;
public static int coverSize = coverString.length();

//Algorithm to iterate through each word in stringList and test if it appears in the cover string
//by testing index values.
public static boolean isCover(String coverString){
    boolean isCover = false;
for (int i = 0; i < size; i ++){
        for (int j = 0; j<coverSize; j++){

        if (coverString.indexOf(stringList.get(i).charAt(j)) < coverString.indexOf(stringList.get(i).charAt(j+1))){
            return true;
        }
        }
    }
return isCover;
}

public static void main(String[] args) {

    stringList.add(list1);
    stringList.add(list2);
    stringList.add(list3);

    StringProcessing.isCover("cdbaoird");

}
}

最佳答案

这就是问题所在:

public static int coverSize = coverString.length();

它抛出一个NullPointerException,因为它是在初始化类时计算的(因此ExceptionInInitializerError)并且coverString为空。
由于您没有使用staticcoverString变量(您使用的是同名的局部变量),我建议您删除这两行:
public static String coverString;
public static int coverSize = coverString.length();

我建议你用coverSize代替isCover来代替coverString.length()方法。
编辑:
还有一个问题:
public static int size = stringList.size();

此变量在stringList仍然为空时初始化,这意味着您永远不会执行outer for循环,因为size为0。
我建议在声明这些静态变量时不要初始化它们或者更好的方法是,删除这些静态变量并改用局部变量,您可以在需要时对其进行初始化。

07-25 22:59
查看更多