继续运算符不会继续for循环

时间:2018-12-05 09:41:13

标签: java loops

尝试继续迭代if (str1Number == str2Number),但是在增加 i 变量

之后,循环停止
String getOldestVersion (String str1, String str2) {
    String[] str1Arr = str1.split("\\.");
    String[] str2Arr = str2.split("\\.");
    String result = "";
    int str1Number = 0;
    int str2Number = 0;

    for (int i = 0; i < str1Arr.length-1; i++) {
        str1Number = Integer.valueOf(str1Arr[i]);
        str2Number = Integer.valueOf(str2Arr[i]);
        if (str1Number > str2Number) {
            result = str1;
            break;
        } else if (str1Number == str2Number) {
            i++;
            continue;
        } else {
            result = str2;
            break;
        }
    }

    return (result);
} 

4 个答案:

答案 0 :(得分:0)

由于continue操作本身告诉您增加迭代variable - i,因此您无需在那里增加迭代次数。您可以简单地写:

else if (str1Number == str2Number){
      continue;
}

答案 1 :(得分:0)

continue关键字仅将控制发送到循环的顶部(在执行for构造的增量部分之后)。不过,该条件仍会进行评估,因此只有在满足循环条件时,它才会继续循环。

在您的情况下,i < str1Arr.length-1可能为假。

答案 2 :(得分:0)

如评论中所说,“在循环中使用continue作为最后一条语句没有任何意义。”为什么?

因为continue语句用于绕过当前迭代中以下语句的执行,但是在您的情况下,它用作最后一条语句。

如果此条件为真,您似乎想要的是-> if (str1Number == str2Number)然后您不想执行循环中的任何逻辑,在这种情况下,您可以执行以下操作:

for (int i = 0; i < str1Arr.length-1; i++){ // did you mean i < str1Arr.length ? 
       str1Number = Integer.valueOf(str1Arr[i]);
       str2Number = Integer.valueOf(str2Arr[i]);
       if (str1Number == str2Number) // <---- I've moved it to here 
            continue;
       if (str1Number > str2Number) {
             result = str1;
             break;
       } else {
             result = str2;
             break;
       }
}

我还删除了i++;块中的if,因为我“认为”这可能是拼写错误。

答案 3 :(得分:0)

从方法的名称及其返回值来看,您要查找的只是输入字符串,其中具有最低的整数作为其版本标识符。

为此,下面的内容就足够了。完全不需要循环

b

如果您输入的字符串类似public class Foo { public static void main(String[] args) { System.out.println(getOldestVersion("abc.12", "abc.14")); } public static String getOldestVersion(String v1, String v2) { return parseInteger(v1) > parseInteger(v2) ? v2 : v1; } public static int parseInteger(String input) { return Integer.valueOf(input.replaceAll("\\D", "")); } } ,则可以使用

12.13.14.15