2013-09-24 104 views
-2

我试图得出这样的形式与Java: 对于n = 4:绘制黄金三角形式的Java

 ******* 
     *** *** 
     ** ** 
     *  * 

但所有我能得到的是:

对于n = 4:

 **** **** 
    *** *** 
    ** ** 
    * * 

下面是该代码:

public class test1 { 
    public static void main(String[] args) { 
     int n; 
     System.out.print("Entrer n:"); 
     Scanner x = new Scanner(System.in); 
     n=x.nextInt(); 
     for(int i=0; i<n; i++) {  
      System.out.print("*"); 

      for(int j=0; j<n-1-i; j++) { 
       System.out.print("*"); 
      } 

      for(int k=0; k<n/2; k++) { 
       System.out.print(" "); 
      } 

      for(int j=0; j<n-i; j++) { 
       System.out.print("*"); 
      } 

      System.out.println(""); 
     } 
    } 
} 

有人可以帮助我,谢谢。

+2

你能提供通用规范?究竟是什么?你对n = 1,2,3,5或6有什么期望? – Cruncher

+0

n是三角形中对角线的数量 –

回答

3

如果我正确理解本说明书中,这应该这样做:

int n = 4; 
    for(int i = 0; i < n ; i++) 
    { 
     for(int j = 0 ; j < n-i ; j++) 
     { 
      System.out.print("*"); 
     } 
     for(int j = 0 ; j < i*2-1 ; j++) 
     { 
      System.out.print(" "); 
     } 
     for(int j = i==0?1:0 ; j < n-i ; j++) 
     { 
      System.out.print("*"); 
     } 
     System.out.print("\n"); 
    } 

n = 1时:

* 

N = 4:

******* 
*** *** 
** ** 
*  * 

N = 6:

*********** 
***** ***** 
**** **** 
***  *** 
**  ** 
*   * 
+0

谢谢,这正是我所期待的,但是你能解释一下你在最后一个循环中做了什么,再次感谢。 –

+0

我假设你的意思是'int j = i == 0?1:0'这部分。这是一个三元陈述。 'i == 0?1:0'表示“如果'i'为0,则表达式为1,否则为0”。这一点,是因为在第一行,我们有'2(n-1)-1'*',而其他行有'2(n-1)'*'。这是在第一行中跳过明星的一种方式。你也可以把它放在第一个循环。 – Cruncher

+0

非常感谢。 –

0

你在循环的问题是在这部分

for(int k=0; k<n/2; k++) { 
    System.out.print(" "); 
} 

解决方案:

for (int k = 0; k < i*2; k++) { // solved 
    System.out.print(" "); 
} 

你需要的空间等于你行的索引数量,所以你的行索引是在“我“可变

在0线,你需要0位

在1号线需要2空间

在第2行需要4个空格

+1

你有试过吗?第2行需要多少空间?它不是2. – Cruncher

+0

@Cruncher代码现在是正确的,它是乘法而不是除法:D –