2013-06-14 2 views
1

Мне нужно напечатать это в правильном формате двухмерных массивов. Что-то не так. Нужна печать с помощью метода. Мой вывод - это то, что кажется бесконечным циклом.Печать двухмерной матрицы (массива) java

import java.util.Scanner; 
public class hw3 { 
public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.println("What is the dimension of your matrix?"); 
    int matrixdim = input.nextInt(); 
    double[][] matrix = new double[matrixdim][matrixdim]; 

    System.out.println("Enter " + matrixdim + " rows, and " + matrixdim + " columns."); 
    Scanner input1= new Scanner(System.in); 
    for (int row = 0; row < matrix.length; row++) { 
     for (int column = 0; column < matrix[row].length; column++) 
      matrix[row][column] = input1.nextDouble(); 
    } 
    System.out.println("Your original array:"); 

    System.out.println(printArray(matrix)); 
} 
public static double printArray(double matrix[][]){ 
    for (int row = 0; row < matrix.length; row++) { 
     for (int column = 0; column < matrix[row].length;column++) { 
     System.out.println(matrix[row][column] + " "); 
    } 
    System.out.println(); 
} 
return printArray(matrix); 
+0

Что именно происходит при запуске кода? – John

+1

Если у вас есть бесконечный цикл, вы должны упустить '}' ... Проверьте последовательность '{}'. Если вы используете некоторую среду IDE, например Eclipse, просто щелкните правой кнопкой мыши -> Source -> Format. Это должно помочь вам с правильным отступом. – CHEBURASHKA

ответ

12

Как я снова return printArray(matrix); сказал вам в моем previous answer ссылающегося же метода в конце вашего метода может привести к не вызывая его снова (и снова) до ошибки StackOverflow.

Изменить тип возврата на void. Теперь ваш метод может выглядеть

public static void printArray(double matrix[][]) { 
    for (int row = 0; row < matrix.length; row++) { 
     for (int column = 0; column < matrix[row].length; column++) { 
      System.out.print(matrix[row][column] + " "); 
     } 
     System.out.println(); 
    } 
} 

или даже лучше

public static void printArray(double matrix[][]) { 
    for (double[] row : matrix) 
     System.out.println(Arrays.toString(row));  
} 
2

Просто измените println на print в первом вызове печати.

public static void printArray(double matrix[][]){ 
    for (...) { 
     for (...) { 
      //here just print goes 
      System.out.print(matrix[row][column] + " "); 
     } 
     //at the end each row of the matrix you want the new line - println is good here 
     System.out.println(); 
    } 
} 

print не печатает символ новой строки (\n) в конце выходного сигнала, в то время как println делает. Вот почему вы получаете уродливый отпечаток.

Кроме того, printArray не должна возвращать значение, то оно должно быть:

public static void printArray(double[][] matrix) 

Я думаю, что это где вы получаете свой бесконечный цикл. Не возвращай ничего - не нужно, ты просто печатаешь его.

+0

все еще бесконечный цикл – user2484149

+0

См. Мой обновленный ответ - последние три строки. – darijan

+0

@jahroy Потому что это рекурсивный звонок. Каждый раз, когда метод пытается вернуть значение, он снова вызывает себя. Попробуйте этот метод: 'public int someMethod (int i) {return someMethod (i); } 'и называть его где угодно. – darijan

1

Вам не хватает a} и используйте print вместо println внутри вашей второй петли.

public static double printArray(double matrix[][]) 
{ 
    for (int row = 0; row < matrix.length; row++) 
    { 
     for (int column = 0; column < matrix[row].length;column++) 
     { 
      System.out.print(matrix[row][column] + " "); 
     } 
     System.out.println(); 
    } 
} 
0

вы получили System.out.println(printArray(matrix)); вместо printArray(matrix);, так как ваш метод получил звонки печати в нем так или иначе

и, как упоминалось выше, - print против println

+0

все еще бесконечный – user2484149

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