【问题标题】:Boolean explanation布尔解释
【发布时间】:2014-04-25 08:21:36
【问题描述】:

我想创建一个方法来检查数组是否已排序,最小的整数在数组的开头,最大的在数组的末尾。我命名了数组序列。

public boolean isSorted(){
   int i = 1;
   while(i < sequence.length && sequence[i] >= sequence[i-1]){
      i++;
   }
   return i >= sequence.length;
}

我在朋友的帮助下得到了这段代码,但我并不完全理解它。什么作为布尔值返回?据我所知,阅读其他帖子时,它会在 i >= sequence.length 时返回 true only。 给定while条件,只有对数组进行排序时,i才会大于或等于sequence.length。

我说的对吗?抱歉,如果我的格式很糟糕,我还是 stackoverflow 的新手。

【问题讨论】:

  • 对,通常使用调试工具更好地理解你的代码
  • 顺便说一句,return 可以更改为return i == sequence.length,因为它永远不会更大。

标签: java arrays boolean sorted


【解决方案1】:

也许以这种方式重构该方法会使代码变得不那么复杂并且更具可读性:

public boolean isSorted(int[] sequence) {
    for (int idx = 1; idx < sequence.length; idx++) {
        if (sequence[idx] < sequence[idx-1]) return false;
    }
    return true;
 }

【讨论】:

    【解决方案2】:

    一旦发现不匹配(证明数组未排序的位置,因为邻居按照所需的顺序排序),循环似乎就会中断。如果循环不中断而是终止,则不匹配位置指向最后一个字符之后,即不存在不匹配。

    【讨论】:

      【解决方案3】:

      你是对的。循环检查数组中的每一对相邻元素。如果每个元素都大于它之前的元素,则必须对其进行排序。如果任何一对不满足条件,则循环立即中断,留下一个小于sequence.lengthi,因此条件i &gt;= sequence.length 告诉您整个数组已成功处理,必须正确排序。

      【讨论】:

        猜你喜欢
        • 2021-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-03
        • 1970-01-01
        • 1970-01-01
        • 2018-02-16
        相关资源
        最近更新 更多