Читая твой код в третий раз, я заметил кое-что немного хитрое. То, что вы делаете, в порядке, но может быть и лучший способ. Я не собираюсь давать ответ, но я хочу взглянуть на что-то другое.
ArrayList
в вашем коде не требуется. Что, если вы написали код таким образом?
for (int i = 1 << 31; i != 0; i = i >>> 1) {
if ((dec & i) == 0) {
System.out.print( "0" ); //binary.add(0);
} else {
System.out.print( "1" ); //binary.add(1);
}
}
Здесь я просто "печатать как я go". ArrayList
и преобразование в массив не требуется. У меня уже есть один l oop, работающий, и мне не нужно добавлять второй l oop для печати всех значений массива, потому что я просто использую l oop, который у меня уже есть.
ОК, поэтому первый фрагмент кода, который у меня был, был неправильным. Он печатает в обратном порядке. Этот код (должен! Не проверен!) Начинается с бита # 32 и отсчитывает вниз , печатая биты по порядку. Он также показывает, как вы можете использовать другие вещи в for
l oop, например i = i >>> 1
, вместо того, чтобы просто всегда делать ++
.
Разработка подсказки: быстрый способ «увидеть» то, что вы делаете в коде - это печатать важные значения во время работы вашего кода. Например, чтобы понять, что вы можете сделать с dec
, добавьте оператор print, чтобы вывести его значение. Некоторые говорят, что нужно использовать отладчик и проходить через код, но я считаю, что операторы печати быстрее.
for( int i = 0; i < 32 ; i++ ) {
if( (dec & 1) == 0 ) {
binary.add( 0 );
} else {
binary.add( 1 );
}
dec = dec >>> 1;
System.out.println( "DEBUG: " + dec );
}