Я пытаюсь ответить на этот вопрос:

Разработайте программу, которая считывает список чисел, оканчивающихся на -9999, и распечатывает введенную сумму.

Я изменяю программу таким образом, что суммируются только значения между 1 и 100, и, как вы можете видеть, я пытался реализовать оператор if. Но ничего не изменилось, и эта часть поставила меня в тупик. Я застрял на нем целую вечность, код следующий:

import java.util.Scanner;

public class Summing {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int Number, Sum = 0;

        System.out.println("Enter a list of whole numbers, finished by -9999");
        Number = sc.nextInt();

        if (Number > 0 || Number < 100);
        while (Number != -9999) {
            Sum = Sum + Number;
            Number = sc.nextInt();
        }

        System.out.println("Sum is " + Sum);
    }
}
2
JohnnyC 1 Мар 2015 в 00:09

4 ответа

Лучший ответ

Переместите оператор if внутрь цикла. Прямо сейчас оператор if выполняется только один раз перед входом в цикл (и ничего не делает, благодаря ; сразу после условия). Вы хотите, чтобы он использовался для каждого значения.

Также обратите внимание, что я изменил || на &&. В противном случае, например, будет соответствовать 101, что не находится в диапазоне от 0 до 100. Наконец, a = a + b всегда можно записать более кратко как a += b.

while (Number != -9999) {
    if (Number > 0 && Number < 100) {
        Sum += Number;
    }
    Number = sc.nextInt();
}

В качестве еще одного стилистического изменения (которое является в значительной степени универсальным соглашением) вам следует подумать об изменении ваших переменных на имена в нижнем регистре.

4
The111 28 Фев 2015 в 21:18

Ваш if ДО цикла while. Поместите в петлю.

-1
TMS 1 Мар 2015 в 00:03

Вы были довольно близки, но тест if должен быть в цикле (и вам, вероятно, следует использовать фигурные скобки { и }). По соглашению имена переменных Java начинаются с строчной буквы, и я бы предпочел оператор += для добавления к sum. Кроме того, чтобы проверить свой диапазон, вам логически понадобится и (а не или). Что-то вроде,

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a list of whole numbers, finished by -9999");
    int number = sc.nextInt();
    int sum = 0;
    while (number != -9999) {
        if (number > 0 && number < 100) {
            sum += number;
        }
        number = sc.nextInt();
    }
    System.out.println("Sum is " + sum);
}
1
Elliott Frisch 28 Фев 2015 в 21:15

Вы поместили if перед циклом while, и у него пустой (= вообще ничего не делает). В любом случае условие также было неправильным, поскольку Number > 0 || Number < 100 будет соответствовать всем числам. Вы хотите изменить || на &&.

Это должно работать:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int Number, Sum = 0;

    System.out.println("Enter a list of whole numbers, finished by -9999");
    Number = sc.nextInt();

    while (Number != -9999) {
        if (1 < Number && Number < 100) {    
            Sum += Number;
        }
        Number = sc.nextInt();
    }

    System.out.println("Sum is " + Sum);
}
1
janos 28 Фев 2015 в 21:13