Java 为什么会产生索引越界错误?
我试图弄清楚CreateArthmeticSeq中的循环为什么会越界,但无法弄清楚。当i=listSize-1时,循环应该停止,因为它是(i=0;iJava 为什么会产生索引越界错误?,java,arrays,loops,indexoutofboundsexception,Java,Arrays,Loops,Indexoutofboundsexception,我试图弄清楚CreateArthmeticSeq中的循环为什么会越界,但无法弄清楚。当i=listSize-1时,循环应该停止,因为它是(i=0;i
import java.util.*;
public class MagicSquare
{
static int row, col, n, rows, columns, listSize;
static Scanner console = new Scanner (System.in);
这就是问题发生的地方:
public static void createArithmeticSeq(int [] list)
{
//prompt user for array size
System.out.println("Enter size of array (in form nxn), n:");
n = console.nextInt();
rows = n;
columns = n;
listSize= (n*n);
int first;
int diff;
//prompt user for first and diff
System.out.println("Enter first and diff : ");
first = console.nextInt();
diff = console.nextInt();
//process to create list of n*n elements
for (int i=0; i<listSize; i++)
{
list[i]=first+i*diff;
}
}
publicstaticvoid createArithmeticSeq(int[]列表)
{
//提示用户输入数组大小
System.out.println(“输入数组的大小(格式为nxn),n:”;
n=console.nextInt();
行=n;
列=n;
listSize=(n*n);
int优先;
int-diff;
//提示用户输入first和diff
System.out.println(“输入第一个和差异:”);
first=console.nextInt();
diff=console.nextInt();
//创建n*n个元素列表的过程
对于(int i=0;i当您在main
中创建列表数组时,您使用的是listSize
。因为您没有初始化它,所以它的值是0
在createArrithmeticSeq
方法中,您将其大小更改为n*n
,但这并不影响数组的大小,数组的大小仍然为0。当您将listsize
定义为static
时,它会获得默认值0
,然后调用createArrithmeticSeq(int[/list)
,您基本上是在传递一个带有0个元素空间的列表。如果在创建int[]list=new int[listsize];
后更改listsize的值,列表的大小不会改变。因此,您必须在知道数组的大小后创建数组
为此,将main方法修改为
public static void main (String [] args)
{
System.out.println("Enter size of array (in form nxn), n:");
n = console.nextInt();
rows = n;
columns = n;
listSize= (n*n);
int [] list = new int [listSize];
createArithmeticSeq (list);
int [] [] matrix = new int [rows] [columns];
matricize(list, matrix);
printMatrix(matrix);
System.out.print("\n");
reverseDiagonal(matrix);
printMatrix(matrix);
magicCheck(list, matrix);
}
public static void createArithmeticSeq(int [] list)
{
int first;
int diff;
//prompt user for first and diff
System.out.println("Enter first and diff : ");
first = console.nextInt();
diff = console.nextInt();
//process to create list of n*n elements
for (int i=0; i<listSize; i++)
{
list[i]=first+i*diff;
}
}
你的CreateArthmeticSeq方法是
public static void main (String [] args)
{
System.out.println("Enter size of array (in form nxn), n:");
n = console.nextInt();
rows = n;
columns = n;
listSize= (n*n);
int [] list = new int [listSize];
createArithmeticSeq (list);
int [] [] matrix = new int [rows] [columns];
matricize(list, matrix);
printMatrix(matrix);
System.out.print("\n");
reverseDiagonal(matrix);
printMatrix(matrix);
magicCheck(list, matrix);
}
public static void createArithmeticSeq(int [] list)
{
int first;
int diff;
//prompt user for first and diff
System.out.println("Enter first and diff : ");
first = console.nextInt();
diff = console.nextInt();
//process to create list of n*n elements
for (int i=0; i<listSize; i++)
{
list[i]=first+i*diff;
}
}
publicstaticvoid createArithmeticSeq(int[]列表)
{
int优先;
int-diff;
//提示用户输入first和diff
System.out.println(“输入第一个和差异:”);
first=console.nextInt();
diff=console.nextInt();
//创建n*n个元素列表的过程
对于(inti=0;i在main中,使用未初始化的“listSize”值创建列表数组,该值将为0。
因此,您应该更改代码,首先读取列表大小,然后创建数组:
public static void main (String [] args)
{
//prompt user for array size
System.out.println("Enter size of array (in form nxn), n:");
n = console.nextInt();
rows = n;
columns = n;
listSize= (n*n);
int [] list = new int [listSize];
createArithmeticSeq (list);
int [] [] matrix = new int [rows] [columns];
matricize(list, matrix);
printMatrix(matrix);
System.out.print("\n");
reverseDiagonal(matrix);
printMatrix(matrix);
magicCheck(list, matrix);
}
您的功能变成:
public static void createArithmeticSeq(int [] list)
{
int first;
int diff;
//prompt user for first and diff
System.out.println("Enter first and diff : ");
first = console.nextInt();
diff = console.nextInt();
//process to create list of n*n elements
for (int i=0; i<listSize; i++)
{
list[i]=first+i*diff;
}
}
publicstaticvoid createArithmeticSeq(int[]列表)
{
int优先;
int-diff;
//提示用户输入first和diff
System.out.println(“输入第一个和差异:”);
first=console.nextInt();
diff=console.nextInt();
//创建n*n个元素列表的过程
因为(int i=0;我已经在PC dude上安装了一个键盘记录器?;)真是一个同步器!@Pragmateek我用位来回答它,先是理论,然后是代码。同样的方法:先是忍者冲刺,回答简短,然后充实到完美:)你得到了我的+1当然了!非常感谢。这很有道理,我只是忽略了它。我问了你同样的问题;)哈哈,这就是为什么我删除了我的;)