簡體   English   中英

從Java中的DataInputStream讀取輸入時出錯

[英]Error in reading Input from DataInputStream in 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() {
        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();
            }
        }
    }
}

當我在主類中調用University對象時,出現了問題,要求兩個輸入

1)。輸入學生人數,因此我輸入3,然后再次詢問2)輸入人員人數

但是當我輸入整數時,它正在運行無限次並顯示錯誤

java.io.Exception:流已關閉

在java.io.BufferedInputStream.getBufIfopen(BufferedInputStream.java:170)

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

在java.io.DataInputStream.readLine(DataInputStream.java:513)

請幫我謝謝

您使用了錯誤的類。 DataInputStream以及方法readUTF()readInt()不能用於從控制台讀取文本。 它旨在使用DataOutputStream讀取由其他Java程序編碼的二進制內容。

以下問題和答案向您展示如何正確執行操作: 如何使用Java中的Scanner類從控制台讀取輸入?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM