有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java二进制到十进制

我很难将二进制转换成十进制。我们必须使用一个函数进行转换,并手动进行,而不是使用预定义的函数。这就是我到目前为止所拥有的,我知道这是一个烂摊子,但我被困在如何修复它。谢谢

import java.util.Scanner;

public class BinaryConversion {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    String inString;
    int decimal;

    System.out.println("Enter a binary number: ");
    inString = input.nextLine();

    while (!"-1".equals(inString)) {
        int i;
        int binaryLength;

        binaryLength = inString.length();
public static int binaryToDecimal (String binaryString) {

    for (i = binaryLength - 1, decimal = 0; i >= 0; i--) {
        if (inString.charAt(i) == '1')
            decimal = decimal + Math.pow(2,inString.length() - 1 - i);
    }
    return (int) decimal;
}
        System.out.println(decimal);

        System.out.println("Enter a binary number: ");
        inString = input.nextLine();
    }
    System.out.println("All set !");
}
}

共 (4) 个答案

  1. # 1 楼答案

    当我清理你的代码时,它工作得很好-

    public static int binaryToDecimal(String binaryString) {
        int binaryLength = binaryString.length();
        int decimal = 0;
        for (int i = binaryLength - 1; i >= 0; i--) {
            if (binaryString.charAt(i) == '1') {
                decimal += Math.pow(2, binaryLength - 1 - i);
            }
        }
        return decimal;
    }
    
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a binary number: ");
        String inString = input.nextLine();
    
        while (!"-1".equals(inString)) {
            System.out.println(binaryToDecimal(inString));
    
            System.out.println("Enter a binary number: ");
            inString = input.nextLine();
        }
        System.out.println("All set !");
    }
    

    输出

    Enter a binary number: 
    01
    1
    Enter a binary number: 
    10
    2
    Enter a binary number: 
    -1
    All set !
    
  2. # 2 楼答案

    要使用函数,根据赋值要求,必须在主方法之外编写函数,然后包含一条调用函数的语句。因此,将这个移到上面表示public static void main的行上:

    public static int binaryToDecimal (String binaryString) {
    
        for (i = binaryLength - 1, decimal = 0; i >= 0; i--) {
            if (inString.charAt(i) == '1')
                decimal = decimal + Math.pow(2,inString.length() - 1 - i);
        }
        return (int) decimal;
    }
    

    此外,每个函数或方法(包括main)都有自己使用的变量,称为局部变量;但是每个函数使用的局部变量都是它自己的独立副本。因此,上述函数将无法使用属于mainbinaryLengthdecimal变量。您需要在binaryToDecimal中声明它们:

    public static int binaryToDecimal (String binaryString) {
    
        int decimal;
        int binaryLength;
        for (i = binaryLength - 1, decimal = 0; i >= 0; i--) {
            if (inString.charAt(i) == '1')
                decimal = decimal + Math.pow(2,inString.length() - 1 - i);
        }
        return (int) decimal;
    }
    

    此外,此函数将无法访问maininString,但其思想是您已经为函数提供了要使用的字符串,它称为binaryString。因此,将函数中的inString更改为binaryString

    public static int binaryToDecimal (String binaryString) {
    
        int decimal;
        int binaryLength;
        for (i = binaryLength - 1, decimal = 0; i >= 0; i--) {
            if (binaryString.charAt(i) == '1')
                decimal = decimal + Math.pow(2,binaryString.length() - 1 - i);
        }
        return (int) decimal;
    }
    

    还要注意binaryLengthdecimal变量与main中同名的变量完全无关。这意味着,当您在main中分配binaryLength时,这对binaryToDecimal中的binaryLength没有影响。您需要在函数中指定它。将int binaryLength;更改为

    int binaryLength = binaryString.length();
    

    最后,为了使用函数,main需要调用它。将其放入main函数中:

    decimal = binaryToDecimal(inString);
    

    main执行该操作时,它将调用该函数并告诉它使用inString。不过,该函数将调用binaryString。函数将返回一个结果,然后main将该结果分配给变量decimal——这意味着属于main的局部变量decimal,因为上面的语句在main

    我不知道这是否能让你的整个计划奏效。(应该,但我不确定。)但我只是想解释一下如何使用函数的细节

  3. # 3 楼答案

    令人困惑的是Math.pow及其复杂的参数,在这些参数中很容易出现一个接一个的错误

    然而,如果我们有一个以10为基数的数字,比如

    123

    它的价值是

    ((0*10)+1)*10+2)*10+3

    这看起来很复杂,但请注意简单的模式:从0开始,我们遍历数字。只要我们有另一个dgit,我们就用之前的结果乘以基数,然后加上数字值。这就是全部!没有数学。pow,没有复杂的指数计算

    因此:

    String s = "1010";
    int value = 0;
    int base = 2;
    for (i=0; i < s.length(); s++) {
        char c = s.charAt(i);
        value = value * base;
        value = value + c - '0';
    }
    
  4. # 4 楼答案

    这是经过一点清理后的函数

            public static int binaryToDecimal (String binaryString) {
                int decimal = 0;
                int base    = 2;
                for (int i = binaryString.length() - 1; i >= 0; i--) {
                    if (binaryString.charAt(i) == '1')
                        decimal += Math.pow(base,i);
                }
                return decimal;
            }