2016-03-14 2 views
1

это код, который я сделал, может кто-нибудь объяснить мне, почему выход остается 0.0?Math.pow() не работает?

(я пытался сделать программу, которая преобразует двоичный в десятичные, и я знаю, что это может быть легко достигнуто в Java другими способами)

package main; 

    import java.util.Scanner; 

    public class Class1 { 

     public static void main(String[] args) 
     { 
      Scanner scanner = new Scanner(System.in); 
      String input = scanner.nextLine(); 
      int length = input.length(); 
      double output=0.0; 
      String reverse = new StringBuffer(input).reverse().toString(); 

      for (int i=0; i==length; i+=1){ 
       switch(reverse.charAt(i)){ 
       case '1': output = (output + (Math.pow(2, i)));break; 
       case '0': break; 
       } 
      } 
      System.out.println(output); 
     } 
    } 

ответ

4

Если только length == 0, что цикл не выполняется.

Вы могли бы также означать что-то вроде:

for (int i=0; i<length; i+=1){ 

Кроме того, нет необходимости использовать Math.pow(2, i) - вы можете использовать 1 << i и сохранить все это как целое.

+0

как примечание: Math.pow() чрезвычайно медленный по сравнению с побитовыми операциями. Вы должны избегать этого в тривиальных случаях, таких как умножение на 2 или создание квадрата числа. –

+0

Спасибо за вашу помощь, теперь я больше не знаю, какие петли лучше, но можете ли вы объяснить, что вы подразумеваете под этим: используйте 1 << i и как он будет выглядеть тогда? – StijnOnline

+0

Если в настоящее время у вас есть 'Math.pow (2, i)', используйте '1 << i' вместо этого. –

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