该代码用于将十六进制值转换为二进制值。我正在尝试将(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");
}
}
我确定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()
捕获它实际上没有任何意义。这是呼叫者的问题。