我正在编写一个方法,它将字符串数组和整数n
作为输入。该方法将检查直到n
长度的字符串是否按字典顺序排列。
我的代码为每个输入返回false,我无法找出原因!
public static boolean isStringArraySorted(String[] strs, int n) {
boolean answer=true;
for (String word : strs) {
for(int i=1; i<strs.length; i++) {
String check1 =word.substring(0,n);
String check2= strs[i].substring(0,n);
if ( check1.compareToIgnoreCase(check2) > 0 )
return false;
}
}
return answer;
}
答案 0 :(得分:1)
将循环更改为:
for (int j=0; j<strs.length; j++){
for(int i=j+1; i<strs.length; i++){
String word = strs[j];
String check1 =word.substring(0,n);
String check2= strs[i].substring(0,n);
if (check1.compareToIgnoreCase(check2)>0)
return false;
}
}
关键是你做错了第二次循环是在错误的地方开始的。
答案 1 :(得分:1)
因为你在整个数组的内部for循环中进行迭代,而你应该只从 word 开始。
for (int j=1; j<strs.length; j++){
for(int i=j+1; i<strs.length; i++){
String word = strs[j];
String check1 =word.substring(0,n);
String check2= strs[i].substring(0,n);
if (check1.compareToIgnoreCase(check2)>0)
return false;
}
}
答案 2 :(得分:0)
正如我在评论中提到的,你只需要一个循环来解决这个问题:
public static boolean isStringArraySorted(String[] strs, int n) {
for (int i = 0; i < strs.length - 1; i++) {
String first = substring(strs[i], n);
String second = substring(strs[i + 1], n);
if (first.compareToIgnoreCase(second) > 0) {
return false;
}
}
return true;
}
private static String substring(String s, int n) {
return s.substring(0, n > s.length() ? s.length() - 1 : n);
}