#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, пока остальные числа ожидают чтения. Не уверен, помогает ли это или просто смущает больше.