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

Losowanie liczb z eliminacją

Object Storage Arubacloud
0 głosów
563 wizyt
pytanie zadane 17 kwietnia 2015 w Java przez lrk Początkujący (300 p.)

Witam, zastanawiam się w jaki sposób wylosować n par liczb w Javie w przedziale <-10,10> z założeniem, że pary te nie mogą się powtarzać. Przykład:

n losowanie: [1,2]

n+1 losowanie: [3,4]

n+2 losowanie: [1,2] <- Odrzucamy

Na chwilę obecną mój kod wygląda następująco:

Random rand = new Random();
int randX = (-10 + rand.nextInt(20));
int randY = (-10 + rand.nextInt(20));

 

3 odpowiedzi

0 głosów
odpowiedź 17 kwietnia 2015 przez Qhoros Mądrala (7,110 p.)
zrobić drugą tablicę, z liczbami które już zostały wpisane. przed wpisaniem liczb do właściwej tablicy porównujesz liczbę z tablicą zawierającą liczby wpisane wcześniej
komentarz 17 kwietnia 2015 przez lrk Początkujący (300 p.)
Zastanawiam się czy jest możliwość zrobienia tego bez używania tablic, ponieważ x i y są to współrzędne stworzonej przeze mnie klasy wektor, która mówi, w którym miejscu postać znajduje się na planszy.

Zależy mi na uniknięciu sytuacji, że dwie postacie "zrespią" się w jednym miejscu.

Spróbuje z tablicami, jeżeli nic innego nie przyjdzie mi do głowy.
0 głosów
odpowiedź 17 kwietnia 2015 przez jeremus Maniak (59,720 p.)
chyba musisz sprawdzac czy wśród już wylosowanych par nie ma pary, którą właśnie wylosowałeś.

sama funkcja losująca tego Ci nie zapewni.
0 głosów
odpowiedź 20 kwietnia 2015 przez Jaskrowicz Obywatel (1,210 p.)
int randXX;
	int randYY;

	public void utworzLosoweInne() {
		ArrayList<Integer> listaX = new ArrayList<Integer>();
		ArrayList<Integer> listaY = new ArrayList<Integer>();

		Random rand = new Random();
		for (int i = 0; i < 10; i++) {

			randXX = losuj(rand);
			randYY = losuj(rand);

			for (int j = 0; j < listaX.size(); j++) {
				sprawdz(listaX.get(j), listaY.get(j), randXX, randYY, rand);
			}

			listaX.add(randXX);
			listaY.add(randYY);

			System.out.print(randXX + ", ");
			System.out.println(randYY);
		}
	}

	private int losuj(Random rand) {
		return (-10 + rand.nextInt(20));
	}
	
	public void setRandXX(int randXX) {
		this.randXX = randXX;
	}

	public void setRandYY(int randYY) {
		this.randYY = randYY;
	}


	private void sprawdz(int mojX, int mojY, int randX, int randY, Random rand) {
		if (mojX == randX && mojY == randY) {
			System.out.println("Wszedlem przed" + randX + " " + randY);
			randX = losuj(rand);
			randY = losuj(rand);
			sprawdz(mojX, mojY, randX, randY, rand);
			setRandXX(randX);
			setRandYY(randY);
			System.out.println("Wszedlem po" + randX + " " + randY);
		}
		
	}

Możesz zrobić to na liście. Dodajesz swoje współrzędne do listy listaX i listaY. A następnie porównujesz. To co Cię najbardziej powinno interesować w tym kodzie to metoda sprawdz.

Pozdrawiam.

Podobne pytania

0 głosów
1 odpowiedź 1,009 wizyt
pytanie zadane 9 listopada 2016 w C i C++ przez Undisputed Gaduła (3,040 p.)
+1 głos
1 odpowiedź 323 wizyt
pytanie zadane 4 lutego 2021 w C i C++ przez NukaNuka56 Obywatel (1,080 p.)
0 głosów
1 odpowiedź 645 wizyt

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

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

...