Конструкторы с различными аргументами массива Java

Я пытаюсь создать разные конструкторы с аргументами массива. Массивы имеют разные размеры. Но на практике 2-мерный конструктор вызывается в любое время.

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[][].");
            }
        }
    }
}

Возможно, проблема вызвана тем, что массив состоит из массивов. Но как я могу решить это?

UPD: я пытаюсь вызвать конструкторов в тестах 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[][].

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());

Спасибо всем. Проблема была решена.

Я сделал тест ниже

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");
    }
}

Я получил следующий вывод:

массив

2D Array

Другие вопросы по тегам