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