【问题标题】:constructors with different array-arguments java具有不同数组参数的构造函数java
【发布时间】:2017-06-10 11:57:18
【问题描述】:

我正在尝试使用数组参数创建不同的构造函数。数组有不同的维度。但实际上二维构造函数随时调用。

public Network(String [] adjacentMatrixRows) throws AdjacentMatrixCreationExeption {
    this.adjacentMatrix = new int[adjacentMatrixRows.length][];
    String [][] stringMatrix = new String[adjacentMatrixRows.length][];
    for (int i = 0; i < adjacentMatrixRows.length; i++) {
        stringMatrix[i] = adjacentMatrixRows[i].trim().split(" ");
        this.adjacentMatrix[i] = new int[stringMatrix[i].length];
    }
    for (int i = 0; i < stringMatrix.length; i++){
        for (int j = 0; j < stringMatrix[i].length; j++) {
            try {
                this.adjacentMatrix[i][j] = Integer.parseInt(stringMatrix[i][j]);
            }
            catch (NumberFormatException e){
                throw  new AdjacentMatrixCreationExeption("Wrong data format in String[].");
            }
        }
    }
}
public Network(String[][] adjacentMatrix) throws AdjacentMatrixCreationExeption {
    this.adjacentMatrix = new int [adjacentMatrix.length][];
    for (int i = 0; i < adjacentMatrix.length; i++){
        this.adjacentMatrix[i] = new int[adjacentMatrix[i].length];
        for (int j = 0; j < adjacentMatrix[i].length; j++) {
            try {
                this.adjacentMatrix[i][j] = Integer.parseInt(adjacentMatrix[i][j]);
            }
            catch (NumberFormatException e){
                throw  new AdjacentMatrixCreationExeption("Wrong data format in String[][].");
            }
        }
    }
}

可能是问题引起的,因为数组由数组组成。但是我该如何解决呢?

更新: 我正在尝试在 Junit 测试中调用构造函数:

` Throwable exception = assertThrows(AdjacentMatrixCreationExeption.class, ()-> {
             Network network = new Network(new String [][]{{"1", "a"},{"1", "1"}});});
        assertEquals("Wrong data format in String[][].", exception.getMessage());`

     Throwable exception2 = assertThrows(AdjacentMatrixCreationExeption.class, ()-> {
                Network network = new Network(new String []{"1", "a", "1", "1"});});
            assertEquals("Wrong data format in String[].", exception.getMessage());

JUnit 测试的输出:

org.opentest4j.AssertionFailedError: expected: <Wrong data format in String[].> but was: <Wrong data format in String[][].>
Expected :Wrong data format in String[].
Actual   :Wrong data format in String[][].

【问题讨论】:

  • 请在您的问题中说明您如何尝试调用构造函数。
  • @AndyTurner,已更新。
  • 我已经测试了你的代码,但它给了我编译错误。请在发布 Network 类的完整代码之前修复错误。
  • @KDavid-Valerio,你在说什么?它在我的电脑上编译。如果您在谈论 JUnit 测试,则必须使用 "@"Test 注释 运行它们

标签: java arrays constructor overloading junit5


【解决方案1】:

我做了下面的测试

public class Test {

    public static void main(String[] args) {
        String[] array = new String[1];
        String[][] array2D = new String[1][1];

        Network n1 = new Network(array);
        Network n2 = new Network(array2D);
    }

}

这是具有两个构造函数的 Network 类:

class Network {
    public Network (String [] adjacentMatrixRows){
        System.out.println("Array");
    }

    public Network (String [][] adjacentMatrixRows){
        System.out.println("2D Array");
    }
}

我得到以下输出:

数组

二维数组

【讨论】:

  • 您在这里要求澄清,因此您应该将其作为评论发布(您可以链接到例如一个 ideone 示例来演示您描述的行为,而不是试图在评论中发布)。
  • 我删除了我的问题,所以现在我的帖子是一个答案。
【解决方案2】:

我找到了答案!在我的 JUnit 测试中,我总是使用称为“异常”的单个异常。但在第二次测试中,我不得不使用“exception2”

Throwable exception2 = assertThrows(AdjacentMatrixCreationExeption.class, ()-> {
        Network network = new Network(new String []{"1", "a", "1", "1"});});
    assertEquals("Wrong data format in String[].", exception2.getMessage());

感谢大家。问题已解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多