2016-03-14 61 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'代替。 –