Autor Tema: Copiar Vector en un tipo Collection, recorrer y manipular colecciones en java  (Leído 4845 veces)

Browwwnnn

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 9
    • Ver Perfil
Buenas gente, queria solicitar un poco de su ayuda, el problema es el siguiente:
tengo que hacer un programa el cual me pida el ingreso de 3 autos y guardarlos en un vector
(esa es la parte facil), luego de esto, que me pregunte cual deseo alquilar, y despues de haber yo ingresado el que quiero alquilar que me arme dos listas, una para disponibles
y otra de alquiados.

Mi idea es la siguiente, crear una variable boolean alquilar= false para todos los autos ingresados en el vector (los disponibles van a ser false), y luego con un if cambiar alquilar=true si coincide lo que yo ingreso con lo que se encuentra dentro del vector(true van a ser los alquilados) y finalmente mostrar en dos listas, en una todos los que tienen valor true y en otra todos los que tiene valor false, el tema es que todo esto que acabo de redactar no tengo mucha idea de como hacerlo porque no lo di en clase.
Espero que me puedan ayudar, gracias y saludos.

Código: [Seleccionar]
import java.util.Scanner;
public class Alquilaar {
public static void main(String[]args){
Scanner teclado=new Scanner(System.in);
    boolean alquilar = false;

    String[ ] auto=new String[3];
    int x;
    for(x=0;x<3;x++){
        System.out.print("ingreso de modelos ");        //INGRESO DE DATOS AL VECTOR
        auto[x]=teclado.next();
    }
    for(x=0;x<3;x++){
        System.out.println(auto[x]); //MUESTRA DE DATOS
    }

    System.out.print("que desea alquilar?");
    String alquila;
    alquila=teclado.next();
    //UN POCO DE LO QUE LLEGUE A HACER SOBRE EL TEMA ALQUILAR
    for(x=0;x<3;x++){
        if (alquila.equals(auto[x])) {
           
            alquilar = true;
        }
    }

   
}
}


« Última modificación: 25 de Octubre 2014, 22:01 por Jorge lopez »

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
 Hola  Browwwnnn!

A continuación te dejo mi propuesta como solución al problema que planteas, he tratado de mantener tu idea y he diseñado un código el cual puede ser mejorado, con el fin de que lo edites basándote en un analisis de este.

Por ejemplo, como solucionarías si el problema es que luego de rentar un vehículo y mostrar las dos listas, pues el cliente quiere rentar otro vehículo?  donde tendrías que mostrar un auto disponible y dos alquilados, o mayor aun, que el cliente rente la cantidad de vehículos que el quiera uno a uno y que se vallan actualizando las listas, donde existe la posibilidad de que la lista con autos disponibles se quede vacía (sin autos disponibles).

Pos data: Espero que mi código se acoja a tus expectativas.

Si tienes cualquier duda, no dudes en preguntar.

