Вычитание массива Java

Мне нужно создать метод, который принимает в качестве аргумента многомерный массив целых чисел и выполняет следующие действия:

  • Проверяет, является ли количество строк и столбцов нечетным, в противном случае возвращает 0.

  • Если массив нечетный, то метод возвращает сумму членов средняя линия, за вычетом тех, что в среднем столбце.

Например :

2  4  6

9  10 17

1  6  18

Этот пример должен вернуть: (9 + 10 + 17) − (4 + 10 + 6) = 36 − 20 = 16

Вот что я сделал до сих пор:

static int [][] sub(int i , int j) {

    if (i%2 == 0 || j%2 == 0) 
    return 0;

    else
    int[][] tab = new int[i][j];

    // Create array with values from 0 to 99 randomly
    for (int i = 0; i < tab.length; i++) {
         for (int j = 0; j < tab[i].length; j++) {
             tab[i][j] = (int) (Math.random() * 99);
         }
     }
}

После этого я действительно не знаю, что делать ... Спасибо, что помогли мне

Привет и добро пожаловать. Это домашнее задание?

sarkasronie 16.03.2018 09:43

Java не поддерживает функция.

Aniket Sahrawat 16.03.2018 09:44

@AniketSahrawat - что ты имеешь в виду?

Scary Wombat 16.03.2018 09:45

@ScaryWombat У нас есть методы: p

Aniket Sahrawat 16.03.2018 09:45

Я думаю, вы упустили, что ваш метод должен ожидать один аргумент, содержащий двумерный массив, а не создавать его и не возвращать?

Absent 16.03.2018 09:45

ну алгоритм, если вы предпочитаете

Vincent Koch 16.03.2018 09:45

@ScaryWombat И, конечно, я надеюсь, что мы не будем углубляться в те лямбды, которые поддерживают функциональное программирование.

Aniket Sahrawat 16.03.2018 09:47

Вы не делаете то, что вам сказали. Вы должны написать метод, который принимает двумерный массив и делать что-то. со значениями внутри. Вы создаете двумерный массив.

sarkasronie 16.03.2018 09:47

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

Paul Janssens 16.03.2018 09:48

@PaulJanssens, я не знаю, как вызвать записи массива.

Vincent Koch 16.03.2018 09:51

Я думаю, ты сможешь сделать это самостоятельно. Вы уже понимаете петли и знаете их параметры.

IX33U 16.03.2018 09:51

@RedaLihuak Вы можете добавлять записи с помощью +? : D

IX33U 16.03.2018 09:52

Лучшая часть - это писать код для такого рода запросов и никогда не получать «Ответ полезен» или быть выбранным в качестве окончательного ответа.

Pitto 16.03.2018 10:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
13
224
2

Ответы 2

Я думаю тебе нужно что-то вроде этого

static int sub(int i , int j) {
    int result;
    int[][] tab = new int[i][j];
    if (i % 2 == 0 || j % 2 == 0) {
        result = 0;
    }
    else {
        // Create array with values from 0 to 99 randomly
        for (int k = 0; k < i; k++) {
            for (int l = 0; l < j; l++) {
                tab[k][l] =(int)(Math.random()*99);
            }
        }
        int horizontalSum = 0;
        int verticalSum = 0;

        for(int k = 0; k<i; k++){
            horizontalSum+=tab[(i/2)][k];
        }
        for(int l = 0; l<j; l++){
            verticalSum += tab[l][(j/2)];
        }
        result = horizontalSum-verticalSum;
    }
    return result;
}

Удачи с домашним заданием. -_-

Ваш метод принимает в качестве параметров два целых числа, а не двумерный массив. Вместо этого он возвращает двумерный массив, тогда как должен просто возвращать int.

Фактически это:

static int [][] sub(int i , int j) {

    if (i%2 == 0 || j%2 == 0) 
    return 0;
           ^

это ошибка времени компиляции. Вы заявили о возврате двумерного целочисленного массива, но вы просто возвращаете целое число.

Думаю, ваш метод должен выглядеть так:

static int sub(int[][] array)
{
    if (array.length % 2 == 0) return 0;
    for (int[] x : array)
    {
        if (x.length % 2 == 0) return 0;
    }


    int result = 0;
    int middle = array.length / 2;

    for (int i : array[middle])
    {
        result += i;
    }

    for (int i = 0; i < array[middle].length; i++)
    {
        result -= array[i][middle];
    }

    return result;
}

Это не сработает. array.length возвращает целое число, а не float или double. Так, например, если вы сделаете 5/2, он вернет 2, а не 2,5. Вы должны добавить 1, а не 0,5.

Emre Acar 16.03.2018 10:07

@EmreAcar Вы правы, мой +0,5 бесполезен, но он не нарушает метод, поскольку массивы начинаются с 0, и мне даже не нужно добавлять 1. Я обновил свой ответ.

Impulse The Fox 16.03.2018 10:14

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