Java 修改反向堆栈方法

Java 修改反向堆栈方法,java,android,handler,andengine,Java,Android,Handler,Andengine,我有一个问题,我用我的方法来突出怪物,我只是用精灵,但问题是,它不突出每一个怪物,但只有最后一个添加 以下是突出显示的方法: public void highlightMonsters(){ while (mStack.size()!=0){ if (mStack.peek().toString().equals("1")) { monsterTopLeft.setVisible(!visibility); monsterT

我有一个问题,我用我的方法来突出怪物,我只是用精灵,但问题是,它不突出每一个怪物,但只有最后一个添加

以下是突出显示的方法:

public void highlightMonsters(){
    while (mStack.size()!=0){
        if (mStack.peek().toString().equals("1")) {
            monsterTopLeft.setVisible(!visibility);
            monsterTopLeftColored.setVisible(visibility);
            monsterTopLeftColored.registerUpdateHandler(changeColorsMonster1);
            mReverseStack.push(mStack.pop());
            monsterTopLeft.registerUpdateHandler(cakaj);
        }
        else if(mStack.peek().toString().equals("2")) {
            monsterTopRight.setVisible(!visibility);
            monsterTopRightColored.setVisible(visibility);
            monsterTopRightColored.registerUpdateHandler(changeColorsMonster2);
            mReverseStack.push(mStack.pop());
            monsterTopRight.registerUpdateHandler(cakaj);
        }
        else if(mStack.peek().toString().equals("3")) {
            monsterBottomLeft.setVisible(!visibility);
            monsterBottomLeftColored.setVisible(visibility);
            monsterBottomLeftColored.registerUpdateHandler(changeColorsMonster3);
            mReverseStack.push(mStack.pop());
            monsterBottomLeft.registerUpdateHandler(cakaj);
        }
        else if (mStack.peek().toString().equals("4")){
            monsterBottomRight.setVisible(!visibility);
            monsterBottomRightColored.setVisible(visibility);
            monsterBottomRightColored.registerUpdateHandler(changeColorsMonster4);
            mReverseStack.push(mStack.pop());
            monsterBottomRight.registerUpdateHandler(cakaj);
        }
    }
}
这是主回路

public void mainLoop() {

    cislo = generateNumber();
    testText.setText(String.valueOf(cislo));
    mReverseStack.push(new Integer(cislo)); //debugging purposes
    //cisla su v mReverseStack
    reverseNumbersInStack2();
    //prehodime do mStack
    highlightMonsters();
    //vysvietime a zaroven prehodime do mReverseStack
    reverseNumbersInStack2();
    //prehodime do mStack
}

如果希望while循环减少堆栈,请使用pop而不是peek

我不确定您的代码是否适合您的目的,但如果您希望代码正常工作,您不需要peek,而是pop。每个循环一次——如果没有覆盖一个数字,那么在if语句中这样做可能会导致无止境的循环。如果代码的其他部分没有错误,类似的方法应该可以工作:

public void highlightMonsters(){
    while (mStack.size()!=0){ 
      String monsterString = mStack.pop().toString();
        switch(monsterString) 
case "1" : {
            monsterTopLeft.setVisible(!visibility);
            monsterTopLeftColored.setVisible(visibility);
            monsterTopLeftColored.registerUpdateHandler(changeColorsMonster1);
            monsterTopLeft.registerUpdateHandler(cakaj);
            break;
        }
case "2" :  {
            monsterTopRight.setVisible(!visibility);
            monsterTopRightColored.setVisible(visibility);
            monsterTopRightColored.registerUpdateHandler(changeColorsMonster2);
            monsterTopRight.registerUpdateHandler(cakaj);
            break;
        }
case "3" :  {
            monsterBottomLeft.setVisible(!visibility);
            monsterBottomLeftColored.setVisible(visibility);
            monsterBottomLeftColored.registerUpdateHandler(changeColorsMonster3);
            monsterBottomLeft.registerUpdateHandler(cakaj);
            break;
        }
case "4" : (mStack.peek().toString().equals("4")){
            monsterBottomRight.setVisible(!visibility);
            monsterBottomRightColored.setVisible(visibility);
            monsterBottomRightColored.registerUpdateHandler(changeColorsMonster4);
            monsterBottomRight.registerUpdateHandler(cakaj);
            break;
        }
default : break;
    }  
  mReverseStack.push(monsterString);
  } 
}

但是,我真的建议不要使用这种代码。你应该试着把你的怪物自己推到一个堆栈上,而不是数字上,并用参数使ChangeColor更通用。或者,至少将if或case语句中的一些代码放入一个单独的方法中。上面代码中的这种冗余不是好的编码方式,您迟早会遇到问题。

我使用pop方法传输对象。问题是,我需要先检查第一个对象,然后高亮显示,然后将其移动到另一个堆栈中。那么在这个位置的mStack size呢:while mStack.size=0? 它不是等于1吗?这是将所有数字从一个堆栈移动到另一个堆栈的条件。谢谢你的代码。我意识到问题在于,在换另一种颜色之前,没有另一个处理程序在那里等待