Saludos! 
Código: [Seleccionar]
import java.util.Scanner;
import java.util.Collection;//Importamos la clase padre de todas las colecciones, para asignar como tipo dinamico "Collection" a la coleccion (ArrayList) "listaAutDisp".
import java.util.ArrayList;//Importamos la clase ArrayList para copiar los elementos contenidos en el vector "autoDisponible" en una colección de tipo Arraylist.
import java.util.Iterator;//Importamos esta clase para poder recorrer la colección listaAutDisp al mismo tiempo que la manipulamos (borramos elementos en esta)
public class AlquilarAuto
 {
  public static void main(String[]args)
  {
Scanner teclado=new Scanner(System.in);
    boolean alquilar = false;
    String[ ] autoDisponible = new String[3];
    String[ ] autoAlquilado = new String[1];//En este vector sera copiado el elemento eliminado en la coleccion "autoDisponible"
    for(int x=0;x<autoDisponible.length;x++){//En vez de indicar "3" invocamos el metodo length (sin parentecis) sobre el vector autoDisponible, que devuelve su tama?o
        System.out.print("ingreso de modelos ");        //INGRESO DE DATOS AL VECTOR
        autoDisponible[x]=teclado.next();
    }
    Collection<String> listaAutDisp = new ArrayList<String>();/*Aquí usaremos un tipo "Collection" puesto que al vector autosDisponibles no se le puede aplicar
    el metodo iterator();*/
    for(String obj: autoDisponible)//Rellenamos la coleccion "listaAutDisp" copiando los elementos del vector "autosDisponibles" en esta.
    {
      listaAutDisp.add(obj);
    }
    Iterator<String> it = listaAutDisp.iterator();//Creamos una Copia de "listaAutDisp" que nos permitirá recorrer y manipular la colección "listaAutDisp"
    System.out.print("\fCual de los siguientes autos desea alquilar?\n\n");
    for(String obj: listaAutDisp)
    {
      if(obj != null)
      {
        System.out.println(" " + obj); 
      }     
    }
    System.out.println("");
    String alquilado;
    alquilado = teclado.next();
    while(it.hasNext())
    {
      String tmpAutDisp = it.next();     
      if(alquilado.equals(tmpAutDisp))
      {
        alquilar = true;
        if(alquilar)
        {
          autoAlquilado[0] = tmpAutDisp;
          it.remove();
        }
      }
    }
    System.out.print("\fAutos disponibles:\n\n");
    for(String obj: listaAutDisp)
    {
      if(obj != null)
      {
        System.out.println(" " + obj); 
      }     
    }
    System.out.print("\nAuto alquilado:\n\n");
    for(String obj: autoAlquilado)
    {     
      System.out.println(" " +  obj);   
    }
  }
}

while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

Browwwnnn

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 9
    • Ver Perfil
No sabes como te agradezco me vino de 10 !!
El código lo modifique un poco, luego lo subo por si a algún lector le sirve.

Otra dudita, supongamos que tengo la variable boolean x, y que 1 2 3 son false y 4 5 6 son true, como muestro por un lado los valores true en un lista y por otro los false?
Tendria que quedar asi:

Valores true:
4
5
6
Valores false:
1
2
3

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
 Creo que tienes una idea la cual no estas planteando correctamente, intentare hacerte una aclaración para que reconsideres la forma de plantear tu problema.

 Una de las maravillas de la programación es que puedes representar una cosa o situación de la vida real en código, por ejemplo podemos crear un objeto (código) que represente una persona y este objeto podría tener desde un nombre, apellido, edad, ext... hasta un tipo de sangre, ritmo cardíaco,  estado emocional, ext... entre muchas otras cosas que tiene o podría tener una persona real. Pero así como en la vida real existen limitaciones así mismo existen limitaciones (cosas que no pueden ser "por el momento") en la programación, por ejemplo no es posible que en la vida real una persona pueda vivir debajo del agua sin tomar oxigeno, en programación (java) no es posible usar un numero como nombre de variable para contener un valor boleano ni para contener ningún otro tipo de valor, por lo tanto decir
Código: [Seleccionar]
boolean 1 = false; es incorrecto (no es posible) a diferencia de decir
Código: [Seleccionar]
boolean x1 = false; que si es posible. Simplemente un numero no puede ser una variable que contendría o apuntaría a un valor u objeto, a menos que tal numero lleve una letra ante puesta como en el segundo caso.

Es normal que aveces nos compliquemos la vida a la hora de diseñar un código, pero debemos de ser capaces de poder analizar un código y corregir sus deficiencias. Un código corto claro y limpio siempre sera preferido ante un código largo (muchas lineas de código) y confuso, aun cuando ambos códigos realicen la misma funcion. Por tanto, si una linea de código o variable no es del todo necesaria en un código es preferible no incluirla.

En tu anterior código creaste la variable boleana "alquilar" (la cual mantuve en el código respuesta que plantee, para mantener tu idea ) para controlar cuando un auto estaría disponible y cuando estaría alquilado, tomando en cuenta que el usuario elige uno de los tres autos disponibles y que el elegido por el usuario pasaría a la lista de alquilados, pues se podría decir que la variable "alquilar" esta demás y que esta a su ves genera mas código "innecesario". Elimina la variable "alquilar" y sustituye el fragmento de código correspondiente, por el siguiente fragmento de código en el código de la anterior clase AlquilarAuto:
Código: [Seleccionar]
while(it.hasNext())
    {
      String tmpAutDisp = it.next();     
      if(alquilado.equals(tmpAutDisp))
      {
        autoAlquilado[0] = tmpAutDisp;
        it.remove();   
      }
    }
