2013-02-27 9 views
5
*  
    ***** 
********* 
********* 
**** *** 
**** *** 

tej pory mam tylko tenMoim zadaniem jest zrobić dom za pomocą pętli. Dom powinien wyglądać następująco

for (int i=1; i<10; i += 4) 
    { 

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

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

+0

@Michael Ponieważ istnieje wiele rozwiązań dla tego ... Daj nam znać swoje ograniczenia, takie jak liczba _for loops_ allowed lub inne –

Odpowiedz

0

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ń.

+0

Dziękuję bardzo. Czy mógłbyś wyjaśnić nieco ten kod i jak podejść do tego typu problemów? ponieważ idę napotkać wiele takich problemów w przyszłości i chcę się upewnić, że wiem, jak to zrobić. –

+0

Dodałem jeszcze dwie podstawowe próbki. –

0

Można użyć dwuwymiarową tablicę tak:

char matrice [][]= {{' ',' ',' ',' ' '*', ' ',' ',' ',' '}, 
     {' ',' ','*','*', '*', '*','*',' ',' '}}; 

(I tak dalej). Zasadniczo narysuj swój dom za pomocą indeksów tablicy.

Teraz możesz analizować każdą linię za pomocą System.out.print(), gdy musisz wydrukować znak, a System.out.println ("") między wierszami.

To będzie wyglądać następująco:

for(char[] line : house){ 

    for(char d : line){ 
     System.out.print(d); 
    } 

    System.out.println(""); 

} 

Należy spojrzeć na for-each statement documentation jeśli nie jesteś zaznajomiony z nim.

2

Najprostszym decyzja będzie:

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(); 
    }