Я просмотрел как можно больше предыдущих вопросов, но никогда не видел вопроса, в котором в качестве переменной использовался логический массив.
Вот мой класс:
public class Register {
private boolean[] register;
private int length;
//Normal constructor
public Register(int n) {
if (n == 8 || n == 16 || n == 32 || n == 64) {
length = n;
register = new boolean[length];
for (int i = 0; i < length; i++) {
register[i] = false;
}
} else {
throw new RegisterException(
"A register can only contain 8, 16, 32, or 64 bits");
}
}
// Creates a copy of reg (an existing Register)
public Register(Register reg) {
length = reg.length;
register = new boolean[reg.register.length];
System.arraycopy(reg.register, 0, this.register, 0, reg.register.length);
}
В моей программе драйвера я загружаю "1101101 "в register1, но когда я это сделаю: Зарегистрируйте регистр 2 = новый регистр (регистр 1);
и распечатайте оба результата. Я получаю:
0000000001101101
0000000000010110
Не совсем уверен, что происходит Оо, любая помощь будет оценена, спасибо!
Это мой метод загрузки. Я не стал помещать его сюда, потому что это может быть трудно прочитать:
public void load(String binaryRep) {
String allTheBits = binaryRep;
int charPosition = 0;
int loadLength;
int binaryNum = 0;
String index = "";
String trimmedIndex = "";
if (allTheBits.length() > 0 && allTheBits.length() <= length) {
loadLength = allTheBits.length();
for (int i = length - (loadLength); i < length; i++) {
index = allTheBits.charAt(charPosition) + "";
trimmedIndex = index.trim();
binaryNum = Integer.parseInt(trimmedIndex);
if (binaryNum == 1) {
register[i] = true;
} else if (binaryNum == 0) {
register[i] = false;
}
charPosition++;
}
} else {
throw new RegisterException("You can only load 0 - " + length
+ "bits.");
}
}