Pętla For

kevalo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Witam ma ktoś jakiś pomysł na takie zadanko: Używając tylko dwóch pętli for i znaku "#" narysować dwa kwadraty jeden w drugim:
screenshot-20190129173555.png
############

########

# #

# #

# #

########

############

Delor
  • Rejestracja: dni
  • Ostatnio: dni
1

W C++ to wyglądałoby jakoś tak: https://wandbox.org/permlink/PdJUG4laZUxFeVz3

Black007
  • Rejestracja: dni
  • Ostatnio: dni
1

Napisz metodę, która przyjmie dwa parametry x i y i zwróci # lub pusty String
coś w ten deseń:

Kopiuj
  for(int i =0; i < szerokosc; i++){
    for(int j=0; j < wysokosc; j++){
        System.out.print(rysuj(i,j));
 }
}

Pamiętaj, nie używaj polskich nazw zmiennych - tutaj tylko przykład.

DE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1788
6

Ja do takich zadań podchodzę zazwyczaj tak:

  1. Co jest najłatwiej zrobić? W pierwszym i ostatnim wierszu mam same '#', czyli i == 0 || i == 6
Kopiuj
    for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 12; j++) {
            if (i == 0 || i == 6) {
                System.out.print('#');
            }
        }
        System.out.println();
    }
  1. Co dalej najłatwiej zrobić? Każda pierwsza i ostatnia kolumna też ma '#', czyli j == 0 || j == 11
Kopiuj
    for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 12; j++) {
            if (i == 0 || i == 6 || j == 0 || j == 11) {
                System.out.print('#');
            } else {
                System.out.print(' ');
            }
        }
        System.out.println();
    }
  1. Teraz zauważam, że w środku też mam taki śmieszny kwadrat, ale zawsze jest przerwa jednej komórki z przodu i z tyłu,
    czyli j != 1 && j != 10
Kopiuj
for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 12; j++) {
            if (i == 0 || i == 6 || j == 0 || j == 11 || (j != 1 && j != 10)) {
                System.out.print('#');
            } else {
                System.out.print(' ');
            }
        }
        System.out.println();
    }
  1. Teraz zauważam, że muszę jakoś wyeliminować '#' ze środka wew. kwadratu, czyli dokładam do tego warunku j != 1 && j != 10 warunek na i, taki że j != 1 && j != 10 && (i == 1 || i == 5):
Kopiuj
for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 12; j++) {
            if (i == 0 || i == 6 || j == 0 || j == 11 || (j != 1 && j != 10 && (i == 1 || i == 5))) {
                System.out.print('#');
            } else {
                System.out.print(' ');
            }
        }
        System.out.println();
    }
  1. Jedyne co nam zostało to domalować '#' po bokach wew. kwadratu, więc dokładamy kolejny warunek, czyli j == 2 || j == 9
Kopiuj
for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 12; j++) {
            if (i == 0 || i == 6 || j == 0 || j == 11 || (j != 1 && j != 10 && (i == 1 || i == 5)) || j == 2 || j == 9) {
                System.out.print('#');
            } else {
                System.out.print(' ');
            }
        }
        System.out.println();
    }
  1. Teraz patrzysz na tego potwora i zastanawiasz się czy te warunki może się gdzieś zazębiają, czy można je jakoś uprościć, ale to już zostawiam Tobie (spoiler https://4programmers.net/Pastebin/10538)
kevalo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Jesteście cudni! Biorę się za rozgryzienie tego i z tym będzie mi o wiele łatwiej to zrozumieć! Duży plus dla was! Dzięki
Dam znać jak uda mi się zrobić i jeśli coś będzie nie szło mam nadzieje, że pomożecie :)

tomanhez
  • Rejestracja: dni
  • Ostatnio: dni
0

Mi wyszło to tak, ale kolega Desu zrobił to ładniej.

Kopiuj
		int width = 12;
		int height = 7;

		for (int i = 0; i < height; i++) {
			for (int j = 0; j < width; j++) {
				if(i==0||i==6||j==0||j==11||j==2||j==9||(j!=1&&j!=10&&i!=2&&i!=3&&i!=4))
					System.out.print("#");
				else
					System.out.print(" ");
			}
			System.out.println();
		}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.