Java 使用方法填充二维数组时如何修复数组错误和ArrayStoreException

Java 使用方法填充二维数组时如何修复数组错误和ArrayStoreException,java,arrays,multidimensional-array,methods,compiler-errors,Java,Arrays,Multidimensional Array,Methods,Compiler Errors,我已将代码粘贴到下面。 数组确实会给我随机数,但是在数组末尾会弹出错误,我无法修复错误。 目标是生成一个包含2列和n行的数组。随机整数将填充数组。 我有一个main,我在其中创建了一个二维数组来保存值,我使用array.fill()方法调用我创建的randArray方法,该方法使用随机整数生成实际数组 问题是,一旦代码运行,它会给我一些我无法消除的错误。以下是错误: Exception in thread "main" java.lang.ArrayStoreException: [[I at

我已将代码粘贴到下面。 数组确实会给我随机数,但是在数组末尾会弹出错误,我无法修复错误。 目标是生成一个包含2列和n行的数组。随机整数将填充数组。 我有一个main,我在其中创建了一个二维数组来保存值,我使用array.fill()方法调用我创建的randArray方法,该方法使用随机整数生成实际数组

问题是,一旦代码运行,它会给我一些我无法消除的错误。以下是错误:

Exception in thread "main" java.lang.ArrayStoreException: [[I
at java.base/java.util.Arrays.fill(Arrays.java:3639)
at Animal.main(Animal.java:22)
我尝试过的事情:

  • 将范围更改为范围-1
  • 将行更改为行-1
  • 在第二种方法中更改i和j值
  • 把我的课本扔到该扔的垃圾堆里
我应该往哪个方向走?任何帮助都将不胜感激

import java.util.Scanner;
import java.util.Arrays;
import java.util.Random; //import library for generating random numbers

//Creating an array with 2 columns, the number of rows are based on user input and the numbers
//inside the array are randomized between 0 and x with user giving x

public class Animal {

    public static void main(String [] args)
    {
        Scanner input = new Scanner(System.in);

        System.out.println("Enter the number of rows: ");
        int numNodes = input.nextInt();    //this will be the number of rows in the array

        System.out.println("Enter the maximum:  ");
        double max = input.nextDouble();    //array data is inside this range 


        int[][] something = new int [numNodes][];
        Arrays.fill(something, randArray(numNodes,max));



  //    System.out.println("The rows are: " + arrayMade(numNodes,networkSize)); //testing the array to see if it works

       System.out.println(something);
    }

/** Creating an array to fill the random array with random ints
 * 
 * @param numRows the number of rows the array will have
 * @param range the maximum for a value in the array
 * @return randArray returns a randomized filled in 2-d array
 */

public static int[][] randArray (int numRows, double range)    //method to make the array 
    { 
        int[][] randArray = new int[numRows+1][2];                         
        Random rand = new Random(); 

        int count = numRows-1;
        int i = 0;

     while(i < count){  //this loops based on how many rows there are

        for (int j = 0; j < 1; j++)
        {
            randArray[i][0] = rand.nextInt((int)range) ;  // random integer from 0 to max
            randArray[i][1] = rand.nextInt((int)range) ;

        System.out.println(randArray[i][0] + "   " + randArray[i][1]); //test line
        i++;

        }//end for-loop


      }//end while-loop

        return randArray;
    }//end arrayMade


}//end class

import java.util.Scanner;
导入java.util.array;
导入java.util.Random//用于生成随机数的导入库
//创建包含2列的数组时,行数基于用户输入和数字
//在数组内部,在0和x之间随机化,用户给出x
公营动物{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入行数:”);
int numNodes=input.nextInt();//这将是数组中的行数
System.out.println(“输入最大值:”);
double max=input.nextDouble();//数组数据在此范围内
int[][]某物=新的int[numNodes][];
填充(某物,随机数组(numNodes,max));
//System.out.println(“行为:”+arrayMade(numNodes,networkSize));//测试数组是否工作
系统输出打印(某物);
}
/**创建数组以使用随机整数填充随机数组
* 
*@param numRows数组将具有的行数
*@param range数组中某个值的最大值
*@return randArray返回随机填充的二维数组
*/
公共静态int[]randary(int numRows,双范围)//生成数组的方法
{ 
int[]randArray=newint[numRows+1][2];
Random rand=新的Random();
整数计数=numRows-1;
int i=0;
而(i
您不必使用
数组。填充
,只需将
randArray
函数的返回值分配给2d数组即可

int[]something=randArray(numNodes,max);
PS:您需要一种将2d数组打印到控制台的方法,使用
System.out.println(something)
将输出意外结果

另外,删除(intj=0;j<1;j++)的
循环,这确实是不必要的

以下是您可以参考的最终代码:

import java.util.Random;
导入java.util.Scanner;
//创建包含2列的数组时,行数基于用户输入和数字
//在数组内部,在0和x之间随机化,用户给出x
公营动物{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入行数:”);
int numNodes=input.nextInt();//这将是数组中的行数
System.out.println(“输入最大值:”);
int max=input.nextInt();//数组数据在此范围内
int[][]某物=随机数组(numNodes,max);
//System.out.println(“行为:”+arrayMade(numNodes,networkSize));//测试数组是否工作
系统输出打印(某物);
}
/**
*创建数组以使用随机整数填充随机数组
*
*@param numRows数组将具有的行数
*@param range数组中某个值的最大值
*@return randArray返回随机填充的二维数组
*/
公共静态int[]randary(int numRows,int range)//生成数组的方法
{
int[]randArray=newint[numRows+1][2];
Random rand=新的Random();
整数计数=numRows-1;
int i=0;
而(i
也许
int[]something=newint[numNodes][2]为什么一个双精度范围被强制为int?
for(int j=0;j<1;j++)
-为什么-抛出表示试图将错误类型的对象存储到对象数组中。@ScaryWombat我这样做了(将节点和范围从double更改为int),我确实祈祷过,但它仍然给了我同样的错误谢谢!这是完全有道理的,我没有想到调用这样的方法,我太专注于使用.fill了。我检查并使用prinln(某物)给出了数组的位置,而不是内容,for循环也是冗余的,所以我也删除了它。再次感谢你,伙计!不客气@Zafa。有什么理由投反对票吗?任何人