在java中从DataInputStream读取输入时出错
首先,我制作了一个名为juet的文件夹,然后在该文件夹内制作了两个包。第一个是学生套餐,它照顾大学里所有的学生在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
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
析构函数:请参阅