2014-10-11 2 views
-1

Я пишу программу, которая позволяет мне просматривать java-файлы на моем компьютере и видеть, совпадают ли все фигурные скобки, поэтому перед сопоставлением {. Он позволяет мне выбрать файл, а затем после этого он говорит, что я не исключение такого элемента и что строка не найдена. В другой половине времени он просто работает навсегда, заставляя меня думать, что я каким-то образом установил бесконечный цикл. Будут оценены любые советы со сканером или циклом while.Что случилось с тем, как я пользуюсь сканером?

public class BraceChecker { 

public static void main(String[] args) { 
    final JFileChooser fc = new JFileChooser(); 
    int response = fc.showOpenDialog(null); 
    boolean end = true; 

    if (response == JFileChooser.APPROVE_OPTION) { 
     File f = fc.getSelectedFile(); 
     Scanner scan1 = new Scanner(f.toString()); 
     String line; 
     ArrayListStack Stack1 = new ArrayListStack(); 
     while ((line = scan1.nextLine()) != null && end) { 
      for (int i = 0; i < line.length(); i++) { 
       if (line.charAt(i) == '{') { 
        Stack1.push('{'); 

       } 
       if (line.charAt(i) == '}') { 
        if (Stack1.isEmpty()) { 
         System.out.println("Braces Are Unbalanced"); 
         end = false; 
         i = line.length(); 
        } else { 
         Stack1.pop(); 
        } 
       } 
      } 
     } 
     if (end == true && Stack1.isEmpty()) { 
      System.out.println("Braces are Balanced"); 
     } 

    } 

} 
+0

ли вы шаг через программу в отладчике, в то время как это обработка одной из проблемных файлов? Если нет, это может быть хорошим местом для начала. –

+0

Но как насчет того, когда он говорит, линия не найдена? – trosy

ответ

1

Это ваша проблема:

while ((line = scan1.nextLine()) != null && end) 

Используйте метод hasNextLine сканера вместо этого. nextLine бросает NoSuchElement если вы пытаетесь сканировать строку, которая не существует (то есть, если вы пытаетесь идти от конца файла)

0

Я вижу 2 проблемы в этом:

Scanner scan1 = new Scanner(f.toString()); 

в сканер должен просканировать файл не строковое представление о нем, иначе он будет сканировать litterally эту строку из f.toString(), который будет имя файла, так что используйте:

new Scanner(f);// the file itself not its String representation 

Тогда об ошибке NoSuchElement. Это проблема с условием, которое вы написали для цикла while. Хотя кажется правильным положить! = Null, если строка там отсутствует, scanner.nextLine() не возвращает значение null, оно выдает исключение NoSuchElementException.

Так, чтобы исправить эту попытку:

String line ; 
while(scanner1.hasNext()){ //hasNext() means the sanner has a next line 
    line = scanner1.nextLine(); 
} 
Смежные вопросы