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);
}
我正在尝试使用 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);
}