有人可以帮我完成这个数字钻石吗?

时间:2014-09-12 02:45:22

标签: java

请帮忙。我有钻石打印的右侧,但我在打印它的左侧时遇到问题。如果有人可以提供帮助,我会非常感激。谢谢。  我对我的代码进行了一些更改,现在需要我的代码在钻石中间打印一列而不是两列。     “     包钻石;

public class NumericDiamond 
{


public static void main(String[] args) 
{

   /*
                   1         1
                4  3  4      2
             4  4  5  7  4   3
                5  3  5      4
                   4         5
    */

int noOfColumns=1;
int noOfSpaces=3;
int start=0;
for(int i=1;i<=5;i++)
{
for (int j=noOfSpaces;j>=1;j--) 
{
System.out.print(" ");    
}
for (int j=1;j<=noOfColumns;j++)
{
    System.out.print(noOfColumns);
}
if (i<5)
{
    start=i;
}
else
{
    start=8-i;
}
{
System.out.print(start+" ");
start--;
}
System.out.println();

{
if(i<3)
{
noOfColumns=noOfColumns+2;
noOfSpaces=noOfSpaces-1;
}
else
{
 noOfColumns=noOfColumns-2; 
 noOfSpaces=noOfSpaces+1;
}
} 
}
}
}
'

2 个答案:

答案 0 :(得分:1)

当您向屏幕写出内容时,请排成行。 在第一行和最后一行中,您打印1个随机数。在第二行和第四行中,您打印3个随机数。在中间行,您打印5个随机数。 您可以使用制表符或空格将数字放置到其位置。

    Random rnd = new Random();
    for(int i = 0; i < 5; i++){
        if(0 == i || 4 == i) System.out.println("\t\t" + (rnd.nextInt(5)+1) + "\t\t\t" + (i+1));
        if(1 == i || 3 == i) System.out.println("\t" + (rnd.nextInt(5)+1) + "\t" + (rnd.nextInt(5)+1) + "\t" + (rnd.nextInt(5)+1) + "\t\t" + (i+1));
        if(2 == i) System.out.println((rnd.nextInt(5)+1) + "\t" + (rnd.nextInt(5)+1) + "\t" + (rnd.nextInt(5)+1) + "\t" + (rnd.nextInt(5)+1) + "\t" + (rnd.nextInt(5)+1) + "\t" + (i+1));
    }

像这样。

答案 1 :(得分:1)

要打印菱形,您可以在从 Program::OnNewFile-n 的行和列上使用两个嵌套的 for 循环(或流)。当 n 时获得菱形形状。单元格的值取决于其坐标 n > iAbs + jAbsi,也可以是某种常量或随机值:

j

输出:

int n = 5;
for (int i = -n; i <= n; i++) {
    // absolute value of 'i'
    int iAbs = Math.abs(i);
    for (int j = -n; j <= n; j++) {
        // absolute value of 'j'
        int jAbs = Math.abs(j);
        // diamond shape (cell value = iAbs + jAbs)
        if (iAbs + jAbs > n) {
            System.out.print("  ");
        } else {
            System.out.print(" " + (iAbs + jAbs));
        }
    }
    System.out.println("  i=" + iAbs);
}

同样,您可以使用两个嵌套流:

           5            i=5
         5 4 5          i=4
       5 4 3 4 5        i=3
     5 4 3 2 3 4 5      i=2
   5 4 3 2 1 2 3 4 5    i=1
 5 4 3 2 1 0 1 2 3 4 5  i=0
   5 4 3 2 1 2 3 4 5    i=1
     5 4 3 2 3 4 5      i=2
       5 4 3 4 5        i=3
         5 4 5          i=4
           5            i=5

输出:

int n = 5;
IntStream.rangeClosed(-n, n)
        // absolute value of 'i'
        .map(Math::abs)
        .peek(i -> IntStream.rangeClosed(-n, n)
                // absolute value of 'j'
                .map(Math::abs)
                // diamond shape (cell value = n - i - j)
                .mapToObj(j -> i + j > n ? "  " : " " + (n - i - j))
                .forEach(System.out::print))
        .mapToObj(i -> "  i=" + i)
        .forEach(System.out::println);

另见:
Drawing numeric diamond
Diamond with nested for loops