2013-04-09 5 views
1

Я не кодировал более двух лет и невероятно ржавый, но после продолжительного поиска в Google довольно долго не могу понять, что я сделал неправильно. Сначала я объясню эту программу, даже если это очень просто. У меня есть .txt-файл с 680 номерами, по одному числу в строке и я пытаюсь найти частоту чисел с диапазоном 000-999. Я считаю, что могу определить частотную часть, поскольку она кажется довольно простой, но мне трудно понять, как импортировать числа из .txt-файла. Это ошибка, у меня есть:Возможно, переменная sc не была инициализирована

C:\Users\Arthur\Documents\FrequencyStraightPlay\FrequencyStraightPlay.java:17: error: variable sc might not have been initialized 
     while (sc.hasNextInt()) { 
      ^
1 error 

Код:

import java.io.*; 
import java.util.*; 

public class FrequencyStraightPlay { 

public static void main(String[] args) { 

    int [] rawNumbers = new int [680]; 
    int i = 0; 

    Scanner sc; 
    try { 
     sc = new Scanner(new File("Numbersnospaces.txt")); 
    } catch (FileNotFoundException e) { 
     System.out.println("File not Found!"); 
    } 
    while (sc.hasNextInt()) { 
     rawNumbers[i++] = sc.nextInt(); 
    } 

    System.out.println("The Raw Numbers: "); 

    for (i = 0; i < 680; i++) { 
     System.out.println(rawNumbers[i]); 
    } 

} 

} 
+4

Сообщение об ошибке сообщает вам ** точно **, в чем проблема. Я предлагаю вам внимательно прочитать его. –

+0

Вы получили «Файл не найден!» в вашем выпуске? –

+0

просто сканер sc = null; вместо Scanner sc; – Jabir

ответ

8

Если вы ловите FileNotFoundException, то sc не инициализированы.

Поместите петлю while внутри блока try, чтобы вы знали, что sc был инициализирован к тому времени, когда вы доберетесь до него.

Можно было бы подумать, что решение для инициализации sc в null, когда он объявил, но это неправильно, потому что без перемещения петли while внутри try блока, вы можете получить NullPointerException, если вы поймали FileNotFoundException; sc все равно будет null.

0

Вам необходимо обработать случай, когда файл не найден. Рассмотрите возможность исключения исключений (или возврата) вместо продолжения кода.

0

если код в блоке try catch генерирует исключение, значение sc равно null. вам не следует переходить к sc.hasNextInt() после того, как вы поймали исключение.

try { 
     sc = new Scanner(new File("Numbersnospaces.txt")); 
    } catch (FileNotFoundException e) { 
     System.out.println("File not Found!"); 
     return; // this will remove that error/warning 
    } 
Смежные вопросы