这是我当前的代码,相当基本,我正在为数组添加名称并使用扫描程序删除所述名称。就像我说的基本东西。我正在使用一个开关,因为它使我的生活比仅仅使用一堆if更容易,而且无论如何它都是更好的布局。
以下是我的代码:
import java.util.Scanner;
import java.util.ArrayList;
public class Account
{
public static void main (String [] args)
{
Scanner sc = new Scanner (System.in);
ArrayList list = new ArrayList();
boolean quit = false;
do
{
System.out.println ("MENU\n 0: Enter name to list\n 1: Delete name from list\n 2: Print Current List\n 3: Quit");
int input = sc.nextInt();
switch(input)
{
case 0:
System.out.println ("Enter name to add to list");
list.add(sc.nextLine());
System.out.println("Name has been added");
System.out.println (list);
break;
case 1:
System.out.println("Enter name to remove");
list.remove(sc.next());
System.out.println (list);
break;
case 2:
System.out.println (list);
break;
case 3:
quit = true;
break;
default:
System.out.println ("Invalid choice");
}
}while(!quit);
System.out.println ("Exiting menu");
}
}
我的问题是,一旦我输入0转到第一种情况,似乎它只是跳过用户条目并输出一个空字符串。如果我在我的开关之外完成相同的程序似乎工作,所以它让我觉得我的扫描仪可能会出现问题。可能与我之前制作的int扫描有关,以便进入案例?但是我可以发誓我做了几十次这样的事情......
我还应该提一下sc.next()工作正常,它只是sc.nextLine()似乎给了我压力。
答案 0 :(得分:0)
使用扫描仪时,如果要在next(),nextInt()或nextDouble()之后使用nextline(),则必须在输入的行之前单独放置nextLine(),按顺序使用换行符。
或者,为避免必须解决此问题,而不是使用nextInt()和nextDouble(),只需执行:
Integer.parseInt(nextLine())//equivalent of nextInt() except no funny errors
Double.parseDouble(nextLine())//equivalent of nextDouble() without funny stuff
答案 1 :(得分:0)
这种情况正在发生,因为nextInt
没有读取输入的最后一个换行符,并且在下次调用nextLine
时会消耗剩余换行符。
如果我们在除nextLine
之外的任何nextXXX
之后使用nextLine
为了解决这个问题,您可以:
在nextLine
之后使用空白nextInt
来消费换行符
int input = sc.nextInt();
sc.nextLine(); // Use this to consume the newline character
String input1 = sc.nextLine();
或者您可以使用@kirbyquerby
中提到的解决方法