Si te fijas, obtenemos el mismo resultado con menos código.

Respondiendo a tu duda:
Citar
Otra dudita, supongamos que tengo la variable boolean x, y que 1 2 3 son false y 4 5 6 son true, como muestro por un lado los valores true en un lista y por otro los false?
Tendria que quedar asi:

Valores true:
4
5
6
Valores false:
1
2
3

Solución que propongo: Olvida la variable boleana x, crea dos vectores (Valores true, Valores false), arreglos o colecciones diferentes, crea tareas para que los elementos del vector "Valores true" puedan ser eliminados y/o movidos al vector "Valores false" según los criterios definidos en un condicional if. Usa los recursos que creas convenientes para recorrer los elementos de cada vector y mostrarlos por pantalla.

Una ves mas, podrías tomar el siguiente código como material de apoyo.

Clase AlquilarAuto ligeramente modificada:
Código: [Seleccionar]
import java.util.Scanner;
import java.util.Collection;//Importamos la clase padre de todas las colecciones, para asignar como tipo dinamico "Collection" a la coleccion (ArrayList) "listaAutDisp".
import java.util.ArrayList;//Importamos la clase ArrayList para copiar los elementos contenidos en el vector "autoDisponible" en una colección de tipo Arraylist.
import java.util.Iterator;//Importamos esta clase para poder recorrer la colección listaAutDisp al mismo tiempo que la manipulamos (borramos elementos en esta)
public class AlquilarAuto
 {
  public static void main(String[]args)
  {
Scanner teclado=new Scanner(System.in);
    String[ ] autoDisponible = new String[3];
    String[ ] autoAlquilado = new String[1];//En este vector sera copiado el elemento eliminado en la coleccion "autoDisponible"
    for(int x=0;x<autoDisponible.length;x++){//En vez de indicar "3" invocamos el metodo length (sin parentecis) sobre el vector autoDisponible, que devuelve su tama?o
        System.out.print("ingreso de modelos ");        //INGRESO DE DATOS AL VECTOR
        autoDisponible[x]=teclado.next();
    }
    Collection<String> listaAutDisp = new ArrayList<String>();/*Aquí usaremos un tipo "Collection" puesto que al vector autosDisponibles no se le puede aplicar
    el metodo iterator();*/
    for(String obj: autoDisponible)//Rellenamos la coleccion "listaAutDisp" copiando los elementos del vector "autosDisponibles" en esta.
    {
      listaAutDisp.add(obj);
    }
    Iterator<String> it = listaAutDisp.iterator();//Creamos una Copia de "listaAutDisp" que nos permitirá recorrer y manipular la colección "listaAutDisp"
    System.out.print("\fCual de los siguientes autos desea alquilar?\n\n");
    for(String obj: listaAutDisp)
    {
      if(obj != null)
      {
        System.out.println(" " + obj); 
      }     
    }
    System.out.println("");
    String alquilado;
    alquilado = teclado.next();   
    System.out.print("\fAutos disponibles:\n\n");
    while(it.hasNext())
    {
      String tmpAutDisp = it.next();     
      if(alquilado.equals(tmpAutDisp))
      {
        autoAlquilado[0] = tmpAutDisp;
        it.remove();
        tmpAutDisp = null;   
      }
      if(tmpAutDisp != null)
      {
        System.out.println(" " + tmpAutDisp);//Aprovecho el bucle while para mostrar los autos disponibles (reutilizar de código) y evito tener que usar otro bucle.
      }
    }
    System.out.print("\nAuto alquilado:\n\n");
    for(String obj: autoAlquilado)
    {     
      System.out.println(" " +  obj);   
    }
  }
}

Espero que tus dudas queden claras.

Saludos!
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

 

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".