使用Scanner读取输入时出现NoSuchElementException

时间:2014-10-18 20:07:45

标签: java java.util.scanner

以下Java方法假设通过键盘从用户接受字符串(人名),在名为name[]的数组中搜索该名称,并从数组中删除该人的姓名(通过分配{{ 1}})。

代码尝试使用name[i] = "INVALID"类对象Scanner接受输入字符串(人名),但我在语句中得到del_name

NoSuchElementException

,即来自顶部的第四个声明。

如果有人能提供解决方案并解释为什么这段代码不起作用,我将非常感激。 (谢谢)

s=del_name.next();

3 个答案:

答案 0 :(得分:1)

.next()更改为.nextLine()

Scanner del_name=new Scanner(System.in);

String s;

System.out.println("Enter the name to be deleted");

s=del_name.nextLine(); 

Scanner.next()返回当前输入的内容,即使没有输入(给出错误)。 Scanner.nextLine()跳过当前行,并返回跳过的部分。

答案 1 :(得分:0)

试试,

del_name.nextLine()

使用next()只会返回空格之前的内容。返回当前行后,nextLine()会自动将扫描仪向下移动。

next():查找并返回此扫描仪的下一个完整令牌 nextLine():使此扫描器前进超过当前行并返回跳过的输入。

答案 2 :(得分:0)

您发布的代码不会按原样抛出异常。您可能在此方法调用之前已经做了一些导致这种情况的事情。作为证明,运行此代码:

public class Test {

    static String[] name = new String[] {"AAA", "BBB", "CCC"};

    static void deletee() {

        Scanner delName = new Scanner(System.in);
        System.out.println("Enter the name to be deleted");
        String s = delName.next();

        boolean found = false;
        for (int i = 0; i < name.length; i++) {
            if (name[i].equalsIgnoreCase(s)) {
                name[i] = "INVALID";
                System.out.println("Deletion Successful");
                found = true;
                break;
            }
        }
        if (!found)
            System.out.println("No such person exist");
        delName.close();
    }

    public static void main(String[] args) {

        deletee();
        for (int i = 0; i < name.length; i++)
            System.out.print(name[i] + ", ");
    }
}

备注

  • 方法名称应以小写字母开头。
  • 非最终变量不应使用下划线,只能使用新单词开头的大写字母。
  • 我为更直观的东西重写了搜索机制,尽管还有很多方法可以做到这一点。
  • 关闭扫描仪的工作很好。