Autor
|
Tema: Ayuda con numeros random en arrays (Leído 4,254 veces)
|
Edu
Desconectado
Mensajes: 1.082
Ex XXX-ZERO-XXX
|
Espero que entiendan el codigo, es decir.. lo q quiero hacer, y si me lo pueden corregir, y si tienen q cambiar muchas cosas para q quede mejor no importa pero lo q quiero es generar un numero al azar desde 0 hasta 7 y ponerlo en el array[0] solo si es distinto a 0 y si no se repite con los otros indices del array, parece simple pero me ha costado y ya pregunte una vez aca pero no entendi bien y ahora quiero ver si solo pueden corregirme los errores porfavor using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace juego_de_cartas { class Program { Random rnd = new Random(unchecked((int)DateTime.Now.Ticks)); public int[] pozo1 = new int[7]; public int valor = 0; public int ant = 0; static void Main(string[] args) {
Repartir(); }
public static bool IsValid(int bvalor, int bant) { if (bvalor == 0) {
return false; } else { if (bvalor == bant) { return false; } else { return true; } } }
public static void Repartir() {
for (int i = 0; i < pozo1.Length; i++) { first: valor = (int)(rnd.NextDouble() * 8D); ant = valor;
if (IsValid(valor, ant)) { pozo1[i] = valor; Console.WriteLine("Array de indice {0}, valor: {1}", i, pozo1[i]); } else { goto first; } }
Console.ReadKey();
}
}
}
|
|
|
En línea
|
|
|
|
Siuto
Ex-Staff
Desconectado
Mensajes: 1.587
Que puedo decir??
|
El metodo IsValid() lo podes reducir a una linea: return bvalor != 0 && bvalor != bant
No lo corri, solo lo pense en el aire, pero no uses etiquetas con GOTO, no es una forma feliz de programar. public static void Repartir() { for (int i = 0; i < this.pozo1.Length; i++) { this.pozo1[i] = this.GetValidValue(i); Console.WriteLine("Array de indice {0}, valor: {1}", i, pozo1[i]); } Console.ReadKey(); } public int GetValidValue(int i) { int ant; if (i == 0) ant = 0; else ant = this.pozo1[i-1]; // no me acuerdo si es valido esta asignacion dejo una alternativa abajo while (!IsValid(valor = (int)(this.rnd.NextDouble() * 8D), ant)); return valor; } // alternativa do { valor = (int)(this.rnd.NextDouble() * 8D); } while (!IsValid(valor, ant));
|
|
« Última modificación: 6 Diciembre 2010, 21:07 pm por Siuto »
|
En línea
|
|
|
|
Edu
Desconectado
Mensajes: 1.082
Ex XXX-ZERO-XXX
|
return bvalor != 0 && bvalor != bant
Crees que no lo intente? xD Quiero ver otras soluciones porfavor y q funcione como quiero q funcione please esque usando la logica es facil pero da error en muchas cosas cuando quiero hacerlo :S edit: Lo arregle para q quede mejor con lo q comento Siuto y quedo asi: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace juego_de_cartas { class Program { static Random rnd = new Random (unchecked((int)DateTime .Now.Ticks)); public static int[] pozo1 = new int[7]; public static int valor = 0; public int ant = 0; static void Main(string[] args) { Repartir(); } public static bool IsValid(int bvalor, int bant) { return ((bvalor != 0) && (bvalor != bant)); } public static void Repartir() { for (int i = 0; i < pozo1.Length; i++) { pozo1[i] = GetValidValue(i); Console.WriteLine("Array de indice {0}, valor: {1}", i, pozo1[i]); } Console.ReadKey(); } public static int GetValidValue(int i) { int ant; if (i == 0) ant = 0; else ant = pozo1[i-1]; // no me acuerdo si es valido esta asignacion dejo una alternativa abajo while (!IsValid(valor = (int)(rnd.NextDouble() * 8D), ant)); return valor; } } }
Pero sigue sin andar, exactamente hace lo mismo q hacia yo es decir, el 0 no aparece mas pero lo de if bvalor != bant es como si no le hace caso xD
|
|
« Última modificación: 6 Diciembre 2010, 22:37 pm por XXX-ZERO-XXX »
|
En línea
|
|
|
|
Khronos14
Desconectado
Mensajes: 443
A lie is a lie
|
Por lo que entendí tienes un array de tamaño 7 y quieres almacenar en ese array números desde el 0 al 7, sin que se repitan. El algoritmo creo que es bastante sencillo. Prueba a hacer algo como esto: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { private static int[] Lista = new int[7]; public static bool NumExists(int Num, int MaxPos) { bool resultado = false; for (int i = 0; i < MaxPos; i++) if (Lista[i] == Num) { resultado = true; break; } return resultado; } public static void RandomNumbers() { Random Rnd = new Random (unchecked((int)DateTime .Now.Ticks)); for (int i = 0; i < Lista.Length; i++) do{ Lista[i] = Rnd.Next(8); }while(NumExists(Lista[i], i) == true); Rnd = null; } static void Main(string[] args) { RandomNumbers(); for (int i = 0; i < Lista.Length; i++) Console.WriteLine("Número: {0}", Lista[i]); Console.ReadLine(); } } }
La salida de la consola sería algo como esto: Número: 7 Número: 5 Número: 0 Número: 1 Número: 6 Número: 4 Número: 2
Saludos.
|
|
« Última modificación: 6 Diciembre 2010, 22:49 pm por Khronos14 »
|
En línea
|
|
|
|
Edu
Desconectado
Mensajes: 1.082
Ex XXX-ZERO-XXX
|
y sin el 0 tamb xD porfavor.. esq creo q al combinarlos es q da el error :S
|
|
|
En línea
|
|
|
|
Khronos14
Desconectado
Mensajes: 443
A lie is a lie
|
y sin el 0 tamb xD porfavor.. esq creo q al combinarlos es q da el error :S
Es tan simple que con cambiar está línea ya lo haces: Lista[i] = Rnd.Next(8);
por esta: Lista[i] = Rnd.Next(1, 8);
Y como la lista tiene tamaño 7 y le pides valores entre 1 y 7, siempre te va a mostrar desde 1 hasta 7 pero con los números desordenados. Saludos.
|
|
|
En línea
|
|
|
|
Edu
Desconectado
Mensajes: 1.082
Ex XXX-ZERO-XXX
|
Muchisimas gracias la verdad, ahora sigo solo ya q tengo q hacer eso pero con 2 arrays mas xD pero el 2do empieza por 8 hasta 15 y el 3ero de 15 a 21
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
AYUDA!! Sobre un programa de numeros Random y Timer ??
Programación Visual Basic
|
Laura_12
|
1
|
1,655
|
4 Junio 2007, 23:26 pm
por Jareth
|
|
|
Random: Numeros Aleatorios
.NET (C#, VB.NET, ASP)
|
MANULOMM
|
3
|
13,483
|
15 Julio 2007, 14:20 pm
por Meta
|
|
|
[Ayuda](Batch) 10 Numeros random del 1 al 10
Scripting
|
JoakoDS
|
6
|
7,203
|
7 Febrero 2015, 13:35 pm
por Eleкtro
|
|
|
Problema con numeros random en shell scripting
Scripting
|
titopown
|
0
|
1,753
|
10 Marzo 2016, 16:44 pm
por titopown
|
|
|
numeros random en una matriz
Programación C/C++
|
taku86
|
0
|
1,877
|
23 Abril 2018, 01:39 am
por taku86
|
|