将.toBinaryString转换为其补码

时间:2012-12-28 01:41:36

标签: java

我不知道为什么我在yy.charAt(i)分配时收到错误。它说...变量预期......不值。

static int subtract(int x,int y)
{
    String yy=Integer.toBinaryString(y);
    System.out.println(yy);
    for(int i=0;i<yy.length();i++)
    {
        if(yy.charAt(i)==1)
        {
            yy.charAt(i)=0;
        }
        else
        {
            yy.charAt(i)
        }
    }
    int t=Integer.parseInt(yy);
    return(t);
}

3 个答案:

答案 0 :(得分:2)

您不能将值赋给字符串的索引位置,字符串在Java中是不可变的。这将永远不会奏效:

yy.charAt(i)=0;

如果您需要修改字符串,请将其转换为char[](使用toCharArray()方法),修改数组,然后使用{{1}从该数组构建新字符串构造函数。

或者,您可以在返回新字符串之前使用String(char[])修改字符。

答案 1 :(得分:0)

改为使用StringBuilder。

除了这些变化之外,代码几乎与您现在的代码相同:

StringBuilder yy = new StringBuilder(Integer.toBinaryString(y));
...
yy.setChatAt(i, '0');

答案 2 :(得分:0)

我认为有一些事情你不清楚。

  • 我认为你的意思是字符'0'而不是值0。
  • else { yy.charAt(i); }绝对没有效果。你可以简单地省略它们。
  • 字符串在Java中是不可变的(即它们不能在适当的位置进行修改)。
  • 即使他们是,你的语法也是错的。 class_name.method_name()形式的东西是对类方法的调用。它返回一个可以存储的值,它与变量不同,并且尝试分配给方法调用根本就没有意义。

要在Java中修改字符串,最好的方法可能是使用StringBuilder。您使用String创建一个新的StringBuilder,对其进行必要的更改,然后将其转换回String。

所以这看起来像这样:

StringBuilder builder = new StringBuilder(yy); // StringBuilder from yy.

// rest of your code here

builder.setCharAt(i, '0');

// more code

yy = StringBuilder.toString(); // convert it back to a String.

请注意,即使在StringBuilder中,您也必须调用适当的方法并传入要分配给它的值。