当输出应为false时,布尔算法产生true输出

时间:2015-11-30 16:05:32

标签: java string algorithm if-statement for-loop

基本上我正在尝试创建一个算法来测试给定字符串是否是字符串列表的封面字符串。如果字符串包含列表中每个字符串的字符,则字符串是一个封面字符串,其方式是维护所列字符串的从左到右的顺序。例如,对于两个字符串“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"));

}


}

1 个答案:

答案 0 :(得分:0)

可能最简单的方法是将问题分解成部分。让所有功能尽可能少地完成工作,同时仍然朝着总体目标做好准备。

为了实现这一点,我建议创建一个辅助方法,它接受两个字符串并返回一个布尔值,检查一个String是否是另一个字符串的封面。

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;
}