1

我需要编写一个可以将位转换为十进制的程序。每当我输入一点时,它只会输出 0.0。我不知道为什么。我知道这非常简单,但我只是没有看到它。任何帮助,将不胜感激。

import java.lang.Math;
import java.util.Scanner;


public class Lab1 {
    static double number = 0;

    public static double toDec(String num) {

        char[] charArray = num.toCharArray();

        for(int i = 0; i<charArray.length;i++) {
            if(charArray[i] == 1) {
                number = Math.pow(2, charArray.length-i);
            }
        }

        return number;


    }


    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        int bit;
        String bitString;

        System.out.println("Please enter a bit");
        bit = keyboard.nextInt();
        bitString = Integer.toString(bit);


        System.out.println(toDec(bitString));



    }

}
4

3 回答 3

6

您已将 与charArray[i]进行比较1,但您将苹果与橙子进行比较,具体而言,将 achar与 进行比较int

'1'而是与 char 进行比较。

if(charArray[i] == '1') {

此外,您可以在 ; 中创建一个number局部变量。toDec它不需要存在于该方法之外。

此外,这仅在设置了一位时才有效。现在您只使用一个位,但如果您想修改它以使用多个位,则需要进行其他更改。

你覆盖number每次toDec被调用,条件是true。您可能想要添加 tonumber+=不是用 覆盖以前的值=

于 2013-09-05T19:02:30.417 回答
1

Integer#parseInt(String str, int radix)完成这项工作:

public static Integer toDec(String num) {
  return Integer.parseInt(num, 2);
}
于 2013-09-05T19:18:04.940 回答
0

因此,如果您想获取 51 的字符串“110011”。对于大端序,您将必须确定要处理多少位。因此,如果您读取字符串并且它是 6 位长,那么您知道第一位必须向左移动 6 位。

int l = 6;
long value = 0;

for( int i = 0; i < l; i++ )
{
   int bit = ( charArray[i] == "1" ) ? 1 : 0;

   l = l + ( bit << l-i );
}

对于浮点数,您基本上必须构建一个解释器来解码基于浮点数以二进制表示的位。

于 2013-09-05T19:18:15.077 回答