| 
	
		|  Autor | Tema: Ayuda con numeros random en arrays  (Leído 4,659 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: 7Nú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,795 |  4 Junio 2007, 23:26 pm por Jareth
 |  
						|   |   | Random: Numeros Aleatorios .NET (C#, VB.NET, ASP)
 | MANULOMM | 3 | 13,883 |  15 Julio 2007, 14:20 pm por Meta
 |  
						|   |   | [Ayuda](Batch) 10 Numeros random del 1 al 10 Scripting
 | JoakoDS | 6 | 7,946 |  7 Febrero 2015, 13:35 pm por Eleкtro
 |  
						|   |   | Problema con numeros random en shell scripting Scripting
 | titopown | 0 | 2,055 |  10 Marzo 2016, 16:44 pm por titopown
 |  
						|   |   | numeros random en una matriz Programación C/C++
 | taku86 | 0 | 2,191 |  23 Abril 2018, 01:39 am por taku86
 |    |