• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rysowanie planszy złożonej z gwiazdek

Object Storage Arubacloud
0 głosów
568 wizyt
pytanie zadane 11 sierpnia 2016 w Java przez itcloud Gaduła (3,380 p.)
edycja 11 sierpnia 2016 przez itcloud

Obejrzałem tutorial od Pana Banasa: https://www.youtube.com/watch?v=_pUz-GJcdRU&list=PLE7E8B7F4856C9B19&index=8

Postanowiłem na początek zrobić coś podobnego, ale samemu - bo niestety nie wszystko jest dla mnie jasne, chociaż wydawało mi się, że podstawy dot. tworzenia tabel znam :/

Chcę na początek uzyskać planszę 12 x 13 złożoną z gwiazdek. Może się uda to narysować:

************
************
************
************
************
************
************
************
************
************
************
************
************

Mam taki kod i w związku z nim pytania, bo bardzo chciałbym to wszystko zrozumieć:

import java.util.*;   //np. Arrays

public class plansza {

	static char[][] battleBoard = new char[12][13];
	
	public static void buildBattleBoard(){
		
		for (char[] row : battleBoard){
			
			Arrays.fill(row, '*');
		}
		
		
	}

	
public static void main(String[] args){
	
	System.out.println(battleBoard.length);
	
	
	buildBattleBoard();
	for(int i=0; i<battleBoard[0].length-1; i++){
			System.out.println();
		for (int j=0; j<battleBoard.length-1; j++){
			
			System.out.print(battleBoard[i][j]);
			
		}// for b
	}// for a
	
	
	
	
	
 }//end main

 

1. W linii 5 rozumiem, że przygotowuję miejsce w pamięci na tablicę 2-wymiarową składającą się z pojedynczych znaków. Jak do tego ma się polecenie .length ?   Jak okreslić ile tablica ma wierszy a ile kolumn w pętli?

battleBoard[0].length   - zwraca mi liczbę kolumn

battleBoard.length   - zwraca mi liczbę wierszy

Dlaczego tak się dzieje? Dla mnie intuicyjnie byłoby tak, że jak wypisuję to pierwsze polecenie to są kolumny (bo pokazuje mi jakby długość tego pierwszego wiersza), ale w drugim przypadku to bardziej napisałbym battleBoard.length[0][0] .. ?

2. kompletnie nie rozumiem tej pętli:

for (char[] row : battleBoard)

Intuicyjnie chciałem napisać   char row   (po prostu, a nie jako tym razem jednowymiarowa tablica, chociaż tworzyłem na początku 2-wymiarową

3. EDIT: planszę mi rysuje już ok :)

komentarz 11 sierpnia 2016 przez jpacanowski VIP (101,940 p.)

Mam taki kod i w związku z nim pytania, bo bardzo chciałbym to wszystko zrozumieć

Aha, a cóż to za pytania?

1
komentarz 11 sierpnia 2016 przez jpacanowski VIP (101,940 p.)
Minus nie ode mnie.
komentarz 11 sierpnia 2016 przez itcloud Gaduła (3,380 p.)
Spoko.

Poprawiłem nieco kod, rysuje gwiazdki jak chciałem ale pytania nadal aktualne. Chetnie dowiedziałbym się, dlaczego tak się to pisze a nie inaczej.

2 odpowiedzi

+1 głos
odpowiedź 11 sierpnia 2016 przez itcloud Gaduła (3,380 p.)

To też działa, tzn. w ten sposób też mogę wylistować wszystkie elementy tablicy:

	for(char[] row: battleBoard){
		
		for(char wartosc : row){
			
			System.out.print(wartosc);
		}
		System.out.println("");
	}

Tylko mam problem z wyobrażeniem sobie tego, że przy tablicy 2-wymiarowej najpierw tak jakby pokazuję pojedyncze wiersze z tablicami 1-wymiarowymi (myślałem, że po prostu w wierszu są wartości od razu, jedna po drugiej, a nie jakieś tablice jednowymiarowe). Czy tu chodzi o to, że można to sobie wytłumaczyć z takiego zapisu:

int[][] tablica2w = {

  {1,2,3,4},   //pojedyncza tablica jednowymiarowa

 {5,6,7,8} //pojedyncza tablica jednowymiarowa

}  //w tej jednej dużej tablicy

 

No i nadal nie potrafię zastosować tego:

