Java 扫描仪异常

Java Scanner Exception

我正在尝试使用 Scanner 在这个自己的方法中调用 start () 方法。一旦用户输入一个数字,就会执行一系列操作,然后我希望再次调用 start () 方法。除了我得到这个错误:

我的代码:

    public void start() {
    System.out.println("1. Créer un nouveau réseau");
    System.out.println("2. Créer un nouvel ordi portable");
    System.out.println("3. Créer un nouvel ordi fix");
    System.out.println("4. Créer un Switch \n");
    System.out.print("Choisir un chiffre : ");
    Scanner scan = new Scanner(System.in);
    if(scan.hasNextInt()) {
        int v = scan.nextInt();
        switch(v) {
            case 1:
                addNetwork();
                scan.next();
                start();
                break;
        }
    } else {
        System.out.println("Vous devez rentrer un chiffre !");
        scan.next();
        start();
    }
}

编辑:

这是程序的完整输出:

编辑:

我的 addNetwork 方法:

    private void addNetwork() {
    System.out.print("Quel est l'IP du réseau ? ");
    Scanner scan = new Scanner(System.in);
    String ip = scan.nextLine();
    System.out.print("Quel est le masque du réseau ? (par défaut /24) ");
    String mask = scan.nextLine();
    scan.close();
    web.addNetwork(ip, mask);
}

你的addNetwork方法很麻烦

addNetwork 关闭扫描器的方法中,它不仅会关闭扫描器,还会关闭 System.in 输入流。

参考资料:

java.util.NoSuchElementException - Scanner reading user input

我已经更新了代码,我建议初始化扫描仪对象一次并将其作为参数传递给您的 start 方法,并在完成后关闭 scanner

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;
import java.util.stream.Stream;

public class Main {

    private void addNetwork(Scanner scan) {
        System.out.print("Quel est l'IP du réseau ? ");
        String ip = scan.nextLine();
        System.out.print("Quel est le masque du réseau ? (par défaut /24) ");
        String mask = scan.nextLine();
        web.addNetwork(ip, mask);
    }

    public void start(Scanner scan) {
        System.out.println("1. Créer un nouveau réseau");
        System.out.println("2. Créer un nouvel ordi portable");
        System.out.println("3. Créer un nouvel ordi fix");
        System.out.println("4. Créer un Switch \n");
        System.out.print("Choisir un chiffre : ");
        if (scan.hasNextInt()) {
            int v = scan.nextInt();
            switch (v) {
                case 1:
                    addNetwork(scan);
                    scan.next();
                    start(scan);
                    break;
            }
        } else {
            System.out.println("Vous devez rentrer un chiffre !");
            scan.next();
            start(scan);
        }
    }

    public static void main(String args[]) {
        Main main = new Main();
        Scanner scan = new Scanner(System.in);
        main.start(scan);
        scan.close();
    }
}

输出:

1. Créer un nouveau réseau
2. Créer un nouvel ordi portable
3. Créer un nouvel ordi fix
4. Créer un Switch 

Choisir un chiffre : 1
Quel est l'IP du réseau ? Quel est le masque du réseau ? (par défaut /24) 192.168.0.21
TestProgram
1. Créer un nouveau réseau
2. Créer un nouvel ordi portable
3. Créer un nouvel ordi fix
4. Créer un Switch 

Choisir un chiffre : 

问题出在您调用 scan.close()addNetwork 方法中。这又会调用 System.in.close(),因此无法再从标准输入中读取任何字符。

addNetwork 你应该通过你已有的扫描仪:

private void addNetwork(Scanner scan) {
    System.out.print("Quel est l'IP du réseau ? ");
    String ip = scan.nextLine();
    System.out.print("Quel est le masque du réseau ? (par défaut /24) ");
    String mask = scan.nextLine();
    web.addNetwork(ip, mask);
}