2014-12-10 3 views
2

Я читаю из файла и сохраняю все в нем. Вся программа работала нормально, но я не читал последнюю строку файла, и когда я пытался сделать это, когда все стало странно, последняя строка файла - «END_OF_FILE». Я попытался сохранить его как строку, и это не сработало, когда я получил сообщение об ошибке, но теперь я взял все это из своего кода, и он полностью не запускает программу, последнее, что она выводит, - это работа да, которая находится в моей последней петле в главном.java.util.NoSuchElementException во время сканирования файла

Вот мой код:

import java.io.*; 

import java.util.Scanner; 
public class hurry2 { 

    public static void main (String [] args) throws IOException 
    { 
     File candidates = new File("cipcs115.txt"); 
     Scanner scan = new Scanner(candidates); 
     Scanner user = new Scanner(System.in); 
     String state = scan.next(); 
     int numOfCan = scan.nextInt(); 
     String what = scan.nextLine(); 

     String stateWi ; 
     String stateAl ; 
     String stateDe ; 

     int numOfCanWi ; 
     int numOfCanAl ; 
     int numOfCanDe ; 

     Candidate [] candiIl ; 
     Candidate [] candiWi; 
     Candidate [] candiAl ; 
     Candidate [] candiDe; 
     hurry2 cill = new hurry2(); 

     candiIl = new Candidate[numOfCan]; 
     for (int i=0; i<numOfCan; i++) 
     { 
      String three = scan.next(); 
      String four = scan.next(); 
      String five = scan.next(); 
      int six = scan.nextInt(); 
      double seven = scan.nextDouble(); 
      String eight = scan.nextLine(); 

      Candidate night = new Candidate (three,four,five,six,seven,eight); 
      candiIl [i] = night ; 
      System.out.println(night.getName() + " " + night.getMotto()); 
     } 

     stateWi = scan.next(); 
     numOfCanWi = scan.nextInt(); 

     candiWi = new Candidate[numOfCanWi]; 
     for (int i=0; i<numOfCanWi; i++) 
     { 
      String three = scan.next(); 
      String four = scan.next(); 
      String five = scan.next(); 
      int six = scan.nextInt(); 
      double seven = scan.nextDouble(); 
      String eight = scan.nextLine(); 

      Candidate night = new Candidate (three,four,five,six,seven,eight); 
      candiWi [i] = night ; 
      System.out.println(night.getName() + " " + night.getMotto()); 
     } 

     stateAl = scan.next(); 
     numOfCanAl = scan.nextInt(); 

     candiAl = new Candidate[numOfCanAl]; 
     for (int i=0; i<numOfCanAl; i++) 
     { 
      String three = scan.next(); 
      String four = scan.next(); 
      String five = scan.next(); 
      int six = scan.nextInt(); 
      double seven = scan.nextDouble(); 
      String eight = scan.nextLine(); 

      Candidate night = new Candidate (three,four,five,six,seven,eight); 
      candiAl [i] = night ; 
      System.out.println(night.getName() + " " + night.getMotto()); 
     } 

     stateDe = scan.next(); 
     numOfCanDe = scan.nextInt(); 

     candiDe = new Candidate[numOfCanDe]; 
     for (int i=0; i<numOfCanAl; i++) 
     { 
      String three = scan.next(); 
      String four = scan.next(); 
      String five = scan.next(); 
      int six = scan.nextInt(); 
      double seven = scan.nextDouble(); 
      String eight = scan.nextLine(); 

      Candidate night = new Candidate (three,four,five,six,seven,eight); 
      candiDe [i] = night ; 
      System.out.println(night.getName() + " " + night.getMotto()); 
      System.out.println("yes"); 
     } 

     System.out.println(" what would you like to do? >"); 
     String option = user.next(); 
     switch (option) 
     { 
      case "m": 
      case "M": 
       cill.menu(candiIl); 
       break; 
     } 
     scan.close();  
    } 

    public static void menu(Candidate [] rod) 
    { 
     hurry2 cill1 = new hurry2(); 
     Scanner menus = new Scanner(System.in); 
     System.out.print("What would you like to do next >"); 
     String option1 = menus.next() ; 
     switch (option1) 
     { 
      case "l" : 
      case "L" : 
       cill1.listall(rod); 
       break ; 
     } 
     return ; 
    } 
    public static void listall(Candidate [] yes) 
    { 
     int numOfCan = 3; 
     for (int s =0; s<numOfCan;s++) 
      System.out.println(yes[s].getName() + yes[s].getParty() + yes[s].getMotto()); 
     return ; 
    } 
} 

и здесь все мое сообщение об ошибке, снова эта программа выводит всю до слова да, который я включил в моем последнем цикл для массива Кандида. Заранее спасибо за помощь ребятам.

Exception in thread "main" java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Scanner.java:907) 
    at java.util.Scanner.next(Scanner.java:1416) 
    at hurry2.main(hurry2.java:91) 
+0

Ваши предложения полностью перепутаны, и ваш код слишком велик, чтобы понимать «на лету». Пожалуйста, измените его на MCVE: http://stackoverflow.com/help/mcve И ПОЖАЛУЙСТА, используйте отступы, просто скопируйте и вставьте отформатированный текст из своей IDE, большинство IDE будут отформатировать и отложить его правильно. – specializt

ответ

2

Кажется, вы пытаетесь для нескольких scan.next() метода вызывает без проверки на scan.hasNext() метода.

Попробуйте ввести scan.hasNext() прежде чем позвонить по телефону next() метод.

+0

хорошо, я понимаю, что это безопасно, но я знаю, как настроен файл, и он все правильно хранит. в конце каждого взгляда я распечатываю каждое из значений, переданных, чтобы я мог видеть, что все хранится правильно. Проблема возникает прямо перед моим первым оператором switch, System.out.println («Что бы вы хотели сделать дальше>») никогда не выводится. @hemanth – mrod2893

+0

Почему у вас есть два цикла для numOfCanAl? – hemanth

0

последняя вещь, которую он выводит работа да

Кажется, что цикл входит, печатает yes и в следующей итерации бросает исключение. В какой-то момент вы выходите из токенов, чтобы попасть в сканер.

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