У меня есть объекты класса Bit, который в основном является классом, в котором есть одно поле с именем value и оно имеет логическое значение.
public class Bit {
private boolean value;
public Bit() {
this.value = false;
}
public Bit(boolean value) {
this.value = value;
}
public boolean getValue() {
return value;
}
}
, и у него есть еще несколько методов.
, а затем у меня естькласс с именем number, который должен представлять большое число в их двоичном представлении, используя связанный список, где firstlink - это LSB, а lastlink - это MSB.например, если я вызываю конструктор Number num1 = new Number (6);тогда у меня будет связанный список, подобный следующему: 0 1 1 (null)
Теперь я хочу знать, как можно сравнить два объекта Number.так, например: если у меня есть num1, а номер num2 = новый номер (7);[1 1 1] тогда я хочу метод, который скажет мне, что num2 больше, чем num1
, чтобы сравнить два двоичных числа просто, я бы начал с MSB и сравнил каждый бит, и как только один будет больше другого,означает, что число больше.Я мог легко получить целочисленное значение каждой ссылки (бит), используя Bit.toInt ();
Так что я думал об итерации по списку и сравнении битов один за другим, проблема в том, что мой итератор помечается раньшеfirstlink (LSB), я знаю, что могу переместить его до конца и начать итерацию с помощью hasPrevious (), но у меня нет этого метода.Я хочу быть в состоянии сделать это, просматривая каждый список только один раз.Есть идеи?
public static boolean lessEq(Number num1, Number num2){
Iterator<Bit> it1 = num1.bitIterator().;
Iterator<Bit> it2 = num2.bitIterator();
}
Числовые конструкторы:
public Number(){
list = new LinkedList<Bit>();
list.add(new Bit(false));
}
/**
* Constructs a new Number from an int.
* @param number an int representing a decimal number
*/
public Number(int number) { // assignment #1
list = new LinkedList<Bit>();
if(number == 0) list.add(new Bit(false));
if (number < 0) throw new IllegalArgumentException("number cannot be negative");
else {
while (number > 0) {
if (number % 2 == 0) {
list.add(new Bit(false));
}else list.add(new Bit(true));
number = number / 2;
}
}
}
Редактировать: это работает Большое спасибо за комментарии!