使用数组将二进制转换为十进制

时间:2014-03-26 00:48:25

标签: java arrays binary

我试图将二进制字符串变成小数。如果输入-1,它将终止。我坚持使用数组。有人建议使用:public static int binaryToDecimal(String binaryString)。但我不知道该怎么做。这就是我所拥有的:

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 (inString != "-1") {
            int i;
            int binaryLength;

            binaryLength = inString.length();

            for (i = 0, decimal = 0; i < binaryLength; i++) {
                decimal = decimal * 2 + (inString[i] - 0);
                System.out.print(decimal);

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

它说数组存在编译问题。谢谢!

5 个答案:

答案 0 :(得分:1)

inString是一个String,而不是一个数组。所以,你不能使用inString [i]。要获取字符串中给定位置的字符,请使用inString.charAt(i),它返回一个char。

然后,您还必须将该char转换为int。 您可以使用Character.getNumericValue(char)执行此操作。

总而言之,而不是

inString[i]

你需要使用

Character.getNumericValue(inString.charAt(i))

答案 1 :(得分:1)

试试这个:

        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();
        //Character.getNumericValue(inString.charAt(i))

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

            binaryLength = inString.length();

            for (i = 0, decimal = 0; i < binaryLength; i++)
            {
                decimal = decimal * 2 + (Character.getNumericValue(inString.charAt(i)) - 0);
                System.out.print(decimal);

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

}

根据建议,您必须使用Character.getNumericValue

答案 2 :(得分:1)

您可以使用Integer.parseInt()

简化代码
public static void main(String[] args) {
    final Scanner input = new Scanner(System.in);

    String inString;

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

        if (inString.equals("-1"))
            break;

        System.out.println(Integer.parseInt(inString, 2));
    }
    System.out.println("All set !");
}

答案 3 :(得分:0)

您的逻辑和语法错误很少。

这是有效的代码:

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();

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

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

请注意,无法使用==比较字符串,您必须使用equalscompareTo方法。

答案 4 :(得分:0)

byte[] binary = {1,1,0,1};

int decimal = 0;
for(int i=binary.length-1, j=0; i>=0; i--, j++){
    decimal  += binary[i]*Math.pow(2, j);
}