Java 将.toBinaryString转换为其补码

Java 将.toBinaryString转换为其补码,java,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.cha

我不知道为什么我在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);
}
静态整数减法(整数x,整数y)
{
字符串yy=Integer.toBinaryString(y);
系统输出打印项次(yy);

对于(int i=0;i您不能将值分配给字符串的索引位置,字符串在Java中是不可变的。这永远不会起作用:

yy.charAt(i)=0;
如果需要修改字符串,请将其转换为
char[]
(使用
tocharray()
方法),修改数组,然后使用
string(char[])
构造函数从该数组构建新字符串


或者,您可以在返回新字符串之前使用StringBuilder修改字符。

使用StringBuilder

代码与您现在的代码几乎相同,除了以下更改:

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

我想有几件事你还不清楚

  • 我想你指的是字符“0”而不是值0
  • else{yy.charAt(i);}
    完全没有效果。您可以省略它们
  • 字符串在Java中是不可变的(即它们不能就地修改)
  • 即使是这样,您的语法也是错误的。class_name.method_name()的形式是对类的方法的调用。它返回一个可以存储的值,它与变量不同,尝试分配给方法调用毫无意义
要在Java中修改字符串,最好的方法可能是使用StringBuilder。您可以使用字符串创建新的StringBuilder,对其进行必要的更改,然后将其转换回字符串

这看起来像这样:

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中,您也必须调用适当的方法并传入要分配给它的值。

close,yy.charAt(i)返回一个值,实际上代码段所做的是“a”=0,这是无意义的。