1

我不知道为什么在 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);
}
4

3 回答 3

2

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

yy.charAt(i)=0;

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

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

于 2012-12-28T01:53:00.157 回答
0

请改用 StringBuilder。

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

StringBuilder yy = new StringBuilder(Integer.toBinaryString(y));
...
yy.setChatAt(i, '0');
于 2012-12-28T02:03:42.823 回答
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 中,您也必须调用适当的方法并传入要分配给它的值。

于 2012-12-28T02:04:30.130 回答