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

哪位大神帮我看看为什么我这个程序运行无结果,谢谢?

package com.imooc;

import java.util.Arrays;

public class HelloWorld {

public int[] getScores(int[] scores){

Arrays.sort(scores);

int j = 0;

int[] newScores = new int[j];

for(int i = 0;i < scores.length;i++){

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

continue;

}

else{

newScores[j] = scores[i];

j++;

}

}

return newScores;

}

public static void main(String[] args){

HelloWorld hello = new HelloWorld();

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

int[] newScores = hello.getScores(scores);

System.out.println(Arrays.toString(newScores));

}

}


提问者:Yesman012 2016-01-04 19:20

个回答

  • Its_forever
    2016-01-04 21:10:01
    已采纳

        

    不客气。你可以试一试这样。

     //新成绩的数组长度不会超过原数组长度,所以可以将两个数组长度定为一样。
    int[] newScores = new int[scores.length]; 
           for(int i = 0 ; i <= scores.length - 1; i++)
           {
               if(scores[i] >= 0 && scores[i] <= 100){
                   //新数组长度只记住有效成绩。无效成绩的位置为0
                   //循环结束之后,  newScores 数组为:89 0 64 91 0 52 79
                   newScores [i] = scores[i];  
               }
           }
                   Arrays.sort(realScores); //排序,然后取最后三个成绩,就是成绩为前三的。


  • 迷途的马尔斯
    2016-01-04 20:00:01

    你这个程序好多语法错误:

    1. 第4行,定义方法怎么用int[]?

    2. 第7行,初始化成绩数组怎么是new int[j](⊙o⊙)…

    3. 第9行,条件是或,不是且

    4. 第17行,返回值是多余的

    5. 第23行,根本不用toString的方法

    • 给你一个改进建议,不要用一个新数组了,题目没有要求,你直接改变原数组就行了


  • Its_forever
    2016-01-04 19:59:13

    int j = 0;
    int[] newScores = new int[j];

    你这里将newScores数组的大小设置为0了。所以运行到newScores[j] = scores[i];这里会报错 java.lang.ArrayIndexOutOfBoundsException(数组下标越界异常)。