如何格式化数组元素?

时间:2011-12-13 02:20:59

标签: java arrays

这是我到目前为止所做的:

public class Numbers
{
    // Fields
    public int[] numberLine;
    public int randomNumber;
    public Random randomGen;


    // Constructor : Initialise number array
    public Numbers()
    {
        numberLine = new int[6];
        randomNumber = 0;
        randomGen = new Random();
    }

    // Method : Generate 6 random numbers in a range 1 to 49
    public void populateArray()
    {
        for(int index = 0; index < numberLine.length; index++)
        {
            randomNumber = 1 + randomGen.nextInt(49);
            numberLine[index] = randomNumber;
        }
        Arrays.sort(numberLine);
    }

    ...
}

此代码将创建一个由六个整数组成的数组,并使用for循环填充随机数(1 - 49)​​,然后按升序对元素进行排序。

之后我想做的是让方法按以下格式打印数组元素:

** nn nn nn nn nn nn **

通常可以使用以下方式完成:

System.out.println(""** " + numberLine[0] + " " + numberLine[1]...

等等......

然而,由于某些数字可能只有一位数,所以如何通过留下黑色空间来确保正确的格式呢?

所以它看起来像这样(示例数字):

**  7  9 27 37 39 48 **

注意单个数字元素前面的额外空间。我想过这样的事情:

for(int index = 0; index < numberLine.length; index++)
{
    if(numberLine[index] <= 9)
    {
        singleDigit++;

    }
    else
    {
        continue;
    }
}

然后可以用于:

for(int index = 0; index < numberLine.length; index++)
{
    if(index < singleDigit)
    {
        //make the single digit have a space before it
    }
}

但我想不出一种方法可以使这个工作,因为一个整数数组只能包含整数值,所以我可能没有使用该方法的正确行。也许,它可以用一个字符串数组来完成,但是然后将它们按升序排序可能会变得很复杂。

任何人都知道如何以所需的格式打印它?

提前致谢!

编辑:

我认为可能有用的东西就是使用它:

for(int index = 0; index < numberLine.length; index++)
{
    if(numberLine[index] <= 9)
    {
        singleDigit++;

    }
    else
    {
        continue;
    }
}

然后使用类似的东西:

if(singleDigit = 0)
{
    System.out.println("** " + numberLine[0] + " " + numberLine[1]
        + " " + numberLine [3] //etc
}
else
{
    if(singleDigit = 1)
    {
        System.out.println("**  " + numberLine[0] + " " +
            numberLine[1] + " " + numberLine [3]
             // etc (notice the extra space between the first ""
    }
}

继续一直到singleDigit = 6。我认为这应该有用,但必须有一种更容易/更整洁的方法。

5 个答案:

答案 0 :(得分:2)

您可以使用System.out.printf,使用格式%d表示整数,并在d之前添加宽度说明符2,例如:

System.out.printf("%2d, %2d, %2d, %2d, %2d\n", 15, 5, 35, 3, 4);

输出:

15,  5, 35,  3,  4

System.out.printf相当于System.out.format,您可以找到有关格式字符串here的更多信息。


编辑:如果您希望输出改为15, 05, 35, 03, 04,则只需将上述代码更改为:

System.out.printf("%02d, %02d, %02d, %02d, %02d\n", 15, 5, 35, 3, 4);

记下02前面d%之后的0。这意味着任何缺失的数字将被{{1}}替换而不是空格。

答案 1 :(得分:0)

    System.out.print("** ");
    for (int i = 0; i < numberLine.length; i++) {
        if (numberLine[i] < 10) {
            System.out.print(" ");
        }
        System.out.print(numberLine[i] + " ");
    }
    System.out.print("**");

基本上,你随身携带打印部分字符串,检查是否需要随时添加数字。

答案 2 :(得分:0)

这些行可以解决问题:

System.out.print("** ");
for (int e : numberLine)
    System.out.printf("%2d ", e);
System.out.println("**");

我正在使用Java的字符串格式化程序,请查看documentation以获取所有详细信息,但基本上"%2d "部分正在说:填充左边有空格的数字,在这样的情况下这种方式总是有两个字符的长度。

答案 3 :(得分:0)

在初学者编码术语中,我们可以使用子串方法如下:

int n = 22; //integer bet 1-49
String str = " "+ n;
System.out.println(str.substring(str.length()-2,str.length()));

因此,始终打印一个长度为2的字符串。

答案 4 :(得分:-1)

您可以使用数字格式化程序。如

NumberFormat formatter = new DecimalFormat("00");
String s = formatter.format(7);  // that print 07

希望这会对你有所帮助。