【问题标题】:isSorted method not working for all cases...not sure whyisSorted 方法不适用于所有情况...不知道为什么
【发布时间】:2011-04-14 17:11:21
【问题描述】:

这是问题的基本形式:

编写一个名为 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 时返回 true。

【问题讨论】:

  • 现在的方式,您仅根据最后一项是否大于倒数第二项来返回值。你想要做的是假设它已排序,然后一旦出现不正确的顺序就停止检查并返回 false
  • 在“else { apples = false; }”中应该是“else { return false; }”。真的,如果它没有排序,你只需要循环并返回false,最后只需要“返回true”。当两个元素相等时,您也没有处理这种情况。
  • 传入空列表时,您也没有处理这种情况。

标签: java arrays sorting


【解决方案1】:

a[i] &gt; a[i-1] (=&gt; 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?它在方法的上下文中没有任何意义,并且暗示了草率的编码。

【讨论】:

  • 我不知道该给它起什么名字,这是我书中的一个练习。如果在一个复杂的程序中我需要跟踪很多事情,我会使用有意义的名称,但如果它是一个像这样的简单方法,那么我看不出有什么理由不玩得开心。此外,它让我更容易跟随。
【解决方案2】:

else中赋值apples = false;后,就不需要再迭代了。只需将break 放入else

【讨论】:

  • D'oh,现在看。非常感谢!
  • @user - 我实际上是在用你给出的例子写一个解释。看来你明白逻辑哪里出错了:)
【解决方案3】:

差不多好了,我建议加break:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      如果为假,则必须中断或返回。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-26
        • 2019-03-10
        • 2015-03-14
        • 1970-01-01
        相关资源
        最近更新 更多