有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在使用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) 个答案

  1. # 1 楼答案

    Java Scanner等待您,直到输入被发送到控制台并点击回车键。你的程序按预期运行

    但是,如果要按顺序获取所有输入,请尝试以下操作:

    Scanner input = new Scanner(System.in);
    
    while(input.hasNext()) {  
         roll = input.nextInt();
         marks = input.nextInt();
         ...
    }