我已经做了很长时间的以下任务,但我无法理解。
给定一系列分数,如果每个分数等于或大于之前的分数,则返回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;
}
但它仍然只是吐出真实。
答案 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的原因:它不会检查前两个,并且在你的示例测试中,前两个元素都满足条件。
编辑:在您的第二次编辑中,您在第一次满意时仍然会返回真实状态。这意味着您仍然只检查前两个元素。相反,你应该做的是逻辑 - 每个新结果都有一个存储值,最后返回 ,这样你就不会在看到两个值按升序返回时立即返回。