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

大家看看我这个是怎么回事啊?我这个 运行不出来但是看不出哪里有错

import java.util.Arrays;public class HelloWorld {        //完成 main 方法    public static void main(String[] args) {        int[] scores = {89,-23,64,91,119,52,73};      //  system.out.println("考试成绩的前三名为:")        HelloWorld hello = new HelloWorld();        hello.marks(scores);                            }        //定义方法完成成绩排序并输出前三名的功能    public void marks(int [] scores){        int [] arrays={};        int count = 0;        Arrays.sort(scores);        for(int i=scores.length-1;i>=0;i--)        {            if(scores[i]<0 || scores[i]>100){                continue;            }            else{            count++;            for(int j=0;j<3;j++)            arrays[j]=scores[i];            if (count==3)                break;            }        }        System.out.println("考试成绩的前三名为"+Arrays.toString(arrays));           }

import java.util.Arrays;

public class HelloWorld {

    

    //完成 main 方法

    public static void main(String[] args) {

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

      //  system.out.println("考试成绩的前三名为:")

        HelloWorld hello = new HelloWorld();

        hello.marks(scores);

        

        

        

    }

    

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

    public void marks(int [] scores){

        int [] arrays={};

        int count = 0;

        Arrays.sort(scores);

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

        {

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

                continue;

            }

            else{

            count++;

            for(int j=0;j<3;j++)

            arrays[j]=scores[i];

            if (count==3)

                break;

            }

        }

        System.out.println("考试成绩的前三名为"+Arrays.toString(arrays));

       

    }

    


正在回答

5 回答

spacer.gif

另外,你运行的效果应该是报错数组下限超出范围吧,因为你定义的arrays【】给的是个{}---空,然后我给你改了下,自己看下效果是怎样的

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

qq_长山_0 提问者

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0是这个错误。 为什么不能定义数组为空呢?为空 的话 是不能赋值了吗? 你改了以后没有错误了
2018-07-30 回复 有任何疑惑可以回复我~
#2

qq_摸摸头_4 回复 qq_长山_0 提问者

定义数组有三种方式,分为静态初始化和动态初始化, 举个例子,假如现在我们要定义一个整形数组,int [] array=new []{1,2,3}; int [] array={1,2,3};这俩种是静态初始化,就是在定义的时候直接就把值给了,命名规则是:变量类型 【】 数组名=new []{数组中的值}; 动态初始化就是:int 【】 array=new [数组的长度]; array={1,2,3}; 可以不用直接声明的时候就是初始化,在之后灵活存入。 如果定义数组为空,那么这个数组的长度就为0了,还怎么存入数值。
2018-08-01 回复 有任何疑惑可以回复我~
#3

qq_长山_0 提问者 回复 qq_摸摸头_4

嗯嗯懂得了,非常感谢
2018-08-08 回复 有任何疑惑可以回复我~

https://img1.sycdn.imooc.com//5b5e73420001042c05280291.jpg看图就明白了

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

qq_长山_0 提问者

明白了明白了 谢谢谢谢
2018-07-30 回复 有任何疑惑可以回复我~

import java.util.Arrays;

public class HelloWorld {

// 完成 main 方法

public static void main(String[] args) {

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

// system.out.println("考试成绩的前三名为:")

HelloWorld hello = new HelloWorld();

hello.marks(scores);

}

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

public void marks(int[] scores) {

// int[] arrays = {};

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

int count = 0;

Arrays.sort(scores);

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

{

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

continue;

}

else {

count++;

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

/*

* for (int j = 0; j < 3; j++)

* arrays[j] = scores[i];

*/

/*

* 首先你这个for循环没有{}划分范围,其次我不知道你为什么又定义一个数组arrays用来存储成绩的前三名,

* 既然定义了count,让它<=3,这就可以直接控制scores数组的输出 ,再然后你这个内for循环的作用你仔细看看,

* 它在外for循环里面,就算你运行成功了,也是每次将同一个值赋给不同下标的arrays数组值

*/

if (count == 3)

break;

}

}

// System.out.println("考试成绩的前三名为" + Arrays.toString(arrays));

}

}


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

qq_长山_0 提问者

我做这个题的时候想起来前面的 直接用这个函数输出数组了。就想用这个方法
2018-07-30 回复 有任何疑惑可以回复我~

在你的代码的循环中,你用了双重循环,当分数满足在0到100分之间时,你将分数用一个循环输入到arrays数组中,但是实际上此时的scores[i]是一个值,你用j的这个循环将同样的值给了arrays数组,也就是说else执行完过后,arrays数组中是三个相同的值,而跳到外层循环之后,再次遇到满足条件的scores[i]时,会覆盖掉你原来的arrays数组,所以你的代码输出的结果是第三名的分数,并且是三次吧。我没运行你的代码,只是看了看,问题应该是在这。

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

qq_长山_0 提问者

对你说的对。但是 这里错的话程序不会报错 只会出来 三个同样的值。报错的原因是 我定义了一个空的 arrays数组
2018-07-30 回复 有任何疑惑可以回复我~
#2

qq_长山_0 提问者

你说的这个也是个很大的错误 谢谢谢谢
2018-07-30 回复 有任何疑惑可以回复我~
#3

zczzsh 回复 qq_长山_0 提问者

额,数组为空这个问题我还真没发现,抱歉。因为我平时用C++比较多,C++中数组是可以这么初始化为空的吧,Java里的话我没这么定义过,都是直接用new给分配空间了,具体为啥不能为空的话可能是Java中不能这么初始化数组吧。。。
2018-07-31 回复 有任何疑惑可以回复我~
#4

qq_长山_0 提问者 回复 zczzsh

恩恩好的谢谢
2018-08-01 回复 有任何疑惑可以回复我~
查看1条回复
import java.util.Arrays;public class HelloWorld {        //完成 main 方法    public static void main(String[] args) {	   int[] scores= {89,-23,64,91,119,52,73};		System.out.println("考试成绩的前三名为:");		HelloWorld scoresTop3=new HelloWorld();//创建对象		scoresTop3.showTop3(scores);    }        //定义方法完成成绩排序并输出前三名的功能    	public void showTop3(int[] scores) {		Arrays.sort(scores);//排序数组		int num =0;//保存有效成绩		for(int i=scores.length-1;i>=0;i--) {			if(scores[i]<0||scores[i]>100) {				continue;			}			num++;			if(num>3) {				break;			}			System.out.println(scores[i]);					}	}}


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

qq_长山_0 提问者

你这就是答案啊,我这个哪里错了?
2018-07-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

大家看看我这个是怎么回事啊?我这个 运行不出来但是看不出哪里有错

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