Java 如何通过2d数组错误调用方法

Java 如何通过2d数组错误调用方法,java,arrays,Java,Arrays,我试图创建一个新的列表,这样无论用户输入什么高度,这个方法都应该查找坐标并返回用户输入的坐标以下的坐标。我正在努力让这个方法运行 static double[][] array; Map m = new Map(); public static void main(String[] args) throws FileNotFoundException { m.coordinatesBelow(-2000) } public static void readDataArray(Stri

我试图创建一个新的列表,这样无论用户输入什么高度,这个方法都应该查找坐标并返回用户输入的坐标以下的坐标。我正在努力让这个方法运行

static double[][] array;
Map m = new Map();

public static void main(String[] args) throws FileNotFoundException {
    m.coordinatesBelow(-2000)
}

public static void readDataArray(String filename) throws FileNotFoundException {
    Scanner input = new Scanner(new BufferedReader(new FileReader("sample.xyz")));
    int rows = 2500000;
    int columns = 3;

    double[][] array= new double[rows][columns];
    int i = 0;
    while (input.hasNextLine()) {
        String[] line = input.nextLine().trim().split("\t");
        for (int j = 0; j < line.length; j++) {
            array[i][j] = Double.parseDouble(line[j]);
        }
        i++;
    }
    System.out.println(Arrays.deepToString(array));
}

public List<Double> coordinatesBelow(double altitude) {
    List<Double> coordinatesBelow = new ArrayList<>();
    for (int i = 0; i < array.length; i++) {
        coordinatesBelow.add(array[i][2]);
    }
    coordinatesBelow.removeIf(b -> b > altitude);
    return coordinatesBelow;
}
静态双[][]数组;
Map m=新Map();
公共静态void main(字符串[]args)引发FileNotFoundException{
m、 以下坐标(-2000)
}
公共静态void readDataArray(字符串文件名)引发FileNotFoundException{
扫描仪输入=新扫描仪(新的BufferedReader(新的文件阅读器(“sample.xyz”)));
int行=2500000;
int列=3;
double[]数组=新的双精度[行][列];
int i=0;
while(input.hasNextLine()){
String[]line=input.nextLine().trim().split(“\t”);
对于(int j=0;jb>高度);
返回以下坐标;
}

您正在调用下面的Coordinates作为映射方法。这是正确的吗?这需要是一个您自己创建的类,如下所示:

private static class Map {
        public List<Double> coordinatesBelow(double altitude) {
            List<Double> coordinatesBelow = new ArrayList<>();
            for (int i = 0; i < array.length; i++) {
                coordinatesBelow.add(array[i][2]);
            }
            coordinatesBelow.removeIf(b -> b > altitude);
            return coordinatesBelow;
        }
}
私有静态类映射{
以下公开列表坐标(双高度){
下面列出坐标=新的ArrayList();
for(int i=0;ib>高度);
返回以下坐标;
}
}

您的
静态双[]数组在第一行声明,并且
double[][]数组=新的double[行][列]是两个不同的变量:第一个是静态变量,第二个是本地变量。因此,当您将值读入本地
数组
时,静态值保持为空

如果要将值保存到静态数组中,不要创建新变量,只需在静态方法-change中初始化静态数组

double[][] array = new double[rows][columns];

UPD:如果您在(int i=0;i行中得到
NullPointerException
,这里唯一可以
null
的就是
array
。因此,在调用下面的
坐标之前,请确保
数组
已初始化。您可以在
readDataArray
方法中初始化它,因此请先尝试调用它:

public static void main(String[] args) throws FileNotFoundException {
    readDataArray("filename.txt");
    m.coordinatesBelow(-2000);
}

顺便说一下,
filename
参数似乎没有在任何地方使用,因此您可以将其删除。

对不起,我犯了错误,我在放入时遗漏了这些位。我已经声明了数组,但地球数组应该是数组,我现在已经更改了它。基本上sample.xyz有3列经度、纬度和海拔,我正在尝试创建一个列表,当海拔低于输入值时,比如-2000,这意味着我需要从列表中删除海拔(-2000)以下的所有坐标。而不是稍后使用coordinates below.removeIf,在添加坐标时,您应该检查坐标是否正确,以使程序更快。您知道我如何才能做到这一点吗?抱歉,我对java
List coordinates below=new ArrayList()相当陌生;对于(int i=0;i
@KirillSimonov谢谢,它解决了我的问题。:)嗨,谢谢你的帮助和建议。我希望Coordinates方法与readDataArray方法在同一个类中。我对java非常陌生,刚刚意识到我不需要
mapm=newmap()在我的代码中,因为它不是来自另一个类,所以如果我把它放进去,把你弄糊涂了,我真的很抱歉。
public static void main(String[] args) throws FileNotFoundException {
    readDataArray("filename.txt");
    m.coordinatesBelow(-2000);
}