2015-10-28 5 views
0

Это моя функция преобразования двоичного кода в серый код.Преобразование String в 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 Извините, я did'nt получаю вас –

+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), 'c' (99) ...

Я знаю, что вы уже знаете это, потому что вы были достаточно осторожны, сумма двух символов и нормализовать его, вычитая 2 * '0' (= 96). Хорошо.

Но вы должны заметить, что каждое число, включенное в ваш код, неявно является int. Теперь понимаю, что вы смешиваете ints и chars в нескольких строках:

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

Мое предложение: Следовать заказ:

  1. Кулак, нормализовать данные и сохранять их во временные ИНТ переменные: 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

Спасибо за ваше предложение. –

Смежные вопросы