【问题标题】:Array containing increasing ints包含递增整数的数组
【发布时间】:2017-05-03 03:21:09
【问题描述】:

我从事以下任务已经有一段时间了,但我想不通。

给定一个分数数组,如果每个分数等于或大于前一个分数,则返回 true。数组长度为 2 或更多。

scoresIncreasing([1, 3, 4]) → true

scoresIncreasing([1, 3, 2]) → false

scoresIncreasing([1, 1, 4]) → true

我的许多尝试之一:

public boolean scoresIncreasing(int[] scores) {
  int i = 0;
  if(scores[i]<=scores[i+1]){
    i++;
    return true;
  }
  return false;
}

由于某种原因,编译器无法达到“return false”语句。 有人对我有任何提示吗? 编辑:我不认为循环是必要的。 编辑编号 2:我尝试了以下方法:

public boolean scoresIncreasing(int[] scores){
  for(int i=0;i<scores.length; i++){
    if(scores[i]<scores[i+1]){
      return true;
    }
  }
  return false;
}

但它仍然只吐真词。

【问题讨论】:

    标签: java arrays boolean


    【解决方案1】:

    我建议你从一个循环开始(因为你只比较两个数字)。您可以从第二个分数开始循环,如果任何分数低于前一个分数,则您的条件是false(您可以立即返回)。如果您到达数组的末尾,并且没有任何分数违反条件,则返回true。喜欢,

    public static boolean scoresIncreasing(int[] scores) {
        for (int i = 1; i < scores.length; i++) {
            if (scores[i] < scores[i - 1]) {
                return false;
            }
        }
        return true;
    }
    

    在 Java 8+ 中,您可以将其简化为单行(假设您总是有多个 int),例如

    public static boolean scoresIncreasing(int[] scores) {
        return IntStream.range(1, scores.length)
                .allMatch(i -> scores[i] >= scores[i - 1]);
    }
    

    为该条件添加一个警卫,例如

    if (scores.length < 2) return true;
    

    【讨论】:

      【解决方案2】:

      是的,循环是必要的。否则,您只是告诉编译器检查元素 0 和元素 1。您需要将代码更改为

      public boolean scoresIncreasing(int[] scores, int length)
          for(int i=0; i<length-1; i++) {
              if(scores[i]>scores[i+1])
                  return false;
          }
          return true;
      }
      

      响应编辑 2:您在第一次检查时仍然返回 true。参考上面代码!!!

      【讨论】:

        【解决方案3】:

        这个循环(或递归)确实是必要的,因为您打算检查数组的所有元素。如果没有循环,就不能使用正在递增的i 的新值,因此i++ 是无用的,导致它只检查scores[0]scores[1]。这也是它总是返回 true 的原因:它只检查前两个元素,并且在您的示例测试中,前两个元素都满足条件。

        编辑:在您的第二次编辑中,您仍然会在第一次满足您的条件时返回 true。这意味着您仍然只检查前两个元素。相反,您应该做的是合乎逻辑的 - 每个新结果都带有一个存储值并最终返回 that,这样您就不会在看到两个值按递增顺序返回时立即返回。

        【讨论】:

          【解决方案4】:

          我不认为循环是必要的

          它是(或递归,但以循环开始)。您的代码只检查scores[0] &lt;= scores[1]

          【讨论】:

            【解决方案5】:

            在您的每个示例中,scores[0]&lt;=scores[1]

            此外,如果您想要检查的不仅仅是前两个元素,则需要循环或递归。

            【讨论】:

              猜你喜欢
              • 2020-01-09
              • 2011-09-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-01-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多