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

为什么显示超出范围

import java.util.*;

public class HelloWorld {

    

    //完成 main 方法

    public static void main(String[] args) {

      int[] scores={89,-23,64,91,119,52,73};

      HelloWorld line = new HelloWorld();

      line.sort(scores);

    }

    

    //定义方法完成成绩排序并输出前三名的功能

    public void sort(int[]scores){

    //选出有效成绩

    int i,j; 

    for(i=0,j=0;i<scores.length;i++);

    {

        if(scores[i]>0&&scores[i]<100)

        {

            scores[j]=scores[i];

            j++;

        }

    }

    //有效成绩排序

    Arrays.sort(scores);

    System.out.println("考试前三名为:");

    //选出前三名

    for(int k=scores.length-1;k>scores.length-4;k--)

    {

        System.out.println(scores[k]);

    }

    }

    




运行显示问题:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7

at ad.HelloWorld.sort(HelloWorld.java:18)

at ad.HelloWorld.main(HelloWorld.java:9)


正在回答

3 回答

根据数学上证明一个结论不能在证明时使用这个结论,类比到编程,认为:在定义sort(int[] scores)时,应该不能调用sort(scores)便把你的sort(int[] scores)方法改成了2个,就能输出结果。不知道原因是不是这个,是这么想的,就做了相应的修改。

import java.util.Arrays;

public class HelloWorld {

    

    //完成 main 方法

    public static void main(String[] args) {

      int[] scores={89,-23,64,91,119,52,73};

      HelloWorld line = new HelloWorld();

      line.sort1(scores);

    }

    

    //定义方法完成成绩排序并输出前三名的功能

    public void sort(int[]scores){

    //选出有效成绩

    int i,j; 

    for(i=0,j=0;i<scores.length;i++);

    {

        if(scores[i]>0&&scores[i]<100)

        {

            scores[j]=scores[i];

            j++;

        }

    }

    }

    public void sort1(int[] scores){

    //有效成绩排序

    Arrays.sort(scores);

    System.out.println("考试前三名为:");

    //选出前三名

    for(int k=scores.length-1;k>scores.length-4;k--)

    {

        System.out.print(scores[k]+" ");

    }

    }

}


考试前三名为:

119 91 89 


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

public void sort(int[] scores){

        int count=0;

        Arryas.sort(scores);

        for(int i=scores.length;i>=0;i--){

            if(scores[i]>0&&scores[i]<100){

    System.out.println(scores[i]);

count++;

if(count==3){

break;

}

}

        }

    }

这样可以输出前三名!你的情况我也出现过,不过我也不知道为什么

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

我把输出考试前三那行的println换成print了显示下面这些

/85/1598/DsXg/HelloWorld.java:35: error: reached end of file while parsing
   }
    ^
1 error

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

举报

0/150
提交
取消

为什么显示超出范围

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