需要验证循环,二进制到十进制不输出正确的答案

时间:2016-09-07 20:38:49

标签: java validation loops binary

我知道这很难看,但它的确有效(不是真的)它只是成功编译

我不能使用Integer.parseInt()或Math.max

我必须定义每个字符并设置算法以检查

我理解像11111111这样的8位二进制数的概念的小数为255但是在我的程序中它就像12495 ......什么给我做错了?

也不是每个二进制数都是8个字符,我如何允许代码接受并验证在提示中只输入1和0?

import java.util.Scanner;

public class Binary
{
    public static void main(String[] args)
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Enter Binary Number Please:");
        String aString = keyboard.next();
        char aChar = aString.charAt(0);
        int digit_1 = aString.charAt(0);
        char bChar = aString.charAt(1);
        int digit_2 = aString.charAt(1);
        char cChar = aString.charAt(2);
        int digit_3 = aString.charAt(2);
        char dChar = aString.charAt(3);
        int digit_4 = aString.charAt(3);
        char eChar = aString.charAt(4);
        int digit_5 = aString.charAt(4);
        char fChar = aString.charAt(5);
        int digit_6 = aString.charAt(5);
        char gChar = aString.charAt(6);
        int digit_7 = aString.charAt(6);
        char hChar = aString.charAt(7);
        int digit_8 = aString.charAt(7);
        float dec_1 = (digit_1*128);
        float dec_2 = (digit_2*64);
        float dec_3 = (digit_3*32);
        float dec_4 = (digit_4*16);
        float dec_5 = (digit_5*8);
        float dec_6 = (digit_6*4);
        float dec_7 = (digit_7*2);
        float dec_8 = (digit_8*1);
        float Answer = (dec_1+dec_2+dec_3+dec_4+dec_5+dec_6+dec_7+dec_8);
        System.out.println(Answer);
    }//End bracket method main
}//End bracket class Binary

4 个答案:

答案 0 :(得分:1)

数学是正确的,但当你看charAt(位置)时,它返回一个字符,应该给你ASCII值而不是数字值。

你应该使用这样的东西

Character.getNumericValue(c)

这样的事情

char theChar0 = String.charAt(0);
int digit0 = Character.getNumericValue(theChar0);

我很确定这是正确的 - 我是最近的大学毕业生,所以不是专家,但祝你好运!

答案 1 :(得分:0)

标准方法是对输入的字符使用循环。每次循环时,首先检查当前值是0还是1(如果没有,发出错误消息并中断),将已有的值乘以2并添加当前数字的值。例如,如果输入os 101(应该等于5):从0开始。对于第一个数字,1(这是0或1,所以没关系),你的循环将做2 * 0 + 1 = 1。 digit(0)给出2 * 1 + 0 = 2.最后一位2 * 2 + 1 = 5.你已经完成了。

如果您在int类型中进行计算,则适用于1到31位二进制数字。

如果值不是0或1,则可以抛出一个可以在正确的位置捕获的异常。

不知道为什么你的研究没有提出这个问题。当然,必须在互联网上的许多地方进行描述。 : - )

答案 2 :(得分:0)

你可以随时使用

int numOfDig = String.length();

然后放置numOfDig并创建一个for循环,将数据输入一个数组大小也是numOfDig的数组

然后另一个for循环来做数学运算。希望这是有道理的。

答案 3 :(得分:0)

这里你应该工作 - 确保你理解代码: 花了5分钟......

import java.util.Scanner;

public class binary {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Enter Binary Number Please:");
        String aString = keyboard.next();
        int sizeOf = aString.length();
        int[] binArray = new int[sizeOf];
        char digitBin = ' ';
        int digitChar = 0;
        for(int i = 0; i < sizeOf; i++){
            digitBin = aString.charAt(0);
            digitChar = Character.getNumericValue(digitBin);
            binArray[i] = digitChar;
        }
        int total = 0;
        int multiplyNum = 1;
        for(int i = sizeOf - 1; i > -1; i--){
            total = (binArray[i] * multiplyNum) + total;
            multiplyNum = multiplyNum * 2;
        }
        System.out.println(total);

    }

}

如果你不熟悉Arrays和你所有的循环 - 最好开始练习......你会在学校里用它们一吨!