Как добавить переменную в другую переменную, которая уже установлена - PullRequest
0 голосов
/ 11 июля 2019

Моя домашняя работа - создать программу, которая берет список чисел и печатает наибольшее число, кратное четырем.

Список будет выглядеть так:

12  
16  
87  
58  
25  
73  
86  
36  
79  
40  
12  
89  
32  

Ввод должен быть:
40 потому что это наибольшее число, делимое на четыре.

Вот мой код:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int saved = 0;
        int saved2 = 0;

        for (int i = scanner.nextInt(); i % 4 == 0; i = scanner.nextInt()) {
            for (boolean bull = true; bull == true; bull ^= true) {
                if (i > saved) {
                    saved -= saved2;
                    saved += i;
                    saved2 += i;
                }
            }

            System.out.println(saved);
        }
    }
}

Ввод моего кода

12  
16  

Я не очень понимаю, почему это происходит, но мне кажется, что я неправильно добавляю переменные. На странице домашней работы по добавлению переменных не указано, как добавлять переменные друг к другу.
У кого-нибудь есть совет по улучшению кода в любом случае, или найти способ исправить мой код? Спасибо.

Ответы [ 3 ]

1 голос
/ 11 июля 2019

Добро пожаловать на Яву.

Сначала вы говорите, что получили ввод, но это вывод. Ввод - это то, что вы вводите, а вывод - это то, что вы печатаете.

Тогда в вашем цикле for есть ошибка. У тебя слишком много всего происходит в одном месте. Согласно реализованной логике, ваша программа будет выходить из первого уровня цикла, когда введенное вами значение не делится на 4.

Продолжайте читать, если хотите узнать больше https://www.learnjavaonline.org/en/Loops.

Я рекомендую начинать с циклов while. Логика должна быть такой:

1. создать переменную для правильного ответа saved

2. создайте еще один для хранения значения, прочитанного с консоли i

3. запустить цикл while с условием i = scanner.nextInt()

3,1 проверить, если только что введенное значение i делится на 4

3.2, если это так, то сравните, если он больше, чем тот, который был сохранен ранее (изначально saved значение будет 0)

3.3, если оно больше, тогда присвойте считанное значение i saved

4. В конце цикла у вас будет наибольшее число, делимое на четыре в вашей переменной saved. Распечатайте его.

0 голосов
/ 11 июля 2019

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

Эта статья может быть полезна при обработке ввода от Scanner.

Надеюсь, комментарии в коде помогут. Добавить комментарии, если есть какие-либо вопросы. Удачи!

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int currentMax = Integer.MIN_VALUE; // you may set negative or 0 if you know that all the input is positive
//      int saved2 = 0; // no need for this variable

        while (scanner.hasNextInt()) { // you can make a better input handling, especially if you know when it should end the input. Now it will end on any non-integer input line
            int i = scanner.nextInt();

            //      for (int i = scanner.nextInt(); i % 4 == 0; i = scanner.nextInt()) {
//          for (boolean bull = true; bull == true; bull ^= true) {
                if (((i % 4) == 0) && (i > currentMax)) {
                    currentMax = i;
//                  saved -= saved2;
//                  saved += i;
//                  saved2 += i;
//              }
            }
        }

        System.out.println(currentMax); // moved out of "for" or "while" cycles. Print the value after the input has ended.
    }
}
0 голосов
/ 11 июля 2019

Я предоставлю некоторую помощь, в соответствии с
Как мне задавать домашние задания и отвечать на них?

for (int i = scanner.nextInt(); i % 4 == 0;i = scanner.nextInt())

Это означает, что ВСЕ входные данные делятся на 4Вот почему он заканчивается в 16, потому что 87 не делится на 4.

for (boolean bull = true; bull == true ;bull ^= true)

Это требует вашего объяснения, но я уверен, что оно безоговорочно выполняет тело внутреннего цикла ровно один раз.(Не уверен на 100%, потому что представление true и false может быть странным на вашей машине. Если 0 является представлением true, то есть действительно странно, то это бесконечный цикл, который не соответствуетвывод, который вы описываете ...)

System.out.println(saved);

Выполняется ровно один раз для каждого входа, кроме последнего, который не кратен 4.

Значение saved идентичновводить, пока он увеличивается.

Эти подсказки объясняют неожиданный вывод.
Если вы изучите детали проблемы, вы сможете улучшить свою попытку кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...