Java 为什么我的SmarterSorter程序会收到NullPointerException?

Java 为什么我的SmarterSorter程序会收到NullPointerException?,java,nullpointerexception,bluej,karel,Java,Nullpointerexception,Bluej,Karel,我正在用BlueJ和机器人Karel 该程序名为SmarterSorter,下面是一些说明:(我需要对整个程序提供一些帮助,而不仅仅是对NullPointerException) 背景:传呼机的垂直堆叠数量未知(无间隙)-每个垂直堆叠中有未知数量的传呼机(每个角落一个传呼机-无间隙)。最左侧桩的底部蜂鸣器始终位于原点 我故意不以项目符号的形式给你算法(所以你不能把项目符号变成方法)。我假装我是一个终端用户(也就是说,在计算机编程方面,我是一个准智力的人——所以,我要用英语来描述这个问题) 下面是

我正在用BlueJ和机器人Karel

该程序名为SmarterSorter,下面是一些说明:(我需要对整个程序提供一些帮助,而不仅仅是对NullPointerException)

背景:传呼机的垂直堆叠数量未知(无间隙)-每个垂直堆叠中有未知数量的传呼机(每个角落一个传呼机-无间隙)。最左侧桩的底部蜂鸣器始终位于原点

我故意不以项目符号的形式给你算法(所以你不能把项目符号变成方法)。我假装我是一个终端用户(也就是说,在计算机编程方面,我是一个准智力的人——所以,我要用英语来描述这个问题)

下面是算法:

SmarterSortErrorbot(SSR)进行排序。然而,她有一些助手(代表)——PutterRobot(PUR)和PickerRobot(PIR)。SSR知道她总是从东面出发,站在最左边垂直的一堆最下面的传呼机上。她开始沿着所有垂直桩的底排走,当她到达一个空的角落时停下来。然后,她创建所有这些PIR,然后,在它们全部创建之后,依次命令每个PIR拾取各自堆中的所有寻呼机(例如,如果第一个垂直堆中的PIR在他上方有5个寻呼机,他将站在他所在位置的6个角上,拾取6个寻呼机)。SSR现在应该查询每个PIR接收到的寻呼机数量,并在将这些计数存储到INT的java数组中。然后,她应该对该数组进行排序(有关数组,请参见API)。现在,她应该再次从左到右,在即将创建的第一堆寻呼机的底部创建一个PUR–PUR应该知道要放置多少个寻呼机(最近排序的数组中的最小数字)。然后,PUR应尽可能以最有效的方式将所有寻呼机放回原位(如下所述)。SSR现在应创建第二个PUR,并让其执行相同的操作–继续操作,直到所有桩都已放置(即,所有桩现在按非降序排序,且所有PUR都处于原始位置)。SSR现在应该要求每个PIR回家。最后,SSR现在应该回家了

主页:主页是最左边垂直列中最上面的寻呼机正北方的一个角落

这是我的代码:

import java.util.Arrays;
public class SmarterSorterRobot extends GoHomeBot
{
    public SmarterSorterRobot(int av, int st, Direction dir, int beeps)
    {
        super(av, st, dir, beeps);
    }

    public int x =1;
    private PickerRobot [] robot;
    private PutterRobot [] bot;
    private int numBeeps;
    private int [] myPutterRobots;
    private int [] numBeepers;

    public int getNumBeeps()
    {
        return numBeeps;
    }                                                                                                                                                         

    public void sortBeepers()
    {
        turnRight();
        countNumberOfRows();
        robot = new PickerRobot [x];
        createPickerRobots();
        pickLotsOfBeepers();
        transferToBeepers();
        sortTheBeepers(numBeepers);
        robot [x].goHome();
        this.goHome();
    }

    public void countNumberOfRows()
    {
        while(nextToABeeper())
        {
            move();
            x++;
        }
    }

    public void createPickerRobots()
    {
        for (int i=1;i<robot.length;i++)
        {
            robot [i]= new PickerRobot (1,i,North,0);
        }
    }

    public void pickBeepers()
    {
        while(nextToABeeper())
        {
            pickBeeper();
            move();
            numBeeps++;
        }
    }

    public void pickLotsOfBeepers()
    {
        for (int i=1; i<robot.length; i++)
        {
            robot [i].pickBeepers();
        }
    }

    public int[] transferToBeepers()
    {
        int [] numBeepers = new int [x];
        for (int i=0; i<numBeepers.length;i++)
        {
            numBeepers [i] = ;
        }
        Arrays.sort (numBeepers);
        return numBeepers;
    }

    public void sortTheBeepers(int [] numBeepers)
    {
        for (int i=0; i<numBeepers.length; i++)
        {
            PutterRobot robespierre = new PutterRobot (1, i, North, numBeepers [i]);
            while(anyBeepersInBeeperBag())
            {
                putBeeper();
            }
            goHome();
        }
    }
  }   
导入java.util.array;
公共类SmarterSortErrorBot扩展了GoHomeBot
{
公共SmarterSortErrorbot(int av、int st、方向指示、int蜂鸣声)
{
超级(av、st、dir、蜂鸣音);
}
公共整数x=1;
私人机器人;
私人机器人[]机器人;
私人整数;
私有int[]myPutterRobots;
私人整数[]个;
public int getnumbereps()
{
返回号码;
}                                                                                                                                                         
公共无效分类保管人()
{
右转();
countNumberOfRows();
robot=新的PickerRobot[x];
createPickerRobots();
pickLotsOfBeepers();
转让保管人();
排序寻呼机(数字寻呼机);
机器人[x].goHome();
这个。goHome();
}
public void countNumberOfRows()
{
while(nextToABeeper())
{
move();
x++;
}
}
public void createPickerRobots()
{

对于(int i=1;i让我们看看以下方法:

public void sortBeepers()
{
    // ..
    transferToBeepers();
    sortTheBeepers(numBeepers);
    // ..
}

它调用方法
transferToBeepers()
,该方法使用本地
numberepers
数组执行操作,然后您使用不同的(这次是全局的)方法调用
sort蜂鸣器变量
numberpers
。此
numberpers
版本仍然是
null
,因为它以前从未初始化过,因此(int i=0;灰色框外的括号应该在灰色框内。由于某些原因,一些代码不会进入灰色框内!从import java.util.array到最后一个括号都应该在灰色框内。因此,您需要向我们展示turnRight()代码方法以及它的作用。如果您说在调用该方法时得到一个空指针,则需要验证您是否正确使用了此GoHomeBot。
public void sortBeepers()
{
    // ..
    numBeepers = transferToBeepers();
    sortTheBeepers(numBeepers);
    // ..
}