使用printf显示16个位置的方法的结果

时间:2014-01-11 20:39:48

标签: java

我的代码使用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)

4 个答案:

答案 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。