Я студент, изучающий Java (и работаю с NetBeans в школе). Мы пытаемся сделать простую программу Bingo (доски лото с 15 номерами в них, которые не повторяются)Попытка предотвратить повторение чисел (Java/NetBeans)
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 9; j = j + 2) {
aux = r.nextInt(90) + 1;
while (sacados[aux] == aux) {
aux = r.nextInt(90) + 1;
}
sacados[aux] = aux;
carton[i][j] = aux;
}
}
Я не знаю, если этот код является хорошим решением (этот небольшой код, что я написали для выбора 15 разных номеров). Я пробовал, и он не показывал мне никаких повторных цифр, но, возможно, это будет совпадение. На всякий случай, мы не можем использовать «ArrayList» или некоторые расширенные функции, потому что мы еще не изучили их в классе.
Любая помощь будет оценена по достоинству.
Спасибо!
Edit:
public static void jugar(int[][] carton) {
/**
* Módulo que permite introducir datos en variables *
*/
Scanner sc = new Scanner(System.in);
/**
* Módulo para utilizar la función "random" *
*/
Random r = new Random();
int aux;
/**
* Variable boolean que ayuda a comprobar que el número está en el
* cartón previamente o no *
*/
boolean seguir = true;
/**
* Array que almacena los números del cartón temporalmente para
* comprobar que no se repiten *
*/
int[] sacados = new int[91];
/**
* Array en la que almacenamos los numeros premiados con antelación *
*/
int[] ganadores = new int[15];
/**
* Indice para array de ganadores *
*/
int z = 0;
/**
* Variable que hace de contador para determinar bingo *
*/
int contador = 0;
/** Variable para seguir (s/n) **/
char seguirl;
/**
* Guardamos los números ganadores en una array diferente para
* mostrarlos al ganar *
*/
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 9; j = j + 2) {
ganadores[z] = carton[i][j];
z++;
}
}
while (contador != 15) {
if (seguir==true){
/** Si el número se repite, no seguirá y volverá a sacar otro número distinto **/
do {
aux = r.nextInt(90) + 1;
} while (sacados[aux] == aux);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 9; j = j + 2) {
if (aux == carton[i][j]) {
carton[i][j] = -1;
contador++;
}
}
}
for (int i = 0; i < 3; i++) {
System.out.println("");
for (int j = 0; j < 9; j++) {
System.out.print(carton[i][j] + " ");
}
}
System.out.println("");
System.out.println("Nuevo número: " + aux);
System.out.println("");
System.out.println("¿Siguiente número (s/n)?:");
seguirl = sc.next().charAt(0);
if (seguirl == 115){
seguir = true;
}else{
seguir = false;
}
}else{
System.out.println("Partida abortada.");
System.exit(0);
break;
}
}System.out.println("BINGO!!!");
System.out.println("Los números premiados de esta tanda han sido:");
for (int i = 0; i < 15; i++) {
System.out.print(ganadores[i]+" ");
}
System.out.println("");
System.out.println("Y todos los que han salido");
for (int i = 0; i < 90; i++) {
if (sacados[i]!=0){
System.out.print(ganadores[i]+" ");
}
}
System.out.println("Fin de partida.");
System.exit(0);
}
Вот метод, который работает, как и сам лото.
«Случайный» - неправильный подход. Как работает бинго? Вы не создаете случайные числа - вы вытаскиваете случайные числа ** один раз ** из сумки, содержащей все цифры. Поэтому вам нужен массив, содержащий все возможные числа, и случайным образом извлекать из него. Самое простое решение - создать массив '[1..15]', затем выполнить [Fisher-Yates shuffle] (http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle). –
Он должен работать, но вы не разделили объявление 'sacados', если вы сделали его' int [90] 'по ошибке вы можете столкнуться с проблемами. Кроме того, было бы лучше, если бы это был массив булевых. – RealSkeptic
Я сделал массив int из [91] для отсутствия проблем. Кроме того, я добавил к основному сообщению код, который делает вещи бинго. – piniacat