JavaScript - impedir que los números no se repitan

 
Vista:
sin imagen de perfil

impedir que los números no se repitan

Publicado por Abner (16 intervenciones) el 03/09/2017 02:09:48
Soy practicamente un principiante en esto. Estoy intentando crear un miniprograma que sortea 4 numeros en diferentes cuadros. Mi pequeño objetivo es que los numero no se repitan pero no lo he logrado. Intente hacer esto pero no funciono(MIRA CODIGO DE ABAJO PRIMERO PARA ENTENDER ESTO):

1
2
3
4
5
6
7
else if(segundavez){
	do{
		numero=Math.floor(Math.random()*(4-1+1))+1;
	} while(numero=espacio1.innerHTML);
		espacio2.innerHTML=""+numero+"";
		segundavez=false;terceravez=true;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<!DOCTYPE html>
<html>
<head>
	<title>sorteo prueba</title>
	<style>
 
	td {
		border: 3px solid #055;
	}
 
	</style>
	<script>
	var numero;
	var primeravez=true;
	var segundavez=false;
	var terceravez=false;
	var cuartavez=false;
 
	function comenzar(){
    var botonsor=document.getElementById('sortear');
    botonsor.addEventListener('click',sortea,false);
	};
 
	function sortea(){
	    if(primeravez){
            numero=Math.floor(Math.random()*(4-1+1))+1;
            espacio1.innerHTML=""+numero+"";
            primeravez=false;segundavez=true;
        } else if(segundavez){
            numero=Math.floor(Math.random()*(4-1+1))+1;
            espacio2.innerHTML=""+numero+"";
            segundavez=false;terceravez=true;
        } else if(terceravez){
            numero=Math.floor(Math.random()*(4-1+1))+1;
            espacio3.innerHTML=""+numero+"";
            terceravez=false;cuartavez=true;
        } else if(cuartavez){
            numero=Math.floor(Math.random()*(4-1+1))+1;
            espacio4.innerHTML=""+numero+"";
            cuartavez=false;
        }
    }
 
    window.addEventListener("load",comenzar,false);
	</script>
</head>
<body>
 
<table>
	<tr>
	    <td id="espacio1"></td>
	    <td id="espacio2"></td>
	    <td id="espacio3"></td>
	    <td id="espacio4"></td>
	</tr>
 
</table>
 
</body>
</html>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.162
Oro
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

impedir que los números no se repitan

Publicado por xve (2100 intervenciones) el 03/09/2017 09:11:46
Hola Abner, no entiendo muy bien como funciona tu código, y entiendo que es porque falta contenido, no?
No hay ningún id "sortear" en tu código, por lo que no funciona correctamente.

Si nos puedes mostrar el código completo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de ScriptShow
Val: 2.019
Plata
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

impedir que los números no se repitan

Publicado por ScriptShow (692 intervenciones) el 03/09/2017 10:19:18
Saludos Abner,

a ver si te sirve el ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<!DOCTYPE html>
 
<html>
<head>
<title>sorteo prueba</title>
<style>
td {
padding: 16px;
border: 2px solid #055;
font: normal 80px/1.0 sans-serif;
}
</style>
<script>
var numero;
var primeravez=true;
var segundavez=false;
var terceravez=false;
var cuartavez=false;
function sortea(){
if(primeravez){
var numero=Math.floor(Math.random()*(4-1+1))+1;
document.getElementById('espacio1').innerHTML=numero;
primeravez=false;segundavez=true;
} else if(segundavez){
var numero=Math.floor(Math.random()*(4-1+1))+1;
document.getElementById('espacio2').innerHTML=numero;
segundavez=false;terceravez=true;
} else if(terceravez){
var numero=Math.floor(Math.random()*(4-1+1))+1;
document.getElementById('espacio3').innerHTML=numero;
terceravez=false;cuartavez=true;
} else if(cuartavez){
var numero=Math.floor(Math.random()*(4-1+1))+1;
document.getElementById('espacio4').innerHTML=numero;
cuartavez=false;
}
}
</script>
</head>
<body>
<h2 align="center">S O R T E O</h2>
<table align="center">
<tr>
<td id="espacio1">?</td>
<td id="espacio2">?</td>
<td id="espacio3">?</td>
<td id="espacio4">?</td>
</tr>
</table>
<p align="center"><button onclick="sortea()">S o r t e o</button></p>
</body>
</html>

Modifica, adapta la parte que lo requiera. Experimenta...

Espero sea útil.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

impedir que los números no se repitan

Publicado por Julio Cesar (16 intervenciones) el 05/09/2017 02:37:20
lo del id sortear fue porque borre parte del codigo accidentalmente y no me fije. por cierto me fije que formule mal la pregunta pero la idea se entiende. Muchas gracias por tu ayuda. Ademas quería saber si hay alguna forma mas simple de hacer lo de cuartavez, tercera vez, etc.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 553
Bronce
Ha aumentado 1 puesto en JavaScript (en relación al último mes)
Gráfica de JavaScript

impedir que los números no se repitan

Publicado por kip (107 intervenciones) el 05/09/2017 04:36:24
Hola.

Lo mejor en estos casos es usar alguna iteracion, podria ser algo asi muy simple:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function generarNums() {
    var numero;
    var nums = [];
    var destino = document.querySelectorAll('.main span'); //Este sera el conjunto de elementos destino
    while (nums.length < 4) {
        numero = Math.floor(Math.random() * (4 - 1 + 1)) + 1;
        if (nums.indexOf(numero) < 0) { //Solo si no existe en el array, se ingresara el valor !
            nums.push(numero);
        }
    }
    for (var i = 0, s = nums.length; i < s; i++) {
        destino[i].innerHTML = nums[i]; //Colocamos los valores generados
    }
}

Luego podria hacerse algo sencillo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>repl.it</title>
    <style>
        .main {
            width: 50%;
            margin: auto;
            text-align: center;
        }
        .main span {
            display: inline-block;
            font-size: 3em;
            background: #000;
            color: #38EA00;
            padding: 0 16px;
            border: 1px dotted #fff;
        }
        .main button {
            display: inline-block;
            margin-top: 10px;
            border: transparent;
            background: #B3B3B3;
            padding: 10px;
            cursor: pointer;
        }
    </style>
  </head>
  <body>
    <div class="main">
        <span>-</span>
        <span>-</span>
        <span>-</span>
        <span>-</span>
        <br>
        <button>Generar</button>
    </div>
    <script>
        function generarNums() {
            var numero;
            var nums = [];
            var destino = document.querySelectorAll('.main span');
            while (nums.length < 4) {
                numero = Math.floor(Math.random()*(4 - 1 + 1)) + 1;
                if (nums.indexOf(numero) < 0) {
                    nums.push(numero);
                }
            }
            for (var i = 0, s = nums.length; i < s; i++) {
                destino[i].innerHTML = nums[i];
            }
        }
        document.querySelector('.main button')
            .addEventListener('click', generarNums);
    </script>
  </body>
</html>

Y de esa forma tendras 4 numeros diferentes...

Screenshot_569
Screenshot_570
Screenshot_571

Es esto lo que quieres ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

impedir que los números no se repitan

Publicado por Julio Cesar (16 intervenciones) el 08/09/2017 23:07:52
si eso era, muchisimas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

impedir que los números no se repitan

Publicado por Julio Cesar (16 intervenciones) el 12/09/2017 01:42:38
de verdad, muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar