我用这台扫描仪做错了什么?

时间:2014-12-11 05:40:19

标签: 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 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()似乎给了我压力。

2 个答案:

答案 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

中提到的解决方法