Возвращая переменную arraylist из метода в Java

1
 public ArrayList<detailTom>  read() 
{
   try 
   {
       /*System.out.println("Hello");*/
       BufferedReader in = new BufferedReader(new FileReader("G:/sample.txt"));
       String data;
       ArrayList <String> list = new ArrayList<String>();
       ArrayList<String> tomList= new ArrayList<String>();
       ArrayList<detailTom> tomData = new ArrayList<detailTom>();

       while((data= in.readLine())!=null)
       {
           /*System.out.println(data);*/
           String[] splits=data.split(" ");
           for(int i=0;i<splits.length;i++)
           {
                 if (splits[i].equals("tom"))
                 {
                       detailTom dummy= new detailTom();
                        dummy.name="tom";
                        dummy.mark1=Integer.parseInt(splits[1]);
                        dummy.mark2=Integer.parseInt(splits[2]);
                        dummy.mark3=Integer.parseInt(splits[3]);
                        dummy.mark4=Integer.parseInt(splits[4]);
                        dummy.mark5=Integer.parseInt(splits[5]); 

                        tomData.add(dummy);

                 }
           }

       }

   }

   catch (FileNotFoundException ex) 
   {
       Logger.getLogger(MyInterface.class.getName()).log(Level.SEVERE, null, ex);
   } catch (IOException ex) 
   {
       Logger.getLogger(MyInterface.class.getName()).log(Level.SEVERE, null, ex);
   }
   return tomData;


} 

Здравствуйте!

Я пытаюсь вернуть переменную tomData, которая является объектом класса ArrayList. detailTom - это класс, который имеет переменные, геттеры, сеттеры и т.д. Я хочу, чтобы мой метод read() возвращал tomData. Но я получаю ошибку в строке return tomData.

Ошибка говорит:

не может найти символ Символ: переменная tomData

Теги:
arraylist
methods
return

4 ответа

3
Лучший ответ

tomData объявляется внутри try block Переменные, объявленные внутри блока try, не являются доступными вне его. Просто объявите tomData из try block try.

public ArrayList<detailTom>  read() 
{
   ArrayList<detailTom> tomData = null;
   try 
   {
       /*System.out.println("Hello");*/
       BufferedReader in = new BufferedReader(new FileReader("G:/sample.txt"));
       String data;
       ArrayList <String> list = new ArrayList<String>();
       ArrayList<String> tomList= new ArrayList<String>();
       tomData  = new ArrayList<detailTom>();

       while((data= in.readLine())!=null)
       {
           /*System.out.println(data);*/
           String[] splits=data.split(" ");
           for(int i=0;i<splits.length;i++)
           {
                 if (splits[i].equals("tom"))
                 {
                       detailTom dummy= new detailTom();
                        dummy.name="tom";
                        dummy.mark1=Integer.parseInt(splits[1]);
                        dummy.mark2=Integer.parseInt(splits[2]);
                        dummy.mark3=Integer.parseInt(splits[3]);
                        dummy.mark4=Integer.parseInt(splits[4]);
                        dummy.mark5=Integer.parseInt(splits[5]); 

                        tomData.add(dummy);

                 }
           }

       }

   }

   catch (FileNotFoundException ex) 
   {
       Logger.getLogger(MyInterface.class.getName()).log(Level.SEVERE, null, ex);
   } catch (IOException ex) 
   {
       Logger.getLogger(MyInterface.class.getName()).log(Level.SEVERE, null, ex);
   }
   return tomData;


} 
  • 1
    что сработало - спасибо !!!!!!!
  • 1
    @Nidhin_toms Добро пожаловать.
5

Вы объявили tomData внутри вашей try -block, поэтому она не видна снаружи. Попробуйте переместить объявление перед try -block.

ArrayList<DetailTom> tomData;

try {
    ...
    tomData = ...

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

  • 0
    спасибо за ваш комментарий - Но я инициализировал tomData вне блока try. Это сработало !!
  • 0
    Вам нужно будет инициализировать tomData чтобы это работало - в противном случае он не скомпилируется, так как tomData возможно, не был инициализирован.
4

tomData работает, когда вы пытаетесь вернуть его. Там существует несколько способов, но самым простым было бы объявить и инициализировать tomData перед блоком try.

3

Ваш возвращаемый tomData внизу находится за пределами блока try, где объявлен tomData, поэтому он выходит из области видимости, попробуйте объявить tomData в начале метода

Ещё вопросы

Сообщество Overcoder
Наверх
Меню