2017-08-28 70 views
-9

我的代碼有什麼問題。 它爲任何輸入值打印1。二進制到十進制數轉換器在JAVA?

package Assign; 
import java.util.Scanner; 
import java.lang.*; 

public class Assignment { 

public static void main(String[] args) { 
    Scanner s = new Scanner(System.in); 
    int num = s.nextInt(); 
    int x = 1; 
    int sum = 1, i = 0; 

    while (num > 0) { 
     x = num % 10; 
     if (x == 1) { 
      sum = sum + (2 * i); 
     } 
     num = num/10; 
     i++; 
    } 
    System.out.println(sum); 
} 
} 
+0

當你調試的代碼,究竟你看到這並沒有使感? – csmckelvey

+0

看'x'。您可以在其中保存操作的值,但不會保存該操作的值。從那裏開始。 – Frecklefoot

回答

0

兩個問題:

1)您需要添加2 ^我來總結,而不是2 *我

2)總和開始於1而不是0,這意味着,答案永遠是比應該多1個。

0

如果您不需要自己開發的算法,這裏是一個較短的方式做到這一點:

System.out.println(new BigInteger(String.valueOf(num), 2)); 
+0

你應該爲你的代碼包含更多的上下文/解釋 - 請參閱[答案]。 – EJoshuaS

0

一個簡單的方法來做到這一點。

System.out.println(Integer.parseInt(binaryString,2)); 
+0

你應該包含更多的上下文/解釋 - 請參閱[答案]。 – EJoshuaS

+0

一個好的java程序員可以很容易地理解它。 –

0

在程序中時(NUM> 0)是在如果塊中的變量sum得到改性的唯一情況。 考慮到如果塊

if (x == 1) { 
    sum = sum + (2 * i); 
} 

由於可變I = 0

sum = sum + (2 * i); 

評估爲

sum = sum + (2 * 0); 
sum = sum + 0; 
sum = sum; 

由於可變總和= 1,輸出始終爲1

考慮到其它可能性,當(NUM < = 0 )其中while循環被跳過,因爲總和= 1,輸出爲1

對於二進制到十進制在Java中數轉換器退房

http://www.java2novice.com/java-interview-programs/binary-to-decimal/