这个赋值的目的是创建一个Field和Robot类以及这些类的对象。
单个场对象限于从(0,0)到(50,50)的点的平方,并包含3个金币和3个炸弹。
三个机器人对象从左到右(0,0)到(0,50)从字段(一个接一个)搜索黄金,然后通过字段(1,0)下降到1,50,依此类推。
机器人被炸弹摧毁,炸弹是用户输入的地方。一旦黄金被收集,它就不能被另一个机器人拾起,一个炸弹爆炸它就不会再这样做了。
到目前为止,这是我尝试解决问题的方法,我正在继续努力,但我会欣赏它上面的第二双眼睛来捕捉到我失踪的东西。该程序编译,但炸弹和黄金没有正确“找到”,输出表明以下机器人死在与之前的机器人相同的炸弹上。此外,有几段代码被评论删除,我这样做是为了测试程序的不同部分。我觉得这部分是我遇到麻烦的地方。方法field.alreadyFound()和field.alreadyBombed()返回一个值为true的布尔值。我的if语句应该说是否已找到黄金/炸弹,请忽略它。
while(x <= 50 && y <= 50 && alive2 == true)
{ foundGold1 = robot2.look(field.locateGold1());
foundGold2 = robot2.look(field.locateGold2());
foundGold3 = robot2.look(field.locateGold3());
foundBomb1 = robot2.look(field.locateBomb1());
foundBomb2 = robot2.look(field.locateBomb2());
foundBomb3 = robot2.look(field.locateBomb3());
if (foundGold1 == true)
{
if (field.alreadyFound1() == true)
{
}
else
{
robot2.addGold();
field.foundGold1();
}
}
if (foundGold2 == true)
{
if (field.alreadyFound2() == true)
{
}
else
{
robot2.addGold();
field.foundGold2();
}
}
if (foundGold3 == true)
{
if (field.alreadyFound3() == true)
{
}
else
{
robot2.addGold();
field.foundGold3();
}
}
if (foundBomb1 == true)
{
if (field.alreadyBombed1() == true)
{
}
else
{
alive2 = false;
}
}
if (foundBomb2 == true)
{
if (field.alreadyBombed2() == true)
{
}
else
{
alive2 = false;
}
}
if (foundBomb3 == true)
{
if (field.alreadyBombed3() == true)
{
}
else
{
alive2 = false;
}
}
y = y + 1;
robot2.setLocation(x, y);
//System.out.println(y);
if (y == 50)
{
x = x + 1;
y = 0;
}
答案 0 :(得分:1)
这里有太多未解释的逻辑,以确切知道你的程序失败的原因。
然而,只是一些有助于解决问题的想法,建议和评论。
if (foundGold1)
或者如果您想查看它是否为假if (!foundGold1)
那些事情说,
问题实际上归结为你似乎有一套逻辑包括
之类的东西您可以将这些存储在数组中以真正减少必要的检查,但我认为这在某种程度上取决于您尚未透露的一些细节。
答案 1 :(得分:1)
我可以看到一个潜在的问题,尽管它可能与您的问题无关。
我认为,如果一个机器人击中一枚炸弹,它就不能继续并引爆另一枚炸弹。你的代码可能允许一个机器人引发我认为的所有三枚炸弹。
答案 2 :(得分:0)
我认为你的一些代码有点过于冗长和蓬松,让你看到真正发生的事情。拿这个小部分:
if (foundGold1 == true)
{
if (field.alreadyFound1() == true)
{
}
else
{
robot2.addGold();
field.foundGold1();
}
}
可以这样写:
if (foundGold1) {
if (! field.alreadyFound1()) {
robot2.addGold();
field.foundGold1();
}
}
根据此代码随着时间的推移“增长”的方式,您可能希望进一步简化它:
if (foundGold1 && ! field.alreadyFound1()) {
robot2.addGold();
field.foundGold1();
}
请注意Matthew Cox的警告:年轻的程序员经常会尽可能地尝试缩小他们的代码(看看我用2行代码代替3代!) - - 我不是在争论重新格式化的布局,因为它更小但是因为我相信这更容易阅读。根据未来代码的复杂性,我可能会提出完全相反的建议来分解条件。首要任务是编写清晰的代码。 (编译器几乎可以找出你抛出的任何东西 - 你也必须能够理解它。)
他为foundBomb[]
,foundGold[]
,robot[]
等使用数组的进一步建议非常棒 - 最好与使用函数参数配对编写多种功能。
而不是field.alreadyFound1()
,field.alreadyFound2()
等,请尝试:field.alreadyFound(int something)
- 当您调用它们时,它将是field.alreadyFound(2)
。这使您可以将函数数减少三个(这意味着您不必在每个函数中修复三次错误),并且可以更轻松地将程序扩展到五六个字段,成堆的金币,炸弹,机器人等那它只是一个函数的参数。