Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么会产生索引越界错误?_Java_Arrays_Loops_Indexoutofboundsexception - Fatal编程技术网

Java 为什么会产生索引越界错误?

Java 为什么会产生索引越界错误?,java,arrays,loops,indexoutofboundsexception,Java,Arrays,Loops,Indexoutofboundsexception,我试图弄清楚CreateArthmeticSeq中的循环为什么会越界,但无法弄清楚。当i=listSize-1时,循环应该停止,因为它是(i=0;i

我试图弄清楚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当然了!非常感谢。这很有道理,我只是忽略了它。我问了你同样的问题;)哈哈,这就是为什么我删除了我的;)