for-loop没有完全迭代

时间:2015-11-30 00:03:35

标签: java string loops for-loop iteration

我正在尝试创建一个算法,该算法将测试给定字符串是否为字符串列表的封面字符串。字符串是字符串列表的封面字符串,如果它包含从左到右顺序的每个字符串中的字符。例如,“house”和“hotel”的封面字符串将是“ahogjutsel”,非封面字符串的示例将是“ahogjsutel”。

我面临的问题是我的for循环只在返回输出之前完成一次迭代。我试图逐个查看列表中的每个字符串,检查每个字符的索引以确保维持从左到右的顺序。

关于如何修改for-loop以使算法遍历每个字符串中的每个字符的任何建议都会非常有用。

public class StringProcessing {

//Array list to add list of strings for testing.
public static ArrayList<String> stringList = new ArrayList<>();

public static String list1 = "abc";

public static String list2 = "def";  


//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;
    stringList.add(list1);
    stringList.add(list2);
    int size = stringList.size();
    int coverSize = coverString.length();

for (int i = 0; i < (size -1) ; i ++){
        for (int j = 0; j<stringList.get(i).length(); j++){              

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


public static void main(String[] args) {

//For loop only checks if a is before b, then returns true before checking the rest of the characters and strings.
    System.out.println(StringProcessing.isCover("abfdec"));

}
}

1 个答案:

答案 0 :(得分:3)

  1. 在if条件中,您将返回一个值,这将结束您的循环。

  2. 编辑将字符串的Arraylist与字符串进行比较。

    编辑11/30/15:字母顺序用于决定单词是否为封面字符串。

  3. 对方法的更改:

    public class StringProcessing2 {
    public static ArrayList<String> stringList = new ArrayList<>();
    //Negative Case
    public static String list1 = "house";
    public static String list2 = "hotel";  
    
    //Positive Case
    //public static String list1 = "abc";
    //public static String list2 = "def";  
    
    
    public static boolean isCover(String word){
        int matchedWords = 0;
        stringList.add(list1);
        stringList.add(list2);
    
        for(int i = 0; i < stringList.size(); i++){
                if(word.contains(String.valueOf(stringList.get(i)) )){
                    matchedWords++;                                
          }
    }
        if(matchedWords == stringList.size()){
            return true;
        }
        else
            return false;           
    }
    
    
    public static void main(String[] args) {
     System.out.println(isCover("ahogjutsel"));
    }
    }