在java中从DataInputStream读取输入时出错

在java中从DataInputStream读取输入时出错,java,Java,首先,我制作了一个名为juet的文件夹,然后在该文件夹内制作了两个包。第一个是学生套餐,它照顾大学里所有的学生 package juet.stud; import java.io.IOException; import java.io.DataInputStream; public class Student { String name; public int roll_no; int std; char grade; public Student

首先,我制作了一个名为juet的文件夹,然后在该文件夹内制作了两个包。第一个是学生套餐,它照顾大学里所有的学生

package juet.stud;

import java.io.IOException;
import java.io.DataInputStream;

public class Student {

    String name;
    public int roll_no;
    int std;
    char grade;

    public Student() {
        try (DataInputStream in = new DataInputStream(System.in)) {
            System.out.println("Enter name of student:");
            name = in.readUTF();
            System.out.println("Enter roll no.:");
            roll_no = in.readInt();
            System.out.println("Enter std:");
            std = in.readInt();
            System.out.println("Enter grade");
            grade = in.readChar();
        } catch (IOException e) {
            System.err.println(e);
        }
    }

    public void showInfo() {
        System.out.println("Name of student: " + name);
        System.out.println("Roll no.: " + roll_no);
        System.out.println("Std: " + std);
        System.out.println("Grade: " + grade);
    }
}
package juet.staff;

import java.io.IOException;
import java.io.DataInputStream;

public class Staff {

    public int id;
    String name, specialization;
    char group;

    public Staff() {
        try (DataInputStream in = new DataInputStream(System.in)) {
            System.out.println("Enter id:");
            id = in.readInt();
            System.out.println("Enter name:");
            name = in.readUTF();
            System.out.println("Enter area of specialization:");
            specialization = in.readUTF();
            System.out.println("Enter group");
            group = in.readChar();
        } catch (IOException e) {
            System.err.println(e);
        }
    }

    public void showInfo() {
        System.out.println("ID: " + id);
        System.out.println("Name: " + name);
        System.out.println("Area of specialization: " + specialization);
        System.out.println("Group: " + group);
    }
}
我做的另一个包是照顾大学全体教职员工的教职员工

package juet.stud;

import java.io.IOException;
import java.io.DataInputStream;

public class Student {

    String name;
    public int roll_no;
    int std;
    char grade;

    public Student() {
        try (DataInputStream in = new DataInputStream(System.in)) {
            System.out.println("Enter name of student:");
            name = in.readUTF();
            System.out.println("Enter roll no.:");
            roll_no = in.readInt();
            System.out.println("Enter std:");
            std = in.readInt();
            System.out.println("Enter grade");
            grade = in.readChar();
        } catch (IOException e) {
            System.err.println(e);
        }
    }

    public void showInfo() {
        System.out.println("Name of student: " + name);
        System.out.println("Roll no.: " + roll_no);
        System.out.println("Std: " + std);
        System.out.println("Grade: " + grade);
    }
}
package juet.staff;

import java.io.IOException;
import java.io.DataInputStream;

public class Staff {

    public int id;
    String name, specialization;
    char group;

    public Staff() {
        try (DataInputStream in = new DataInputStream(System.in)) {
            System.out.println("Enter id:");
            id = in.readInt();
            System.out.println("Enter name:");
            name = in.readUTF();
            System.out.println("Enter area of specialization:");
            specialization = in.readUTF();
            System.out.println("Enter group");
            group = in.readChar();
        } catch (IOException e) {
            System.err.println(e);
        }
    }

    public void showInfo() {
        System.out.println("ID: " + id);
        System.out.println("Name: " + name);
        System.out.println("Area of specialization: " + specialization);
        System.out.println("Group: " + group);
    }
}
最后,我制作了
MyUniversity
课程,我在其中使用了这两个软件包

package juet;

import juet.stud.Student;
import juet.staff.Staff;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.Console;

class University {

    Student[] stu;
    Staff stf[];
    int studCount, staffCount;

    University() {
        try (DataInputStream in = new DataInputStream(System.in)) {
            System.out.println("Enter capacity for students:");
            int x = Integer.parseInt(in.readLine());
            //stu = new Student[x];
            System.out.println("Enter capacity for staff:");
            x = Integer.parseInt(in.readLine());
            stf = new Staff[x];
            studCount = staffCount = 0;
        } catch (IOException e) {
            System.err.println(e);
        }
    }

    void newStudent() {
        stu[studCount] = new Student();
        studCount++;
    }

    void studInfo(int roll
    ) {
        int i;
        for (i = 0; i < studCount; i++) {
            if (stu[i].roll_no == roll) {
                stu[i].showInfo();
                return;
            }
        }
        System.out.println("No match found.");
    }

    void newStaff() {
        stf[staffCount] = new Staff();
        staffCount++;
    }

    void staffInfo(int id
    ) {
        int i;
        for (i = 0; i < staffCount; i++) {
            if (stf[i].id == id) {
                stf[i].showInfo();
                return;
            }
        }
        System.out.println("No match found.");
    }
}

class MyUniversity {

    public static void main(String args[]) throws IOException {
        University juet = new University();
        int ch;
        DataInputStream in = new DataInputStream(System.in);
        while (true) {
            System.out.println("\tMAIN MENU\n");
            System.out.println("1. Add student\n2. Add staff member\n3. Display info about specific student\n4. Display info about specific staff member\n0. Exit\n\tEnter your choice");

            try {
                ch = Integer.parseInt(in.readLine());
                switch (ch) {
                    case 1:
                        juet.newStudent();
                        break;
                    case 2:
                        juet.newStaff();
                        break;
                    case 3:
                        System.out.println("Enter roll no. of student to display info:");
                        int roll = in.readInt();
                        juet.studInfo(roll);
                        break;
                    case 4:
                        System.out.println("Enter ID of staff member to display info:");
                        int id = in.readInt();
                        juet.staffInfo(id);
                        break;
                    case 0:
                        return;
                    default:
                        System.out.println("Incorrect choice.");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
packagejuet;
输入juet.stud.Student;
输入juet.staff.staff;
导入java.io.BufferedInputStream;
导入java.io.DataInputStream;
导入java.io.IOException;
导入java.io.Console;
一流大学{
学生[]斯图;
员工stf[];
int studCount,staffCount;
大学(){
try(DataInputStream in=newdatainputstream(System.in)){
System.out.println(“为学生输入容量:”);
intx=Integer.parseInt(in.readLine());
//stu=新生[x];
System.out.println(“输入员工的容量:”);
x=Integer.parseInt(in.readLine());
stf=新员工[x];
studCount=staffCount=0;
}捕获(IOE异常){
系统错误println(e);
}
}
void newStudent(){
stu[studCount]=新学生();
studCount++;
}
无效studInfo(int roll)
) {
int i;
对于(i=0;i
当我调用主类中的
University
对象时,问题出现了,它要求两个输入

1) .为学生输入容量 所以我输入3 它再次要求 2) 输入工作人员的容量

但当我在那里输入整数时,它运行了无限次 并显示错误

异常:流已关闭

在 getBufIfopen(BufferedInputStream.java:170)

atjuet.MyUniversity.main(MyUniversity.java:76)

位于java.io.DataInputStream.readLine(DataInputStream.java:513)


请先帮我谢谢

您使用了错误的课程
DataInputStream
和方法
readUTF()
readInt()
不能用于从控制台读取文本。它被设计为使用
DataOutputStream
读取由不同Java程序编码的二进制内容

以下问题和答案向您展示了如何正确操作:

System.in不是控制台。@Wojciech-Kazior:因为您使用的是不推荐使用的方法
readLine()
@Mgorgon:System.in不是控制台,但问题清楚地表明OP将其用作控制台。@Wojciech-Kazior您不必关闭扫描仪。如果不关闭,System.in将不会关闭。@Wojciech-Kazior:
close()
不会自动调用。扫描仪根本没有
finalize
析构函数:请参阅