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