2

ネストされた for ループ ステートメントを使用して、" " の三角形を描画します。最後の行の" " の数は、ユーザーから入力されます (有効な範囲: 5 から 21)。出力は次のようになります。 サンプル出力:

星の数/最後の行 (5-21)? 25 範囲外です。再入場: 7

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

これまでのところ、これは私がコードのために持っているものです。三角形にする方法がわかりません。どんな助けでも素晴らしいでしょう。

import java.util.Scanner;

public class Lab7_2{
  public static void main(String[] args){
    //declarations
    Scanner input= new Scanner(System.in);
    int how_many;//num of triangles
    int m; //constant
    int c;//constant
    int rows;//row

    //prompt for input
    System.out.println("Drawing triangles program.");
    System.out.println("==============================");
    System.out.println("How many triangles?");
    how_many=input.nextInt();
    System.out.println("How many stars/last row (5-21)?");
    rows=input.nextInt();
    while(rows<=5||rows>=21){
      System.out.println("Out of range. Reenter: ");
      rows=input.nextInt();
    }
    for(m=1;m<=rows;m++){
      for(c=1;c<=m;c++){
        System.out.println("*");
        System.out.println();
    }
  }
}
}
4

5 に答える 5

2

線を中央に配置するには、次を使用します。

private static String center(String line, int length) {
    StringBuilder newLine = new StringBuilder();
    for (int i = 0; i < (line.length() - length)/2; i++)
        newLine.append(" ");
    }
    newLine.append(line);
    return newLine.toString();
}

また、

System.out.println();

各文字列の後に改行を出力しますが、これは意図したものではありません。


固定コード:

private void printTriangle(int base) {
    StringBuilder currentStars = new StringBuilder();
    for (int currLine = 1; currLine < base; currLine++) {
        currentStars.append("*"); // Don't create a new String, just append a "*" to the old line.
        //if (currLine % 2 == 1)
        //    System.out.println(center(currentStars.toString(), base)); // For centered triangle
        System.out.println(currentStars.toString()); // For non-centered triangle
    }
}
于 2013-10-09T13:25:12.360 に答える
1

println ステートメントを使用して星を印刷しています。そのため、それぞれが独自の行に表示されます。

System.out.println("*");

代わりにprintステートメントが必要です

System.out.print("*");

さらに、スター印刷ループの内側には、余分なSystem.out.println();空白行を入れる必要があります。これは、内側の for ループの外側にある必要があります。

for(m=1;m<=rows;m++){
  for(c=1;c<=m;c++){
    System.out.println("*"); <-- println always starts a new line, should be print
    System.out.println(); <--- shouldn't be within inner loop
  }
  <--- println() should be here to advance to the next line of stars
}
于 2013-10-09T13:23:51.903 に答える
0

これが最も効率的で簡単な方法だと思います。より大きなピラミッドで遊ぶときに print/println メソッドを何百回も呼び出す必要がありません。

String out;
for (m = 0; m < rows; m++) {
    out = "";
    for (c = 0; c < m; c++) {
        out+="*";
        System.out.println(out);
    }
}

基本的に文字列は "" で、次の行に出力するたびに "*" を追加します。

于 2013-10-09T14:35:30.467 に答える
0

forループを次のように修正するだけです

for (m = 1; m <= rows; m++) {
    for (c = 1; c <= m; c++) {
        // first print the * on the same line
        System.out.print("*");
    }
    // then move to the next line
    System.out.println();
}

アスタリスクを同じ行に出力するには、(出力ストリームにSystem.out.print()新しい行を書き込まない)を使用する必要があることに注意してください。\n*

于 2013-10-09T13:23:48.810 に答える