我的代码使用println
显示输出,但是当我使用printf
时,我在执行时收到错误。最终结果是输出如下:
Enter an integer: 5
The 16 bits are 0000000000000101
我可以在哪里进行更改以获得上述结果并且没有错误?这是我的代码:
import java.util.Scanner;
public class decimalToBits{
public static void main(String[] args){
//initiate variables
int integer;
Scanner input = new Scanner(System.in);
//prompt user to input short integer
System.out.println("Enter an integer: ");
integer = input.nextInt();
//calculate integer into 16 bits
//display results
System.out.printf("The bits for decimal input of %d are %d", integer, deciamalToInt(integer));
}
//convert short integer into 16 bit integer
public static String decimalToInt(int integer){
String bits = "";
while (integer != 0){
int bitsValue = integer % 2;
bits = toBitsChar(bitsValue) + bits;
integer = integer / 2;
}
return bits;
}
//Convert an integer to a single 16 bit digit
public static char toBitsChar(int bitsValue){
if (bitsValue > 0)
return (char)('1'); //display 1 if value is greater than 0
else
return (char)('0'); //display 0 if value is 0
}
}
收到以下错误:
Enter an integer:
5
Exception in thread "main" The bits for decimal input of 5 are java.util.IllegalFormatConversionException: d != java.lang.String
at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source)
at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source)
at java.util.Formatter$FormatSpecifier.print(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.io.PrintStream.format(Unknown Source)
at java.io.PrintStream.printf(Unknown Source)
at decimalToBits.main(decimalToBits.java:22)
答案 0 :(得分:1)
在这一行:
.."The bits for decimal input of %d are %d", integer, decimalToInt(integer));
↑
您正在使用%d
来打印字符串。请改用%s
。
请参阅docs。
答案 1 :(得分:0)
DecimalToInt应该命名为IntegerToBitString。它返回一个字符串,因此正确的格式修饰符是%s,而不是%d,它需要一个整数。 Java和C在修饰符中广泛兼容,因此谷歌的“printf格式”应引导您使用修饰符和选项表。
答案 2 :(得分:0)
您正在做很多工作来实现16位二进制表示。虽然很简单,但我会做这样的事情:
int x = 5;
System.out.println(Integer.toBinaryString(0x10000 | x).substring(1));
这将在您的控制台中打印 0000000000000101 。
答案 3 :(得分:0)
在“System.out.printf(...)”中使用%s代替%d。