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

Zmiana w kodzie - dodanie while Java

Object Storage Arubacloud
0 głosów
270 wizyt
pytanie zadane 27 kwietnia 2019 w Java przez matrix1395 Nowicjusz (190 p.)

Hej, mam kłopot z dodanie pętli while do kodu poniżej która powtarzała by mi daną metodę dopóki cała tablica nie będzie zapełniona liczbą "3". Wprowadzony przeze mnie while niewiele daje. Proszę o pomoc

public static void testowy() {

        int min = -1;
        int max = 1;
        int range = max - min + 1;

        while (tab[i][j] == 3) {
            przesunMyszKolumna = (int) (Math.random() * range) + min;
            przesunMyszWiersz = (int) (Math.random() * range) + min;
            przesunMyszKolumnaJezeliZeroY = (int) (Math.random() * 2);
            przesunMyszKolumnaJezeliZeroX = (int) (Math.random() - 2);


            for (i = 0; i < tab.length; i++) {
                for (j = 0; j < tab[i].length; j++) {
                    if (tab[i][j] == 2) {
                        tab[polozenieMyszyKolumna][polozenieMyszyWiersz] = tabMysz[0];
                        tab[i][j] = 3;

                    }
                    System.out.print(tab[i][j] + "\t");

                }
                System.out.println();
            }
            if (polozenieMyszyKolumna > 0 & polozenieMyszyWiersz < tab.length) {
                polozenieMyszyKolumna = polozenieMyszyKolumna + przesunMyszKolumna;
                polozenieMyszyWiersz = polozenieMyszyWiersz + przesunMyszWiersz;
                tab[polozenieMyszyKolumna][polozenieMyszyWiersz] = 2;
            } else {
                if (polozenieMyszyKolumna == 0) {
                    polozenieMyszyKolumna = polozenieMyszyKolumna + przesunMyszKolumnaJezeliZeroY;
                    tab[polozenieMyszyKolumna][polozenieMyszyWiersz] = 2;
                } else {
                    polozenieMyszyKolumna = polozenieMyszyWiersz + przesunMyszKolumnaJezeliZeroX;
                    tab[polozenieMyszyKolumna][polozenieMyszyWiersz] = 2;
                }
            }
        }
    }

 

1 odpowiedź

+1 głos
odpowiedź 27 kwietnia 2019 przez Avodaya Obywatel (1,200 p.)
wybrane 29 kwietnia 2019 przez matrix1395
 
Najlepsza

Warunek który napisałeś w while sprawdza tylko pierwszy i ostatni element Twojej tablicy.
Zauważ, że gdy rozpoczyna się pętla zmienne i i j mają wartość początkową, następnie w bloku pętli while mielisz sobie, mielisz, i w tym mieleniu obie zmienne przyjmują maksymalne wartości równe rozmiarowi tablicy. Po czym kończy się blok while i sprawdzany jest element ostatni w warunku while.Rozumiesz?

Ja bym to zrobił tak:

1. Dodał zmienną boolean jako warunek do pętli while.

2. Pod koniec pętli ustawiał warunek na true i sprawdzał każdy element tablicy czy jest równy 3.

3. Jeśli choć jeden nie jest równy 3 zmieniamy flagę na false i powtarzamy pętlę.

Poniżej zmodyfikowany kod, nie sprawdzałem w kompilatorze ale ideę powinieneś złapać ;)

 

