2012-12-28 63 views
1

我不知道爲什麼我在yy.charAt(i)賦值處收到錯誤。它說...變量預期...不值。將.toBinaryString轉換爲其補碼

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); 
} 

回答

2

您不能將值分配給字符串的索引位置,字符串在Java中是不可變的。這行不通:

yy.charAt(i)=0; 

如果需要修改字符串,將其轉換爲char[](使用toCharArray()法),修改數組,然後從該數組建立​​一個新的字符串,用String(char[])構造。

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

+0

close,yy.charAt(i)返回一個值,實際上這段代碼所做的是'a'= 0,這是無稽之談。 – BevynQ

0

改爲使用StringBuilder。

的代碼就幾乎等同於你現在所擁有的,除了這些變化:

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

我覺得有幾件事情是不明確的給你。

  • 我想你指的是字符「0」不是值0
  • else { yy.charAt(i); }絕對沒有效果的線條。你可以簡單地忽略它們。
  • 字符串在Java中是不可變的(即它們不能在適當位置進行修改)。
  • 即使他們是,你的語法是錯誤的。形式class_name.method_name()的某些內容是對類的方法的調用。它返回一個你可以存儲的值,它和變量不一樣,試圖賦值給一個方法調用根本沒有意義。

要在Java中修改字符串,最好的方法是使用StringBuilder。您使用您的字符串創建一個新的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. 

通知。