Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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 当输出应为false时生成true输出的布尔算法_Java_String_Algorithm_If Statement_For Loop - Fatal编程技术网

Java 当输出应为false时生成true输出的布尔算法

Java 当输出应为false时生成true输出的布尔算法,java,string,algorithm,if-statement,for-loop,Java,String,Algorithm,If Statement,For Loop,基本上,我正在尝试创建一个算法来测试给定字符串是否是字符串列表的覆盖字符串。如果一个字符串包含列表中每个字符串的字符,并且保持列表中字符串从左到右的顺序,那么它就是一个覆盖字符串。例如,对于两个字符串“cat”和“dog”,“cadhpotg”将是一个覆盖字符串,但“ctadhpog”将不是一个 我创建了一个算法,但是它在输出为false时生成的输出为true,因为给定的字符串是字符串list1和list2的覆盖字符串,而不是list3的覆盖字符串 任何关于该算法产生错误输出原因的帮助都将不胜感

基本上,我正在尝试创建一个算法来测试给定字符串是否是字符串列表的覆盖字符串。如果一个字符串包含列表中每个字符串的字符,并且保持列表中字符串从左到右的顺序,那么它就是一个覆盖字符串。例如,对于两个字符串“cat”和“dog”,“cadhpotg”将是一个覆盖字符串,但“ctadhpog”将不是一个

我创建了一个算法,但是它在输出为false时生成的输出为true,因为给定的字符串是字符串list1和list2的覆盖字符串,而不是list3的覆盖字符串

任何关于该算法产生错误输出原因的帮助都将不胜感激

public class StringProcessing2 {

//ArrayList created and 3 fields added.
public static ArrayList<String> stringList = new ArrayList<>();
public static String list1 = "phillip";
public static String list2 = "micky";  
public static String list3 = "fad"; 

//Algorithm to check whether given String is a cover string.
public static boolean isCover(String coverString){
    int matchedWords = 0;
    stringList.add(list1);
    stringList.add(list2);
    stringList.add(list3);

    //for-loops to iterate through each character of every word in stringList to test whether they appear in
    //coverString in left to right order.
    for(int i = 0; i < stringList.size(); i++){
    int countLetters = 1;
        for(int n = 0; n < (stringList.get(i).length())-1; n++){
            if(coverString.indexOf(stringList.get(i).charAt(n)) <= (coverString.indexOf((stringList.get(i).charAt(n+1)), 
                    coverString.indexOf((stringList.get(i).charAt(n)))))){
                countLetters++;
                if(countLetters == stringList.get(i).length()){
                matchedWords++;                     
                }                                  
            }               
        }
    }
if(matchedWords == stringList.size()){
    return true;
}
else
    return false;   
}

public static void main(String[] args) {
System.out.println(isCover("phillmickyp"));

}


}
公共类StringProcessing 2{
//创建ArrayList并添加3个字段。
公共静态ArrayList stringList=新建ArrayList();
公共静态字符串list1=“phillip”;
公共静态字符串list2=“micky”;
公共静态字符串list3=“fad”;
//检查给定字符串是否为覆盖字符串的算法。
公共静态布尔isCover(字符串覆盖字符串){
int matchedWords=0;
stringList.add(列表1);
stringList.add(list2);
stringList.add(list3);
//for循环遍历stringList中每个单词的每个字符,以测试它们是否出现在
//封面字符串按从左到右的顺序排列。
对于(int i=0;iif(coverString.indexOf(stringList.get(i).charAt(n))最简单的方法可能是将问题分解为几个部分。让每个函数都尽可能少地完成工作,同时仍能朝着总体目标完成一些工作

为了实现这一点,我建议创建一个helper方法,它接受两个字符串并返回一个布尔值,检查一个字符串是否是另一个字符串的覆盖

boolean isCover(String s, String cover)
{
  int i = 0;
  for(char c : s.toCharArray())
    if((i = cover.indexOf(c, i)) == -1)
      return false;
  return true;
}
然后,一旦您有了能够正确告诉您它是否是有效的覆盖字符串的内容,检查一个字符串是否是多个字符串的有效覆盖就变得简单多了

boolean isCover(List<String> strings, String cover)
{
  for(String s : strings)
    if(!isCover(s, cover))
      return false;
  return true;
}
boolean isCover(列出字符串、字符串封面)
{
用于(字符串s:字符串)
如果(!isCover,cover))
返回false;
返回true;
}

您应该使用IDE进行调试。这将帮助您学习。我还将从一个更容易理解错误的示例开始。可能希望了解这一点。这里有很多回归错误的范围。请考虑示例
phillip
。该示例在
l
之前包含一个
I
,在
l
之后包含一个
l
。想想为什么这会让事情变得更棘手。如果你的代码正确缩进,它会更清楚地表明它没有写出来的意义。它甚至不会编译。@BobTheBuilder感谢你的建议。我对编码相当陌生,当我试图通过选择“调试项目”来调试我的项目时在netbeans上的debug选项卡下,它只输出true而没有错误,我是否正确地调试了我的项目以测试错误?非常感谢您的响应,我以前从未见过创建高级for循环的方法,也没有考虑过将字符串转换为char数组的概念,这两个都是非常有用的提示e以前从未见过高级for循环,请您向我解释第一个布尔值背后的逻辑,以及它如何确保在封面中保持字符从左到右的顺序?这将非常有用。@Mickd94迭代集合,在本例中是数组。for each循环逐个显示数组中的每个值一个,从0开始,在本例中为字符串中的每个字符。int用于保存找到的字母的最后一个位置,因为每个新字母必须超过最后一个,否则封面字符串将出现错误。