Java 为什么c值会在给定代码中重复?

Java 为什么c值会在给定代码中重复?,java,Java,1.这是我将二进制转换为十进制的代码,但它不起作用。由于某些原因,c值会重复 /** * Created by Ranjan Yadav on 11.10.2016. */ public class BinaryToDecimal { public static void main(String[] args) { java.util.Scanner read = new java.util.Scanner(System.in); System.out

1.这是我将二进制转换为十进制的代码,但它不起作用。由于某些原因,c值会重复

/**
 * Created by Ranjan Yadav on 11.10.2016.
 */
public class BinaryToDecimal {
    public static void main(String[] args) {
        java.util.Scanner read = new java.util.Scanner(System.in);
        System.out.println("Enter a binary number: ");
        int binary = read.nextInt();
        int total = 0;
        int n = 1;
        int c = 0;
        int number = 0;
        while (binary != 0) {
            c = binary % ((int) Math.pow(10, n));
            binary = binary / 10;
            number = c * (int)(Math.pow(2, (n - 1)));
            total += number;
            ++n;
        }
        System.out.printf("The decimal of the binary is %d", total);
    }
}

您将n增加1,并同时将二进制数除以10提升到n。因此,在第一次迭代后,您无法获取单元的二进制数字。为了解决这个问题,您需要在每次迭代中得到二进制模10(不是将10提升到n),并且还需要将二进制语句除以10

我简化了代码,并对代码进行了一些小的更改,以提高可读性。以下是更正的主要方法:

public static void main (String[] args){
    java.util.Scanner read = new java.util.Scanner(System.in);
    System.out.println("Enter a binary number: ");
    int binary = read.nextInt();
    int total = 0;
    int n = 0;
    int c = 0;
    int number = 0;
    while (binary != 0) {
        c = binary % 10;
        binary = binary / 10;
        number = c * (int)(Math.pow(2, n));
        total += number;
        ++n;
    }
    System.out.println("The decimal of the binary is " + total);
}

代码正在运行并产生所需的结果。如果您还有任何疑问,请告诉我。

您可以使用
parseInt
方法解析整数:

java.util.Scanner read = new java.util.Scanner(System.in);
System.out.println("Enter a binary number: ");
String binary = read.nextLine();
int decimal = Integer.parseInt(binary, 2); // 2 here means the string "binary" is in binary
如果不允许您使用该算法,请尝试以下算法:

  • 创建一个变量
    total
    ,并将其设为0
  • 使用for循环遍历二进制字符串,如下所示:
    for(int i=0;i
  • 在每次迭代中,如果字符为1,则添加
    Math.pow(2,binaryString.length()-1-i)
    。否则什么也不做

  • 假设我输入1110111。第一次,
    1110111%10
    为1,
    binary
    设置为111011。第二次,什么是
    111011%100
    ?谢谢,在所有时间里,c只能被10模化。在IDE调试器中逐步检查代码,并在每一步检查中间值。这将很快向您展示问题,您将学到一些东西。我用intellij调试了它,但我不知道如何调试works@RANJANYADAV你应该真正学会如何调试你的代码,在那之后你的编程技能将提高300%。快速启动: