使用' printf'在Java中

时间:2014-05-14 01:24:59

标签: java printf

我在代码中实现printf方法时遇到问题。我本周开始了我的第一个Java课程,并试图超越课程。本质上,我要创建ASCII字符,十六进制数字及其十进制等值的输出,最多127个条目。输出中创建的行数由用户输入选择。这是我到目前为止的代码:

package lab1;
import java.util.Scanner;

public class Lab1 {
    public static void main(String[] args) {

        //declare 
        Scanner scan = new Scanner(System.in);

        //prompt the user to enter an integer, num defines the # of rows displayed in output
        System.out.print("How many groups? ");
        int num = scan.nextInt();

        //print ascii, then hex value, then dec value
        for (int c = 0; c < 128; c++) { 
            String hex = Integer.toString(c , 16);
            String output = (char)c + " " + hex + " " + c;
            System.out.println(output);
        /*
            //print the output with printf to create the columns
            //character (c), string(s), decimal integer(d)
            System.out.printf("%-2c %-2s %-2d", output);
        */
        }
    }
}

我会在这里发布一张图片,显示最终结果应该是什么,但我需要10点声望。我可以私下给你发电子邮件。

我希望你能帮助我了解如何实现这一目标,或者将我引导到我能够自学的资源中。

谢谢!

4 个答案:

答案 0 :(得分:4)

你需要传递与printf中标志相同数量的参数。

for (int c = 0; c < 128; c++) { 
    // String hex = Integer.toString(c , 16); - No need for this anymore.

    // Print the output with printf to create the columns
    // character (c), string(s), decimal integer(d)
    System.out.printf("%-2c 0x%-2X %-2d%n", (char)c, c, c);
}

使用0x%-2X,您可以打印出大写的十六进制值。我添加了0x作为前缀来指定基础。

示例输出:

...
A  0x41 65
B  0x42 66
C  0x43 67
D  0x44 68
E  0x45 69
F  0x46 70
G  0x47 71
H  0x48 72
I  0x49 73
J  0x4A 74
K  0x4B 75
L  0x4C 76
M  0x4D 77
N  0x4E 78
O  0x4F 79
P  0x50 80
Q  0x51 81
R  0x52 82
S  0x53 83
T  0x54 84
U  0x55 85
V  0x56 86
W  0x57 87
X  0x58 88
Y  0x59 89
Z  0x5A 90
...

答案 1 :(得分:2)

您实际上不需要传递多个参数。

for (int c = 0; c < 128; c++) {
     // Print ASCII, then hex, then dec
     System.out.printf("%1$-2c %1$-2x %1$-2d%n", c);
}

请参阅此处的文档:http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html

答案 2 :(得分:0)

问题是你需要为printf提供三个参数,一个用于char,String和decimal。由于您只传递一个变量(String类型),因此会感到困惑。请记住,在一个String(输出)中连接所有内容会使所有类型为String。

答案 3 :(得分:0)

您需要每个标记与变量对应,并且您的标记需要正确格式化。

要打印ascii,十六进制和十进制值,printf语句应如下所示:

System.out.printf("%-2c -  %-2x -  %-2f", someChar, someHex, someFloat);

其中someChar是char,someHex是一个int,你希望显示其十六进制值,someFloat是你想要显示的float / double值。

有关Java格式字符串的更多信息,请参阅:http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html