如何修复:线程 "main" java.util.NoSuchElementException 中的异常:找不到行
how to fix : Exception in thread "main" java.util.NoSuchElementException: No line found
我尝试将我的名字输入扫描仪,但它抛出异常:
Username is: danny
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
at NonDuplicateCharacters.main(NonDuplicateCharacters.java:10)
我的输入
danny
1 2 3 4 3 2 1
预期输出
danny
4
我的代码:
import java.util.*;
public class NonDuplicateCharacters {
public static void main(String[] args) {
Scanner myObj = new Scanner(System.in);
String userName = myObj.nextLine();
System.out.print("Username is: " + userName);
Scanner input1= new Scanner(System.in);
String number = input1.nextLine();
int count;
char string[] = number.toCharArray();
for(int i = 0; i <string.length; i++) {
count = 1;
for(int j = i+1; j <string.length; j++) {
if(string[i] == string[j] && string[i] != ' ') {
count++;
string[j] = '0';
}
}
if(count == 1 && string[i] != '0' && string[i] != ' ')
System.out.println(string[i]);
}
}
}
我阅读了更改 nextline() next() 的解决方案,我尝试了但它不起作用。抱歉语法错误
您正在基于 System.in
.
创建两个 Scanner
对象
每个 Scanner
将 从 System.in
读取 并消耗它的一些输入。这意味着当您创建第二个时,第一个可能已经将一些内容读入其缓冲区。
简短的回答是:永远不要根据相同的参数创建多个 Scanner
对象,只需继续使用现有的扫描器即可。例如,这将解决您的问题:
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
String userName = myScanner.nextLine();
System.out.print("Username is: " + userName);
String number = myScanner.nextLine();
// ... rest of your code ...
我尝试将我的名字输入扫描仪,但它抛出异常:
Username is: danny
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
at NonDuplicateCharacters.main(NonDuplicateCharacters.java:10)
我的输入
danny
1 2 3 4 3 2 1
预期输出
danny
4
我的代码:
import java.util.*;
public class NonDuplicateCharacters {
public static void main(String[] args) {
Scanner myObj = new Scanner(System.in);
String userName = myObj.nextLine();
System.out.print("Username is: " + userName);
Scanner input1= new Scanner(System.in);
String number = input1.nextLine();
int count;
char string[] = number.toCharArray();
for(int i = 0; i <string.length; i++) {
count = 1;
for(int j = i+1; j <string.length; j++) {
if(string[i] == string[j] && string[i] != ' ') {
count++;
string[j] = '0';
}
}
if(count == 1 && string[i] != '0' && string[i] != ' ')
System.out.println(string[i]);
}
}
}
我阅读了更改 nextline() next() 的解决方案,我尝试了但它不起作用。抱歉语法错误
您正在基于 System.in
.
Scanner
对象
每个 Scanner
将 从 System.in
读取 并消耗它的一些输入。这意味着当您创建第二个时,第一个可能已经将一些内容读入其缓冲区。
简短的回答是:永远不要根据相同的参数创建多个 Scanner
对象,只需继续使用现有的扫描器即可。例如,这将解决您的问题:
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
String userName = myScanner.nextLine();
System.out.print("Username is: " + userName);
String number = myScanner.nextLine();
// ... rest of your code ...