-1
    *
  *****
*********
*********
*********
*********

ここに私のコードがありますが、動作していません

final int WIDTH = 6;
final int HEIGHT = 9;
int i = 0;
int j = 0;

while (i < HEIGHT * 2 && j < WIDTH) {

  if ((i + (i % 2) + (WIDTH) / 2) < j // right slope
        || (i + (i % 2) + j) < (WIDTH) / 2)// left slope
  {
    System.out.print(" ");
  } 
  else {// solid then
    System.out.print("*");

  }
}

System.out.println();
i+=2;
j++;
4

2 に答える 2

1

インクリメンタiとjは現在、whileループの閉じ括弧(})の外側にあります。インクリメントされることはないため、while条件がヒットすることはありません。無限ループを引き起こしている一般的な間違い。

また、if条件の+(i%2)の部分は、偶数%2が0であるため、毎回iを2ずつインクリメントするため、無意味です。

私の提案は、コードを手作業でトレースし、おそらく小さい値から始めることですが、これは何が問題になっているのかを理解するのに役立ちます。

于 2013-02-27T18:32:45.033 に答える
0

コメントで述べたように、while()ループを無限にしたくない場合は、ループ内の値をインクリメントする必要があります。だから、おそらくそれらを一番下に追加してください!

while (i < HEIGHT) {

  if (i == 0) {
    System.out.print("    *");
  } else if (i == 1) {
    System.out.print("  *****");
  } else {// solid then
    System.out.print("**********");
  } System.out.println("");
  i++;
}

編集:チェック条件をより簡単にするために変更しました。この 1 つの形状のみを印刷する必要がある場合は問題ありませんが、さまざまなサイズを作成する場合は、アルゴリズムを改善する必要があります。

于 2013-02-27T18:36:28.760 に答える