Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - drkos

Páginas: [1]
1
Es que no hay una lógica, es arbitrario, pero tengo que necesariamente dejar lugares optativos donde pueda haber más de una opción de numeración, y ahí es donde entra la aleatoriedad que necesito, y esa misma aleatoriedad hace que el sistema se sobrecargue.

2
No te preocupes por la lógica porque no la hay, es arbitrario, yo decidí que números quiero que aparezcan y cuales no.
Acabo de intentar eliminando la recursividad y reemplazándola por un while y ya no me tira más el StackOverFlow, pero igual se queda pensando y termina por matar el proceso sin arrojar resultados. Evidentemente son tantas las combinaciones que pueden hacerse que es una operación que una computadora casera no puede hacer.

3
La matriz debería completarse así
1  1/2  3
2/3  2  1
1/2  1/3  3

Cuando divido con barras es porque puede entrar cualquiera de los 2 números.
Entonces, una matriz correcta sería
1  1  3
3  2  1
2  3  3
por ejemplo....

Pasa que luego le agrego la condición de los contadores y ahí es cuando se sobrecarga todo. El método recursivo lo tengo que usar si o si porque necesito generar la matriz hasta que ella cumpla con las condiciones que le quiero dar. Estimo que el código podría estructurarse de otra manera, pero aún no defino como debería ser. Si aplico una estructura repetitiva en lugar de la recursividad igualmente me va a tirar el error, no?

4
Código: [Seleccionar]
import java.util.Random;

public class PruebaMatriz{

public static int[][] matriz;
public int contador1=4,contador2=2,contador3=3;


public void CreacionMatriz(){
matriz=new int[3][3];
Random rand=new Random();
for (int k=0;k<matriz.length;k++){
for (int f=0;f<matriz.length;f++){
matriz[f][k]=rand.nextInt(3)+1;
if (matriz[f][k]==1) contador1--;
if (matriz[f][k]==2) contador2--;
if (matriz[f][k]==3) contador3--;
}
}
if (!correcta(matriz) || contador1<0 || contador2<0 || contador3<0){
CreacionMatriz();
} else {
imprimirMatriz(matriz);
System.out.println();
}
}

public boolean correcta(int[][] matriz){
if (matriz[0][0]!=1 || matriz[0][1]==1 || matriz[0][2]==3 || matriz[1][0]==3 || matriz[1][1]!=2 || matriz[1][2]==2 || matriz[2][0]!=3 || matriz[2][1]!=1 || matriz[2][2]!=3){
return false;
} else  return true;
}

public void imprimirMatriz(int[][] matriz){
for (int k=0;k<matriz.length;k++){
for (int f=0;f<matriz.length;f++){
System.out.print(matriz[f][k]+" ");
}
System.out.println();
}
}

public static void main(String []args){
PruebaMatriz form=new PruebaMatriz();
form.CreacionMatriz();
}
}

Basicamente necesito que la matriz se randomice de tal manera que los contadores nunca sean menores a 0. Son tantas las combinaciones posibles que se me traba todo jajaja.

5
Código: [Seleccionar]
public void CreacionMatriz(){
matriz=new int[3][3];
Random rand=new Random();
for (int k=0;k<matriz.length;k++){
for (int f=0;f<matriz.length;f++){
matriz[f][k]=rand.nextInt(3)+1;
}
}
if (!correcta(matriz)){
CreacionMatriz();
} else {
imprimirMatriz(matriz);
System.out.println();
}
}

public boolean correcta(int[][] matriz){
if (matriz[0][0]!=1 || matriz[0][1]==1 || matriz[0][2]==3 || matriz[1][0]==3 || matriz[1][1]!=2 || matriz[1][2]==2 || matriz[2][0]!=3 || matriz[2][1]!=1 || matriz[2][2]!=3){
return false;
} else  return true;
}

public void imprimirMatriz(int[][] matriz){
for (int k=0;k<matriz.length;k++){
for (int f=0;f<matriz.length;f++){
System.out.print(matriz[f][k]+" ");
}
System.out.println();
}
}

6
Una duda gente. No tengo mucha experiencia en JAVA y quería saber lo siguiente.
Logré lo que buscaba, hacer una matriz con ingresos aleatorios pero al mismo tiempo condicionados, pero al agregarle más condiciones la ejecución se trabó, arrojando obviamente el error de StackOverFlow, lo que es lógico por la memoria. Aclaro que las compilaciones las estoy haciendo por medio de compiladores online, así que no se si ese puede ser o no el problema del agotamiento de la memoria.

Existe alguna posibilidad de evitar este error?
Entiendo que se produce por la gran cantidad de operaciones que realiza el programa, pero si estoy tratando de generar algo aleatorio debe ser así.

Desde ya muchas gracias.
Saludos!

7
LO LOGRE!!!! La concha de la lora jajajaja, me había equivocado en el orden de la matriz, no puedo creer que fuese tan tarado, tenía bien el código.

Gracias igual!!!!

8
Buenas gente, recurro al foro porque estoy trabadísimo con un tema que necesito solucionar. Repasé todas las formas condicionales, inclusive la posibilidad de utilizar recursividad, y no hay manera de que logre realizar lo que necesito. Básicamente tengo que crear una matriz (el tamaño ahora no importa, aunque yo estoy probando con una chica de 3x3) e ingresar en sus campos datos de tipo int randomizados (preferentemente entre 1 y 3). La cuestión es que al mismo tiempo tengo que condicionar el ingreso, ya que necesito que en ciertos campos se ingresen si o si determinados números y en otros que no se ingrese alguno de ellos.

Alguien tiene alguna idea de como demonios podría implementar algo así? Probé con if, while, recursividad.....nada me permite rehacer la matriz hasta que se cumplan las condiciones que yo le paso dentro de las estructuras.

Cualquier ayuda será bienvenida.

Gracias!
Saludos!!!

Páginas: [1]

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".