2014-02-06 4 views
0

Я получаю сообщение о том, что компилятор не может найти мою переменную complexArray, но я не знаю почему. Как исправить мою программу, чтобы она возвращала массив Сложных чисел, считанных из файла?Java: Локальная область переменной

public static Complex[] parseFromFile(String fileName) { 
    int numOfComplex = 0; 
    try { 
     Scanner sc = new Scanner(new File(fileName)); 
     String firstLine = sc.nextLine(); 
     firstLine = firstLine.trim(); 
     numOfComplex = Integer.parseInt(firstLine); 
     Complex[] complexArray = new Complex[numOfComplex]; 
     for (int i = 0; i < numOfComplex; i++) { 
      String nextLine = sc.nextLine(); 
      nextLine = nextLine.trim(); 
      complexArray[i] = parseComplex(nextLine); 
     } 
    } 
    catch(Exception e) { 
    } 
    return complexArray; 
} 

ответ

0

Ваша переменная complexArray объявлена ​​внутри области try {}. Объявите его перед заявлением try.

Complex [] complexArray = null;

+0

, когда я объявляю его как null, он возвращает значение null. по какой-то причине массив не изменяется внутри блока try/catch – user3277742

0

Put оператор возврата complexArray в попытку {} заявление

public static Complex[] parseFromFile(String fileName) { 
int numOfComplex = 0; 
try { 
    Scanner sc = new Scanner(new File(fileName)); 
    String firstLine = sc.nextLine(); 
    firstLine = firstLine.trim(); 
    numOfComplex = Integer.parseInt(firstLine); 
    Complex[] complexArray = new Complex[numOfComplex]; 
    for (int i = 0; i < numOfComplex; i++) { 
     String nextLine = sc.nextLine(); 
     nextLine = nextLine.trim(); 
     complexArray[i] = parseComplex(nextLine); 
    } 
return complexArray; 
} 
catch(Exception e) { 
} 

}

+0

, это говорит о том, что мне не хватает оператора return после catch – user3277742

+0

ok, тогда попробуйте поместить возвращаемый complexArray туда, где он есть, а затем поместить Complex [] complexArray = new Complex [ numOfComplex]; ниже int numOfComplex = 0; –

0

так complexArray объявлен в try блоке после того, как выполнение внутри блока Ьгу завершается complexArray выходит за рамки.

 public static Complex[] parseFromFile(String fileName) { 
     int numOfComplex = 0; 
     try { 
      Scanner sc = new Scanner(new File(fileName)); 
      String firstLine = sc.nextLine(); 
      firstLine = firstLine.trim(); 
      numOfComplex = Integer.parseInt(firstLine); 
      Complex[] complexArray = new Complex[numOfComplex]; 
      for (int i = 0; i < numOfComplex; i++) { 
       String nextLine = sc.nextLine(); 
       nextLine = nextLine.trim(); 
       complexArray[i] = parseComplex(nextLine); 
      } 
     } //<<<=== scope of `complexArray` ends here 
     catch(Exception e) { 
     } 
     return complexArray; 
    } 

попробовать это

 public static Complex[] parseFromFile(String fileName) { 
     int numOfComplex = 0; 
     Complex[] complexArray; 
     try { 
      Scanner sc = new Scanner(new File(fileName)); 
      String firstLine = sc.nextLine(); 
      firstLine = firstLine.trim(); 
      numOfComplex = Integer.parseInt(firstLine); 
      complexArray = new Complex[numOfComplex]; 
      for (int i = 0; i < numOfComplex; i++) { 
       String nextLine = sc.nextLine(); 
       nextLine = nextLine.trim(); 
       complexArray[i] = parseComplex(nextLine); 
      } 
     } 
     catch(Exception e) { 
     } 
     return complexArray; 
    } //<<<=== scope of `complexArray` ends here 
+0

говорит, что переменная не может быть инициализирована --- Я думаю, что происходит то, что она не помещает значения в массив, и я не знаю, почему – user3277742

0

Продолжая от @hemanth

public static Complex[] parseFromFile(String fileName) { 
     int numOfComplex = 0; 
     Complex[] complexArray = new Complex[numOfComplex]; // Need to initialize the array 
     try { 
      Scanner sc = new Scanner(new File(fileName)); 
      String firstLine = sc.nextLine(); 
      firstLine = firstLine.trim(); 
      numOfComplex = Integer.parseInt(firstLine); 
      complexArray = new Complex[numOfComplex]; 
      for (int i = 0; i < numOfComplex; i++) { 
       String nextLine = sc.nextLine(); 
       nextLine = nextLine.trim(); 
       complexArray[i] = parseComplex(nextLine); 
       } 
      return complexArray; 
     } 
     catch(Exception e) { 
      System.out.println("Exception was thrown"); // try adding this to see if an exception is thrown. 
     } 
     return complexArray; 
    } //<<<=== scope of `complexArray` ends here 

Вы должны инициализировать объект complexArray путем создания нового комплекса массива. Это ваша проблема.

Я думаю, что это может сработать. если все хорошо, он должен ввести предложение try. Если нет, он вернет complexArray размера 0. Я предполагаю, что если это произойдет, что-то не так с файлом, что означает, что вам нужно будет что-то сделать вручную?

+0

тоже не работает - причина в том, что я должен получить длина массива из файла, который я читаю, поэтому я не могу объявить массив с его размером, прежде чем я прочитаю из файла. Но когда я делаю что-либо в блоке try/catch, он, похоже, не изменяет или не влияет на массив вообще – user3277742

+0

ok, почему бы не поставить оператор return внутри предложения try? – SeekingAlpha

+0

, потому что тогда он говорит мне, что мне нужна инструкция return после try/catch. кажется, что он даже не попадает в предложение try. – user3277742

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