*
*****
*********
*********
**** ***
**** ***
これまでのところ、私はこれしか持っていません
for (int i=1; i<10; i += 4)
{
for (int j=0; j<i; j++)
{
System.out.print("*");
}
System.out.println("");
}
}
}
最も簡単な決定は次のとおりです。
for (int y = 0; y < 6; y++) {
int shift = y < 2 ? 4 / (y + 1) : 0;
for (int x = 0; x < 9 - shift; x++) System.out.print(x >= shift && (y < 4 || (x < 4 || x > 5)) ? "*" : " ");
System.out.println();
}
次のような 2 次元配列を使用できます。
char matrice [][]= {{' ',' ',' ',' ' '*', ' ',' ',' ',' '},
{' ',' ','*','*', '*', '*','*',' ',' '}};
(等々)。基本的に、配列インデックスを使用して家を描きます。
文字を出力する必要がある場合は System.out.print() を使用して各行を解析し、各行の間に System.out.println("") を解析できるようになりました。
次のようになります。
for(char[] line : house){
for(char d : line){
System.out.print(d);
}
System.out.println("");
}
慣れていない場合は、for-each ステートメントのドキュメントを参照してください。
アンドレの答えが最も簡潔だと思いますが、構成可能な家の建物が必要な場合は、次のものを使用できます(効果を確認するには、高さ/幅を変更してみてください):
public class House {
public static void main(String[] args) {
final int HEIGHT = 6;
final int WIDTH = 9;
for (int i = 0; i < HEIGHT * 2; i += 2) {
for (int j = 0; j < WIDTH; j++) {// check for roof
if ((i + (i % 2) + (WIDTH) / 2) < j // right slope
|| (i + (i % 2) + j) < (WIDTH) / 2)// left slope
{
System.out.print(" ");
} else {
if ((i / 2 >= HEIGHT * 2 / 3) && (j >= WIDTH / 2) && j < WIDTH / 2 + HEIGHT / 3) {// check for door
System.out.print(" ");
} else {// solid then
System.out.print("*");
}
}
}
System.out.println();
}
}
}
編集- コメントへの回答: 次の 2 つの例を実行して、出力を比較してみてください:
public static void main(String[] args) {
final int SIZE = 9;
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
System.out.print(i < j ? "+" : "-");
}
System.out.println();
}
}
と
public static void main(String[] args) {
final int SIZE = 9;
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
System.out.print(i < SIZE - j - 1 ? "+" : "-");
}
System.out.println();
}
}
最初のものはあなたに右の傾きを与え、2番目のものは左のものを与えます。それはすべて、点の幾何学的特性に由来します。最初のケースでは、すべてのポイントが y 軸よりも x 軸の方が大きな値になります。2 番目に、x と y の両方の合計が SIZE を超えることはありません。
ステートメント内のブール式を変更しif()
て何が起こるかを確認することもできますが、紙を用意して、紙とペンで遊んで、特定のポイントが持つプロパティを確認することをお勧めします。さらに説明が必要な場合はお知らせください。