Java - Как мне продолжать запрашивать ввод у пользователя? - PullRequest
0 голосов
/ 09 февраля 2020

Я был в этой программе в течение нескольких часов, и я до сих пор не понимаю логику c. Программа просит пользователя ввести целые числа.

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

Вот где я застрял:

Затем он спросит пользователя, хотят ли они продолжить. Пользователь введет 'y' или 'n', чтобы указать, хотят ли они продолжить или не хотят продолжать. Если пользователь введет «у», то l oop снова будет go, а если он введет «n», появится сообщение «до свидания». Я не знаю, как это настроить.

Я попытался сделать do l oop, и сейчас я использую некоторое время l oop для программы. Я также пропускаю утверждение, которое позволяет пользователю знать, что они вводили ноль только в том случае, если не было введено никаких других чисел. Я тоже не знаю, как это настроить, но я попробовал оператор if, и он не работает .. Мой код приведен ниже. Я использую Java 8.

publi c class CountPositiveNegativeAndAverageOfIntsProgram {

public static void main(String [] args)
{

     System.out.print("Enter an integer, the input ends if it is 0: ");
     //Creating a scanner object
    Scanner input = new Scanner(System.in);
    int userInput = input.nextInt();

    //creating variables that will be used in the program.
    int countPositive = 0;
    int countNegative = 0;
    int total = 0;
    double average = 0;

    while(userInput != 0)
    {            

        if(userInput > 0)
        {
        //using a counter to add how many positive numbers are entered.
        countPositive++;
        }
        else
        {
          countNegative++;      
        }

        total += userInput;
        //I added 0.0 to avoid integer division. This felt like a small hack.
        average = total / (countPositive + countNegative + 0.0);
        userInput = input.nextInt();

    }      

     System.out.println("The number of positives is: " + countPositive);
     System.out.println("The number of negatives is: " + countNegative);
     System.out.println("The total is: " + total);
     System.out.println("The average is : " + average);

     System.out.print("Continue? (y/n) ");
     String s = input.next();




}

}

1 Ответ

1 голос
/ 09 февраля 2020

Решение, которое предоставляется не очень удачно, - просто создать функцию, в которой вы можете вызывать рекурсивно, когда или если пользователь предоставляет y в качестве ответа.

    public static void main(String [] args) {
        request();
    }

    private static void request() {
        System.out.println("Enter an integer, the input ends if it is 0: ");
        //Creating a scanner object
        Scanner input = new Scanner(System.in);
        int userInput = input.nextInt();

        //creating variables that will be used in the program.
        int countPositive = 0;
        int countNegative = 0;
        int total = 0;
        double average = 0;

        while(userInput != 0)
        {

            if(userInput > 0)
            {
                //using a counter to add how many positive numbers are entered.
                countPositive++;
            }
            else
            {
                countNegative++;
            }

            total += userInput;
            //I added 0.0 to avoid integer division. This felt like a small hack.
            average = total / (countPositive + countNegative + 0.0);
            userInput = input.nextInt();

        }

        System.out.println("The number of positives is: " + countPositive);
        System.out.println("The number of negatives is: " + countNegative);
        System.out.println("The total is: " + total);
        System.out.println("The average is : " + average);

        System.out.println("Continue? (y/n) ");

        String response = input.next();

        if (response.equals("y")) {
            request();
        } else {
            System.out.println("Goodbye!");
        }
    }

Java 8 Решение Если вы действительно хотите немного улучшить это, вы можете сделать несколько вещей.

  • Используйте Scanner # hasNextInt, чтобы определить, имеет ли сканер Int для использования .
  • Вместо использования нескольких переменных для отслеживания отрицательных, положительных и итоговых значений ведите список объектов Integer, представляющих входные данные.
  • Используйте фильтр Stream # для проверки положительных и отрицательных значений, а затем count (), чтобы сообщить нам количество элементов в потоке, которые соответствуют этому фильтру.
  • Используйте IntStream # sum и IntStream # average, чтобы соответственно определить сумму и среднее значение для потока целых чисел.
    private static void request(Scanner scanner) {
        System.out.println("Enter an integer, the input ends if it is 0: ");

        List<Integer> values = new ArrayList<>();

        while(scanner.hasNextInt()) {
            int value = scanner.nextInt();

            if (value == 0) {
                break;
            }
            values.add(value);
        }
        System.out.println("The number of positives is: " + values.stream().filter(value -> value > 0).count());
        System.out.println("The number of negatives is: " + values.stream().filter(value -> value < 0).count());
        System.out.println("The total is: " + values.stream().mapToInt(value -> value).sum());
        System.out.println("The average is : " + values.stream().mapToInt(value -> value).average().orElse(0));
        System.out.println("Continue? (y/n) ");

        String response = scanner.next();

        if (response.equals("y")) {
            request(scanner);
        } else {
            System.out.println("Goodbye!");
        }
    }
...