我的代码生成一个0-1 3次的随机数,我需要将它添加到一个变量中,所以它变成一个二进制数。所以,理论上,这会运行三次,可能会给我101 ;
String storage = null;
int i = 0;
while (i < 3) {
int binny = this.giveMeBinary();
storage.concat(String.valueOf(binny));
i++;
}
int ans = Integer.parseInt(storage);
但是当我尝试运行它时,我得到了存储的NullPointerException错误。有没有办法只是在变量中“添加”一个字符串?
方法 giveMeBinary 只返回0或1。
答案 0 :(得分:10)
您的问题是您正在将字符串初始化为null。做这样的事情应该可以解决你的问题:
String storage = "";
int i = 0;
while (i < 3) {
int binny = this.giveMeBinary();
storage += (String.valueOf(binny));
i++;
}
int ans = Integer.parseInt(storage);
但是,不建议以这种方式连接字符串。您可以做的是使用StringBuilder之类的:
StringBuilder storage = new StringBuilder();
int i = 0;
while (i < 3) {
int binny = this.giveMeBinary();
storage.append(String.valueOf(binny));
i++;
}
int ans = Integer.parseInt(storage.toString());
答案 1 :(得分:1)
您将获得NullPointerException,因为您将变量storage设置为null。你应该从
开始String storage = "";
答案 2 :(得分:1)
你有两个问题:
您永远不会为storage
分配非空值,但您正在调用concat
方法。这将始终抛出NullPointerException
您假设String.concat
将修改现有字符串值。它没有。字符串在Java中是不可变的。
我建议改为使用StringBuilder
,并在循环中调用append
:
int i = 0;
StringBuilder builder = new StringBuilder();
while (i < 3) {
int binny = this.giveMeBinary();
builder.append(binny);
i++;
}
int ans = Integer.parseInt(builder.toString());
你为什么然后解析一个二进制号码,如“011”,好像它是十进制号码是另一回事。你真的想要的结果是什么?你真的想要数字0,1,10,11,100,101,110或111吗?
答案 3 :(得分:1)
如果要使用字符串连接,则只需将存储初始化为“”(空字符串),然后使用
storage += String.valueOf(binny);
但是如果你正在循环并构建字符串,你应该使用StringBuilder,因为字符串是不可变的
StringBuilder buffer = new StringBuilder();
然后
buffer.append(binny);
答案 4 :(得分:1)
如果你想要一个二进制数,即一个0到7或000之间的随机数和二进制的111。
int ans = giveMeBinary() * 4 + giveMeBinary() * 2 + giveMeBinary();
但是如果你想要一个看起来像二进制数的十进制数字。
int ans = giveMeBinary() * 100 + giveMeBinary() * 10 + giveMeBinary();
答案 5 :(得分:0)
答案 6 :(得分:0)
试试这个:
String storage = "";
答案 7 :(得分:0)
它会抛出NullPointerException,因为存储为空。请尝试以下
StringBuilder storage = new StringBuilder();
int i = 0;
while (i < 3) {
int binny = this.giveMeBinary();
storage.append(String.valueOf(binny));
i++;
}
int ans = Integer.parseInt(storage.toString());
答案 8 :(得分:0)
变量存储未初始化。以下代码将抛出NPE
storage.concat(....)
答案 9 :(得分:0)
您获得NullPointerException的原因是“storage”变量永远不会被初始化。因此,第一次调用“storage.concat”将尝试对NullPointer执行操作。
为了进行字符串连接,你需要使用像StringBuilder这样的可变类,String类是不可变的(你不能修改它的实例)。
以下是使用StringBuilder的示例:
StringBuilder storage = new StringBuilder();
int i = 0;
while (i < 3) {
int binny = this.giveMeBinary();
storage.append(binny);
i++;
}
int ans = Integer.parseInt(storage.toString());