2017-06-22 38 views
0

所以我有这样的代码:四象限三角

public class Triangle 
{ 
    static int num; 

    public static void main (String[] args) 
    { 
     num = Integer.parseInt(args[0]); 
     Q1(); 
     Q2(); 
     Q3(); 
     Q4(); 
    } 

    public static void Q1() 
    { 
     for(int i=0;i<=num;i++) 
     { 
      for(int j=0;j<i;j++) 
      { 
       System.out.print("*"); 
      } 
      System.out.println(); 
     } 

    } 

    public static void Q2() 
    { 
     for(int i=0;i<=num;i++) 
     { 
      for(int j=num;j>0;j--) 
      { 
       if (i<j) 
        System.out.print(" "); 
       else 
        System.out.print("*"); 
      } 
      System.out.println(); 
     } 

    } 

    public static void Q3() 
    { 
     for (int i=0;i<num;i++) 
     { 
      for (int j=0;j<i;j++) 
      {  
       System.out.print(" "); 
      } 

      for (int j=i;j<num;j++) 
      {  
       System.out.print("*"); 
      } 
      System.out.println(); 
     } 

    } 

    public static void Q4() 
    { 
     for(int i=0;i<=num;i++) 
     { 
      for(int j=num;j>i;j--) 
      { 
       System.out.print("*"); 
      } 
      System.out.println(); 
     } 

    } 

} 

,并将其输出是这样的:

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

我们需要做的是,我们需要每个方法安排其相应的象限,例如当只有Q1被调用时,它需要在笛卡尔平面内的象限1内显示星号。

所以,如果Q1,Q2,Q3和Q4是所谓的,它应该是这个样子:

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

我怎么会去安排每个方法各自的象限?

+0

提示:除非你前面的问题提供反馈,帮助可能是有点慢来 –

+3

你象限方法不能像你想象的简单配对使用(如QI和QII),因为每一个做带有数据的'println()'。我可能会以某种方式重构你的代码。也许每个象限都有一个'getLine()'方法。然后你可以迭代一对象限中的所有行并生成你想要的输出。 –

+0

我不太明白你的意思是迭代一对象限中的所有行 – salmonade

回答

1

这里有一个例子。

注意:最重要的是缓冲区。您必须能够使用缓冲区打印所有象限或它们的任何组合。

注2:您必须尊重Java约定!

public static void main(String[] args) { 
    int num = Math.max(1,Integer.parseInt(args[0])); 

    char[][] buffer = new char[num * 2][num * 2]; // The Buffer is needed 
    writeQ1(buffer, num); 
    writeQ2(buffer, num); 
    writeQ3(buffer, num); 
    writeQ4(buffer, num); 
    printBuffer(buffer); 
} 

// With a buffer, this method is needed 
public static void printBuffer(char[][] buffer) { 
    for (char[] cs : buffer) { 
     for (char c : cs) { 
      if (c == 0) { 
       System.out.print(' '); 
      } else { 
       System.out.print(c); 
      } 
     } 
     System.out.println(); 
    } 
} 

// The next methods can be refactored! 
public static void writeQ1(char[][] buffer, int num) { 
    for (int i = 0; i <= num; i++) { 
     for (int j = 0; j < i; j++) { 
      buffer[i][j + num] = '*'; 
     } 
    } 
} 

public static void writeQ2(char[][] buffer, int num) { 
    for (int i = 0; i <= num; i++) { 
     for (int j = 0; j < i; j++) { 
      buffer[i][j + (num - i)] = '*'; 
     } 
    } 
} 

public static void writeQ3(char[][] buffer, int num) { 
    for (int i = 0; i <= num; i++) { 
     for (int j = 0; j < i; j++) { 
      buffer[2*num - i][j + (num - i)] = '*'; 
     } 
    } 
} 

public static void writeQ4(char[][] buffer, int num) { 
    for (int i = 0; i <= num; i++) { 
     for (int j = 0; j < i; j++) { 
      buffer[2*num - i][j + num] = '*'; 
     } 
    } 
}