Как сделать двумерный массив, в котором каждая следующая строка является квадратом предыдущей строки в Java? - PullRequest
0 голосов
/ 05 апреля 2020

Мне нужно сделать обобщенную функцию c, которая принимает массив чисел (целые, двойные или любые другие), а затем создать двумерный массив, в котором первая строка - это массив, а каждая следующая строка - предыдущая. в квадрате. То, что я сделал, дает мне

java .lang.object не может быть приведен к java .lang.number

, даже если я поставлю E extends Number. Я попробовал ту же функцию, используя только int, и она делает то, что мне нужно.

Где я допустил ошибку? Я неправильно использую «E расширяет номер»?

public static<E> void napraviMatricu(E[] niz) {
    int n = niz.length;
    E[][] matrica = (E[][]) new Object[n][n];

    for(int i = 0; i < matrica[0].length; i++)
        matrica[0][i] = niz[i];

    for(int i = 1; i < matrica.length; i++)
        for(int j = 0; j < matrica[i].length; j++)
            matrica[i][j] = matrica[i-1][j] * matrica[i-1][j];

    for(int i = 0; i < matrica.length; i++) {
        for(int j = 0; j < matrica[i]. length; j++)
            System.out.print(matrica[i][j] + " ");
        System.out.println("");
    }
}

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Согласно этой ссылке, генерики Java не предназначены для выполнения арифметических c операций. Я надеюсь, что это поможет вам в отношении обобщенных c методов и арифметических c операций: Использование обобщенного c класса для выполнения базовых c арифметических c операций

0 голосов
/ 05 апреля 2020

Это ваша проблема:

E[][] matrica = (E[][]) new Object[n][n];

Сделайте это (cls имеет тип Class<E>):

@SuppressWarnings("unchecked")
E[][] matrica = (E[][]) Array.newInstance(cls, n, n);

Ссылка

...