4

我正在编写代码来检查我的数组是升序还是降序。如果布尔值“升序”为真,那么我检查它是否在升序。如果它是假的,那么我检查下降。我需要帮助检查数组是否正在下降...我有检查升序的代码,如下所示:

protected boolean isSorted(boolean ascending) {
    boolean result = false; 

    if (ascending) { 
        for (int i=0;i<data.length-1;i++) {
            if(data[i] < data[i+1]) {
                result = true;
            } else if(data[i] > data[i+1]) {
                result = false;
            }
        }
    } else {
        //code to check for descending order
    }
}
4

3 回答 3

12

(“升序”检查)的第一部分if是错误的,应该是:

for (int i = 0; i < data.length-1; i++) {
    if (data[i] > data[i+1]) {
        return false;
    }
}
return true;

相反,降序检查应该是(并注意改变比较运算符的方向就足够了):

for (int i = 0; i < data.length-1; i++) {
    if (data[i] < data[i+1]) {
        return false;
    }
}
return true;

在这两种情况下,您必须在找到一对不具有升序或降序属性的数字后立即跳出循环,并且仅true在循环退出后返回。

于 2013-08-01T22:06:58.080 回答
3

如果您愿意,您可以作弊并在一个循环中完成并删除一项添加:

protected boolean isSorted(boolean ascending) {
    for (int i = 1; i < data.length; i++) {
        if (data[i-1] == data[i]) {
            continue;
        }
        if ((data[i-1] > data[i]) == ascending) {
            return false;
        }
    }
    return true;
}

注意:我正在构建@OscarLopez 的代码,所以如果你支持我的,请支持他。

于 2013-08-01T22:41:39.287 回答
0

要检查是否ArrayList<Integer>按降序排列,请尝试以下操作:

boolean isSorted(ArrayList<Integer> list){
 boolean sorted = true;

      for (int i = 1; i < list.size(); i++) {
         if (list.get(i-1) >= (list.get(i)) ) {

             sorted = true;
             } else {

                 return false;

             } // if else ends


          } // for "i" ends

      return sorted;
}
于 2016-04-26T16:58:18.460 回答