在使用Sdin(或非交互式)输入| Java时调试奇怪的输入错误
这是我获取输入和打印输出的简单Java代码
import java.util.Scanner;
//weird input problem
class Student{
private int rollno;
private String name;
public void getRollNo(){
Scanner sc = new Scanner(System.in);
System.out.println("Enter name and roll no");
name=sc.next();
rollno=sc.nextInt();
}
public void putRollNo(){
System.out.println("Name="+name);
System.out.println("Regno="+rollno);
}
}
class Marks extends Student{
Scanner sc = new Scanner(System.in);
protected int Mark1,Mark2,Mark3;
public void getMarks(){
System.out.println("Enter 3 Marks");
Mark1=sc.nextInt();
Mark2=sc.nextInt();
Mark3=sc.nextInt();
}
public void putMarks(){
System.out.println("Mark1="+Mark1);
System.out.println("Mark2="+Mark2);
System.out.println("Mark3="+Mark3);
}
}
class Result extends Marks{
void computeDisplay(){
float total = Mark1 + Mark2 + Mark3;
System.out.println("Total="+ total);
}
}
public class MyClass{
public static void main(String[] args){
Result r = new Result();
r.getRollNo();
r.getMarks();
r.putRollNo();
r.putMarks();
r.computeDisplay();
}
}
因此,当逐行给出输入(交互式控制台输入)时,它可以完美地工作。下面是我的IDE控制台显示的内容
Enter name and roll no
John
1234
Enter 3 Marks
11
22
33
Name=John
Regno=1234
Mark1=11
Mark2=22
Mark3=33
Total=66.0
真正的问题是当我以文本形式输入时。 我将此作为输入-
John
1234
11
22
33
看起来程序只是忽略了一些输入(在本例中是“标记”),所以我不得不再次输入标记。控制台输出-
Enter name and roll no
John
1234
11
22
33Enter 3 Marks
1
2
3
Name=John
Regno=1234
Mark1=1
Mark2=2
Mark3=3
Total=6.0
当我在jdoodle compiler中输入“interactivemode”设置为“OFF”时,它只返回这个错误-
Enter name and roll no
Enter 3 Marks
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:858)
at java.base/java.util.Scanner.next(Scanner.java:1497)
at java.base/java.util.Scanner.nextInt(Scanner.java:2161)
at java.base/java.util.Scanner.nextInt(Scanner.java:2115)
at Marks.getMarks(MyClass.java:22)
at MyClass.main(MyClass.java:42)
Command exited with non-zero status 1
我不知道。请帮忙
# 1 楼答案
Java
Scanner
等待您,直到输入被发送到控制台并点击回车键。你的程序按预期运行但是,如果要按顺序获取所有输入,请尝试以下操作: