Я знаю, что это много раз задавалось в StackOverflow, но я пробовал много разных решений, и никто из них не работал. Поэтому я решил спросить сообщество о том, что делать. Вот соответствующий фрагмент из моего кода.Хотя цикл с условием .hasNext работает бесконечно
public class Calculator
{
public static void main(String[]args)
{
ArrayList<String> inputStorage = new ArrayList<String>();
Scanner input = new Scanner(System.in);
String rawInput;
boolean mainLoop = true;
String exitInput;
String mainMenuInput;
while(mainLoop == true)
{
mainMenuInput = input.nextLine()
switch(mainMenuInput)
{
case "Expression":
System.out.println("Type an expression");
while(input.hasNext)
{
rawInput = input.next();
inputStorage.add(rawInput);
}
break;
case "Equation":
System.out.println("Type an equation");
while(input.hasNext)
{
rawInput = input.next();
inputStorage.add(rawInput);
}
break;
case "exit":
System.out.println("Are you sure you want to exit")
exitInput = input.nextLine();
switch(exitInput)
{
case "yes":
case "Yes":
mainLoop = false;
case "no":
case "No":
break;
default:
System.out.println("That was not an option")
break;
}
default:
System.out.println("That was not an option");
break;
}
}
Обратите внимание, что это только часть моего кода, который принимает входные данные с консоли без лишних включений. У меня есть другие настройки, которые требуют, чтобы код находился в этом формате.
Вот список того, что я пытался и не работал:
- заменить input.hasNext() с input.hasNextLine()
- заменить input.hasNext() с входным сигналом. следующий()! = NULL
- делает условие выхода, если input.next = нуль
- делает условие выхода, если input.next() = "\ п"
- делает условие выхода, если input.next() = «\ r "
Вот список вещей, которые не будут работать для остальной части моего кода:
- BufferedReader (и все методы и аспекты его)
- заменить input.next() с входом. nextLine()
С учетом сказанного, я видел способ сделать это, выполнив условие выхода на основе значения ASKII символа newLine. Единственная проблема заключается в том, что я не нашел хорошего способа реализации значений символов ASKII в java-коде (или, по крайней мере, ни один из них, который бы работал с моим кодом), и для его реализации мне нужно было бы знать, как использует класс Scanner символ следующей линии. Но это всего лишь одно предлагаемое решение, и я уверен, что у кого-то есть лучший способ прекратить входной цикл, как это, когда нажата клавиша ввода.
Спасибо за ваше время.
Нет. Я действительно об этом думал, но я не знаю, сколько цифр я буду читать раньше времени. Кроме того, входное хранилище должно содержать любой ввод, а не только цифры. Спасибо за вашу помощь. –
Вам нужно как-то узнать, где находится конец данных, которые вы хотите прочитать. Обычно это либо предопределенная сумма (даже на основе более раннего ввода пользователя), либо какой-то особый символ (некоторое слово остановки, например «выход» или «-1») или даже разделитель строк - в последнем случае вам нужно будет использовать 'nextLine' вместо 'next' в главном сканере, потому что' next' видит разделители строк как пробелы, которые являются протекторами как разделители между токенами. – Pshemo
Я думал о том, что пользователь вводит каждый вход с помощью «;», но не было бы возможности сказать, не было ли у них этого. Что касается функции readline, я должен иметь возможность различать токены и обрабатывать каждый из них как число, команду (+, -, *, x, /, ^, =) или переменную (математический вид, а не java) Мне также нужно обработать их в соответствии с тем, что означают маркеры до и после. Если вы не знаете способ разделить строку, созданную функцией readline, на свои жетоны, я не могу ее использовать. –