gpt4 book ai didi

java - 复制构造函数帮助,试图复制一个 boolean 数组。 java

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:09 25 4
gpt4 key购买 nike

我尽可能多地浏览了以前的问题,但从未见过将 boolean 数组作为变量的问题。

这是我的类(class):

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”加载到寄存器 1 中,但是当我这样做时:注册 register2 = new Register(register1);

并打印出我得到的两个结果:

0000000001101101

0000000000010110

不太确定发生了什么事 O.o 任何帮助将不胜感激,谢谢!

这是我的加载方法。我没有把它放在这里,因为它可能难以阅读:

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.");
}
}

最佳答案

这是一种更惯用的方法(使用 Cloneable 接口(interface)):

public class Register implements Cloneable {

private boolean[] register;

public Register(boolean[] register) {

int n = register.length;

if (n == 8 || n == 16 || n == 32 || n == 64) {
this.register = register;
} else {

throw new IllegalArgumentException(
"A register can only contain 8, 16, 32, or 64 bits");
}

}

@Override
public String toString() {

StringBuilder builder = new StringBuilder();

for ( boolean b : this.register ) {
builder.append( b ? "1" : "0" );
}

return builder.toString();
}

public Register( int n ) {
this( new boolean[n] );
}

public int getLength() {
return this.register.length;
}

@Override
public Register clone() {

boolean[] clonedRegister = new boolean[this.register.length];

System.arraycopy(this.register, 0, clonedRegister,0, this.register.length);

return new Register( clonedRegister );
}

}

还有一个 JUnit 测试展示了它的实际效果:

import org.junit.Assert;
import org.junit.Test;


public class RegisterTest {

@Test
public void testRegisterToString() {

Register source = new Register( new boolean[] {true, true, false, false, true, false, true, false } );

String result = "11001010";

Assert.assertEquals( result, source.toString() );

}

@Test
public void testRegisterCloning() {

Register source = new Register( new boolean[] {true, true, false, false, true, false, false, false } );
Register clone = source.clone();

Assert.assertEquals( source.toString(), clone.toString() );

}

}

关于java - 复制构造函数帮助,试图复制一个 boolean 数组。 java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6807826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com