isSorted方法不适用于所有情况......不确定原因

时间:2011-04-14 17:11:22

标签: java arrays sorting

以下是问题的基本形式:

编写一个名为isSorted的方法,该方法接受一个双精度数组作为参数,如果它们被排序则返回true,否则返回false。

这是我的代码:

public static boolean isSorted(double[] a){
   if (a.length == 1){
      return true;
   }
   boolean apples = false;
   int i = 1;
   while (i <= a.length-1){
      if (a[i] > a[i-1]){
         apples = true;
      } else {
         apples = false;
      }
      i++;
   }
   return apples;
}

当传递双数组{16.1,12.3,22.2,14.4},{1.5,4.3,7.0,19.5,25.1,46.2}或{42.0}时,它分别返回false,true,true。但是,当传递一个数组{1.5,4.3,7.0,19.5,7.8,25.1,46.2}时,它应返回false,返回false。

5 个答案:

答案 0 :(得分:4)

a[i] > a[i-1]=> apples = true)的后续案例会覆盖apples被设置为false的情况。在找到a[i]不小于a[i+1]的单个案例后,无需继续进行迭代。

其他清理

  • 这是一个使用for循环比使用while循环更清晰的用例。
  • 你应该处理空数组。
  • 假设数组可能包含重复的元素,您需要(正确)处理a[i] === a[i-1]的情况。

此方法执行以上所有操作:

public static boolean isSorted(double[] a){
    if (a.length < 2) return true;

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

编辑: 哦,为什么要命名返回变量apples?它在方法的上下文中没有任何意义,并暗示了草率的编码。

答案 1 :(得分:2)

apples = false;中分配else后,无需进一步迭代。只需将break放入else

答案 2 :(得分:1)

几乎不错,我建议添加break:

  if (a[i] > a[i-1]){
     apples = true;
  } else {
     apples = false;
     break; // <--
  }

答案 3 :(得分:0)

您的方法返回最后比较的结果,因为您在检测到无序条件时不会退出。

答案 4 :(得分:0)

如果错误,你必须打破或返回。