gpt4 book ai didi

java - 翻转字符串中的位

转载 作者:行者123 更新时间:2023-12-01 09:22:02 26 4
gpt4 key购买 nike

我最近写了一种方法,该方法应该翻转二进制字符串的位。仅当MSB(也就是字符串中的第一个字符)为1时,才会发生翻转。出于某种原因,我的代码未按预期翻转位。任何帮助表示赞赏,谢谢! binary and noMSB都是private String

public int binaryToDecimalAssumingOnesComp() {
if (binary.charAt(0) == '0') {
convertedToDecimal = Integer.parseInt(binary, 2);
} else if (binary.charAt(0) == '1') {
noMSB = binary.substring(1);
for (int i = 0; i < noMSB.length(); i++) {
if (noMSB.charAt(i) == '1') {
noMSB.replace(noMSB.charAt(i), '0');
}
else if (noMSB.charAt(i) == '0') {
noMSB.replace(noMSB.charAt(i), '1');
}
convertedToDecimal = Integer.parseInt(noMSB, 2);
}
}
return convertedToDecimal;
}

最佳答案

一些问题:


noMSB.replace(noMSB.charAt(i), '0');不是您想要的。首先,这将用0代替字符串中的所有1,而不仅仅是您正在使用的。其次,它实际上不会更改字符串。它用替换创建一个新的并返回它,但是您忽略了返回值。因此,这实际上无能为力。通常,Java中的字符串是不可变的(无法更改)。您每次需要进行更改时都需要创建一个新字符串,或者使用专门为此目的设计的StringBuilder之类的东西。
您要在for循环的每次迭代中解析整数,但这是不必要的。 (没有真正的伤害,只是不必要的工作。)
为了避免全局状态,我将此方法设为静态方法并传入binary。 (这不是您的代码的正确性问题,只是使其更易于使用。)


这是代码的固定版本:

public static int binaryToDecimalAssumingOnesComp(String binary) {
if (binary.charAt(0) == '0') {
return Integer.parseInt(binary, 2);
} else {
StringBuilder noMSB = new StringBuilder(binary.substring(1));
for (int i = 0; i < noMSB.length(); i++) {
if (noMSB.charAt(i) == '1') {
noMSB.setCharAt(i, '0');
}
else if (noMSB.charAt(i) == '0') {
noMSB.setCharAt(i, '1');
}
}
return Integer.parseInt(noMSB.toString(), 2);
}
}

关于java - 翻转字符串中的位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40112977/

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