Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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 使用扫描仪读取输入时出现NoTouchElementException_Java_Java.util.scanner - Fatal编程技术网

Java 使用扫描仪读取输入时出现NoTouchElementException

Java 使用扫描仪读取输入时出现NoTouchElementException,java,java.util.scanner,Java,Java.util.scanner,假设以下Java方法通过键盘接受用户的字符串(人名),在名为name[]的数组中搜索该人名,并从数组中删除该人名(通过分配name[i]=“INVALID”) 代码尝试使用Scanner类对象del_name接受输入字符串(人名),但我在语句中得到了一个NoTouchElementException s=del_name.next(); i、 e顶部的第四句话 如果有人能给出一个解决方案并解释为什么这个代码不起作用,我将非常感激。(谢谢) void Deletee() { Scanner de

假设以下Java方法通过键盘接受用户的字符串(人名),在名为
name[]
的数组中搜索该人名,并从数组中删除该人名(通过分配
name[i]=“INVALID”

代码尝试使用
Scanner
类对象
del_name
接受输入字符串(人名),但我在语句中得到了一个
NoTouchElementException

s=del_name.next();
i、 e顶部的第四句话

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

void Deletee()
{
Scanner del_name=新扫描仪(System.in);
字符串s;
System.out.println(“输入要删除的名称”);
s=del_name.next();//导致NoTouchElementException
int i=0;
/*使用下面的while循环查找名称出现的位置*/
而(!s.equalsIgnoreCase(name[i])&&i将
.next()
更改为
.nextLine()

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

尝试

del_name.nextLine()
使用
next()
仅返回空格前的内容。
nextLine()
在返回当前行后自动向下移动扫描仪

next():
查找并返回来自此扫描仪的下一个完整令牌。

nextLine():
使此扫描仪超过当前行并返回跳过的输入。

您发布的代码不会按原样引发异常。您可能在调用此方法之前做了导致此问题的操作。作为证明,请运行以下代码:

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] + ", ");
    }
}
公共类测试{
静态字符串[]名称=新字符串[]{“AAA”、“BBB”、“CCC”};
静态void deletee(){
扫描仪名称=新扫描仪(System.in);
System.out.println(“输入要删除的名称”);
字符串s=delName.next();
布尔值=false;
for(int i=0;i
注释

  • 方法名称应以小写字母开头
  • 非最终变量不应使用下划线,而应使用大写字母作为新词的开头
  • 我重写了搜索机制以获得更直观的结果,尽管有更多的方法可以做到这一点
  • 很好地关闭了扫描仪
del_name.nextLine()
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] + ", ");
    }
}