这是我到目前为止所做的:
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
。我认为这应该有用,但必须有一种更容易/更整洁的方法。
答案 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
希望这会对你有所帮助。