2013-04-22 2 views
-1

Это мой код для добавления к двоичным строкам, я получаю правильное значение в строке res, но он по-прежнему дает мне исключение в конце выполнения. Строки m1 & m2 имеют длину 28 штук. Тем не менее я попытался запустить цикл всего 10 раз, чтобы проверить, но ошибка по-прежнему сохраняется. Это справедливо для любого значения i, независимо от того, больше или меньше фактической длины обеих строк.String index за пределами поля

public static String addMantissa(String m1,String m2) 
{ 
    String res=" "; 
    int c=0; 
    System.out.println("Length is " + m2.length()); 
    int i=0; 
    while(i < m2.length()) 
    { 
     System.out.print(" " + res.charAt(i)); 
     if(m1.charAt(i)=='1' && m2.charAt(i)=='1') 
     { 
      if(c==0) 
      { 
       res+="0"; 
       c=1; 
      } 
      else 
      { 
       res+="1"; 
       c=1; 
      } 
     } 

     if(m1.charAt(i)=='1' && m2.charAt(i)=='0') 
     { 
      if(c==0) 
      { 
       res+="1"; 
       c=0; 
      } 
      else 
      { 
       res+="0"; 
       c=1; 
      } 
     } 

     if(m1.charAt(i)=='0' && m2.charAt(i)=='1') 
     { 
      if(c==0) 
      { 
       res+="1"; 
       c=0; 
      } 
      else 
      { 
       res+="0"; 
       c=1; 
      } 
     } 

     if(m1.charAt(i)=='0' && m2.charAt(i)=='0') 
     { 
      if(c==0) 
      { 
       res+="0"; 
       c=0; 
      } 
      else 
      { 
       res+="1"; 
       c=0; 
      } 
     } 
     i++; 
    } 

    return res; 
} 

Заранее благодарен.

+0

Можете ли вы опубликовать свою фактическую ошибку и трассировку. – TheMerovingian

+0

Что такое вход (m1 & m2)? –

+0

Эти средние 2 операторы if могут быть заменены на 1, если вы разделяете условия с помощью OR ('||') или немного более хаки - 'm1.charAt (i) + m2.charAt (i) == ' 1 '+' 0'', или 'm1.charAt (i) - '0' + m2.charAt (i) - '0' == 1'. И я бы заменил те 'charAt' на временные переменные (с вычитанием' 0''). – Dukeling

ответ

0

@ShreyosAdikari в основном в порядке.

System.out.print(" " + res.charAt(i)); 

Должно быть вызвано в конце цикла, так как после этого res [i] заполняется. Может быть, вы имели в виду:

System.out.print((" " + res).charAt(i)); 

Но тогда вы не печатаете Рез Последнюю петлю в.

+0

Я тоже прокомментировал эту строку, я не думаю, что там есть ошибка. – user1918034

+0

Я даю еще один ответ. Можете, пожалуйста, проверить то же самое? –

+0

@ShreyosAdikari, когда вы изменили свой ответ, я удаляю свою ссылку на ваш предыдущий ответ. Ваш новый ответ, конечно, прочный, запрограммированный с защитой, как и я. –

0

На самом деле исключение происходит от линии

while(i < m2.length()) 

Вы должны изменить его

while(i < m2.length() && i<m1.length()) 

Как будто m1 (скажем, 1) имеет длину меньше, чем м2 (скажем, 4), и вы проверяя только значение m2. Затем во второй итерации он войдет в цикл как 2 < 4, и когда он попытается получить m1.carAt (2) (как длина 1), он выкинет исключение String index out of bounds.

+0

yes u r right, excpetion is on dat line, но добавление && condition dint работает со мной, coz строки такие же, как и у той же длины. – user1918034

+0

Затем вам нужно соответствующим образом изменить всю логику. –

+0

Ват означает, что? – user1918034

1

весь Ваш метод может быть заменен только одной строкой:

public static String addMantissa(String m1, String m2) { 
    return new BigInteger(m1, 2).add(new BigInteger(m2, 2)).toString(2); 
} 

Размер 28 бит, указанных в вашем вопросе означает, что Integer класс может иметь Neen используется для синтаксического анализа, но с использованием BigInteger означает, что строки любой размер.

Вы должны использовать JDK вместо того, чтобы изобретать колесо.

Кроме того, «меньше кода является хорошим» - отличная мантра (при условии, что код остается ясным, конечно), и этот код имеет высокую плотность.

+0

, где shal я положил конец кронштейна, давая мне ошибку для dat – user1918034

+0

Извините - я ушел из закрывающей скобки. Исправлено - см. Отредактированный ответ. (Я набрал этот код на моем iPhone ... иногда мой компилятор в мозгу пропустил такие вещи) – Bohemian

+0

это дало мне это исключение tho Исключение в потоке «main» java.lang.StringIndexOutOfBoundsException: String index out the range: 26 \t at java.lang.String.charAt (String.java:695) \t at SinglePrecision.main (Неизвестный источник) – user1918034

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