我正在编写一个将文本文件读入并行数组的程序,然后允许用户请求将符合条件的条目打印到单独的文件中。我在代码的开头声明了这些数组,但是直到稍后才对它们进行初始化,因为它们的长度依赖于从文件中提取的数据。
我现在正在尝试编写将过滤结果打印到文件的方法,但是eclipse告诉我我不能将它们作为参数传递,因为它们没有被初始化。但它们是在一个循环中初始化的。我不能提前初始化它们,因为程序还不知道所需的长度。
代码的相关位
filterLocation(time, longitude, magnitude, latitude, location, description, entries);
当我尝试从main方法调用方法
时出现错误public static void filterLocation (String[] time,
double[] latitude,
double[] longitude,
double[] magnitude,
String[] location,
String[] description,
int entries )
我正在尝试编写的方法,其中eclipse没有检测到任何错误。
String[] time;
double[] latitude;
double[] longitude;
double[] magnitude;
String[] location;
String[] description;
声明变量的地方,就在public static void main ...
下if(entries!=0){
time = new String[entries];
latitude = new double[entries];
longitude = new double[entries];
magnitude = new double[entries];
location = new String[entries];
description = new String[entries];
初始化它们,嵌套在while循环中,if语句和try块
答案 0 :(得分:1)
初始化调用filterLocation的方法中的变量。好像你没有在那里初始化变量。
修改强>:
您的代码中存在条件
if(entries!=0){
阻止初始化。编译器指出条件如果条目= 0怎么办?那条件不符合。
您也应该遇到这种情况,以避免编译错误。
请参阅下面的虚拟代码。
public static void main(String [] args){
int a;
if (args != null) {
a = 10;
} else {
a = 11;
}
sampleMethod(a);
}
public static void sampleMethod(int a) {
// TODO Auto-generated method stub
}
删除else条件,并查看编译错误。
希望你能理解这个问题。
修改强>
或者在条件本身内调用方法。见虚拟代码。
public static void main(String[] args) {
int a;
if (args != null) {
a = 10;
sampleMethod(a);
}
}
public static void sampleMethod(int a) {
// TODO Auto-generated method stub
}
修改强>
或者变量应该在班级。
public class TestMethod {
private int a;
public static void main(String[] args) {
TestMethod method = new TestMethod();
method.wrapperMethod(args);
}
public void wrapperMethod(String[] args) {
if (args != null) {
a = 10;
}
sampleMethod(a);
}
public static void sampleMethod(int a) {
// TODO Auto-generated method stub
}
将每个方法参数(第8.4.1节)初始化为相应的参数 参数值由方法的调用者提供(第15.12节)。
必须明确赋予局部变量(§14.4,§14.14)一个值 在使用之前,通过初始化(§14.4)或赋值 (§15.26),可以使用明确规则进行验证 任务(§16)。
答案 1 :(得分:0)
问题是if
条件:
if(entries!=0){
如果entries
为零,则永远不会初始化数组。这就是编译器所抱怨的。
最简单的解决方法是在保留初始化的同时删除if
:
time = new String[entries];
latitude = new double[entries];
...
在Java中分配零大小的数组非常好。有关讨论,请参阅Why does Java allow arrays of size 0?
为了使代码更紧凑,您甚至可以将声明与初始化合并:
String[] time = new String[entries];
double[] latitude = new double[entries];
...