Отрицательные числа в массиве в положительные Java - PullRequest
0 голосов
/ 11 апреля 2020

Я знаю, что подобные вопросы задавались и отвечались, но мой код все еще не работает, и я хотел попросить вас о помощи.

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

В основном методе я хочу создать массив, заполнить его целыми числами и вызвать для него метод, созданный выше.

У компиляторов нет проблем с моим кодом, но выход по-прежнему заполнен отрицательными числами. Что я делаю не так?

Ниже моего кода (слова на немецком языке, извините за тех, кто не понимает):

public class BetragAnwendung {
    public int[] bildeBetrag(int[] werte) {
        for (int i : werte) {
            Math.abs(i);
        }
        return werte;
    }

    public static void main(String[] args) {
        BetragAnwendung betragAnwendung = new BetragAnwendung();
        int[] array = { 1, -2, -42 };
        int[] positiveArray = betragAnwendung.bildeBetrag(array);
        for (int i = 0; i < array.length; i++) {
            System.out.println(positiveArray[i]);
        }
    }
}

Вывод:

1
-2
-42

Заранее спасибо!

Ответы [ 3 ]

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

Я бы сделал это с помощью void-метода и вывел бы массив непосредственно в этом методе после того, как каждый элемент массива сделал бы абсолютное значение с Math.abs. Потому что в противном случае вы изменяете массив в методе и возвращаете его, и вам следует избегать этого. Я надеюсь, что смогу помочь тебе вот так

public class negativeInPositiveElementsArray {
    public static class BetragAnwendung {

        public static void bildeBetrag(int[] werte) {
            for (int i = 0; i < werte.length; ++i) { // Note we're iterating the array's indexes!
                werte[i] = Math.abs(werte[i]);
                System.out.println(werte[i]);
            }
        }


        public static void main(String[] args) {

            BetragAnwendung betragAnwendung = new BetragAnwendung();

            int[] array = {1, -2, -42};

            betragAnwendung.bildeBetrag(array);
        }
    }
}
0 голосов
/ 11 апреля 2020

Вы не заменяете werte[i] на Math.abs(werte[i]). Кроме того, вам не нужно возвращать массив. Если вы измените его в bildeBetrag, вы получите модифицированный массив в вызывающем методе. Проверьте Передаются ли массивы по значению или по ссылке в Java? , чтобы узнать больше об этом.

Демонстрация:

import java.util.Arrays;

public class BetragAnwendung {
    public static void main(String args[]) {
        int[] array = { 1, -2, -42 };
        BetragAnwendung betragAnwendung = new BetragAnwendung();
        betragAnwendung.bildeBetrag(array);
        System.out.println(Arrays.toString(array));
    }

    public void bildeBetrag(int[] werte) {// Note the return type as void
        for (int i = 0; i < werte.length; i++) {
            werte[i] = Math.abs(werte[i]);
        }
    }
}

Вывод:

[1, 2, 42]

Если вы не хотите, чтобы werte[] был модифицирован, вам нужно его клонировать, модифицировать клон и вернуть модифицированный клон.

Демо:

import java.util.Arrays;

public class BetragAnwendung {
    public static void main(String args[]) {
        int[] array = { 1, -2, -42 };
        BetragAnwendung betragAnwendung = new BetragAnwendung();
        System.out.println(Arrays.toString(betragAnwendung.bildeBetrag(array)));
    }

    public int[] bildeBetrag(int[] werte) {
        int[] werteClone = werte.clone();
        for (int i = 0; i < werte.length; i++) {
            werteClone[i] = Math.abs(werteClone[i]);
        }
        return werteClone;
    }
}

Выход:

[1, 2, 42]
0 голосов
/ 11 апреля 2020

Math.abs получает число, а возвращает его абсолютное значение - возвращаемое значение, которое вы в настоящее время игнорируете. Вам необходимо присвоить его обратно массиву:

public int[] bildeBetrag(int[] werte) {
    for (int i = 0; i < werte.length; ++i) { // Note we're iterating the array's indexes!
        werte[i] = Math.abs(werte[i]);
    }

    return werte;
}
...