首页 > 解决方案 > 我收到错误我在线程“main”java中收到错误异常...下面的完整错误

问题描述

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

该程序应该有一个由 1-100 的 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 中的异常:JavaProgram.getEvenMultiples(JavaProgram.java:27) 处 JavaProgram.main(JavaProgram.java:13) 处的索引 1 超出长度 1 的范围”

标签: java

解决方案


问题是 getEvenMultiples 函数中的结果数组。

您使用 count (数组的长度)作为索引,因为长度总是大于最大的索引,所以会出现此错误。例如,您有一个长度为 2 的数组,您只能使用索引 0 和 1。因此您实际上会执行类似“result [count - 1] = x[i];”之类的操作

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

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


推荐阅读