2

我有一个 Java 方法,它必须多次执行一段代码:

            // Obtengo los 7 bits de direccion
            clockStateIndex = dataStateIndex;
            for(int bit = 7; bit > 0; --bit){           
                clockStateIndex = clockSource.nextClearBit(clockStateIndex);                    // Siguiente bit en SCL
                clockStateIndex = clockSource.nextSetBit(clockStateIndex);
                testIndex = (clockSource.nextClearBit(clockStateIndex) - clockStateIndex)/2;    // Busco la mitad del bit clock
                bitSet(direccion, data.get(testIndex), bit);                // Compruebo SDA en la mitad del bit SCL
            }
            // Obttengo el bit R/W
            clockStateIndex = clockSource.nextClearBit(clockStateIndex);    // Siguiente bit en SCL
            clockStateIndex = clockSource.nextSetBit(clockStateIndex);
            testIndex = (clockSource.nextClearBit(clockStateIndex) - clockStateIndex)/2;    // Busco la mitad del bit clock
            rwBit = data.get(testIndex);        // Obtengo el estado del bit R/W en el medio del bit SCL

            // Obtengo el bit de ACK
            clockStateIndex = clockSource.nextClearBit(clockStateIndex);    // Siguiente bit en SCL
            clockStateIndex = clockSource.nextSetBit(clockStateIndex);
            testIndex = (clockSource.nextClearBit(clockStateIndex) - clockStateIndex)/2;    // Busco la mitad del bit clock
            ackBit = data.get(testIndex);       // Obtengo el estado del bit R/W en el medio del bit SCL

            // Si tengo un ACK obtengo los 8 bits de dato
            if(ackBit == false){
                for(int bit = 8; bit > 0; --bit){           
                    clockStateIndex = clockSource.nextClearBit(clockStateIndex);    
                    clockStateIndex = clockSource.nextSetBit(clockStateIndex);
                    testIndex = (clockSource.nextClearBit(clockStateIndex) - clockStateIndex)/2;    
                    bitSet(i2cData, data.get(testIndex), bit);      
                }
            }

如您所见,代码:

clockStateIndex = clockSource.nextClearBit(clockStateIndex);    
clockStateIndex = clockSource.nextSetBit(clockStateIndex);
testIndex = (clockSource.nextClearBit(clockStateIndex) - clockStateIndex)/2;    

重复很多次。我无法创建#defines 来简化我的代码,比如 nextBit(); 替换该代码。有没有其他方法可以简化它?如果创建一个方法,我将必须传递两个大小约为 200 个元素的 BitSet 并返回 2 个 int 元素(我不知道在 Java 中这样做很热,因为我没有像 C 中那样的指针)

希望你能帮我 :)

4

2 回答 2

3

我会将它包装在一个函数中:

// Instance based (inside classes)
{SCOPE MODIFIER} void ClockWork()
{
    clockStateIndex = clockSource.nextClearBit(clockStateIndex);    
    clockStateIndex = clockSource.nextSetBit(clockStateIndex);
    testIndex = (clockSource.nextClearBit(clockStateIndex) - clockStateIndex) / 2;  
}

至于基于静态的方法,它取决于您在哪里实现代码。

于 2012-06-01T03:30:54.413 回答
-1

最简单的解决方案是为此操作创建一个对象:

class ClockState {
    private int clearBit;
    private int setBit;
    private int testIndex;

    public ClockState( int clearBit, int setBit, int testIndex ) {
        this.clearBit = clearBit;
        this.setBit = setBit;
        this.testIndex = testIndex;
    }

    public int getClearBit() { return this.clearBit; }
    public int getSetBit() { return this.setBit; }
    public int getTestIndex { return this.textIndex; }

    public static ClockState create( ClockSource clockSource, int clockStateIndex ) {
      int clearBit = clockSource.nextClearBit(clockStateIndex);    
      int setBit = clockSource.nextSetBit(clearBit);
      int testIndex = (clockSource.nextClearBit(setBit) - setBit)/2; 
      return new ClockState( clearBit, setBit, testIndex );
    }

}

然后您的代码将如下所示:

        clockStateIndex = dataStateIndex;
        for(int bit = 7; bit > 0; --bit){           
            ClockState state = ClockState.create( clockSource, clockStateIndex );
            clockStateIndex = state.getSetBit();
            bitSet(direccion, data.get(state.getTestIndex()), bit);
        }

对于所有其他呼叫,依此类推。

于 2012-06-01T03:39:03.530 回答