Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 测试字符串是否为字符串列表的覆盖字符串_Java_String_Algorithm_For Loop_Arraylist - Fatal编程技术网

Java 测试字符串是否为字符串列表的覆盖字符串

Java 测试字符串是否为字符串列表的覆盖字符串,java,string,algorithm,for-loop,arraylist,Java,String,Algorithm,For Loop,Arraylist,我是一个代码初学者,所以如果我犯的错误相当明显,请道歉。 基本上,我正在尝试创建一个算法来测试给定字符串是否是字符串列表的覆盖字符串。如果字符串中包含从左到右顺序排列的每个字符串中的字符,则该字符串是字符串列表的覆盖字符串。例如,“house”和“hotel”的覆盖字符串将是“ahogjutsel”,而非覆盖字符串的示例将是“ahogjsuel” 我试图创建一个算法,目的是遍历字符串列表中的每个单词,并通过测试索引值来测试它是否以从左到右的顺序出现在封面字符串中。运行代码时,我得到一个“java

我是一个代码初学者,所以如果我犯的错误相当明显,请道歉。 基本上,我正在尝试创建一个算法来测试给定字符串是否是字符串列表的覆盖字符串。如果字符串中包含从左到右顺序排列的每个字符串中的字符,则该字符串是字符串列表的覆盖字符串。例如,“house”和“hotel”的覆盖字符串将是“ahogjutsel”,而非覆盖字符串的示例将是“ahogjsuel”

我试图创建一个算法,目的是遍历字符串列表中的每个单词,并通过测试索引值来测试它是否以从左到右的顺序出现在封面字符串中。运行代码时,我得到一个“java.lang.ExceptionInInitializeError”

任何关于我为什么会出现这个错误或者如何改进我的代码的帮助都将是非常有帮助和感激的

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");

}
}
公共类字符串处理{
公共静态ArrayList stringList=新建ArrayList();
public static int size=stringList.size();
公共静态字符串list1=“cat”;
公共静态字符串list2=“dog”;
公共静态字符串list3=“bird”;
公共静态字符串coverString;
public static int coverSize=coverString.length();
//迭代stringList中的每个单词并测试它是否出现在封面字符串中的算法
//通过测试指标值。
公共静态布尔isCover(字符串覆盖字符串){
布尔值isCover=false;
对于(int i=0;i
public static int coverSize = coverString.length();
public static int size = stringList.size();
它抛出一个
NullPointerException
,因为它是在类初始化时计算的(因此
ExceptionInInitializerError
),并且
coverString
为空

由于您没有使用静态
coverString
变量(您使用的是具有相同名称的局部变量),因此我建议您删除以下两行:

public static String coverString;
public static int coverSize = coverString.length();
isCover
方法中不要使用
coverSize
,我建议您将其替换为
coverString.length()

编辑:

还有一个问题:

public static int coverSize = coverString.length();
public static int size = stringList.size();
此变量在
stringList
仍然为空时初始化,这意味着您永远不会执行外部for循环,因为
size
为0


我建议您在声明这些静态变量时不要初始化它们。或者更好的做法是,删除这些静态变量并使用局部变量,您可以在需要时对其进行初始化。

非常感谢您的澄清,在更新这些行并输入应产生真值的字符串后,我的算法是s直到只输出false。我不确定我的for循环是否设置为总是产生false输出。