问答详情
源自:7-1 编程练习

求大神指点代码错误

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;

}

}


提问者:Chord4205038 2016-10-22 11:14

个回答

  • 霁雪
    2016-10-22 16:47:22
    已采纳

    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;


  • 码男波杰克
    2016-10-22 18:16:37

    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个

    所以报错了

  • 慕粉4193081
    2016-10-22 16:10:47

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

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

  • 慕粉4193081
    2016-10-22 16:09:16


    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;

    }

    }


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

  • 陆城
    2016-10-22 16:04:18

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