2015-11-10 6 views
-1

Я просто хотел создать метод, который может преобразовать число из двоичной системы (base2) в десятичную систему (base10). Но у меня возникают проблемы. Я не знаю, как исправить это. Вот мой методЧто не так с моим методом?

public static int toDecimal (String base2) 
    { 
    int sum=0; 

    for (int k=base2.length(); int i=0; k>0, i<=base2.length()-1; k--, i++) 
    { 
     char symbol = base2.charAt(k); 
     sum= sum+ symbol*i; 
    } 
    return sum; 
    } 

P.S: Я не мог быть в состоянии преобразовать символ в целое типа (сумма + символ * я;). Если возможно, не могли бы вы также дать совет.

+0

Я извиняюсь за набрав весь код неловко: –

+0

публичный статический Int toDecimal (Strin g base2) { int sum = 0; для (int k = base2.length(); int i = 0; k> 0, i <= base2.length() - 1; k--, i ++) { char symbol = base2.charAt (k); sum = sum + symbol * i; } возвратная сумма; } } –

+3

Может нужно использовать ParseInt(), так как вы передаете в строке –

ответ

1

На самом деле ваш код не работает из-за неправильного синтаксиса цикла - вы можете использовать; символ только два раза в круглых скобках. Также sum = sum + symbol * i; - неправильная формула преобразования.

кажется, что этот код решает проблему

public static int toDecimal(String base2) { 
    int sum=0; 
    int i = 0; 
    for (int k = base2.length() - 1; k >= 0; k--) { 
     sum += Integer.parseInt(String.valueOf(base2.charAt(k))) << i; 
     i++; 
    } 
    return sum; 
} 

Я надеюсь, что это поможет вам!

+0

Большое спасибо. Это сработало. Но, честно говоря, я не понимал «<< я»; –

+0

В этом коде, как влияет переменная «i» –

+0

<< означает левый бинарный сдвиг, i - бит отсчета для сдвига. Каждый сдвиг на один бит = умножается на 2 –

0

В цикле вы инициализируете 2 переменные. Между ними у вас есть; (точка с запятой), но должна быть a, (запятая).

1

просто некоторые незначительные изменения к для цикла будет получить код рабочего

public static int toDecimal(String base2) { 
    int sum = 0;  
    for (int k = base2.length() - 1, i = 0; k>=0; k--, i++) { 
     int symbol = (int)base2.charAt(k)-48;//0 is 48; 1 is 49 in ASCII 
     sum = (int) (sum + (int) symbol * Math.pow(2, i)); 
    } 
    return sum; 
} 

здесь вы идете

+0

Большое спасибо. Но я не понял эту строку «int symbol = (int) base2.charAt (k) -48; // 0 равен 48; 1 - 49 в ASCII» –

+0

Извините, что может показаться вам смешным, но поскольку я новичок в изучении java, я испытываю трудности с пониманием даже простейших кодов. –

+0

проблем нет, @ S.Dovra вы видите в ASCII char '0' is = 48 '1' равно 49 и так далее. поэтому есть -48, чтобы получить «0» как числовое 0. – Doc

0

Чтобы устранить необходимость вызова ParseInt, и начать с самого начала строка, вы можете использовать

public static int toDecimal(String str) { 
     int val = 0; 
     for (int i = 0; i < str.length(); i++) { 
     val = (val<<1) + ((str.charAt(i) == '0') ? 0 : 1); 
     } 
     return val; 
    } 
Смежные вопросы