试图防止数字重复(Java/NetBeans)

试图防止数字重复(Java/NetBeans),java,netbeans,numbers,repeat,Java,Netbeans,Numbers,Repeat,我是一名学习Java(并在学校与NetBeans合作)的学生。 我们正在尝试做一个简单的宾果程序(宾果板上有15个数字,不会重复) for(int i=0;i

我是一名学习Java(并在学校与NetBeans合作)的学生。 我们正在尝试做一个简单的宾果程序(宾果板上有15个数字,不会重复)

for(int i=0;i<3;i++){
对于(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;
纸箱[i][j]=aux;
}
}
我不知道这段代码是否是一个好的解决方案(这段代码是我为选择15个不同的数字而编写的)。我试过了,它没有显示任何重复的数字,但也许这将是一个巧合。 以防万一,我们不允许使用“ArrayList”或一些高级函数,因为我们还没有在课堂上学习它们

任何帮助都将不胜感激

谢谢

编辑:

public static void jugar(int[]]carton){
/**
*Módulo que permite在变量中引入数据*
*/
扫描仪sc=新的扫描仪(System.in);
/**
*Módulo para utilizar la función“随机”*
*/
随机r=新随机();
int aux;
/**
*变量布尔值是一个压缩变量
*卡顿普雷维亚门特奥诺酒店*
*/
布尔seguir=true;
/**
*阿尔马塞纳岛的临时建筑阵列
*我不知道该怎么办*
*/
int[]sacados=新int[91];
/**
*安提拉西翁战役前的数字*
*/
int[]ganadores=新int[15];
/**
*ganadores指数阵列*
*/
int z=0;
/**
*变量为准确定性宾果*
*/
int contador=0;
/**可变参数序列号(序列号)**/
字符序列;
/**
*瓜达莫斯·洛斯努梅罗斯·加纳多雷斯(Guardamos los números ganadores)在不同的阵列中
*莫斯特拉洛斯加纳尔酒店*
*/
对于(int i=0;i<3;i++){
对于(int j=0;j<9;j=j+2){
ganadores[z]=纸箱[i][j];
z++;
}
}
while(contador!=15){
如果(seguir==true){
/**这是一个非常好的例子,不是一个很好的例子**/
做{
aux=r.nextInt(90)+1;
}while(sacados[aux]==aux);
对于(int i=0;i<3;i++){
对于(int j=0;j<9;j=j+2){
如果(aux==纸箱[i][j]){
纸箱[i][j]=-1;
contador++;
}
}
}
对于(int i=0;i<3;i++){
System.out.println(“”);
对于(int j=0;j<9;j++){
系统输出打印(纸箱[i][j]+“”);
}
}
System.out.println(“”);
System.out.println(“新努梅罗:+aux”);
System.out.println(“”);
System.out.println(“?Siguiente número(s/n)?:”);
seguirl=sc.next().charAt(0);
如果(seguirl==115){
seguir=真;
}否则{
seguir=false;
}
}否则{
System.out.println(“partidaabortada.”);
系统出口(0);
打破
}
}System.out.println(“宾果!!!”);
System.out.println(“Los números premiados de esta tanda han sido:”);
对于(int i=0;i<15;i++){
System.out.print(ganadores[i]+“”);
}
System.out.println(“”);
System.out.println(“Y todos los que han salido”);
对于(int i=0;i<90;i++){
if(sacados[i]!=0){
System.out.print(ganadores[i]+“”);
}           
}
System.out.println(“党的财政部”);
系统出口(0);
}

这是一种与宾果游戏本身一样有效的方法。

不使用任何内置函数

int[] balls = new int[90];
for(int i = 0; i < 90; i++) balls[i] = i + 1;
Random rand = new Random();
for(int i = 0; i < 15; i++) {
   // select an unused ball at random.
   // the number of balls which haven't been used is 90 - i.
   int select = rand.nextInt(90 - i);
   int number = balls[select];
   System.out.println(number);
   // remove the ball from the available array
   balls[select] = balls[90 - i];
}
int[]balls=newint[90];
对于(inti=0;i<90;i++)球[i]=i+1;
Random rand=新的Random();
对于(int i=0;i<15;i++){
//随机选择一个未使用的球。
//未使用的球数为90-i。
int select=rand.nextInt(90-i);
整数=球[选择];
系统输出打印项次(编号);
//从可用阵列中移除球
球[选择]=球[90-i];
}
这更有效,因为它从不选择尚未使用的球。当球所剩无几时,这会产生很大的不同


值得记住的是,这些数字并不是完全随机的,它们必须从您以前从未使用过的数字中选择。一种更简单的方法是生成每个可能的数字并将其洗牌。就像一副牌被洗牌,一个球容器被随机排列

e、 g

List allBalls=IntStream.range(1,91).boxed().collect(Collectors.toList());
收集。洗牌(所有球);

列表
Random
不是正确的方法。宾果游戏是如何运作的?你不会创建随机数——你只需从一个包含所有随机数的袋子中抽取一次随机数。因此,您需要一个包含所有可能的数字并从中随机抽取的数组。最简单的解决方案是创建一个数组
[1..15]
,然后执行一个。它应该可以工作,但您没有共享
sacados
的声明,如果您错误地创建了
int[90]
,您可能会遇到问题。另外,如果它是一个布尔数组可能会更好。我将数组int设置为[91],因为它没有问题。另外,我在主帖子中添加了宾果游戏的代码。顺便说一句,你确定你的宾果游戏板大小吗?标准的宾果游戏是5x5,中间有一个空的正方形,给你24个数字。但是OP说他不能使用类似于
ArrayList
或高级函数的任何东西。@Tchangla这不会阻止你做同样的事情,但是没有这些类。所有源都可以访问;)@Tchangla我假设您知道如何用1到90的值填充数组,并且只打印其中的15个。
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);

}
int[] balls = new int[90];
for(int i = 0; i < 90; i++) balls[i] = i + 1;
Random rand = new Random();
for(int i = 0; i < 15; i++) {
   // select an unused ball at random.
   // the number of balls which haven't been used is 90 - i.
   int select = rand.nextInt(90 - i);
   int number = balls[select];
   System.out.println(number);
   // remove the ball from the available array
   balls[select] = balls[90 - i];
}
List<Integer> allBalls = IntStream.range(1, 91).boxed().collect(Collectors.toList());
Collections.shuffle(allBalls);
List<Integer fifteenBalls = allBalls.subList(0, 15);