2

12416、 、2565121024値を持つ 8 つのチェックボックスがあります4096

選択されたものに応じて、与えられた番号に依存します。つまり、5 = 1 & 4 が選択され、20 = 16 & 4、528 = 512 & 16 が選択されます。

これで、手動で計算したり、マップを作成したりして、どのチェック ボックスが選択されているかを調べる方法を理解できました。すなわち

[
  { number: 1, boxes: [1] }, 
  { number: 2, boxes: [2] },
  { number: 3, boxes: [1,2] },
  { number: 4, boxes: [4] },
  { number: 5, boxes: [4,1] },
  { number: 6, boxes: [4,2] },
  { number: 7, boxes: [4,2,1] }
 ] 

しかし、これは私が探しているものではありません。

  • これをよりよく理解するには、どの件名/語句を検索しますか?
  • コードでは、提示された数に基づいてチェックボックスのリストをどのように受け取ることができますか?

すなわち:

def test() {

   def checkBoxList = getCheckBoxList(1536)
   assert checkBoxList == [1024,512]

  checkBoxList = getCheckBoxList(7)
  assert checkBoxList == [4,2,1]

  //etc
}


def getCheckBoxList(int number) {

    //Magic code -- Returns [] of boxes based on number

}
4

1 に答える 1

0

パラメータよりも大きい2の倍数の次の値で開始し、他の倍数を減算します。あなたの場合はうまくいきますか?

def getCheckBoxList(int number) {
  def list = []
  Integer filter = 1

  while(filter < number) { filter *= 2 }

  filter /= 2

  while (filter != 0) {
    if (filter <= number) {
      list << filter
      number -= filter
    }

    filter /= 2
  }

  list
}

assert getCheckBoxList(1536) == [1024,512]
assert getCheckBoxList(7) == [4,2,1]
assert getCheckBoxList(17) == [16, 1]
assert getCheckBoxList(15) == [8, 4, 2, 1]
assert getCheckBoxList(29) == [16, 8, 4, 1]
assert getCheckBoxList(528) == [512, 16]
于 2012-12-17T18:02:40.230 に答える