2017-10-17 59 views
-1

我看过其他有关越界错误的问题并理解它们,无法理解此代码中的错误。我的阵列在哪里出界?

问题:JAVA程序将读取与关系R对应的布尔矩阵,并输出R是否自反,对称,反对称和/或传递。程序的输入将是n×n布尔矩阵的大小n,后跟矩阵元素。

程序在输入关系不具有某个属性的情况下必须输出一个原因。

解决方案:我所提供的代码,它抛出了“java.lang.ArrayIndexOutOfBoundsException”错误在主线路65我看不到我的阵列是如何出界

ERROR: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at 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); 
}} 
+2

和什么是65行? – Stultuske

+0

你指定了参数吗? –

+0

请在您的问题中提供完整的堆栈放弃。 – AxelH

回答

0

我不知道的StdDraw.setXscale(0, n - 1);确切的工作,但我认为它会创建一个表,N-1行。所以如果你尝试用n行填充它,会出现一个界限错误。尝试在47行使用此:

StdDraw.setXscale(0, n); 
StdDraw.setYscale(0, n); 

正如下面的文章的评论中指出:如果你鸵鸟政策输入任何参数调用程序时you'll得到一个出界异常,因为程序在预计参数阿里,没有任何。

提供参数打开命令行并调用/ java yourcompiledjavafile arg [0] arg [1]

+0

这可能是一个好主意,但我不认为这是异常的原因 –

+0

我试着改变很多值,但没有奏效。我如何提供主要的参数? – user4127994

+0

我在终端窗口中试过这个命令,它说没有找到这样的文件或目录。我是否要进入某个目录然后执行命令? 我可以添加一个try-catch吗? – user4127994