2017-08-28 94 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/