我正在将 BlueJ 与 Karel the Robot 一起使用。
该程序称为 SmarterSorter,以下是说明:(我需要对该程序的所有帮助,而不仅仅是 NullPointerException)。
背景:存在未知数量的垂直蜂鸣器(无间隙)——每个垂直蜂鸣器中有未知数量的蜂鸣器(每个角落一个蜂鸣器——无间隙)。最左侧桩的底部蜂鸣器始终位于原点。
我故意不给你子弹形式的算法(所以你不能只是把子弹变成方法)。我假装自己是最终用户(即,计算机编程方面的准智力——所以,我将用英语来描述这个问题)。
所以,这里的算法:
SmarterSorterRobot(SSR) 进行分类。然而,她有一些助手(代表)——PutterRobot(PUR)和 PickerRobot(PIR)。SSR 知道她一开始总是面向东方,并且站在最左侧垂直堆中最底部的蜂鸣器上。她首先沿着所有垂直桩的最后一行走,当她到达一个空的角落时停下来。然后,她创建所有这些 PIR,然后,在它们全部创建之后,依次命令每个人拿起各自堆中的所有蜂鸣器(例如,如果第一个垂直堆中的 PIR 在上面有 5 个蜂鸣器他,他将站在他所在位置上方 6 个角落,拾起 6 个蜂鸣器)。SSR 现在应该查询每个 PIR 以了解它拾取的蜂鸣器数量,并且她应该在将这些计数存储到 Java 整数数组中时存储这些计数。然后她应该对该数组进行排序(请参阅数组的 API)。她现在应该再次从左到右工作,在第一个即将创建的蜂鸣器堆的底部创建一个 PUR——PUR 应该知道它将放置多少个蜂鸣器(最近排序的最小数字)大批)。然后,PUR 应该以最有效的方式将所有蜂鸣器放回原处(如下所述)。SSR 现在应该创建第二个 PUR 并让它做同样的事情 - 继续直到所有堆都放置好(即所有堆现在都按非降序排序并且所有 PUR 都在 HOME 位置)。SSR 现在应该要求每个 PIR 回家。最后,SSR 现在应该返回 HOME。在第一个即将创建的蜂鸣器堆的底部创建一个 PUR——PUR 应该知道它将要放置多少个蜂鸣器(最近排序数组中的最小数字)。然后,PUR 应该以最有效的方式将所有蜂鸣器放回原处(如下所述)。SSR 现在应该创建第二个 PUR 并让它做同样的事情 - 继续直到所有堆都放置好(即所有堆现在都按非降序排序并且所有 PUR 都在 HOME 位置)。SSR 现在应该要求每个 PIR 回家。最后,SSR 现在应该返回 HOME。在第一个即将创建的蜂鸣器堆的底部创建一个 PUR——PUR 应该知道它将要放置多少个蜂鸣器(最近排序数组中的最小数字)。然后,PUR 应该以最有效的方式将所有蜂鸣器放回原处(如下所述)。SSR 现在应该创建第二个 PUR 并让它做同样的事情 - 继续直到所有堆都放置好(即所有堆现在都按非降序排序并且所有 PUR 都在 HOME 位置)。SSR 现在应该要求每个 PIR 回家。最后,SSR 现在应该返回 HOME。SSR 现在应该创建第二个 PUR 并让它做同样的事情 - 继续直到所有堆都放置好(即所有堆现在都按非降序排序并且所有 PUR 都在 HOME 位置)。SSR 现在应该要求每个 PIR 回家。最后,SSR 现在应该返回 HOME。SSR 现在应该创建第二个 PUR 并让它做同样的事情 - 继续直到所有堆都放置好(即所有堆现在都按非降序排序并且所有 PUR 都在 HOME 位置)。SSR 现在应该要求每个 PIR 回家。最后,SSR 现在应该返回 HOME。
HOME:home 是最左边垂直列中最顶端蜂鸣器正北的角落。
这是我的代码:
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();
}
}
}
我在 sortTheBeepers 方法的第一行得到一个 NullPointerException。
我不知道为什么。
谢谢您的帮助!