gpt4 book ai didi

java - 数据类型原始对象未正确初始化 boolean 值

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:23 25 4
gpt4 key购买 nike

我必须创建一个包装类来保存任何原始数据类型。我创建了这个类,它对除了 boolean 值之外的所有东西都按预期工作。这是我的代码:

byte a; // the byte in primitive
short b; // the short
int c, j; // int c is is int, j is the counter for Primitive to tell what dataType it is
long d; // the long
float e; //the float
double f; // the double
boolean g; // the boolean, with which I am having problems
char h; // the char
...;
public Primitive(boolean i) {
g = i;
j = 6;
}

top 方法按预期工作,但是,当我尝试复制方法时,它使 boolean 值等于 true,无论 i 是 true 还是 false。

public Primitive(Primitive i){
switch (i.j){
case 0: a = i.a; break;
case 1: b = i.b; break;
case 2: c = i.c; break;
case 3: d = i.d; break;
case 4: e = i.e; break;
case 5: f = i.f; break;
case 6: g = i.g; break;
case 7: h = i.h; break;
}
}

如有任何帮助,我们将不胜感激。

编辑**

在测试所有情况下的复制构造函数后,我发现复制构造函数不适用于 short、boolean 和 char 数据类型。它适用于其他一切。这是我修改后的代码:

public class Primitive {
private byte bytes;
private short shorts;
private int integer;
private final int DATATYPE;
private long longs;
private float floaters;
private double doubles;
private boolean bools;
private char character;
Compare compare = new Compare();
/**************************************************|
|* Constructors *|
|**************************************************/
public Primitive(byte i) {
bytes = i;
DATATYPE = 0;
}
public Primitive(short i) {
shorts = i;
DATATYPE = 1;
}
public Primitive(int i) {
integer = i;
DATATYPE = 2;
}
public Primitive(long i) {
longs = i;
DATATYPE = 3;
}
public Primitive(float i) {
floaters = i;
DATATYPE = 4;
}
public Primitive(double i) {
doubles = i;
DATATYPE = 5;
}
public Primitive(boolean i) {
bools = i;
DATATYPE = 6;
}
public Primitive(char i) {
character = i;
DATATYPE = 7;
}
public Primitive(Primitive i){
switch (i.DATATYPE){
case 0: bytes = i.bytes; break;
case 1: shorts = i.shorts; break;
case 2: integer = i.integer; break;
case 3: longs = i.longs; break;
case 4: floaters = i.floaters; break;
case 5: doubles = i.doubles; break;
case 6: bools = i.bools; break;
case 7: character = i.character; break;
}
DATATYPE = i.DATATYPE;
}
...;
}

我正打算尝试使用 ENUM,但我忘记了如何使用它。那,而且我认为整数比 ENUM 更容易操作。

最佳答案

如前所述,关键错误是未能初始化j。认识到 j 每次都必须在每个构造函数中设置,您可以将 j 标记为“final”。

此外,您拥有的变量旨在混淆。对于j尤其是这种情况。首先,将控制变量 j 作为 1 个字母的变量名与您的域数据 c 一起埋葬是非常困惑的。无需将它们塞得太紧(编译器会这样做)。一个字母的变量名称令人困惑。

使用 int 来了解类型确实很老派。枚举会更合适。

(正如另一位回复者指出的那样;这必须是家庭作业,因为内置的原始包装类(Integer 代表 int,Boolean 代表 boolean,...)是为此设计的,并融入了语言。)

如果您决定保持大部分代码不变,至少重命名 j 并将其与 c 分开。

关于java - 数据类型原始对象未正确初始化 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29755045/

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