Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这台扫描仪有什么问题?_Java_Java.util.scanner - Fatal编程技术网

Java 这台扫描仪有什么问题?

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

这是我当前的代码,相当基本,我正在向数组中添加名称,并使用扫描仪删除所述名称。就像我说的基本的东西。我使用了一个开关,因为它使我的生活变得比使用一堆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似乎给我带来了压力。

当你使用扫描仪时,如果你想在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变量,但这似乎节省了内存。我会用这个。