我对java很陌生,如果这是一个愚蠢的问题,请道歉。
我有以下功能
public static List<String[]> read(String document) throws IOException{
try{
CSVReader reader = new CSVReader(new FileReader(document));
List<String[]> data = reader.readAll();
reader.close();
} catch(IOException e){
e.printStackTrace();
}
return data;
}
但是我收到的错误是数据无法解析为变量。但是,如果我在try语句中返回错误消失并声明该函数应该返回。由于变量在函数内部,我会认为无论捕获它是否允许这样做。任何人都可以向我解释我哪里出错了吗?
答案 0 :(得分:4)
这非常简单。问题是“数据”仅存在于“try”块的范围内。除此之外,它是未定义的。一个简单的解决方案可能如下所示:
public static List<String[]> read(String document) throws IOException{
List<String[]> data = null;
try{
CSVReader reader = new CSVReader(new FileReader(document));
data = reader.readAll();
reader.close();
} catch(IOException e){
e.printStackTrace();
}
return data;
}
答案 1 :(得分:1)
您需要在同一块中声明数据变量
public static List<String[]> read(String document) throws IOException{
List<String[]> data;
try{
CSVReader reader = new CSVReader(new FileReader(document));
data = reader.readAll();
reader.close();
} catch(IOException e){
e.printStackTrace();
}
return data;
}
答案 2 :(得分:1)
public static List<String[]> read(String document) throws IOException{
List<String[]> data = null; //Declare your variable here
try{
CSVReader reader = new CSVReader(new FileReader(document));
data = reader.readAll(); //Initialize your variable here
reader.close();
} catch(IOException e){
e.printStackTrace();
}
return data;
}
在try块之外声明您的变量。执行此操作时,可以在该try块之外访问它,例如,return语句为。
答案 3 :(得分:1)
答案非常简单:
public static List<String[]> read(String document) throws IOException{
List<String[]> data = null;
try{
CSVReader reader = new CSVReader(new FileReader(document));
data = reader.readAll();
reader.close();
} catch(IOException e){
e.printStackTrace();
}
return data;
}
这是因为data
在try catch
块中声明 ,或者它也称为范围(我会坚持阻止) 。在块内声明的所有内容都只能在此块内或内部块中进行接收。
另一种解决方案如下。如果不是必要的话,它可以避免声明(并初始化) data
变量:
public static List<String[]> read(String document) throws IOException{
try{
CSVReader reader = new CSVReader(new FileReader(document));
List<String[]> data = reader.readAll();
reader.close();
// Return early. Note this only happens when everything went right.
// (Which is what we hope for)
return data;
} catch(IOException e){
e.printStackTrace();
}
// This will only happen when it caught a exception!
return null;
}
但是我会坚持第一个解决方案!
答案 4 :(得分:0)
数据范围介于try子句的大括号之间,因此您无法在该范围之外访问它。您需要在try之外定义数据,以便在try之外返回它。