Foros del Web » Programación para mayores de 30 ;) » Java »

problemas con math.random [BUSCAMINAS]

Estas en el tema de problemas con math.random [BUSCAMINAS] en el foro de Java en Foros del Web. Gente necesito me ayuden con este problema, tuve que hacer un buscaminas para la facultad, ya me estuvieron ayudando con esto en temas anteriores. Digamos ...
  #1 (permalink)  
Antiguo 03/12/2012, 20:47
 
Fecha de Ingreso: diciembre-2012
Mensajes: 4
Antigüedad: 11 años, 5 meses
Puntos: 0
problemas con math.random [BUSCAMINAS]

Gente necesito me ayuden con este problema, tuve que hacer un buscaminas para la facultad, ya me estuvieron ayudando con esto en temas anteriores.
Digamos que ya lo tengo, el unico problema es el random que hize para Poner las minas, me pone siempre las minas en la posicion 1,1 (0,0 en la matriz), y siempre una mina !


Desde ya!! MUCHISIMAS GRACIAS

Les dejo el modulo donde tengo el problema, porque no me entra el codigo, gracias :D

Código:
public static void PonerMinas (int matriz[][]){
        int fila;
        int columna;
        int j=0;
        int min;
        int fl = matriz.length;
        int cl = matriz[0].length;
        do{
        System.out.println("¿Cuantas minas desea poner?");
        min = TecladoIn.readLineInt();
        if(min > fl * cl){
            System.out.println("Usted ha ingresado mas minas que celdas"
                    + " en el tablero, ingrese menos minas");
        }
        else{ }
        }
        while (min > fl * cl);
       
       
        while (j < min) {
            fila = (int) Math.random() *(fl-1);
            columna = (int) Math.random() * (cl-1);
            matriz [fila][columna] = 1000;
            j++;
            }
}
  #2 (permalink)  
Antiguo 03/12/2012, 20:48
 
Fecha de Ingreso: diciembre-2012
Mensajes: 4
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: problemas con math.random [BUSCAMINAS]

Cita:
package buscaminas;

import Utiles.TecladoIn;


// @author AGUSTIN

public class Buscaminas {

public static void PonerMinas (int matriz[][]){
int fila;
int columna;
int j=0;
int min;
int fl = matriz.length;
int cl = matriz[0].length;
do{
System.out.println("¿Cuantas minas desea poner?");
min = TecladoIn.readLineInt();
if(min > fl * cl){
System.out.println("Usted ha ingresado mas minas que celdas"
+ " en el tablero, ingrese menos minas");
}
else{ }
}
while (min > fl * cl);


while (j < min) {
fila = (int) Math.random() *(fl-1);
columna = (int) Math.random() * (cl-1);
System.out.println(fila + " " + columna);
matriz [fila][columna] = 1000;
j++;
}
}




public static int MinIzq(int mat[][], int f, int c){
int min;
int b = mat[f][c - 1];
if (b == 1000){
min = 1;
}
else{
min = 0;
}
return min;
}


public static int MinDer(int mat[][], int f, int c){
int min;
int b = mat[f][c + 1];
if (b == 1000){
min = 1;
}
else{
min = 0;
}
return min;
}

public static int MinAb(int mat[][], int f, int c){
int min;
int b = mat[f + 1][c];
if (b == 1000){
min = 1;
}
else{
min = 0;
}
return min;
}

public static int MinArr(int mat[][], int f, int c){
int min;
int b = mat[f - 1][c];
if (b == 1000){
min = 1;
}
else{
min = 0;
}
return min;
}

public static int DSizq(int mat[][], int f, int c){
int min;
int b = mat[f - 1][c - 1];
if (b == 1000){
min = 1;
}
else{
min = 0;
}
return min;
}
public static int DSder(int mat[][], int f, int c){
int min;
int b = mat[f - 1][c + 1];
if (b == 1000){
min = 1;
}
else{
min = 0;
}
return min;
}

public static int DIizq(int mat[][], int f, int c){
int min;
int b = mat[f + 1][c - 1];
if (b == 1000){
min = 1;
}
else{
min = 0;
}
return min;
}
public static int DIder(int mat[][], int f, int c){
int min;
int b = mat[f + 1][c + 1];
if (b == 1000){
min = 1;
}
else{
min = 0;
}
return min;
}


public static void MostrarTablero (int[][] tablero){

for (int w=0; w < tablero.length; w++){
String tab = "";
for(int q=0; q < tablero[0].length; q++){

switch(tablero[w][q]) {
case 1000 : tab = tab + "[m] "; break;
case 2000: tab = tab + "[x] "; break;
case 0: tab = tab + "[ ]"; break;
default : tab = tab + "[" + tablero[w][q] + "] ";
break;
}
}
System.out.println(tab);
}
}



public static void main(String[] args) {

int filas;
int columnas;
int buscaminas[][];
System.out.println("Ingrese cantidad de filas que va a poseer"
+ " el tablero (4-10)");
filas = TecladoIn.readLineInt();
if (filas < 4 || filas > 10){
System.out.println("Datos fuera del rango permitido. "
+ "Filas por defecto");
filas = 4;
}
System.out.println("Ingrese cantidad de columnas que va a poseer"
+ " el tablero (4-10)");
columnas = TecladoIn.readLineInt();
if (columnas <4 || columnas > 10){
System.out.println("Datos fuera del rango permitido. "
+ "Columnas por defecto");
columnas = 4;
}
System.out.println("El tablero sera de " + filas + "x" + columnas);
buscaminas = new int[filas][columnas];
System.out.println("Ahora procederemos a cargar las minas: ");
PonerMinas(buscaminas);





for(int i=0; i < filas; i++){
for (int j=0; j < columnas; j++){

int b = 0;
int f = i;
int c = j;
if(j != 0){
b = b + MinIzq(buscaminas, f, c); }
else{}
if(j != buscaminas[0].length - 1){
b = b + MinDer(buscaminas, f, c); }
else{}
if(i != buscaminas.length - 1){
b = b + MinAb(buscaminas, f, c); }
else{}
if(i != 0){
b = b + MinArr(buscaminas, f, c); }
else{}
if(i != 0 && j != 0){
b = b + DSizq(buscaminas, f, c); }
else {}
if (i != 0 && j != buscaminas[0].length - 1){
b = b + DSder(buscaminas, f, c); }
else{}
if(i != buscaminas.length - 1 && j != 0) {
b = b + DIizq(buscaminas, f, c); }
else{}
if(i != buscaminas.length - 1 && j != buscaminas[0].length - 1) {
b = b + DIder(buscaminas, f, c); }
else {}
if(buscaminas [i][j] != 1000){
buscaminas[i][j] = b; }
else { }



}
}
System.out.println("////////////////////////////////////");
System.out.println("////////////////////////////////////");
System.out.println("//////////////TABLERO///////////////");
System.out.println("////////////////////////////////////");
System.out.println("////////////////////////////////////");
System.out.println("m = mina////////////////////////////");
System.out.println("////////////////////////////////////");
System.out.println("x = no hay minas lindantes//////////");
System.out.println("////////////////////////////////////");
System.out.println("El num que poseen las celdas es ////");
System.out.println("// la cantidad de minas lidiantes //");
System.out.println("////////////con ellas///////////////");
System.out.println("////////////////////////////////////");
System.out.println("////////////////////////////////////");
System.out.println("////////Ahora comenzaremos//////////");
System.out.println("///////////con el juego/////////////");




int[][] tablero;
tablero = new int [buscaminas.length][buscaminas[0].length];
for (int i=0; i < buscaminas.length; i++){
String lane = "";
for (int j=0; j < buscaminas[0].length; j++){
lane = lane + "[ ]";
}
System.out.println(lane);
}

int fi;
int col;
boolean game = true;
int fl = buscaminas.length;
int cl = buscaminas[0].length;
while (game == true){
System.out.println("Seleccione una celda");
do{
System.out.println("FILA: ");
fi = TecladoIn.readLineInt();
if (fi > fl){
System.out.println("Esa fila no pertenece al rango"
+ " establecido"); }
else { }
} while(fi > fl);
do{
System.out.println("COLUMNA: ");
col = TecladoIn.readLineInt();
if (col > cl){
System.out.println("Esa columna no pertenece al rango"
+ " establecido"); }
else { }
} while(col > cl);
int f = fi - 1;
int c = col - 1;

if(buscaminas[f][c] == 1000){
tablero[f][c] = buscaminas[f][c];
System.out.println("En esa celda habia una mina, "
+ "usted ha perdido");
game = false;
MostrarTablero(tablero); }

else if(buscaminas[f][c] == 0){
System.out.println("BIEN!");
System.out.println(buscaminas[f][c]);
tablero[f][c] = 2000;
MostrarTablero(tablero); }

else{
System.out.println ("BIEN!");
tablero[f][c] = buscaminas [f][c];
MostrarTablero (tablero);
}
}
}
}
  #3 (permalink)  
