2

我是java新手,我正在尝试实现一个接口。

所以主类

public interface Matrix{
    //returns number of rows
    int numRows();
    //returns number of columns
    int numColumns();

    int addRows(...);
    ....
}

现在基本上我要解决的是让我们说..我有两个矩阵matrixamatrixb类型Matrix

我想基本上扩展矩阵行。所以如果matrixa有 10 行并且matrixb有 2 行。然后我想回来matrixa+=matrixb

(当然假设列数相同。)

这样做的正确方法是什么?

4

5 回答 5

6

您可以在界面中添加另一种方法,例如:

   public interface Matrix{
             ....
           Matrix add( Matrix b );
    }

并检查在实现中扩展行的必要性。

于 2013-01-03T20:28:01.197 回答
1

为什么你不能完全按照你的意愿去做?

Java 没有运算符重载。您不能+=与您的对象一起使用。在 Java 世界中,人们普遍认为运算符重载会降低可读性。

你可以做什么

但是,您可以使用诸如addMatrix(Matrix m).

public interface Matrix{
    int getNumberOfRows();
    int getNumberOfColumns();

    Matrix addMatrix(Matrix m);
}
于 2013-01-03T20:28:32.033 回答
0

简单的答案是:您通过阅读此http://docs.oracle.com/javase/tutorial/java/IandI/usinginterface.html来实现一个接口

因为您是初学者,所以我将从 Java 教程开始。您不能实例化接口,接口(通常)仅包含方法头定义。使用接口的方式是通过创建一个普通的 java 类来实现它们,该类为接口中的每个方法实现代码。

顺便说一句,我强烈建议您阅读教程,而不是依赖 SO 来解决此类问题。

于 2013-01-03T20:26:12.330 回答
0

我试图理解这个问题。我认为您要做的是定义:

int addRows(Matrix b);

在该方法实现中,您将:

  1. 展开你的矩阵
  2. 将 b 行复制到新扩展的矩阵中
  3. 返回新的行数

所有这些实现都取决于您如何实现 Matrix 接口。

于 2013-01-03T20:30:41.113 回答
0

要实现接口,您需要创建一个实现接口及其所有方法的类。

public class MatrixImpl implements Matrix{

    private List<List<Integer>> elements = new ArrayList<List<Integer>>();
    private int rowSize;

    ...

    /** appends rows from provided matrix to this matrix */
    public Matrix addRows(Matrix b){
        List<List<Integer>> rows;
        if (b == this){
            rows = new ArrayList(b.elements);
        }else {
            rows = b.elements;
        }
        for (List<Integer> row : rows){
           if(row.size() == rowSize){
              elements.add(new ArrayList(row));
           }else{
              // do some error handling
           }
        }
        return this;// you may want to return a clone instead
    }

    ...

}
于 2013-01-03T20:36:41.020 回答