【发布时间】:2015-11-30 16:05:31
【问题描述】:
基本上,我正在尝试创建一个算法来测试给定的字符串是否是字符串列表的覆盖字符串。如果一个字符串包含列表中每个字符串的字符,并且保持列出字符串的从左到右的顺序,那么它就是一个覆盖字符串。例如,对于“cat”和“dog”这两个字符串,“cadhpotg”将是一个覆盖字符串,但“ctadhpog”不会是一个。
我创建了一个算法,但是当输出应该为假时,它会产生输出为真,因为给定的字符串是字符串 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"));
}
}
【问题讨论】:
-
您应该使用 IDE 调试它。它会帮助你学习。我还会从一个更简单的示例开始,以了解问题所在。
-
可能想test drive这个。这里有很多回归错误的范围。
-
想想
phillip这个例子。这包含紧接在l之前的i和 紧接在i之前的l。想想为什么这会让事情变得更加棘手。 -
如果你的代码缩进正确,它会更清楚地表明它没有任何意义。它甚至无法编译。
-
@BobTheBuilder 谢谢你的建议。我对编码很陌生,当我尝试通过在 netbeans 上的调试选项卡下选择“调试项目”来调试我的项目时,它只是输出 true 而没有错误,我是否正确调试我的项目以测试错误?
标签: java string algorithm if-statement for-loop