题目:
解题思路代码讲解:
//作者:Nstar
//时间:2020年3月18日
import java.util.Arrays; //导包,因为程序中用到的Arrays.sort方法包涵在java.util.Arrays包中
public class Test18 {
public static void main(String[] args) { //入口方法
int[] scores =new int[] {89,-23,64,91,119,52,73}; //第一步定义数组scores,并且进行初始化
System.out.println("考试成绩的前三名为:");
Test18 ts = new Test18(); //第三步
//首先创建Test18类的对象
ts.print_top3(scores);
//通过类创建的对象去调用类中的print_top3方法,并且将数组scores作为实际参数传给方法进行处理
}
void print_top3(int[] scores){ //第二步,应考题要求,需要把所有过程集成在一个方法中
//我们需要有一个有参无返回值的方法,形参为scores数组,这里不用担心和main方法里面的scores数组起冲突,因为只在print_top3方法中起作用
Arrays.sort(scores); //使用 Arrays类中的sort方法进行升序排序(也称从小到大)
int a = 1; //考题要求只打印前三个值,所以我们声明此变量,作为最内层if语句的判断条件(可以想象成开关)
for (int i=scores.length-1;i>=0;i--){
//int i=scores.length-1:我们把量得数组的长度作为循环变量,我们量得数组长度为7并且减一
//减一是因为数组下标是从零开始,而量值是从一开始,如果不减一,在循环变量作为数组的下标的时候会出现数组越界错误
//数组越界错误是因为此数组最大下标为6,不减一的话会出现下标为7,造成越界
//i>=0:此代码就是说,当循环变量等于0的时候停止循环
//i--:此代码就是当执行完一次循环的时候,循环变量值减一,也可以想成自减操作
if (scores[i]>0&&scores[i]<100){ //if判断语句,scores[i]>0&&scores[i]<100为if语句表达式
//我们把scores[i]>0和scores[i]<100作为同时判断的条件,如果同时满足这两个条件时,将进入下面的if选择语句
if (a<=3){ //应考题要求需要打印满足条件的前三个值,所以if的表达式是当a=3的时候结束打印
System.out.println(scores[i]);
a++; //每次打印之后,变量a的值自动加一,自增操作
}
}
}
}
}
运行结果图: