为了账号安全,请及时绑定邮箱和手机立即绑定

求大神指点代码错误

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;

}

}


正在回答

5 回答

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;


0 回复 有任何疑惑可以回复我~
#1

Chord4205038 提问者

非常感谢你的详细解答~~
2016-10-25 回复 有任何疑惑可以回复我~

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个

所以报错了

0 回复 有任何疑惑可以回复我~
#1

Chord4205038 提问者

谢谢你的答案,很受用
2016-10-25 回复 有任何疑惑可以回复我~
#2

Chord4205038 提问者

原题要求把小于零大于一百的数刨除,所以我执行五次continue只是把不符合要求的数据给排除了,下两句才是赋值的语句啊,所以我还是只赋了三个值啊,按理来说应该不会出界啊。
2016-10-25 回复 有任何疑惑可以回复我~
#3

Chord4205038 提问者

哦 我看懂了 没事了
2016-10-25 回复 有任何疑惑可以回复我~

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;
 }
}

刚才给你修改了,现在再给你参考我的,我是录入成绩的方法

0 回复 有任何疑惑可以回复我~
#1

Chord4205038 提问者

非常感谢你能回答的如此详细~~
2016-10-25 回复 有任何疑惑可以回复我~


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;

}

}


按照你的代码修改就是这样就正确了

0 回复 有任何疑惑可以回复我~
#1

Chord4205038 提问者

非常感谢你能回答的如此详细~~
2016-10-25 回复 有任何疑惑可以回复我~

word中的w 要大写,方法中的for循环中循环条件错误,应该是for(int i=0;i<scores.length;i++)

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第一季(IDEA工具)升级版
  • 参与学习       1165454    人
  • 解答问题       17585    个

0基础萌新入门第一课,从Java环境搭建、工具使用、基础语法开始

进入课程

求大神指点代码错误

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信