我有一个二进制字符串,我将它转换为char数组 为了修改的目的。我想做的就是随机生成索引p, 查看该元素,如果它是0,则将其设为1,如果1为1则使其为0 .... 它适用于转换1,但它不能将0转换为1!
public class CS2004
{
//Shared random object
static private Random rand;
//Create a uniformly distributed random integer between aa and bb inclusive
static public int UI(int aa,int bb)
{
int a = Math.min(aa,bb);
int b = Math.max(aa,bb);
if (rand == null)
{
rand = new Random();
rand.setSeed(System.nanoTime());
}
int d = b - a + 1;
int x = rand.nextInt(d) + a;
return(x);
}
public class ScalesSolution
{
private String scasol;
public void SmallChange(){
int p;
int n = scasol.length();
// converts the string into a char array so that we can access and modify it
char [] y = scasol.toCharArray();
// random integer p that ranges between 0 and n-1 inclusively
p = CS2004.UI(0,(n-1));
System.out.println(p);
// we changing the element at index p from 0 to 1 , or from 1 to 0
// cant convert from 0 to 1 !!!!! yet, it works for converting 1 to 0!
if(y[p] == 0){
y[p] = '1';
} else {
y[p] = '0';
}
// Now we can convert the char array back to a string
scasol = String.valueOf(y);
}
public void println()
{
System.out.println(scasol);
System.out.println();
}
}
public class Lab9 {
public static void main(String[] args) {
String s = "1100";
ScalesSolution solution = new ScalesSolution(s);
solution.println();
// FLIPPING THE '1' BUT NOT FLIPPING THE '0'
solution.SmallChange();
solution.println();
}
}
答案 0 :(得分:3)
字符“0”的整数值不是0.它是48.因此以下测试不正确:
if(y[p] == 0) {
应该是
if(y[p] == 48) {
或更具可读性:
if(y[p] == '0') {
答案 1 :(得分:2)
你不应该比较那样的人物!
if(y[p] == '0'){
答案 2 :(得分:0)
在Java
,String
存储Unicode characters
,在您的情况下,字符'0'
的Unicode为48.因此,您可以像这样进行比较:
if(y[p] == '0')
或者
if(y[p] == 48)