我已经查看了有关越界错误的其他问题并了解它们,无法理解此代码中的错误。
问题:一个JAVA程序,它将读取对应于关系R的布尔矩阵,并输出R是自反,对称,反对称和/或传递。程序的输入将是n×n布尔矩阵的大小n,后跟矩阵元素。
在输入关系无法具有特定属性的情况下,程序必须输出原因。
解决方案:我提供了代码,它会抛出" java.lang.ArrayIndexOutOfBoundsException"主要和第65行的错误。我无法看到我的数组是如何超出范围的
错误:线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:1在XYZ.BooleanMatrix.main(BooleanMatrix.java:65)
代码:
package XYZ;
import edu.princeton.cs.algs4.*;
public class BooleanMatrix {
// read matrix from standard input
public static boolean[][] read() {
int n = StdIn.readInt();
boolean[][] a = new boolean[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (StdIn.readInt() != 0)
a[i][j] = true;
}
}
return a;
}
// print matrix to standard output
public static void print(boolean[][] a) {
int n = a.length;
StdOut.println(n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j])
StdOut.print("1 ");
else
StdOut.print("0 ");
}
StdOut.println();
}
}
// random n-by-n matrix, where each entry is true with probability p
public static boolean[][] random(int n, double p) {
boolean[][] a = new boolean[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
a[i][j] = StdRandom.bernoulli(p);
}
}
return a;
}
// display the matrix using standard draw
// depending on variable which, plot true or false entries in foreground
// color
public static void show(boolean[][] a, boolean which) {
int n = a.length;
StdDraw.setXscale(0, n - 1);
StdDraw.setYscale(0, n - 1);
double r = 0.5;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j] == which) {
StdDraw.filledSquare(j, n - i - 1, r);
}
}
}
}
// test client
public static void main(String[] args) {
int n = Integer.parseInt(args[0]); //LINE 65
double p = Double.parseDouble(args[1]);
boolean[][] a = random(n, p);
print(a);
show(a, true);
}}
答案 0 :(得分:0)
我不知道StdDraw.setXscale(0, n - 1);
的确切工作方式,但我认为它会创建一个包含n-1行的表格。所以如果你试着用n行填充它会有一个越界错误。尝试在第47行使用它:
StdDraw.setXscale(0, n);
StdDraw.setYscale(0, n);
如下面评论中所述,你的帖子:如果你在调用程序时没有输入任何参数,你会得到一个超出范围的例外,因为程序需要aray中的参数而没有任何参数。
提供参数open命令行和调用/ java yourcompiledjavafile arg [0] arg [1]