Powtarzanie sie liczb w losowaniu

0

Witam!

Napisałem program (Lotto) losujący 6 liczb. Program zapisałem w pętlach aby był elastyczny.. Bo co jak nagle ktos umysli sb ze w Lotku ma byc losowane 7 liczb ? :>
zmieniam tylko jedną zmienną z 6 na 7 i Done! . Jednak mam problem gdyz losowane liczby czasem sie powatrzają np.

1 1 2 46 3 12

co moge zrobić aby program sprawdzal to czy liczby sie powtarzają i np. powtarzal losowanie?

import java.io.*;
import java.util.Scanner;
import java.util.Collections;
import java.util.Arrays;

public class Lotto {

	public static void main(String[] args) {
		final int ilosc_losowanych_liczb = 6; // losowanie 6 liczb
		System.out.print("Podaj ile chcesz zakładów: ");
		Scanner scl = new Scanner(System. in );
		int ile = scl.nextInt();

		if (ile >= 1 && ile <= 8) {
			for (int l = 1; l <= ile; l++) {
				System.out.print(l + "/ ");
				int[] nr = new int[ilosc_losowanych_liczb];
				// losowanie liczb
				for (int i = 0; i <= (ilosc_losowanych_liczb - 1); i++) {
					nr[i] = (int)((47 * Math.random()) + 1);
				}
				// sortowanie i wyświetlenie
				Arrays.sort(nr);
				for (int i = 0; i <= (ilosc_losowanych_liczb - 1); i++) {
					System.out.printf(" %2d ", nr[i]);
				}
				System.out.printf("\n");
			}
		} else {
			System.out.println("Nieprawidłowa ilość zakładów");
		}
	}
}

Ps. to jest duga wersja programu. W pierwszej nic nie zapetlałem co dawalo mozliwosc sprawdzenia powtarzania sie liczb do-while'm i wyglądało to tak:

http://4programmers.net/Pastebin/4467

1

Wygeneruj sekwencję 49 liczb(czy tam ile jest w wersji lotka którą robisz), przemieszaj i weź pierwsze x liczb.

0

Inny sposób, to jest utworzyć ArrayList z wylosowanymi liczbami. Na początku jest pusta, a po każdym losowaniu sprawdza się, czy dana liczba występuje la liście, jeżeli tak, to losowanie nie jest ważne, a jeżeli nie, to losowanie jest ważne i liczbę dopisuje się do listy. Kolejne liczby losuje się tyle razy, aż lista będzie zawierać 6 elementów.

2

Rozwinę odpowiedź @some_ONE'a:

int zIluLiczb = 49;
int ileLiczb = 6;
ArrayList<Integer> liczby = new ArrayList<Integer>();
for(int i=1;i<=zIluLiczb;i++){
    liczby.add(i);
}
//to co wyżej wykonujemy raz
liczby.shuffle();
for(int i=0;i<ileLiczb;i++){
    System.out.print(liczby.get(i)+" ");
}
0

bogdans,

		ArrayList < Integer > liczby = new ArrayList < Integer > ();

w tym momencie pojawia się error cannot find symbol

2

Sorry, zamień

liczby.shuffle();
//na
Collections.shuffle(liczby);
0

Dziękuje wszystkim za pomoc program doprowadzony do końca ! Pełen wynik wspolnej pracy mozna zobaczyć tutaj! => http://4programmers.net/Pastebin/4468

0

Właśnie zauważyłem że jest jeszcze jedna kwestia. Wg treści zadania liczby wypisane na ekranie powinny być posortowane. Jest to mozliwe do zrobienia w tym kodzie?

Jedyne co mi przychodzi do głowy to uzycie funkcji

Arrays.sort( ??? ); 

.. tylko odnośnie do czego i w którym miejscu?

0

Problem rozwiązany, po prostu liczby przypisalem do tablicy i posortowałem.
wkleję ostateczną wersje programu:

import java.io.*;
import java.util.*;

public class Lotto {

	public static void main(String[] args) {
		final int zIluLiczb = 49;
		final int ileLiczb = 6;

		System.out.print("Podaj ile razy chcesz wylosować 6 liczb (od 1 do 8): ");

		// Wybór ile razy mają byc wylosowane liczby
		Scanner scl = new Scanner(System. in );
		int ileRazy = scl.nextInt();

		// Sprawdzenie czy użytkownik wybrał ilość losów z wcześniej ustalonego przedziału
		if (ileRazy >= 1 && ileRazy <= 8) {
			System.out.print("ZAKŁADY DUZEGO LOTKA\n=====================");

			// Wylosowanie liczb tyle razy ile wczesniej podał uzytkownik
			for (int l = 1; l <= ileRazy; l++) {
				System.out.print("\n" + l + "/ ");

				List < Integer > liczby = new ArrayList < Integer > (); // Utworzenie wektoru

				// Pętla która uzupełnia kolekcję wszystkimi numerami piłeczek od 1 do 49
				for (int i = 1; i <= zIluLiczb; i++) {
					liczby.add(i); // dodajemy do wektora kolejną zmienną o wartości i
				}

				Collections.shuffle(liczby); // Permutacja zbioru liczb

				// Wybranie i przypisanie liczb do tablicy
				int[] liczba = new int[ileLiczb]; //utworzenie tablicy
				for (int i = 0; i < ileLiczb; i++) {
					liczba[i] = liczby.get(i); //przypisanie do niej elementów
				}
				Arrays.sort(liczba); //posortowanie
				//wypisanie liczb
				for (int i = 0; i < ileLiczb; i++) {
					System.out.printf(" %2d", liczba[i]);
				}

			}
		} else {
			System.out.println("Nieprawidłowa ilość zakładów");
		}

	}
}
0

niedawno robilem tutorial w ktorym bylo podobne zadanie, wklejam kod - nie moj, zeby nie bylo.

public static int[] losuje(int k, int n){
		
		Random rd = new Random();
		ArrayList<Integer> pula = new ArrayList<Integer>(n);
		int[] wylosowane = new int[k];
		
		for(int i=1;i<=n;i++)
			pula.add(i);
		
		int counter = n;
		for(int j=0;j<k;j++){
			int index = rd.nextInt(counter); 
			wylosowane[j] = pula.get(index); 
			pula.remove(index);; 
			counter--; 
		}
			
		return wylosowane;
	}

1 użytkowników online, w tym zalogowanych: 0, gości: 1