Antiguo 03/12/2012, 20:50
 
Fecha de Ingreso: diciembre-2012
Mensajes: 4
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: problemas con math.random [BUSCAMINAS]

Uff, aprete enter sin querer, bueno
Les deje, en el comentario anterior, el codigo completo.

GRACIAS
  #4 (permalink)  
Antiguo 04/12/2012, 05:01
Avatar de hschimpf  
Fecha de Ingreso: junio-2009
Ubicación: in the World Wide Web
Mensajes: 140
Antigüedad: 14 años, 10 meses
Puntos: 17
Respuesta: problemas con math.random [BUSCAMINAS]

Cita:
Iniciado por shacktly Ver Mensaje
Uff, aprete enter sin querer, bueno
Les deje, en el comentario anterior, el codigo completo.

GRACIAS
Tienes una opcion para editar el mensaje

Suerte!
__________________
Hermann D. Schimpf
Visita mis repositorios de:
Clases Java: http://code.google.com/p/javaclassesrepository/
Clases PHP: http://code.google.com/p/phpclassesrepository/
  #5 (permalink)  
Antiguo 04/12/2012, 05:04
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: problemas con math.random [BUSCAMINAS]

Cita:
(int) Math.random() *(fl-1)
Tal y cómo lo tienes definido, la conversión a int se hace sobre el resultado del random (entre 0 y 1) no sobre la operación completa, así que el 99'99...% de las veces estás multiplicando 0 por el número de filas.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #6 (permalink)  
Antiguo 04/12/2012, 05:10
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: problemas con math.random [BUSCAMINAS]

Te pone una mina porque al ponerla no estás comprobando si donde la pones ya hay una mina. Debes comprobarlo porque si no puede que pongas menos minas de las que quieres poner.

Por otra parte debes aplicar el cast del int a toda la expresión, no sólo al Math.Random ya que si no te devolverá siempre un cero, que es lo que te pasa. Tú tienes esto
Código Java:
Ver original
  1. fila = (int) Math.random() *(fl-1);

Y deberías tener esto

Código Java:
Ver original
  1. fila = (int) (Math.random() *(fl-1));

Etiquetas: random
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:08.