Проблемы с петлями? Программа работает, как и должна, но тест продолжает давать сбой. Java с использованием TMCbeans - PullRequest
0 голосов
/ 27 мая 2020

Я прохожу курс открытого университета в Java, до сих пор все шло гладко. В этом разделе мы рассматриваем петли, и проблема, на которой я застрял, требует следующего.

Напишите программу, которая считывает значения от пользователя до тех пор, пока он не введет 0. После этого программа печатает общее количество введенных отрицательных значений. Ноль, который используется для выхода из l oop, не должен включаться в общее число.

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

При вводе: 5 4 -3 1 0 Текст «Дайте число:» должен появиться в общей сложности 5 раз. Теперь счет был ожидаемым 0: <5>, но был: <0>

Вот мой код, как я уже сказал, когда я запускаю программу локально, кажется, что он работает так, как и просили.

import java.util.Scanner;

public class NumberOfNumbers {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int numbers = 0;
        while (true) {
            System.out.println("Give a number.");
            int number = Integer.valueOf(scanner.nextLine()); 
            if (number == 0){
                break; 
            }
            if (number >= 1){
                numbers = numbers + 1;
            } 
        }
        System.out.println("number of values is " + numbers);

    }
}

Ответы [ 4 ]

0 голосов
/ 27 мая 2020

Я не мог понять точную проблему. Но некоторые наблюдения.

  1. Если вы действительно введете все числа при первом запросе, а затем нажмете ENTER, очевидно, что это вызовет NumberFormatException, поскольку «5 4 -3 ..» не является допустимым числом и l oop не продолжится. Попробуйте ввести каждое число и нажмите ENTER.

  2. Сканер должен быть закрыт. Если вы используете JDK 8, используйте «try (Scanner scanner = new Scanner (System.in)) {...}. Это автоматически закроет сканер.

0 голосов
/ 27 мая 2020

Вам нужно общее количество введенных отрицательных значений . Таким образом, условие в while l oop должно измениться с number >= 1 на number < 0. Отметьте это

import java.util.Scanner;

public class NumberOfNumbers {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int numbers = 0;
        while (true) {
            System.out.println("Give a number.");
            int number = Integer.valueOf(scanner.nextInt());
            if (number == 0) {
                break;
            }
            if (number < 0) {
                numbers = numbers + 1;
            }
        }
        System.out.println("number of values is " + numbers);

    }
}

Кроме того, предпочитайте использовать nextInt(), потому что вы знаете, что ваш ввод имеет целочисленный тип.

0 голосов
/ 27 мая 2020

У вас две проблемы с кодом:

  1. В строке проверки числа вы проверяете, больше ли число или равно единице (number >= 1), но вам следует убедитесь, что оно меньше 0, потому что это должны быть отрицательные числа. (В вопросе: общее количество введенных отрицательных значений)

  2. Вы используете с scanner.nextLine() Но вы не получаете строку, вы получите номер (Int, если это целые числа, double, если это десятичные числа), чтобы вы изменили его на: scanner.nextInt():

Вот код:

   Scanner scanner = new Scanner(System.in);
          int numbers = 0;
            while (true) {
                System.out.println("Give a number.");
                int number = Integer.valueOf(scanner.nextInt());// Scanner number !! 
                if (number == 0){
                    break; 
                }
                if (number < 0){ // Less then zero !!!
                    numbers = numbers + 1;
                } 
            }
            System.out.println("number of values is " + numbers);
0 голосов
/ 27 мая 2020

В вашей постановке задачи указано, что на выходе должно быть количество отрицательных чисел. Но вы возвращаете количество положительных чисел. Измените условие с if (число> = 1) на if (число <0). Надеюсь, это поможет. </p>

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