将二进制值转换为返回语句

问题描述 投票:1回答:1

该代码用于将十六进制值转换为二进制值。我正在尝试将(bin_num [j])作为返回语句而不是使用System.out作为返回语句,但是问题是我无法使用for循环语句返回binnum。请帮助!

public static String hexaToBin(String s)
    {
        String hexdec_num;
        int dec_num, i = 1, j;
        int bin_num[] = new int[100];
        try
        {
        Scanner scan = new Scanner(System.in);
        s = scan.nextLine();

        /* convert hexadecimal to decimal */        
        dec_num = Integer.parseInt(s, 16);

        /* convert decimal to binary */        
        while(dec_num != 0)
        {
            bin_num[i++] = dec_num % 2;
            dec_num = dec_num / 2;
        }

        for(j = i - 1; j > 0; j--)
        {
            System.out.print(bin_num[j]);
        }

        }
        catch(NumberFormatException nfe)
        {
            System.out.println("Invalid Input");
        }

    }
java hex
1个回答
0
投票

我确定Eclipse试图告诉您声明hexdec_num,然后不要使用它。另外,接受参数s并将其替换为Scanner中的内容有什么意义?

[在评论中,安德鲁建议使用StringBuilder builder建立String。然后,在Try块的末尾,您可以返回builder.toString()。在发生异常的情况下,您可以简单地使用nfe.getMessage()返回异常消息(然后您将摆脱不使用nfe的警告)。

但是,我建议您使用测试驱动的开发(TDD)从头开始。

    public static String hexaToBin(String s) {
        return "Sorry, not implemented yet";
    }

制作一个JUnit测试类。 Eclipse中的步骤并不是那么直观,但是您可以弄清楚(如果没有,我确定此网站上存在相关的问题和答案)。

    @Test
    public void testHexaToBin() {
        System.out.println("hexaToBin");
        String s = "CAFE";
        String expResult = "1100101011111110";
        String result = hexaToBin(s); // Might have to add static import
        assertEquals(expResult, result);
    }

运行此测试(我认为Eclipse将在某个地方向您显示绿色按钮)。该测试应失败,因为它预期为“ 1100101011111110”,但显示为“对不起,尚未实现”。

进行此传递的最简单方法是使hexaToBin()精确返回期望值。

    public static String hexaToBin(String s) {
        return "1100101011111110";
    }

然后编写另一个期望得到不同结果的测试。

    @Test
    public void testHexaToBinOtherNumber() {
        String s = "BABE";
        String expResult = "1011101010111110";
        String result = hexaToBin(s); // You have your static import, right?
        assertEquals(expResult, result);
    }

现在您实际上开始考虑如何从十六进制转换为二进制。 TDD可以帮助您消除路径的遗漏和痕迹(例如hexdec_num)。

但是当您尝试重新发明轮子时,TDD无法告诉您。查看Integer的JDK文档,特别注意toString()的2参数版本。然后,您应该能够弄清楚如何通过两线甚至单线通过CAFE和BABE测试。

P.S。 NumberFormatException是运行时异常,hexaToBin()捕获它实际上没有任何意义。这是呼叫者的问题。

© www.soinside.com 2019 - 2024. All rights reserved.