Java 使用方法填充二维数组时如何修复数组错误和ArrayStoreException
我已将代码粘贴到下面。 数组确实会给我随机数,但是在数组末尾会弹出错误,我无法修复错误。 目标是生成一个包含2列和n行的数组。随机整数将填充数组。 我有一个main,我在其中创建了一个二维数组来保存值,我使用array.fill()方法调用我创建的randArray方法,该方法使用随机整数生成实际数组 问题是,一旦代码运行,它会给我一些我无法消除的错误。以下是错误: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
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。有什么理由投反对票吗?任何人