包含增加的int的数组

时间:2016-12-17 14:14:17

标签: java arrays boolean

我已经做了很长时间的以下任务,但我无法理解。

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

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

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

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

我的许多尝试之一:

public boolean scoresIncreasing(int[] scores) {
  int i = 0;
  if(scores[i]<=scores[i+1]){
    i++;
    return true;
  }
  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;
}

但它仍然只是吐出真实。

5 个答案:

答案 0 :(得分:4)

在您的每个示例中,scores[0]<=scores[1]

另外,如果你想检查前两个元素,你需要一个循环或递归。

答案 1 :(得分:3)

  

我认为循环是不必要的

它是(或递归,但以循环开始)。您的代码只会检查A

答案 2 :(得分:3)

我建议你从循环开始(因为你只比较两个数字)。您可以使用第二个分数开始循环,如果任何分数小于您的条件为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;

答案 3 :(得分:0)

是的,循环是必要的。否则,您只是告诉编译器检查元素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。请参阅上面的代码以供参考!!!

答案 4 :(得分:0)

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

编辑:在您的第二次编辑中,您在第一次满意时仍然会返回真实状态。这意味着您仍然只检查前两个元素。相反,你应该做的是逻辑 - 每个新结果都有一个存储值,最后返回 ,这样你就不会在看到两个值按升序返回时立即返回。