我收到错误我收到错误线程“主” java中的异常...下面的完整错误

时间:2019-07-13 10:25:09

标签: java

我收到标题错误,不知道是什么意思/如何解决

该程序应该有一个由100个1-100组成的随机数的数组,并构成该数组中所有可除以4的数字的数组,并列出它们

public class JavaProgram{
    public static void main (String [] args){
        int [] hundredNumbers = new int [100];

        for ( int i=0; i <hundredNumbers.length; i++ )
            hundredNumbers[i] = (int) Math.random() * 100;

        int [] multiplesOfFour = new int [100];

        for ( int i=0; i<hundredNumbers.length; i++)
            multiplesOfFour[i] = hundredNumbers[i];

        getEvenMultiples(multiplesOfFour);

        for ( int i=0; i < multiplesOfFour.length; i++ )
            System.out.print (multiplesOfFour[i] + " ");
    }

    public static int[] getEvenMultiples(int[] x){

        int result [] = {};
        int count = 0;
        for (int i = 0; i < x.length ; i++){

            if ( x[i] % 4 == 0 ){
                result = new int [++count];
                result [count] = x[i];
            }
        }
        return result;
    }

}

我应该得到一个除以4的所有数字的列表,但得到

  

“线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:   索引1超出长度1的范围           在JavaProgram.getEvenMultiples(JavaProgram.java:27)           在JavaProgram.main(JavaProgram.java:13)”

1 个答案:

答案 0 :(得分:0)

问题在于getEvenMultiples函数中的结果数组。

您将count(数组的长度)用作索引,并且由于长度始终大于最大索引,因此会出现此错误。例如,您有一个长度为2的数组,则只能使用索引0和1。因此,您实际上会执行类似“结果[count-1] = x [i];”

的操作。

您遇到的另一个问题是,在执行“结果=新int [++ count];”时,始终删除孔阵列。您实际上想使用类似ArrayListhttps://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html)的列表。在这里,您可以找到有关如何使用ArrayList的信息:https://www.javatpoint.com/java-arraylist

啊,你永远不会在主函数中使用getEvenMultiples函数的结果。