2015-02-06 91 views
1

所以我一直在用Java中的二维数组摆弄。我正在通过使用数组作为矩阵来练习。我创建了2个Matrix对象,它们有一个myMatrix二维数组字段。在主要方法中,我称第一个Matrix对象通过addMatrix方法将其自身添加到第二个矩阵(如果可能的话)。我有一个printResultDetail方法来实际打印出正在发生的事情。我想要第一个对象的myMatrix打印出正确格式化的行和列。然后我希望第二个对象的myMatrix对象在前一个的右边打印出来。然后,我希望由第一个对象的myResultMatrix 2D数组给出的新输出矩阵再次向右打印出来。打印两个彼此相邻的2D阵列

如何使数组并排打印?

注意:printResultDetail不正确。我只是想弄清楚如何去做。

import java.util.Arrays; 
import java.util.Random; 

public class Matrix {  

int[][] myMatrix; 
int[][] myResultMatrix; 
int myMatrixRow; 
int myMatrixCol; 

Random rand = new Random(); 

public Matrix(int rowSize, int colSize, int maxVal, int minVal){ 
    myMatrixRow = rowSize; 
    myMatrixCol = colSize; 

    myMatrix = new int[rowSize][colSize]; 

    for(int i = 0; i < rowSize; i++){ 
     for(int k = 0; k < colSize; k++){ 
      myMatrix[i][k] = rand.nextInt((maxVal - minVal) + 1) + minVal; //assigns each part of array to rand # 
     } 
    } 

    for(int i = 0; i<myMatrixRow; i++){ 
     System.out.print("["); 
     for(int j = 0; j<myMatrixCol; j++){ 
      System.out.print(" " + myMatrix[i][j] + " "); 
     } 
     System.out.print("]"); 
     System.out.println(); 
    } 
    //System.out.println(Arrays.deepToString(myMatrix)); 

} 

public int[][] multMatrix(Matrix matrix2){ 

    if(canMultiply(matrix2) == true){ 

     myResultMatrix = new int[myMatrixRow][matrix2.myMatrixCol]; 

     for (int i = 0; i < myMatrixRow; i++) { 
      for (int j = 0; j < matrix2.myMatrixCol; j++) { 
       for (int k = 0; k < myMatrixCol; k++) { 
        myResultMatrix[i][j] += myMatrix[i][k] * matrix2.myMatrix[k][j]; 
       } 
      } 
     } 
     return myResultMatrix; 
    }else{ 
     myResultMatrix = null; 
     return null; 
    } 

} 


public boolean canMultiply(Matrix matrix2){ //can only multiply if the columns of 
          //first matrix is equal to the rows of the second 
    if(myMatrixCol == matrix2.myMatrixRow){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

public int[][] addMatrix(Matrix matrix2){ 
    if(myMatrixRow == matrix2.myMatrixRow && myMatrixCol == matrix2.myMatrixCol){ 

     myResultMatrix = new int[myMatrixRow][myMatrixCol]; 

     for(int i = 0; i < myMatrixRow; i++){ 
      for(int k = 0; k < myMatrixCol; k++){ 
       myResultMatrix[i][k] = myMatrix[i][k] + matrix2.myMatrix[i][k]; 
      } 
     } 
     return myResultMatrix; 
    }else{ 
     myResultMatrix = null; 
     return null; 
    } 
} 


public void printResultDetail(Matrix matrix2){ 

    for(int i = 0; i<myMatrixRow; i++){ 
     System.out.print("["); 
     for(int j = 0; j<myMatrixCol; j++){ 
      System.out.print(" " + myMatrix[i][j] + " "); 
     } 
     System.out.print("]  "); 
     System.out.println(); 

     for(int k = 0; k<matrix2.myMatrixRow; k++){ 
     System.out.print("["); 
     for(int x = 0; x<matrix2.myMatrixCol; x++){ 
      System.out.print(" " + matrix2.myMatrix[k][x] + " "); 
     } 
     System.out.print("]"); 


    } 

    } 
} 


public static void main(String[] args){ 
    Matrix firstMatrix = new Matrix(3, 3, 5, 1); 
    Matrix secondMatrix = new Matrix(3, 3, 5, 1); 
    System.out.println(Arrays.deepToString(firstMatrix.addMatrix(secondMatrix))); 
    //System.out.println(Arrays.deepToString(firstMatrix.addMatrix(secondMatrix))); 
} 
} 
+0

为了实现像''array1element''array1element''array2element'您array2element'需要在同一时间进行迭代两个数组,而不是2后1 – csmckelvey 2015-02-06 23:55:48

+0

如果你输出到控制台你”您需要一种方法来接受所有3个矩阵,并一次输出一行,就像您现在要用'this'和'matrix2'的printResultDetail()所做的那样,只有您必须嵌套你的循环或找到一种方法来控制所有3个矩阵具有相同的循环。 – adamdc78 2015-02-06 23:56:35

+0

我的问题是,我应该在添加或乘上矩阵后调用printResultDetail。乘法时,矩阵将有不同的长度。那么我将如何嵌套循环? – noobforce 2015-02-07 00:01:43

回答

0

下面这段代码将打印:

matrix side by side

或许可以作为样品使用。

public class Test { 

    public static void main(String[] args) { 
     double[][] matrixLeft = {{1,5,2,8,4,70,55,80},{3,7,4,2,6,60,30,70}}; 
     double[][] matrixRight = {{8,1,6,4,2,10,40,60},{1,5,2,8,4,70,50,80},{3,7,4,2,6,60,30,70}}; 

     int endOfLoop = matrixLeft.length > matrixRight.length ? matrixLeft.length : matrixRight.length; 
     for(int i = 0; i < endOfLoop; i++){ 
      if(matrixLeft.length > i){ 
       printLine(matrixLeft[i]); 
       System.out.print("  "); 
      } else { 
       printBlankLine(matrixLeft[0].length); 
      } 

      if(matrixRight.length > i){ 
       printLine(matrixRight[i]); 
      } 
      System.out.println(); 
     } 
    } 

    private static void printLine(double[] line){ 
     for(double number : line){ 
      System.out.print(number + " "); 
     } 
    } 

    private static void printBlankLine(int lenght){ 
     for(int i=0; i < lenght; i++){ 
      System.out.print("  "); 
     } 
    } 

}