2015-03-16 3 views
0

Это то, что я написал:N * N матрица на Java

import javax.swing.JOptionPane; 

public class JavaTest{ 
    public static void main(String[] args){ 
    String numberString = JOptionPane.showInputDialog(null, "Enter number here: ", 
      null, JOptionPane.INFORMATION_MESSAGE); 
     int number = Integer.parseInt(numberString); 
     printMatrix(number); 
    } 

public static void printMatrix(int n){ 
    int[][] myList = new int[n][n]; 
    String output = ""; 

    for (int row = 1; row <= n; row++){ 
     for (int col = 1; col <= n; col++){ 
      myList[row][col] = (int) (Math.random() * 2); 
     } 
    } 
    for (int row = 1; row <= n; row++){ 
     for (int col = 1; col <= n; col++){ 
      if (col == n){ 
       output += "\n" + myList[row][col]; 
      } 
      else{ 
       output += myList[row][col] + " "; 
      } 
     } 
    } 


    if (n < 0){ 
     JOptionPane.showMessageDialog(null, 
       "Invalid input!"); 
    } 
    else{ 
     JOptionPane.showMessageDialog(null, 
       output); 
    } 
    } 
} 

Я запустить его и ввести 3 в диалоговом окне, и затмение IDE показывает, что

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 
    at JavaTest.printMatrix(JavaTest.java:17) 
    at JavaTest.main(JavaTest.java:8) 

Я думаю, в строке 17 и 8 программа идет не так, но я не знаю, как ее улучшить. Что я могу сделать для улучшения кода? Благодаря!

ответ

1

Вы зацикливание от 1 до п:

for (int row = 1; row <= n; row++){ 
    for (int col = 1; col <= n; col++){ 

Индексы начинаются с 0, а не на 1. Петли должны быть от 0 до п-1:

for (int row = 0; row < n; row++){ 
    for (int col = 0; col < n; col++){ 

(Это же ошибка может быть в других местах, а не только в первой строке, в которой было исключение.)

+0

Большое вам спасибо! – yolam

Смежные вопросы