public static void testowy() {
 
        int min = -1;
        int max = 1;
        int range = max - min + 1;
		boolean done = false;
		
        while (done == false) {
            przesunMyszKolumna = (int) (Math.random() * range) + min;
            przesunMyszWiersz = (int) (Math.random() * range) + min;
            przesunMyszKolumnaJezeliZeroY = (int) (Math.random() * 2);
            przesunMyszKolumnaJezeliZeroX = (int) (Math.random() - 2);
 
 
            for (i = 0; i < tab.length; i++) {
                for (j = 0; j < tab[i].length; j++) {
                    if (tab[i][j] == 2) {
                        tab[polozenieMyszyKolumna][polozenieMyszyWiersz] = tabMysz[0];
                        tab[i][j] = 3;
 
                    }
                    System.out.print(tab[i][j] + "\t");
 
                }
                System.out.println();
            }
            if (polozenieMyszyKolumna > 0 & polozenieMyszyWiersz < tab.length) {
                polozenieMyszyKolumna = polozenieMyszyKolumna + przesunMyszKolumna;
                polozenieMyszyWiersz = polozenieMyszyWiersz + przesunMyszWiersz;
                tab[polozenieMyszyKolumna][polozenieMyszyWiersz] = 2;
            } else {
                if (polozenieMyszyKolumna == 0) {
                    polozenieMyszyKolumna = polozenieMyszyKolumna + przesunMyszKolumnaJezeliZeroY;
                    tab[polozenieMyszyKolumna][polozenieMyszyWiersz] = 2;
                } else {
                    polozenieMyszyKolumna = polozenieMyszyWiersz + przesunMyszKolumnaJezeliZeroX;
                    tab[polozenieMyszyKolumna][polozenieMyszyWiersz] = 2;
                }
            }
		done = true;	
		for (int x;x<tab.length;x++) {
			for(int y;y<tab[x].length;y++) {
				if (tab[x][y] != 3) {
					done = false;
					break;
				}
			}
		}		
    }

 

komentarz 29 kwietnia 2019 przez matrix1395 Nowicjusz (190 p.)
Może w dowolnym kierunku byle nie wyjechała za tablice
komentarz 29 kwietnia 2019 przez matrix1395 Nowicjusz (190 p.)
Nie do końca o to mi chodzi... teraz mysz chodzi sobie po przekątnych ok ale nie nadpisuje tych wartości w tablicy. Dziękuję za pomoc w każdym bądź razie :)
komentarz 29 kwietnia 2019 przez Avodaya Obywatel (1,200 p.)

Eureka:

public static void wariant1() {
		int przesunX = 100, przesunY = 100;
		
		boolean done = false;
		
		while (done == false) {
			tab[polozenieMyszyKolumna][polozenieMyszyWiersz] = 3;

			
			
		do {
				przesunX = (int) (Math.random()*2) * (int) Math.pow(-1,(int) (Math.random() * 100.0 + 1.0));
				przesunY = (int) (Math.random()*2) * (int) Math.pow(-1,(int) (Math.random() * 100.0 + 1.0));
		} while (polozenieMyszyKolumna+przesunX >= 23 || polozenieMyszyWiersz+przesunY >= 23 || polozenieMyszyKolumna+przesunX < 0 || polozenieMyszyWiersz+przesunY < 0 || (przesunX == 0 && przesunY == 0) );
			polozenieMyszyKolumna = polozenieMyszyKolumna + przesunX;
			polozenieMyszyWiersz = polozenieMyszyWiersz + przesunY;

			done = true;
			for (i = 0; i < tab.length; i++) {
				for (j = 0; j < tab[i].length; j++) {
					if (tab[i][j] != 3) {
						done = false;
						break;
					}
				}
			}
			tab[polozenieMyszyKolumna][polozenieMyszyWiersz] = 2;
        				
		wyswietl_Tablice();	
		}
    }

 

komentarz 29 kwietnia 2019 przez matrix1395 Nowicjusz (190 p.)
Jesteś wielki ! :) ogromnie mi pomogłeś dziękuję
komentarz 29 kwietnia 2019 przez Avodaya Obywatel (1,200 p.)

Do usług :) 

int przesunX = 100, przesunY = 100;

Można zamienić na zwykłą deklarację bez inicjacji:

int przesunX, przesunY;

 

 

A mogłem zostać programistą blush

Podobne pytania

0 głosów
3 odpowiedzi 208 wizyt
pytanie zadane 2 grudnia 2020 w Java przez nexyz Nowicjusz (210 p.)
0 głosów
1 odpowiedź 339 wizyt
pytanie zadane 20 października 2018 w Java przez mn130496 Gaduła (3,530 p.)
0 głosów
1 odpowiedź 267 wizyt
pytanie zadane 19 lipca 2018 w Java przez Qubenz Użytkownik (570 p.)

92,579 zapytań

141,431 odpowiedzi

319,657 komentarzy

61,963 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!

...