将类Number的值添加到Matrix类的Hashmap中的ArrayList

时间:2015-04-21 17:03:12

标签: java

我有一个类Number,它假设代表一个分数并实现一个接口Calculation,然后是类Matrix,它假设扩展Class Number并代表一个矩阵,这里是代码:

public interface Calculation {

    public int numberAddition();
    public int numberSubtraction();

}

public class Number implements Calculation {
    private int numerator;
    private int denominator;

    public Number(int n, int d) {
        numerator = n;
        denominator = d;
    }

    public Number() {
        this(0, 1);
    }

    public Number(int n) {
        numerator = n;
        denominator = 1;
    }
    public void setNumerator(int n) {
        numerator = n;
    }
    public void setDenominator(int d) {
        denominator = d;
    }

    public int getNumerator() {
        return numerator;
    }
    public int getDenominator() {
        return denominator;
    }
    public String toString() {
        String s = getNumerator() + "/" + getDenominator();
        return s;
    }

    public void setNumber(int n) {
        numerator = n;
        denominator = n;
    }

    public boolean equals(boolean b) {
        Object o1 = new Object();
        Object o2 = o1;
        if (o1 == o2) return true;
        else return false;
    }

    public int numberAddition(int x, int y) {
        return x + y;
    }
    public int numberSubtraction(int x, int y) {
        return x + y;
    }

}

public class Matrix extends Number {
    private HashMap < Integer, ArrayList < Number >> hm;
    private static int rows;
    private static int cols;

    public Matrix(int r, int c) {
        hm = new HashMap < Integer, ArrayList < Number >> ();
        rows = r;
        cols = c;
    }
    public void fillMatrix() {

    }
}

现在问题:

  1. 当我上课Number implement Calculation时,它说“数字必须是抽象的”,当我把它抽象化时,它会说“矩阵不能扩展数字”。
  2. 如何使用fillMatrix方法填充矩阵,如何填充ArrayListHashMap

5 个答案:

答案 0 :(得分:1)

您有一些设计和OOP问题:

Number是一个分数; Matrix Numbers组成,它不是Number。那么它不应该extends

当一个类实现一个接口时,它意味着它将实现一些容量或具有接口所描述的一些行为。在代码中,接口中声明的方法的签名必须与实现它的类中定义的签名相匹配。

在您的情况下,界面Calculation声明

public int numberAddition();
public int numberSubtraction();

没有任何参数。由于您在课程Number中定义了

public int numberAddition(int x, int y) {...}
public int numberSubtraction(int x, int y) {...}

编译器要求您声明类abstract。对他来说,你没有履行Calculation的合同。

A - 可能是 - 更好的界面

public interface Calculation {
   Number add(Number n);
   Number substract(Number n);
}

然后,对于Matrix,只需删除extends Number。在实现方面,最简单的方法是使用普通的java数组或List/ArrayList

建立二维数组。
public class Matrix {
    private Number[][] hm;

    public Matrix(int r, int c)
    {
        hm = new Number[r][c];
    }

    // fill the matrix with Number n
    public void fillMatrix(Number n)
    {
        for (int r = 0; r < hm.length; r++) {
           for (int c = 0; c < hm[r].length; c++) {
              hm[r][c] = n;
           }
        }
    }
}

注意:在上面的实现中,所有矩阵元素都将引用Number的相同实例。如果 Number是不可变的(即没有setter),那么可能会很好。如果要在适当的位置修改矩阵元素,则应该使用每个元素的新实例初始化矩阵。

答案 1 :(得分:0)

如果Number实施Calculation,则必须声明所需的方法 - numberAdditionnumberSubtraction。它可以通过两种方式实现:通过使用实现(正文)声明它们,或者通过声明它们abstract。如果Number的任何方法被声明为abstract,则该类也必须为abstract

由于Matrix中的错误,我怀疑Number无法编译。但是,一旦修复了这些,您应该编译正确(如果Number不是abstract)或者说Matrix需要实现从{{继承的abstract方法的错误1}},或者也声明它们Number

答案 2 :(得分:0)

  1. 扩展Calculation时,您需要提供实施numberAddition()numberSubtraction()(不含参数)。如果你不这样做,你将会强制使该类抽象,但任何扩展Number的非抽象类都将被强制执行。

  2. 你想在这做什么?用你的矩阵ArrayList和HashMat填充什么?这将取决于你想要做的事情。

  3. 此外,我不明白为什么Matrix必须延长Number。从概念上讲,矩阵不是数字,而是数字的排列。所以继承关系可能不是你想要的。请记住,继承可以粗略地转换为&#34; IS&#34;。 PersonLivingThing

答案 3 :(得分:0)

  

1)当我使用类号实现计算时,它表示必须编号   是抽象的,

这是因为你提示在intrerface中描述public int numberAddition();的主体而不是你创建一个新方法numberAddition(int x, int y)(注意这两个方法不相同),你也不能将Number作为抽象这是实现界面的必要条件。所以错误就会被抛出。

数字不是抽象的,并且不会覆盖计算中的抽象方法numberSubtraction()

  

当我把它抽象化时,它会说&#34; Matrix无法扩展数字&#34;。

因为你再次提到在Matrix类中提供接口方法的实现,因为Matrix扩展了实现接口的抽象类Number

答案 4 :(得分:0)

问题1。

Number

中实现所有抽象方法
    @Override
    public int numberAddition() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public int numberSubtraction() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

问题2。

如何添加到HashMap

的示例
int key = 0;
ArrayList<Number> list = new ArrayList();

hm.put(key, list);

正如另一位用户所说,您的类层次结构存在一些问题。您需要另一个扩展Number的类,以便将其添加到Matix HashMap