Кодирование цикла вычитания, который принимает список - PullRequest
0 голосов
/ 28 мая 2019

Я делаю калькулятор и мне нужен цикл вычитания для работы кода.Сейчас он сканирует список, но делает только первые и последние числа, а не весь список.

if(a.equals("Subtract")) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        System.out.println("Enter integers one at a time in order");
        System.out.println("When completed type done");
        while (scan.hasNextInt()) {
            list.add(scan.nextInt());
        }
        Integer[] nums = list.toArray(new Integer[0]);
        for (int i = 0; i < nums.length-1; i++) {
            sum = nums[0];
            sum = sum - nums[i+1];
        }
        System.out.println("Your total is " + sum);
        System.out.println("-----------------------------");
        main(args);
        }

Только вычитает первые и последние числа цикла, а не весь цикл в порядке

Ответы [ 3 ]

1 голос
/ 28 мая 2019

Ты почти у цели. Переместите присвоение первого значения за пределы цикла и начните цикл со второго элемента массива (индекс = 1):

sum = nums[0];
for (int i = 1; i < nums.length; i++) {
    sum = sum - nums[i];
}

РЕДАКТИРОВАТЬ: Спасибо Joakim за ваше замечание. Исправлено условие завершения в цикле for

0 голосов
/ 28 мая 2019

Я подозреваю, что потоки Java 8 - это не то, что нужно после OP, но для полноты здесь есть способ использовать список вместо цикла for с использованием потоков

if (!list.isEmpty) {
    sum = list.get(0) - list.subList(1, list.size()).stream().reduce(0,Integer::sum);
}

Если цикл предпочтительнее, то применьше всего использовать уже созданный список

sum = list.get(0);
for (int i = 1; i < list.size(); i++) {
    sum -= list.get(i);
}
0 голосов
/ 28 мая 2019

Вы повторно инициализируете sum на каждой итерации цикла до значения первого элемента:

sum = nums[0];

Вы должны сделать это до цикла.

...