如何在分数数组中查找每个分数是否等于或低于其前面的分数?

时间:2019-05-17 19:58:03

标签: java

在某些分数下,代码“行为异常”并以错误的结果结尾。例如,这是在这组分数上发生的:

5、4、3、2、5

只要数字减少一切都很好,但是在最后一步,如果数字再次增加,代码将无法返回正确的答案。

我们将不胜感激任何帮助和解释。

任务 给定一组分数,如果每个分数等于或低于其前面的分数,则打印“ true”。 输入格式 第一行包含一个整数n,表示数组的大小。随后的n行中的每一行都包含一个整数,该整数表示数组在下一个位置的值。 约束 数组的长度将为2或更大。 输出 只是单词“ true”或“ false”。

输入 5 4 3 2 1 1 预期输出 true 输出 true 输入 5 4 3 2 1 2 预期输出输出正确

我已经尝试过多种解决方案,但是我绝对是新手,所有尝试都失败了。

    Scanner sc = new Scanner(System.in);
    int a = sc.nextInt();

    int[] array3 = new int[a];
    int m; int j = 1; int ctn=-1;

    //System.out.println("ctn= -1");
    for(int i=0; i<array3.length; i++){ 
        m = sc.nextInt();
        while(j<array3.length && array3[j] < m){
            j++;
        }          
            if(j == array3.length){    
                array3[i] = m;
                ctn++;
                j = 0;
                //System.out.println("ctn+1 m>j " + ctn);
            }else{
                array3[i] = m;
                j = 0;
                //System.out.println("ctn m<=j " + ctn);
            }
    }

    if(ctn != 0){
        System.out.println("false");
    }else{
        System.out.println("true");
    }
}

}

2 个答案:

答案 0 :(得分:1)

编辑: 我不确定是否要让每个分数等于或低于所有分数(或先于即时分数)。

如果它只是前面的即时分数,那么将执行一个简单的循环,通过查找来检查先前的值,否则请参阅下文。


最简单的方法是跟踪您到目前为止遇到的最低“得分”,并将其用于检查条件。

Network

答案 1 :(得分:0)

尝试以下代码:

Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int[] array3 = new int[a];
String res = "true" ;

for(int i=0; i<array3.length; i++){
    array3[i]= sc.nextInt();
    if(i>0 && array3[i-1] < array3[i]) res = "false";
}
System.out.print(res);

此外,如果您不想在违反条件后再输入任何值,则可以在break内添加if