我在哪里接下来填写二进制到十进制程序的答案?

时间:2016-09-07 16:17:38

标签: java arrays for-loop arraylist binary

Assignment< ---我如何获知完成计划

我现在一直在努力。我需要创建常量然后声明并启动每个然后乘以它的位置值(128,64,32,16,8,4,2,1)

我知道Integer.parseINT(Binary ....)可以快速完成工作,但我不能使用它。

接下来是我到目前为止,我甚至走在正确的轨道上?我知道我需要获取每个分离的用户输入值并将它们乘以它们的位置值然后添加以创建小数但我生命中的我无法弄清楚如何通过for循环或定义每个变量

...
import javax.swing.JComboBox;

public class Binary {

    public static void main(String [] args) {
        Scanner keyboard = new Scanner (System.in);
        System.out.println("Enter Binary Number Please");
        Integer[] digits = getDigits(keyboard.nextInt());
        System.out.println(Arrays.toString(digits));
    }

    public static Integer[] getDigits(int num) {
        List <Integer> digits = new ArrayList <Integer>();
        collectDigits(num, digits);
        return digits.toArray(new Integer[]{});
    }

    private static void collectDigits(int num, List <Integer> digits) {
       if (num/10>0) {
            collectDigits(num/10, digits);
        }
        digits.add(num % 10);
    }
}

我想要分隔用户输入二进制文件的每个字符,以便我可以将它们乘以它们的位置值,然后添加每个产品以创建总和,然后通过System.out.println()

2 个答案:

答案 0 :(得分:0)

也许你可以做这样的事情,在运行时生成所需的常量。使用静态初始化程序:

public class PseudoConstant {

    public static final int PSEUDO_CONSTANT;
    private static final Random randomGen = new Random();

    static {
         PSEUDO_CONSTANT = generatePsudoConstant();
    }

    public static void main(String args[]) {
        PseudoConstant instance1 = new PseudoConstant();
        PseudoConstant instance2 = new PseudoConstant();

        System.out.println("PSEUDO_CONSTANT (instance1) = " + instance1.PSEUDO_CONSTANT);
        System.out.println("PSEUDO_CONSTANT (instance2) = " + instance2.PSEUDO_CONSTANT);
    }

    private static int generatePsudoConstant() {
        return randomGen.nextInt(10);
    }
}

答案 1 :(得分:0)

否则,如果您不需要在将每个数字转换为常量变量之前将其转换为常量变量,则以下代码将完全解决您的问题:

public class Binary {

    private static int placeValue = 1;

    public static void main(String [] args) {
        Scanner keyboard = new Scanner (System.in);
        System.out.println("Enter Binary Number Please");
        Integer[] digits = getDigits(keyboard.nextInt());
        System.out.println(Arrays.toString(digits));
        System.out.println("Sum: " + getSum(digits));
        keyboard.close();
    }

    public static Integer[] getDigits(int num) {
        List <Integer> digits = new ArrayList <Integer>();
        collectDigits(num, digits);
        return digits.toArray(new Integer[]{});
    }

    private static void collectDigits(int num, List <Integer> digits) {
       if (num/10>0) {
            collectDigits(num/10, digits);
        }
        digits.add(num % 10);
    }

    private static int getSum(Integer[] digits)
    {
        int result = 0;

        for(int i=(digits.length-1); i>=0; i--)
        {
            result += (digits[i] * placeValue);
            placeValue *= 2;
        }

        return result;
    }
}

输出,取8位数:

输入二进制数字

11011011

[1,1,0,1,1,0,1,1]

总和:219