任何人都可以借一双新眼睛进行调试吗?

时间:2011-11-15 00:28:38

标签: java

这个赋值的目的是创建一个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());
    /*gotBomb1 = field.alreadyBombed1();
    gotBomb2 = field.alreadyBombed2();
    gotBomb3 = field.alreadyBombed3();
    gotGold1 = field.alreadyFound1();
    gotGold2 = field.alreadyFound2();
    gotGold3 = field.alreadyFound3();*/

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

1 个答案:

答案 0 :(得分:4)

我没看到你设置炸弹爆炸的地方,所以从我在这里看到的,你错过了那部分。

下面是重新格式化和稍微重组的代码:我发现代码很难按原样使用。使用这个更短,更规范,更IMO更具沟通性的版本可能更容易。

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());
    /*gotBomb1 = field.alreadyBombed1();
   gotBomb2 = field.alreadyBombed2();
   gotBomb3 = field.alreadyBombed3();
   gotGold1 = field.alreadyFound1();
   gotGold2 = field.alreadyFound2();
   gotGold3 = field.alreadyFound3();*/

    if (foundGold1 && !field.alreadyFound1()) {
        robot2.addGold();
        field.foundGold1();
    }

    if (foundGold2 && !field.alreadyFound2()) {
        robot2.addGold();
        field.foundGold2();
    }

    if (foundGold3 && !field.alreadyFound3()) {
        robot2.addGold();
        field.foundGold3();
    }

    if (foundBomb1 && !field.alreadyBombed1()) {
        alive2 = false;
    }

    if (foundBomb2 && !field.alreadyBombed2()) {
        alive2 = false;
    }

    if (foundBomb3 && !field.alreadyBombed3()) {
        alive2 = false;
    }

    y = y + 1;
    robot2.setLocation(x, y);

    if (y == 50) {
        x = x + 1;
        y = 0;
    }
}

您可能还会受到执行此工作所需的代码量的限制:我假设您的robot1robot2代码基本相同,唯一的区别是您当前的机器人处理

不要重复代码,而应考虑将currentRobot传递给单个方法。处理这类问题的方法有很多,但这与你已经完成的工作非常吻合。您可能希望向机器人类添加isAlive方法/属性。