У меня проблема, когда после того, как я выберу один из четырех вариантов со своим сканером, он по умолчанию будет использовать этот случай переключателя, так что, скажем, я сначала нажимаю 1, ввожу свою строку слов, затем нажимаю 2, он все равно будет выполняться, как если бы Я попал в случай 1. Что я здесь сделал не так?
public static void menu()
{
FileClass f = new FileClass();
Scanner scan = new Scanner(System.in);
System.out.println("Choose an option");
System.out.println("1: Write To File\n2: Read From File\n3: Delete From File\n4: Exit Program");
int choice = scan.nextInt();
while(choice < 5) {
switch(choice) {
case 1:
System.out.println("Enter a line you wish to write to the file: ");
Scanner inputW = new Scanner(System.in);
String lineWrite = inputW.nextLine();
f.writeToFile(lineWrite);
break;
case 2:
System.out.println("This is Everything on the File:");
f.readFromFile();
break;
case 3:
System.out.println("Enter a line you wish to delete from the file: ");
Scanner inputD = new Scanner(System.in);
String lineDelete = inputD.nextLine();
f.deleteFromFile(lineDelete);
break;
case 4:
System.exit(0);
break;
}
System.out.println("Choose an option");
System.out.println("1: Write To File\n2: Read From File\n3: Delete From File\nExit Program");
scan.nextInt();
}
System.exit(0);
}
Вы помещаете строку, которая читает ввод пользователя вне вашего цикла
вам не нужен новый сканер для каждого случая; просто продолжайте использовать оригинальный сканер
Вы нигде не обновляете свою переменную выбора.
Переместите int choice = scan.nextInt(); в цикл, удалите неназначенное чтение в конце.
Также - когда вы используете nextInt (), вы не используете символ новой строки после числа. См. stackoverflow.com/q/13102045
@MadPhysicist, если я это сделаю, программа не может найти символ 'выбор', потому что он инициализируется после цикла while
Хорошая точка зрения. Сделайте это делом времени.




Я думаю, что ваше последнее использование scan.nextInt() излишне. Думаю, ваша программа могла бы выглядеть так:
public static void main(String... args) {
try (Scanner scan = new Scanner(System.in)) {
int choice = 0;
while (choice < 4) {
System.out.println("Choose an option");
System.out.println("1: Write To File");
System.out.println("2: Read From File");
System.out.println("3: Delete From File");
System.out.println("4: Exit Program");
choice = scan.nextInt();
switch (choice) {
case 1:
System.out.println("Enter a line you wish to write to the file: ");
break;
case 2:
System.out.println("This is Everything on the File:");
break;
case 3:
System.out.println("Enter a line you wish to delete from the file: ");
break;
}
}
}
}
У вас есть переменная choice, которую вы инициализируете один раз вне цикла и никогда больше не назначаете ей. Установленное вами начальное значение просто продолжает использоваться повторно в бесконечном цикле. Вы должны назначить его в своем цикле, если хотите видеть какие-либо изменения между итерациями.
Другой момент заключается в том, что вы дважды повторяете код меню. Этого можно легко избежать, также включив его в цикл.
Scanner для конкретного пара нужно создать только один раз и использовать повторно. На System.in нет необходимости в нескольких сканерах.
Технически вы обрабатываете вводы> = 4 как команды выхода. Нет необходимости в отдельной записи switch, по крайней мере, в вашем опубликованном коде.
Каждый раз, когда пользователь нажимает клавишу ввода, вы получаете новую строку во вводе. Новая строка помешает вам правильно разобрать вещи, поэтому вам нужно избавиться от нее. Хороший способ - вызвать Scanner.nextLine между вызовами nextInt:
public static void menu()
{
FileClass f = new FileClass();
Scanner scan = new Scanner(System.in);
int choice = 0;
while(choice < 4) {
System.out.println("Choose an option");
System.out.println("1: Write To File\n2: Read From File\n3: Delete From File\n4: Exit Program");
choice = scan.nextInt();
scan.nextLine(); // Get rid of the trailing newline character
switch(choice) {
case 1:
System.out.println("Enter a line you wish to write to the file: ");
String lineWrite = scan.nextLine();
f.writeToFile(lineWrite);
break;
case 2:
System.out.println("This is Everything on the File:");
f.readFromFile();
break;
case 3:
System.out.println("Enter a line you wish to delete from the file: ");
String lineDelete = scan.nextLine();
f.deleteFromFile(lineDelete);
break;
}
}
System.exit(0);
}
Последний
scan.nextInt();- вы не назначаете его переменнойchoice