Jump to content

Llenar una matriz java


Recommended Posts

Hola comunidad ChileComparte!!

 

les quisiera pedir porfavor si me pueden ayudar con este ejercicio:

 

Se trata sobre la obtencion de informacion de los recorridos licitados del plan transantiago, es un Sistema de informacion de recorridos, se pide implementar un programa java con los siguientes metodos:

 

a) Llenar una matriz de 10x10 con 0 y 1, en forma aleatoria (solo en las posiciones faltantes)

 

b)Metodo PASA(línea,sector): que recibe como parametros una linea y un sector determinado y devuelve un valor booleano TRUE si pasa y un valor FALSE si no pasa la Línea.

 

c)Funcion NUM_LINEAS(sector): que dado un sector devuelve la cantidad de lineas que pasan por este

 

d)Funcion PASAN_POR_AMBOS ( sector_1, sector_2,lineas): que dado dos sectores, devuelva en el arreglo de enteros lineas, los numeros de los recorridos que pasan por ambos sectores

 

e) Crear la clase test que instancie los objetos requeridos y despliegue la informacion solicitada

 

Para tal efecto se cuenta con la siguiente estructura: una matriz RECORRIDOS,de enteros cuyas filas seran la numeracion de las lineas licitadas (100-900), y las columnas los sectores en que se han fraccionado la Capital (500). el contenido de cada celda variará de acuerdo a si pasa o no una linea por el sector asociado, teniendo un 1 para cuando pase y un 0 cuando no...

 

MATRIZ EJEMPLO

 

510 520 530 540 550 560 570 580 590

100 0 0 0 0 1 1 1 0 1

200 0 1 1 0 1 1 1 1 0

300 1 0 1 1 0 0 0 1 1

400 1 0 0 0 1 0 0 1 0

500 1 1 0 1 0 0 1 0 1

600 1 1 1 0 1 1 1 0 0

700 0 1 0 0 0 1 0 1 0

800 0 0 0 1 1 0 0 0 1

900 1 0 1 1 0 0 0 1 1

 

 

GRACIAS DE ANTEMANO!

Link to comment
Share on other sites

:mmm: Dos cosas:

  • Esto tendría que ir en Aplicaciones de Escritorio
  • Se supone que tienes que postear lo que llevas hecho

 

De todas formas, para llenar un vector con 0 y 1 aleatorios puedes hacerlo con alguna de estas formas:

 

  Random rnd = new Random();
  int[] vector = new int[50];

  // Método 1
  for(i = 0;i < vector.length;i++)
     vector[i] = rnd.nextInt(2);

  // Método 2
  for(i = 0;i < vector.length;i++)
     vector[i] = rnd.nextInt() % 2;

  // Método 3
  for(i = 0;i < vector.length;i++)
     if(rnd.nextInt(30) < 15)
        vector[i] = 1;
     else
        vector[i] = 0;

 

o también puedes hacerlo usando directamente Math.random (no requiere crear un objecto):

 

  int[] vector = new int[50];

  for(i = 0;i < vector.length;i++)
     vector[i] = (int)(Math.random() * 2);

 

NOTA: El Método 3 consiste básicamente en elegir un número al azar dentro de un determinado rango (en el ejemplo, es un rango de 30 valores, que van del 0 al 29), y dependiendo si sale un valor que se encuentra en la mitad inferior (0 al 14) o superior (15 al 29) del rango, se le asigna un 0 ó 1. Obviamente, puedes cambiar el rango si así lo prefieres (también habría que cambiar "el valor medio" del rango :tonto: ).

 

En tu caso, para llenar la matriz con 0 y 1, tienes que asignarle valores aleatorios sólo a las posiciones de la segunda fila en adelante y siempre que la columna sea mayor a cero.

 


Yo cacho que en el constructor inicializas la matriz, asignándole los valores a la primera fila y a la primera columna:

 

  int[][] recorridos = new int[10][10];

  //...etc...

  for(i = 1;i < 10;i++)
     recorridos[0][i] = i * 10 + 500;
  for(i = 1;i < 10;i++)
     recorridos[i][0] = i * 100;

  // asignar valores aleatorios y todo eso...

 

Nótese que la posición (0,0) de la matriz no se ocupa, o sea, se podría decir que está "indefinida". En todo caso, mejor asígnale un valor "cualquiera"...porsiaca.

 


Sobre los métodos que reciben como parámetros sectores y/o líneas, tienes que recorrer la primera fila/columna y ver si existe dicho sector/línea, entonces usas la coordenada correspondiente. Por ejemplo, si llamas al método PASA(700,530):

  • Recorres la primera fila buscando el valor 530, lo encuentras en el índice 3
  • Recorres la primera columna buscando el valor 700, lo encuentras en el índice 7
  • Verificas el valor que hay en recorridos[7][3] y devuelves true o false según corresponda

 

Recuerda, siempre empieza buscando desde el índice 1 (sea fila o columna), ya que el índice 0 está "reservado".

 

Una aclaración, yo creo que hay que buscar las coordenadas de las líneas/sectores, aunque se podría pensar que está de más, ya que es bastante obvio que la línea 700 está en la fila 7 y no hay necesidad de buscarla, simplemente habría que dividir por 100. Creo que por eso la matriz incluye información en la primera fila y primera columna, porque podría ser cualquier valor y no necesariamente multiplos de 100 o alguna secuencia fácilmente predecible, como en este caso.

 

Eso es lo que se me ocurre por ahora. Cualquier optimización o arreglo al código que posteé (no, no es "postié" :no: ) corre por tu cuenta :tonto:

Edited by susodicho
Link to comment
Share on other sites

Se mueve a Aplicaciones de Escritorio

 

 

PD: Si diste con la solución, pues, posteala y en una de esas ayuda a otro user y recuerda avisar para que se cierre el tema.

 

Saludos :krider:

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...