2014-10-25 4 views
0

Я по-прежнему довольно новичок в java, и в моем текущем проекте класса мы пытаемся установить учеников в классные комнаты, информация о студентах читается из текстового файла, который мы создаем, но моего читателя программа не останавливается после 4 строк (это конец информации студента). Он читает их все и печатает их, прежде чем анализировать, что у них есть, чтобы привести их в правильное значение classRoom. Пожалуйста, помните, что я еще новичок в java.Читатель не останавливается в моей программе (java)

Также не уверен, об ошибке я получаю около Exception in thread "main" java.util.NoSuchElementException: No line found

это мой читатель программа

import java.io.*; 
import java.util.Scanner; 
public class Student{ 

    private Scanner file; 
    public String name; 
    public String id; 
    public String year; 
    public String course; 
    //open the file to read 
    public void openFile(){ 
     try{ 
      file = new Scanner(new File("StudentFile.txt")); 
     } 
     catch(Exception e) 
     { 
      System.out.print("Could not Open File"); 
     } 
    } 
    //Read the file and Assign the Student information strings 
    protected void readFileText(){ 
     if(file.hasNext()) 
     {   
      for(int n=0; n<4; n++) 
      { 
       name = file.nextLine(); 
       id = file.nextLine(); 
       year = file.nextLine(); 
       course = file.nextLine(); 
       System.out.print("\n" + name + "\n" + id + "\n" + year + "\n" + course + "\n"); 
      } 
     } 
     else 
     { 
      name = null; 
     } 
    } 
    //close the file 
    public void closeFile(){ 
     file.close(); 
    } 


    //set information 

    public Student(){ 
      this.name = name; 
      this.id = id; 
      this.year = year; 
      this.course = course; 
    } 


    //Get the informaton to main method 

    public String getName(){ 
     return name; 
    } 

    public String getId(){ 
     return id; 
    } 
    public String getYear(){ 
     return year; 
    } 
    public String getCourse(){ 
     return course; 
    } 

} 

Это мой основной метод

public class Registrar { 

     public static void main(String[] args) { 
      Student student = new Student(); 
      student.openFile(); 

      String namenull = " "; 
      String classRoom[] = {"Washington W1000", "Washington W1100", "Washington W1200", "Washington W1300", "Washington W1400", "Washington W1500", "Kennedy K1000", "Kennedy K1100", "Kennedy K1200", "Kennedy K1300"}; 
      int maxCapacity = 25; 
      int studentNum = 0; 
      int num = 0; 
      int n = 0; 
      String currentClass = classRoom[0]; 

      while(namenull != null){  // to read the file and set students to a classroom. 
      student.readFileText(); 
      String course = student.getCourse(); 
       while (n < 10){ 
        if(currentClass == "Washington W1400"){ 

         maxCapacity = 30; 
        } 
        else if(currentClass == "Kennedy 1000"){ 
         maxCapacity = 25; 
        } 
        else if(currentClass == "Kennedy 1200"){ 
         maxCapacity = 35; 
        } 
        int num1 = 1; 
        int num2 = 2; 
        int num3 = 3; 
        if(studentNum < maxCapacity && course == "Comp 182" && num < 10){ 
          System.out.print("\nRegistered in Comp 182, in classroom " + currentClass); 
          studentNum++; 
        } 
        else{ 
           while(num == num1 || num == num2 || num == num3 || num == num){ 
            num = num++; 
           } 
        } 
        if(studentNum < maxCapacity && course == "Comp 182 Lab" && num1 < 10){ 
          currentClass = classRoom[num1]; 
          System.out.print("\nRegistered in Comp 182 Lab, in classroom " + currentClass); 
          studentNum++; 
        } 
        else{ 
           while(num1 == num || num1 == num2 || num1 == num3 || num1 == num1){ 
            num1 = num1++; 
           } 
        } 
        if(studentNum < maxCapacity && course == "Comp 101" && num2 < 10){ 
          currentClass = classRoom[num2]; 
          System.out.print("\nRegistered in Comp 101, in classroom " + currentClass); 
          studentNum++; 
          } 
        else{ 
          while(num2 == num || num2 == num1 || num2 == num3 || num2 == num2){ 
            num2 = num2++; 
          } 
        } 
        if(studentNum < maxCapacity && course == "Comp 101 Lab" && num3 <10){ 
          currentClass = classRoom[num3]; 
          System.out.print("\nRegistered in Comp 101 Lab, in classroom " + currentClass); 
          studentNum++; 
        } 
        else{ 
          while(num3 == num || num3 == num1 || num3 == num2 || num3 == num3){ 
           num3 = num3++; 
          } 
        }  
        currentClass = classRoom[num]; 
       } 
       namenull = student.getName(); 
      } 
      student.closeFile(); 
     } 
} 

Как просил, мой StudentFile.txt

Alfredo Dominguez 
1205586453 
Freshman 
Comp 182 
Stacy Flores 
6584527256 
Sophmore 
Comp 182 Lab 
+0

Это очень трудно читать ваш код, для вас и для нас, просто потому, что это не preoperly отступа. Пожалуйста, исправьте это. –

+0

Как вы знаете, что ваша программа не останавливается после 4 строк для данного учащегося? Это предположение, которое вы делаете, потому что вы получаете исключение NoSuchElementException? Его происхождение происходит из одного из ваших вызовов nextLine(). Есть 4 из них, выполненных обратным образом в цикле for в readFileText(). Другими словами, вы всегда будете получать это исключение, если количество строк в вашем файле не кратно четыре. Я думаю, было бы полезно, если бы вы показали нам свой файл ввода и переформулировали свой вопрос. – trooper

ответ

1

Сканер бросает NoSuchElementException, если строка не найдена. так обернуть каждый file.nextLine(); с

if(file.hasNextLine()){ 

file.nextLine(); 

} 
+0

Пробовал это, он только распечатывает 1 студент сейчас и дает мне то же самое «Исключение в потоке» main «java.util.NoSuchElementException: строки не найдено» после – Robert

Смежные вопросы