2015-03-17 2 views
1

Так у меня возникают проблемы зацикливания через текстовый файл, отформатированный как таковой:Для цикла для ArrayList в Java

31718 PHILLIP LENNOX 55.0 20.00 
11528 NANCY TROOPER 40,0 10.45 
16783 JOHN CONNAUGHT 30.5 10.00 
10538 PETER DUNCAN 45.0 10.75 
21O15 JAMES HAROLD 32.0 10.50 
61326 HARRY KUHN 25.0 12.30 

Теперь я знаю, что есть целеустремленно ошибки внутри файла .txt, и где мой catch (InputMismatchException n) вступает в игру. Я должен выбрать любое несоответствие в .txt-файле и сохранить его в другом .txt-файле.

часть, где я застрял на том, что я не могу показаться, чтобы выяснить петлю за пределами моего метода попробовать/поймать, чтобы успешно продолжать смотреть через текстовый файл после InputMismatchException найден ...

Я пробовал использовать for-loop, но настройка int i = 0; в принципе даже не запускает мою программу, так как Arraylist ArrEmployee имеет размер null? (Из того, что я понимаю, Ява)

Вот мой код (Где это имя пользователя Windows):

public class Main { 
    public static void main(String[] args) { 
     ArrayList<Employee> ArrEmployee = new ArrayList<Employee>(); // array for employee objects 

     try { 
      Scanner txtIn = new Scanner(new File("/Users/<USER>/Documents/workspace/COMP 249 - Assignment 3/src/payroll.txt")); 

      while (txtIn.hasNext()) { // looping through the payroll.txt file and creating Employee objects from its data 
       long EmployeeNumber = txtIn.nextLong(); 
       String EmployeeName = txtIn.next(); 
       String LastName = txtIn.next(); 
       double HoursWorked = txtIn.nextDouble(); 
       double HourlyWage = txtIn.nextDouble(); 

       ArrEmployee.add(new Employee(EmployeeNumber, EmployeeName, LastName, HoursWorked, HourlyWage)); 
      } 
     } catch (FileNotFoundException e) { 
      System.out.println("File payroll.txt was not found."); 
     } catch (InputMismatchException n) { 
      if (ArrEmployee.get().getHourlyWage() < 10.35) { 
       System.out.println("Hourly wage under minimum"); 
      } 
     } 
    } 
} 

ответ

2

Ваша главная ошибка, как я вижу, это то, что у вас есть время цикла внутри вашей line- чтение блока try/catch, и поэтому нет способа восстановить обратно в цикл, когда вы столкнетесь с ошибкой.

Вместо:

  • да сделать файл получения попробовать/поймать (FileNotFoundException ...) первый и есть все остальное код внутри этого.
  • Затем сделайте свой цикл while
  • Затем внутри вашего захвата цикла while для InputMismatchException.
  • Myself, я хотел бы использовать сканер на основе файла, скажем, с именем, fileScanner,
  • И мой в то время как цикл будет петля while (fileScanner.hasNextLine())
  • Первая строка внутри цикла в то время, я бы извлечь всю линию по телефону fileScanner.nextLine().
  • Я затем создать 2-й сканер внутри цикла в то время как на основе линии, полученной, возможно, называется lineScanner, т.е. Scanner lineScanner = new Scanner(line);
  • И я бы разобрать каждый маркер с этим сканером, и внутри внутренней попытки/catch InputMismatchException block. Если это не удается, уловка должна получить это, и вы сможете справиться с этим.
  • Как отметил Том, если вы используете Java 7, перейдите по ссылке Try with resources. Таким образом, ваши сканеры будут автоматически закрываться, когда вы закончите с ними.

В псевдокоде

Using try with resources get File and create fileScanner Scanner object 
    while fileScanner has next line 
     create String line from fileScanner's next line. 
     try with resources, create lineScanner using line 
     parse each token in line using lineScanner. 
     ... 
     ... 
     Create Employee instance with information obtained above 
     place into ArrayList. 
     catch input mismatch here 
     send line to error File 
    end while fileScanner has next line 
catch File not found 
+0

Спасибо за вход .. Не могли бы вы прояснить мой код? У меня есть трудное понимание в псевдокоде (все еще новичок программист!) – X1XX

+1

@ X1XX: так как это домашнее задание или ваша школьная работа, я бы предпочел, и именно поэтому я использовал псевдокод. Лучше для вас попробовать, и если он все еще не работает, покажите нам свою попытку. –

1

Казалось бы, что вы хотите прочитать файл построчно, а затем пытаться разобрать каждую строку попробовать {} {} уловом, чтобы поймать ошибки формата. Затем каждая строка может быть записана в отдельный файл ошибок.

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