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
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;
}
Вы объявили tomData
внутри вашей try
-block, поэтому она не видна снаружи. Попробуйте переместить объявление перед try
-block.
ArrayList<DetailTom> tomData;
try {
...
tomData = ...
Также обратите внимание, что я принял более стандартное соглашение об именах: имена классов должны начинаться с заглавной буквы.
tomData
чтобы это работало - в противном случае он не скомпилируется, так как tomData
возможно, не был инициализирован.
tomData
работает, когда вы пытаетесь вернуть его. Там существует несколько способов, но самым простым было бы объявить и инициализировать tomData
перед блоком try
.
Ваш возвращаемый tomData внизу находится за пределами блока try, где объявлен tomData, поэтому он выходит из области видимости, попробуйте объявить tomData в начале метода