Java 这台扫描仪有什么问题?
这是我当前的代码,相当基本,我正在向数组中添加名称,并使用扫描仪删除所述名称。就像我说的基本的东西。我使用了一个开关,因为它使我的生活变得比使用一堆if更简单,而且无论怎样,它的布局都更好 以下是我的代码:Java 这台扫描仪有什么问题?,java,java.util.scanner,Java,Java.util.scanner,这是我当前的代码,相当基本,我正在向数组中添加名称,并使用扫描仪删除所述名称。就像我说的基本的东西。我使用了一个开关,因为它使我的生活变得比使用一堆if更简单,而且无论怎样,它的布局都更好 以下是我的代码: import java.util.Scanner; import java.util.ArrayList; public class Account { public static void main (String [] args) { Scanner sc = new Sca
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似乎给我带来了压力。当你使用扫描仪时,如果你想在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
之所以会发生这种情况,是因为nextInt不读取输入的最后一个换行符,而剩余的换行符在下一次调用nextLine时被消耗掉。 如果我们在任何nextXXX之后使用nextLine,除了nextLine本身之外,可以注意到相同的行为 要解决此问题,您可以: 或者在nextInt之后使用空白的nextLine调用来使用换行符
int input = sc.nextInt();
sc.nextLine(); // Use this to consume the newline character
String input1 = sc.nextLine();
或者您也可以使用@kirbyquerby提到的解决方法。通常,如果您使用的是nextLine或nextLine以外的任何其他方法,则在缓冲区中会留下一个新行字符,下次尝试从中获取某些内容时,该字符将被提取,这可能会导致各种奇怪。最好在使用这些方法之一之后调用nextLine我喜欢这个解决方案,我选择了创建新的scanner变量,但这似乎节省了内存。我会用这个。