2015-10-28 127 views
0

這是將二進制轉換爲格雷碼的功能。將字符串轉換爲char [] - Java

public void convert(String bin) 
{ 
    char[] b = bin.toCharArray(); 
    char[] g = new char[100]; 
    System.out.print(g[0]); 
    for(int i=1;i<b.length;i++) 
    { 
     System.out.print(g[i] = (b[i-1] + b[i]) - 96); 
     if(g[i] == '2') 
     { 
      System.out.print(0); 
      i++; 
      continue; 
     } 
     System.out.print(g[i] - 0); 
    } 
} 

我有上面的函數,它工作得很好,但我想從該函數返回轉換後的字符串。所以我拿出下面給出的代碼,這是行不通的,它只給我我開始存儲的單個數字,即g [0] = b [0]。

public String convert(String bin) 
{ 
    char[] b = bin.toCharArray(); 
    char[] g = new char[100]; 
    g[0] = b[0]; 
    for(int i=1;i<b.length;i++) 
    { 
     g[i] = (char)((b[i-1] + b[i]) - 96); 
     if(g[i] == '2') 
     { 
      g[i] = 0; 
      i++; 
      continue; 
     } 
     g[i] = g[i] - 0; 
    } 
    String gray = String.valueOf(g); 
    return gray; 
} 

我該怎麼做才能讓我得到我想要的結果。

感謝

+0

我認爲你正在尋找'new String(g)'。 – RealSkeptic

+0

@RealSkeptic對不起,我沒有讓你 –

+0

'g [i] = g [i] - 0;'沒有效果,'g [i] = 0;'可能是錯誤的 – wero

回答

1
public static String convert(String bin) 
    { 

     //System.out.println("The Gray Equivalent Is: "); 
     char[] b = bin.toCharArray(); 
     StringBuilder g = new StringBuilder(); // Use StringBuilder 
     g.append(b[0]); 
     //System.out.print(g[0]); 
     for(int i=1;i<b.length;i++) 
     { 
      int val = (int)b[i-1] ^(int) b[i]; // use exclusive-or(^) 
      if(val == '2') 
      { 
       //System.out.print(0); 
       g.append(0); 
       i++; 
       continue; 
     } 

     //System.out.print(g[i] - 0); 
     g.append(val); 
    } 

    String gray = String.valueOf(g); 
    return gray; 
} 
+0

1)請只發布格式化的代碼,以便它更具可讀性。 2)請評論你的代碼,試着解釋你做了什麼,爲什麼以及如何這是一個很好的解決方案。同時解釋OPs嘗試時出現了什麼問題或不理想。 – brimborium

+0

謝謝男人。作品完美無缺 –

0

我看你想要達到的目標。但是您錯誤地將整數值與字符的值值錯誤。看:

一種int是一個整數數值,它可以包含正數和負數:-3,-2,-1,0,1,2,3 ...

char仍然是一個(97),'b'(98),'c'(99)...

我知道你已經知道這一點,因爲你已經足夠小心地計算兩個字符的總和並將其歸一化,減去2 *'0'(= 96)。好。

但是您必須注意,代碼中包含的每個數字都隱含地爲int。現在,意識到你在幾行混合intschars

if(g[i] == '2') 
g[i] = 0; 
g[i] = g[i] - 0; 

我的建議:按照訂單:

  1. 拳,規範你的數據,並將其存儲到臨時INT變量: int digit0=b[i - 1]-'0'; int digit1=b[i]-'0';
  2. 執行計算並將其存儲到臨時int變量中: int result=digit0 + digit1; if (result==2) { result=0; }
  3. 最後,將結果去標準化a nd將其存儲到最終的輸出變量中: g[i]=(char)(result + '0'); 最後,您還必須控制數組的長度:如果知道輸入數組的長度是多少,則應該使用相同的輸出數組長度。
+0

感謝您的建議。 –