Несколько значений только с одним методом сканирования?

#java #methods #java.util.scanner

#java #методы #java.util.scanner

Вопрос:

У меня есть задание, в котором мне нужно выполнить определенные вычисления отдельными методами, используя данные, введенные пользователем. Моя проблема с пользовательским вводом. Предполагается, что это делается с помощью отдельного метода (я не думаю, что мне разрешено использовать массивы для хранения входных данных). Пользователь должен иметь возможность вводить столько значений, сколько он хочет, а затем выходить с помощью «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;
   }
}
  

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

Ответ №1:

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

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

  number == Integer.MAX_VALUE
  

не создает значения.

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

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

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

Ответ №2:

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

 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
  

Комментарии:

1. Спасибо за ваш ответ и извините за то, что немного запутал. Вычисления (площадь, объем) Я упоминал, что это делается другими методами, которые я не включал. И я не думаю, что мне разрешено использовать массивы для назначения. В нем говорится: «Должна быть возможность ввести несколько значений, прежде чем вы нажмете enter. Если введено «q», программа должна завершиться. Если была введена какая-либо другая буква, она должна быть проигнорирована » В нем также говорится, что нужно использовать nextInt() для чтения следующего int, пока остальные числа ожидают чтения. Не уверен, помогает ли это или просто смущает больше.