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

时间:2017-12-06 20:24:56

标签: java arrays for-loop

我的代码有什么问题?我试图做这个问题,但我找不到一个好的解决方案。如果可以,请帮助我!?

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int n = scan.nextInt();
    int[] scores = new int[n];
    int c = 0;

    for(int i = 0; i < scores.length; i++){
        scores[i] = scan.nextInt();
    }

    for(int j = scores.length-1; j >= 0; j--){
        boolean b = scores[j] <= scores[j-1] ? true : false;
        if(b == false){
            c++;
        }
    }
    if(c > 0){
        System.out.print(false);
    }

2 个答案:

答案 0 :(得分:0)

添加if statement以检查是否j > 0时,您的代码可以正常运行,因此在使用-1索引检查0索引时不会出现异常

 for(int j = scores.length-1; j >= 0; j--){
      if(j > 0) {
          boolean b = scores[j] <= scores[j-1] ? true : false;
          if(b == false){
           c++;
          }
       }
   }

答案 1 :(得分:-1)

我真的不明白你的代码,但这个for循环可以满足你的需要:

for(int i=0; i<scores.length-2; i++) {
    if(scores[i] > scores[i+1]) {
        return false;
    }
}
return true;

基本上我们需要做的是运行数组中的所有元素,除了最后一个元素(位于scores.length-1的位置)因为我们将检查最后一个元素我们比较第二个最后一个元素时的元素。 一旦我们找到了不满足if条件的2个相邻元素就没有必要进一步检查,我们可以立即返回错误。

如果我们扫描了所有元素并且没有发现任何违规行为,我们可以返回true。