import java.util.Arrays;
public class Helloworld {
//完成main方法
public static void main(String[] args) {
int[] scores = {89,-23,64,91,119,52,73};
Helloworld hello = new Helloworld(); //错误
System.out.println(Arrays.toString(hello.getHighestMarks(scores)));
}
//定义方法完成成绩排序并输出前三名功能
public int[] getHighestMarks(int[] scores) {
int count = 0;
int[] highestThreeScores = new int[3];
Arrays.sort(scores);
while(count<3) {
for(int i=scores.length-1;i>=0;i--) {
if(scores[i]<0||scores[i]>100) //错误
continue;
highestThreeScores [count] = scores[i];
count++;
}
}
return highestThreeScores;
}
}
while(count<3) { //while语句在这里不适用,放在这里的意思就是要等到里面的for循环语句结束循环后才会跳到count=1这一步,然后再继续循环for里面的语句,然后重复着上一步得到的数值的语句循环,一直到count=3后才会结束这种循环,但是这样的话就会重复出现好几次,总之就是得不到你想要的数值,我建议直接在下面这个for循环语句中设定一个if (count == 3){ break; }条件语句,意识就是说当count=3时就跳出整个循环
for(int i=scores.length-1;i>=0;i--) {
if(scores[i]<0||scores[i]>100) //这里漏了一个中括号 {
continue;
highestThreeScores [count] = scores[i]; // 这两个语句输出来的值范围是0~100之间的,但是你的那个if条件是大于100小于0的,刚好相反了,所以你应该再加一个else语句,把highestThreeScores [count] = scores[i]; 和 count++;这两个语句放到else语句里面来
count++;
}
}
return highestThreeScores;
}
所以,其它的代码不需要改,只需要把这一部分应该改成:
for(int i=scores.length-1;i>=0;i--){
if(scores[i]>=0 && scores[i]<=100){
Three[count]=scores[i];
count++;
if(count == 3){
break;
}
}
}
return Three;
scores[i]<0||scores[i]>100 满足条件的数据有5个
if(scores[i]<0||scores[i]>100)
continue;
会执行5次
也就是
highestThreeScores [count] = scores[i];
count++;
会执行5次
int[] highestThreeScores = new int[3];但是定义了highestThreeScores 的长度是3个
所以报错了
package comm.word;
import java.util.Arrays;
import java.util.Scanner;
public class Kaoshi {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Kaoshi test = new Kaoshi();
int[] chengJi = test.jieShou();
int[] san = test.qianSan(chengJi);
int sum = test.youXiao(chengJi);
System.out.println("你所录入的成绩为:"+Arrays.toString(chengJi));
System.out.println("排名前三的成绩:"+Arrays.toString(san));
System.out.println("有效成绩总数:"+sum);
}
//接收一个成绩数组
public int[] jieShou(){
Scanner shuru = new Scanner(System.in);
int[] stu = new int[8];
for(int i = 0;i < stu.length;i++){
System.out.print("请输入第"+(i+1)+"位学员的成绩:");
stu[i] = shuru.nextInt();
}
return stu;
}
//返回前三成绩
public int[] qianSan(int[] sum){
Arrays.sort(sum);
int[] temp = new int[3];
int j = 0;
for(int i = sum.length-1; i >= 0;i--){
temp[j] = sum[i];
j++;
if(j == 3)
break;
}
return temp;
}
//返回有效成绩总数
public int youXiao(int[] sum){
int shu = 0;
for(int i = 0;i < sum.length;i++){
if(sum[i] >= 0 && sum[i] <= 100){
shu++;
}
}
return shu;
}
}
刚才给你修改了,现在再给你参考我的,我是录入成绩的方法
import java.util.Arrays;
public class Asdf {
//完成main方法
public static void main(String[] args) {
int[] scores = {89,-23,64,91,119,52,73};
Helloworld hello = new Helloworld();
System.out.println(Arrays.toString(hello.getHighestMarks(scores)));
}
//定义方法完成成绩排序并输出前三名功能
public int[] getHighestMarks(int[] scores) {
int count = 0;
int[] highestThreeScores = new int[3];
Arrays.sort(scores);
for(int i=scores.length-1;i>=0;i--) {
if(scores[i]<0||scores[i]>100)
continue;
if(count<3) {
highestThreeScores[count] = scores[i];
count++;
}
}
return highestThreeScores;
}
}
按照你的代码修改就是这样就正确了
word中的w 要大写,方法中的for循环中循环条件错误,应该是for(int i=0;i<scores.length;i++)