我正在编写代码,以获取用户以n值形式输入的矩阵: 假如 n = 3 输出: 3 3 3 3 0 3 3 1 3 3 2 3 3 3 3
我在以下行中得到ArrayIndexOutOfBoundException:a[i][j]=n;
import java.util.*;
public class HelloWorld{
public static void main(String []args){
Scanner scan = new Scanner(System.in);
//System.out.println("Enter n");
int n = scan.nextInt();
System.out.println(n);
int a[][]= new int[n][n];
int b=0;
int mid = n/2 +1;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i+j==mid)
{
a[i][j]=n-b;
b++;
}
else
{
a[i][j]=n;
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
System.out.print(a[i][j]);
}
System.out.println();
}
}
}
答案 0 :(得分:0)
如果对负数或索引的要求大于或等于数组的大小,则JAVA会引发ArrayIndexOutOfBounds异常。这与C / C ++不同,在C / C ++中,没有完成绑定检查的索引。 ArrayIndexOutOfBoundsException是仅在运行时抛出的Runtime异常。
答案 1 :(得分:0)
较小的循环修正
import java.util.*;
public class HelloWorld{
public static void main(String []args){
Scanner scan = new Scanner(System.in);
//System.out.println("Enter n");
int n = scan.nextInt();
System.out.println(n);
int a[][]= new int[n][n];
int b=0;
int mid = n/2 +1;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++) //minor correction here
{
if(i+j==mid)
{
a[i][j]=n-b;
b++;
}
else
{
a[i][j]=n;
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
System.out.print(a[i][j]);
}
System.out.println();
}
}
}
答案 2 :(得分:0)
看这行:
for(int j=0;i<n;j++)
您增加而“ i (也有一个小小的注解,通常最好以for循环增量编写++ i或++ j。这不是一个规则,对于大多数oldscool c-Devs来说更容易阅读)。还可以考虑留出空间以提高可读性:import java.util.*;
public class HelloWorld {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// System.out.println("Enter n");
int n = scan.nextInt();
System.out.println(n);
int a[][] = new int[n][n];
int b = 0;
int mid = n / 2 + 1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i + j == mid) {
a[i][j] = n - b;
b++;
} else {
a[i][j] = n;
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(a[i][j]);
}
System.out.println();
}
}