尝试继续迭代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);
}
答案 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