2016-09-28 89 views
0

首先,我創建了一個名爲juet的文件夾,然後在該文件夾中創建了兩個包。第一個是學生包,其中在大學將學生的關懷從java中的DataInputStream讀取輸入時出錯

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類中,我用兩包時,我在麥調用University對象

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(); 
      } 
     } 
    } 
} 

問題是產生n個等級它所需要的兩個輸入

1)。進入容量爲學生 所以我進入3 和它再次要求 2)員工

輸入容量但當我進入整數它就在那裏運行無限次 和表示錯誤

java.io.Exception:流關閉

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

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

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

請幫我在此先感謝

回答

-1

您正在使用錯誤的類。 DataInputStream和方法readUTF()readInt()不能用於從控制檯讀取文本。它旨在使用DataOutputStream讀取由不同Java程序編碼的二進制內容。

以下問題和答案告訴你如何做是正確的: How can I read input from the console using the Scanner class in Java?

+0

System.in不是控制檯。 – MGorgon

+0

@Wojciech Kazior:因爲你正在使用'readLine()' – Robert

+0

@Mgorgon:System.in不是控制檯,但問題清楚地表明OP使用它作爲控制檯。 – Robert