myślę odpowiedź Andre jest najbardziej zwięzły jeden, ale jeśli chcesz mieć konfigurowalny budynku domu można użyć następny (spróbuj zmienić wysokość/szerokość aby zobaczyć efekt):
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();
}
}
}
EDIT - odpowiedź na komentarz: Spróbuj uruchomić kolejny przykład i porównać dwa wyjścia:
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();
}
}
i
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();
}
}
Pierwszy z nich daje prawo nachylenie i drugi w lewo jeden. Wszystko pochodzi z geometrycznych właściwości punktów. W pierwszym przypadku wszystkie punkty będą miały większą wartość na osi x niż na osi y. W drugiej zarówno sumy x, jak i y nie przekroczą SIZE.
Możesz spróbować zmodyfikować wyrażenie boolowskie wewnątrz oświadczenia if()
i zobaczyć, co się stanie, ale zachęcam cię do kupienia kartki papieru i spróbowania gry z papierem i długopisem i zobacz, jakie właściwości mają pewne punkty. Daj mi znać, jeśli potrzebujesz więcej wyjaśnień.
Jakie są założenia twojego kodu? Czy poprosisz użytkownika o podanie wysokości i szerokości domu? Czy są one wymagane tylko po jednej stronie? A może już są strony? – Arci
@Michael Ponieważ istnieje wiele rozwiązań dla tego ... Daj nam znać swoje ograniczenia, takie jak liczba _for loops_ allowed lub inne –