        for (char[] row : battleBoard){

              Arrays.fill(row, '*');

        }

 

tzn wiem co oznacza każda linijka, nie musicie mi tego tłumaczyć. Na początku przeczesuję tablicę w ten sposób, że biorę kolejno każdą tablicę jednowymiarową (każdy wiersz) i w tym wierszu wpisuję wartości w każdym elemencie tej tablicy jednowymiarowej?        

komentarz 11 sierpnia 2016 przez Ehlert Ekspert (212,670 p.)

Dlaczego dodałeś odpowiedź do własnego pytania? angry

komentarz 11 sierpnia 2016 przez itcloud Gaduła (3,380 p.)
edycja 11 sierpnia 2016 przez itcloud
Bo od 3h nie otrzymałem odpowiedzi i drążę samemu cały czas temat. I nie wiem, czy to co napisałem w końcu jest tą prawidłową odpowiedzią. Chciałem zaoszczędzić czas aby samemu nie szukać przez kolejne godziny, bo naprawdę tego nie rozumiałem. Zdaję sobie sprawę, że równie dobrze mógłbym do wszystkiego dojść sam i nie zadawać tutaj w ogóle pytań. Dlatego nawet jak ktoś na złość minusuje wątek, gdzie widać że próbuje to czego nie wiem zrozumieć, że wyrażam się jasno, to mam to głęboko w powarzaniu :)
komentarz 11 sierpnia 2016 przez Ehlert Ekspert (212,670 p.)

Bo od 3h nie otrzymałem odpowiedzi i drążę samemu cały czas temat. 

Jesteś tym zniesmaczony? Urażony?  

1
komentarz 11 sierpnia 2016 przez itcloud Gaduła (3,380 p.)

>Jesteś tym zniesmaczony? Urażony?

Bo chciałem pokazać innym na przyszłość, jak wygląda moja analiza problemu ??

O co tu chodzi, trafiają się często "psychologowie" widzę, którzy oceniają od razu drugą osobę. Projektują swoje potencjalne zachowania na innych. Nie wiem, czemu to ma służyć.

+1 głos
odpowiedź 11 sierpnia 2016 przez Ehlert Ekspert (212,670 p.)

Nie wiem co to za kurs ale idzie całkowicie w złą stronę. Siła Javy leży w tym że jest wieloplatformowa, oraz ma wysoko rozwiniętą obiektowość, mechanizmy abstrakcji. 

  1. Nie przygotowujesz żadnego miejsca. Deklarujesz zmienną która będzie wskazywać na referencję typu 
    char[][]. W tej samej linijce poprzez operator new rezerwujesz miejsce na tablicę o danym rozmiarze. 
    length nie jest poleceniem tylko atrybutem tablicy. Polecenia to masz w szkole. 
    battleBoard.length[0][0]

    Takie odwołanie byłoby prawidłowe gdyby length byłoby tablicą. 

    int[][] matrix = new int[5][];
    matrix //←to jest odwołanie do tablicy dwuwymiarowej
    matrix[0] = new int[10];
    matrix[0] //← to jest odwołanie do tablicy jednowymiarowej
    //siedzi ona w zerowym indeksie macierza na który wskazuje zmienna matrix.
    
  2. Zadeklarowałeś zmienną która wskazuje na referencję tablicy dwuwymiarowej. Ta pętla interuje sobie po kolei. Podstawia do zmiennej row wskazanie na kolejne wiersze z macierza.  

 

komentarz 11 sierpnia 2016 przez itcloud Gaduła (3,380 p.)

"Deklarujesz zmienną która będzie wskazywać na referencję typu char[][]. "

No tak, ale przecież w tej linii 5 po znaku równości również jest od razu przygotowywanie miejsca w pamięci, a przed znakiem równości jest określenie zmiennej REFERENCYJNEJ, która wskazuje na obszar w pamięci gdzie są wartości typu char trzymane w postaci struktury tablicowej?

To chyba dopiero mi wyjaśnia o co chodzi:

	int[][] tablica = new int[5][];
	
    tablica[0] = new int[5];
    
    tablica[0][0] = 1;
    tablica[0][1] = 2;
    
    System.out.println(Arrays.deepToString(tablica));
	

 

Podobne pytania

0 głosów
1 odpowiedź 835 wizyt
0 głosów
3 odpowiedzi 370 wizyt
pytanie zadane 10 listopada 2018 w Java przez Tom_Ja Dyskutant (7,970 p.)

92,556 zapytań

141,404 odpowiedzi

319,563 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...