我无法将带参数的方法传递给另一个类。
在我的主要课程中,我宣布:
searchMap search = new searchMap();
search.search(null, 0);
在我的另一堂课中,我将其作为:
public boolean search(int[][] map, int fuel)
{
int totalSum = 0;
int row[] = new int[map.length];
boolean valid = true;
for (int i = 0; i < map.length; i++)
{
for (int j = 0; j < map.length; j++)
{
if (i == j)
continue;
valid = valid && possiblePath(map, fuel, 0, i, j);
}
}
if(totalSum <= fuel)
{
System.out.println("This map is solvable :)");
return true;
}
else
{
System.out.println("This map is NOT solvable :(");
return false;
}
}
我一直在接受:
Exception in thread "main" java.lang.NullPointerException
at searchMap.search(searchMap.java:33)
at loadMap.load(loadMap.java:117)
at loadMap.main(loadMap.java:23)
我已尝试过所有内容,无法从NullPointerException中解脱出来。我试过调用其他的int,我试过调用map [] [],但我没有成功。非常感谢帮助!!
编辑:
public static void main(String[] args)
{
loadMap load = new loadMap();
load.load();
}
public void load()
{
JFileChooser chooser = new JFileChooser();
Scanner readLine = null;
if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
{
File selectedFile = chooser.getSelectedFile();
try {
readLine = new Scanner(selectedFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
int setMapSize = 0;
int i;
int j;
int toNode;
int edge;
setMapSize = readLine.nextInt();
readLine.nextLine();
int rowCounter = 0;
int[][] map = new int[setMapSize][setMapSize];
int[] row = new int[setMapSize];
int sum = 0;
int totalSum = 0;
System.out.println("MAP: " + map.length);
do
{
String line = readLine.nextLine();
Scanner newLine = new Scanner(line);
do
{
toNode = newLine.nextInt();
edge = newLine.nextInt();
map[rowCounter][toNode] = edge;
} while(newLine.hasNextInt());
rowCounter++;
newLine.close();
} while (rowCounter < setMapSize);
int fuel = readLine.nextInt();
System.out.println("Fuel: " + fuel);
readLine.close();
}
searchMap search = new searchMap();
search.search(null, 0);
}
答案 0 :(得分:0)
你传入一个空地图,然后转身并调用这一行.. map将为null,你无法在null上调用.length。
int row[] = new int[map.length];
您可以通过添加检查来确保参数映射不为空
来解决此问题public boolean search(int[][] map, int fuel) {
boolean valid = false;
if (map != null) {
int totalSum = 0;
int row[] = new int[map.length];
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map.length; j++) {
if (i == j) continue;
valid = valid && possiblePath(map, fuel, 0, i, j);
}
}
if (totalSum <= fuel) {
System.out.println("This map is solvable :)");
return true;
} else {
System.out.println("This map is NOT solvable :(");
return false;
}
}
return valid;
}
答案 1 :(得分:0)
您正在致电:
search.search(null, 0);
所以你传递null
作为地图参数..
由于null
没有长度属性,因此从此处开始会导致NullPointerException:
int row[] = new int[map.length];
您需要传入地图而不是传递空值。提供SearchMap类可能会有所帮助。
现在我看到你正在宣布地图:
int[][] map = new int[setMapSize][setMapSize];
然后,当您想要将地图传递给搜索功能时,您应该调用
search.search(map, 0);
int[][]
是变量 map
的类型,因此在使用变量时无需使用[][]
您还在map
内宣布了if
,因此在您拨打搜索时,它已超出范围。
我想你想把它移到if语句中,因为你不想在没有文件时进行搜索。
if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
{
// ...
int[][] map = new int[setMapSize][setMapSize];
// ...
searchMap search = new searchMap();
search.search(map, 0);
}
答案 2 :(得分:0)
这是因为你把null放入地图中。 null通常可以作为占位符使用,但是当您执行以下操作时:
map.length
您要求的是null值的属性。 null值没有属性。 试着改为测试地图。
答案 3 :(得分:0)
发生空指针异常可能意味着您正在尝试访问 不存在的内容。
在这种情况下,您的int[][] map is null
以及搜索方法的第二行,您正试图获取map.length
。对你有意义吗? Java无法获得不存在的数组的长度,从而得到nullPointerException
。
您可以通过以下任一方式解决问题:
在您的主要内容中执行此操作:
searchMap search = new searchMap();
int[][] map = new int [5][5]; //Just an example
search.search(map, 0); //Pass in an existing 2D array instead of null
您可以按以下方式执行此操作:
if (map== null)
length = 0;
else
length = map.length;
int row[] = new int[length];
就个人而言,作为一种习惯,我还建议你不要在方法和对象上使用类似的名称。