【问题标题】:Java Matrices - Transpose & SumJava 矩阵 - 转置和求和
【发布时间】:2015-06-19 15:58:50
【问题描述】:

我正在开发 Eclipse 上的 Matrix 程序,目前我被困在 2 种我认为是最简单的方法上。我正在研究的第一种方法是从 @Test 用例中获取 2 个不同的 2D 数组的总和,并在新的 2D 数组中返回总和。我已经有一个二维数组实例变量。我被卡住的原因是因为方法中的参数。除了类 (Matrix) 和变量 (other) 之外,该参数不提供任何变量。所以我想知道如何开始这个方法,最重要的是返回 sum 数组。

我坚持的另一种方法是转置方法,您必须翻转给定二维数组的行和列。我知道我必须创建一个临时二维数组才能将内容存储回原始二维数组,但由于某种原因它没有通过测试用例。如果有人可以帮助我使用这两种方法,将不胜感激。

import java.util.Arrays;

public class Matrix {

    private int[][] array;
    private int[][] array2;
    private int theRow;
    private int theCol;

    public Matrix(int[][] arrayOfArrays) {
        // TODO Auto-generated constructor stub
        array = new int[arrayOfArrays.length][arrayOfArrays[0].length];

        for (int r = 0; r < arrayOfArrays.length; r++) {
            for (int c = 0; c < arrayOfArrays[r].length; c++) {
                array[r][c] = arrayOfArrays[r][c];
            }
        }

    }

    public int get(int row, int column) {

        return array[row][column];
    }


    public int getNumberOfRows() {

    int nRows = array.length;

    return nRows;
    }


    public int getNumberOfColumns() {

    int nCols = array[0].length;

    return nCols;


    }
    public String toString() {
        String res = "";
        for (int r = 0; r < array.length; r++) {
            for (int c = 0; c < array[r].length; c++) 
                res = res + array[r][c];
        }

        return res;
    }
    public Matrix sum(Matrix other) {


        return sum;
    }
    public void scalarMultiply(int scalar) {

        for (int r = 0; r < array.length; r++)  {
            for (int c = 0; c < array[0].length; c++) {
                array[r][c] = array[r][c] * scalar;
            }
        }
    }

    public void transpose() {

        int m = array.length;
        int n = array[0].length;

        int[][] transpose = new int [n][m];

        int temp;
        for (int r = 0; r < m; r++)  {
            for (int c = 0; c < n; c++)  {
                transpose[c][r] = array[r][c];
                array[r][c] = array[c][r];
                array[c][r] = transpose[c][r];                      
            }
        }
    }

    //The test cases for sum method and transpose method

    @Test
    public void testSum() {
        int[][] a1 = { { 1, 2, 3 }, 
                       { 5, 6, 7 } };
        Matrix a = new Matrix(a1);

        int[][] a2 = { { -2, -2, -2 }, 
                       { 4, 4, 4 } };
        Matrix b = new Matrix(a2);

        Matrix c = a.sum(b);

        assertEquals(-1, c.get(0, 0));
        assertEquals(0, c.get(0, 1));
        assertEquals(1, c.get(0, 2));
        assertEquals(9, c.get(1, 0));
        assertEquals(10, c.get(1, 1));
        assertEquals(11, c.get(1, 2));
    }

    @Test
    public void testTranspose() {

        int[][] a1 = { { 1, 3, 5 },
                       { 2, 4, 6 } };
        Matrix a = new Matrix(a1);
        a.transpose();

        assertEquals(1, a.get(0, 0));
        assertEquals(2, a.get(0, 1));
        assertEquals(3, a.get(1, 0));
        assertEquals(4, a.get(1, 1));
        assertEquals(5, a.get(2, 0));
        assertEquals(6, a.get(2, 1));
    }

【问题讨论】:

  • 我想看看你自己的一些测试用例。从一些简单的 1x2、2x1 和 2x2 矩阵开始,然后计算您自己的值。向我们展示您遇到的问题。关于要求是什么,我心中有一些问题,我想澄清一下。从transpose()开始
  • 您的sum(...) 方法无法正常工作。 other 的类型为 int[][],但您想返回 Matrix。这必须在解析器中生成编译时错误。请提供确切的代码以及您使用的测试。
  • 好的,我已经提供了两种方法的测试用例。我是否必须为 sum() 方法声明一个新数组?我对此很困惑。
  • 还提供了我的其余代码

标签: java arrays eclipse matrix transpose


【解决方案1】:

您需要更改尺寸,例如,2x3 -> 3x2。

import java.util.Arrays;

public class Matrix {

    private int[][] array;
    private int[][] array2;// remove this
    private int theRow;// remove this
    private int theCol;// remove this


    public void transpose() {

        int m = array.length;
        int n = array[0].length;

        int[][] transpose = new int [n][m];

        for (int r = 0; r < m; r++)  {
            for (int c = 0; c < n; c++)  {
                transpose[c][r] = array[r][c];                     
            }
        }
        array = transpose;
    }
}

【讨论】:

  • 这很有用!非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
相关资源
最近更新 更多