Несколько значений с помощью только одного метода сканера? - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть задание, в котором мне нужно выполнить определенные расчеты отдельными методами, используя данные, введенные пользователем. Моя проблема с пользовательским вводом. Предполагается, что это будет сделано отдельным методом (я не думаю, что мне разрешено использовать массивы для хранения входных данных). Пользователь должен иметь возможность ввести столько значений, сколько он хочет, а затем выйти с помощью «q». Затем программа должна взять первые два числа, рассчитать, например, область и объем с теми (с другими методами, которые я не включил здесь), представьте результат, возьмите следующие два числа, которые пользователь ввел, вычислите и представьте результаты. Это должно повторяться, пока не достигнет значения «q». Так, например:

    Enter your values: 9 5 3 7 q
    radius: 9 height: 5
    Area = 254
    Volume = 424

    radius: 3 height: 7
    Area = 28
    Volume = 65

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

import java.util.Scanner;

public class Stack {
   private static Scanner input = new Scanner(System.in);

   public static void main(String[] args) {

      int radie, height;

      radie = userInput("");
      height = userInput("");

   }

   public static int userInput(String message) {
      int number = Integer.MAX_VALUE;

      while (number == Integer.MAX_VALUE) {
         System.out.print(message);
         if (input.hasNextInt()) {
            number = input.nextInt();

         }
         input.nextLine();
      }
      return number;
   }
}

Я понимаю, что в моем коде есть огромные недостатки, я очень растерялся и не уверен, с чего начать. Любая помощь или советы приветствуются! Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 06 апреля 2019

Не совсем понимаю, что вы имеете в виду, но я сделал некоторые изменения:

import java.util.Scanner;

public class stack {
    private static Scanner input = new Scanner(System.in);

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

    public static void userInput() {
        while (true) {
            System.out.println("Enter your values:");
            String message = input.nextLine();
            //Split data with space
            String[] data = message.split(" ");
            int pointer = 2;
            for (String i : data) {
                if (i.equals("q")) {
                    System.out.println("Stopped.");
                    System.exit(0);
                }
                if (pointer % 2 == 0) {
                    System.out.println("radius: " + i);
                }
                if (pointer % 2 == 1) {
                    System.out.println("height: " + i);
                }
                pointer++;
            }
        }
    }
}

Аффект:

Enter your values:
1 2 3 4 5 6 7 8
radius: 1
height: 2
radius: 3
height: 4
radius: 5
height: 6
radius: 7
height: 8
Enter your values:
1 q
radius: 1
Stopped.

Process finished with exit code 0
0 голосов
/ 06 апреля 2019

Читали ли вы документацию метода Scanner.hasNextInt ()? Там написано: Возвращает: Значение true, если и только если следующий токен этого сканера является допустимым значением int

Так что вопрос, если

 number == Integer.MAX_VALUE

не имеет смысла.

Попробуйте спросить, имеет ли hasNextInt () возвращает true или false

Редактировать: Также Почему вы предполагаете, что после числа всегда 'q'?

Изменить условие в операторе while

...