在另一个类中调用带参数的方法

时间:2014-12-09 20:28:15

标签: java arrays class methods int

我无法将带参数的方法传递给另一个类。

在我的主要课程中,我宣布:

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);
    }

4 个答案:

答案 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

您可以通过以下任一方式解决问题:

  1. 调用方法时传入数组引用而不是null。
  2. 在您的主要内容中执行此操作:

    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
    

    或者

    1. 添加一项检查以查看数组是否为空
    2. 您可以按以下方式执行此操作:

          if (map== null)
             length = 0;
          else 
             length = map.length;      
         int row[] = new int[length];
      

      就个人而言,作为一种习惯,我还建议你不要在方法和对象上使用类似的名称。