2017-09-25 61 views
0

我已经搜索了很多关于这个问题的信息,无济于事。我真的很难与Java循环。如何创建一个创建一个带有方形数字的三角形的Java循环?

我得到的大局观念/ While循环,但是当谈到时间真正开始编程,我得到错误后错误...

我试图写出我的程序和理解的逻辑它,但我似乎无法让程序做我想做的事情。

当前的任务:

收件使用,要求用户对一个数n 1和9(含)之间的扫描仪的程序。该程序打印一个三角形的行。第一行只包含1的平方,并且它是右对齐的。第二行包含2的平方,后跟1的平方,并且右对齐。随后的行包括3,2和1的正方形,然后是4,3,2和1,等等,直到打印n行。

假设用户输入4,此程序将输出以下三角形到控制台

  1 
     4 1 
    9 4 1 
16 9 4 1 

对于完整的信用卡,每列应宽3个字符且值应右对齐。

到目前为止,我已经接近(不包括对于现在的用户输入,只是想至少也得在循环方面的把握,然后我会在那工作):

public class MyClass { 
    public static void main(String args[]) { 
     int rows = 4; // this is the value that the user will enter for # of rows 
     for (int i = 1; i <= rows; i++) { 
      for (int j = i; j >= 1; j--) { 
       System.out.print((j*j)+" "); 
      } 
      System.out.println(); 
     } 
    } 
} 

打印:

1 
4 1 
9 4 1 
16 9 4 1 
+0

是你的三角形反转您的问题/镜像?你是否尝试颠倒你的内部循环,以便你从1开始,递增到'i'而不是从'i'开始递减到1? –

+0

我不认为它是倒置的,只是没有足够的空白将上面的行推入到位。例如,底行是完美的,而不是倒置的。 – MC10

+1

由于这是一个家庭作业问题,我不认为我们应该给你答案。这里是关于创建一个右对齐的三角形的一些信息:https://stackoverflow.com/questions/11542113/java-asterisk-right-triangle – jwils

回答

1
int rows = 4; // this is the value that the user will enter for # of rows 

for (int i = rows; i > 0; i--) { 
    for (int j = rows; j > 0; j--) 
     System.out.print((rows - j + 1) < i ? " " : String.format("%3d", j * j)); 
    System.out.println(); 
} 
+0

谢谢先生。关于格式的信息,直到他们在阅读本文之前磕磕绊绊,你真诚地帮助我,谢谢。我不是要求所有我真正需要帮助的答案,当涉及到循环时。 – Daniel

2

你有两个问题。

首先,您需要在左侧填充打印的数字以产生3个字符空格中的数字。看看System.out.printf("%3d", ...)

其次,你需要打印出额外的空白栏。第一行有3个空白列,第二行有两个空白列,第三行有1个空白列,最后一行有空白列。听起来像另一个内部循环。

1

实际上您需要打印一个方形的表格,而不是三角形。这只是表格中的一些单元格会填充空格。

这意味着你的算法应该是这样的:

 
for row from 1 to n 
    for col from n to 1 /* Note: It's not from row to 1 */ 
     if col <= row print square(col) 
     else print pad 
+0

我真的不知道这是一张方桌,谢谢你的信息,我正在努力处理循环,总是有困难 – Daniel