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

Quiero recorrer un ArrayList y no puedo

Estas en el tema de Quiero recorrer un ArrayList y no puedo en el foro de Java en Foros del Web. Tengo que siguiente problema. Tengo por un lado la clase Producto y por otro una clase ControlStock(singleton) La clase ControlStock tiene un arrayList de Productos ...
  #1 (permalink)  
Antiguo 22/06/2012, 20:39
 
Fecha de Ingreso: junio-2012
Mensajes: 3
Antigüedad: 11 años, 10 meses
Puntos: 0
Exclamación Quiero recorrer un ArrayList y no puedo

Tengo que siguiente problema.

Tengo por un lado la clase Producto y por otro una clase ControlStock(singleton)
La clase ControlStock tiene un arrayList de Productos definida de la siguiente manera:

class ControlStock{
private ArrayList<Producto> productos;
.......
.....

Necesito crear u metodo que me diga el mayor precio de un Producto y me devuela el objeto Producto correspondiente.

Es un examen que estoy haciendo y necesito esta solocion..
Quien puede ayudarme???
  #2 (permalink)  
Antiguo 22/06/2012, 23:53
Avatar de baker1562  
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Quiero recorrer un ArrayList y no puedo

puedes crear un arreglo de acuerdo al tamaño del arraylist, pasas los datos del arraylist al arreglo y haces un ordenamiento de burbuja, el primero es el numero menor, y el ultimo del arreglo es el numero mayor

  #3 (permalink)  
Antiguo 23/06/2012, 02:04
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Quiero recorrer un ArrayList y no puedo

Cita:
Iniciado por baker1562 Ver Mensaje
puedes crear un arreglo de acuerdo al tamaño del arraylist, pasas los datos del arraylist al arreglo y haces un ordenamiento de burbuja, el primero es el numero menor, y el ultimo del arreglo es el numero mayor

¿Y para qué convertir el arrayList en arreglo?

Además, ni siquiera necesitas ordenar el array porque no lo piden, llega con recorrer el array una vez.
__________________
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.
  #4 (permalink)  
Antiguo 23/06/2012, 02:11
Avatar de baker1562  
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Quiero recorrer un ArrayList y no puedo

Cita:
Iniciado por Xerelo Ver Mensaje
¿Y para qué convertir el arrayList en arreglo?

Además, ni siquiera necesitas ordenar el array porque no lo piden, llega con recorrer el array una vez.
fue lo que se me ocurrio lo puse por lo del precio mayor, pero buehh
  #5 (permalink)  
Antiguo 23/06/2012, 04:32
 
Fecha de Ingreso: abril-2012
Ubicación: Canarias
Mensajes: 41
Antigüedad: 12 años
Puntos: 5
Respuesta: Quiero recorrer un ArrayList y no puedo

Con un if puedes hacer maravillas.

Código Java:
Ver original
  1. public Producto ProductoMasCaro() {
  2.  
  3. Producto ProductoMasCaro = null;
  4.  
  5. for(Iterator it = productos.iterator(); it.hasNext();) {
  6. Producto pro = (Producto) it.next();
  7.  
  8. if(ProductoMasCaro == null) {
  9. ProductoMasCaro = pro;
  10. }
  11.  
  12. if(pro.precio > ProductoMasCaro.precio) {
  13. ProductoMasCaro = pro;
  14. }
  15. }
  16.  
  17. return ProductoMasCaro;
  18.  
  19. }

Obviamente se puede mejorar bastante, pero así por el aire debería de funcionarte.
  #6 (permalink)  
Antiguo 23/06/2012, 07:50
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Quiero recorrer un ArrayList y no puedo

Buenas,

Puedes usar la clase Collection y el método max para obtener el producto con mayor precio.

Código Java:
Ver original
  1. ArrayList<Producto> productos = new ArrayList<Producto>();
  2.      Collections.addAll(productos,new Producto(10),new Producto(50),new Producto(30));
  3.      Producto max = Collections.max(productos,new Comparator<Producto>(){
  4.             public int compare(Producto o1, Producto o2) {
  5.                double precio1 =o1.getPrecio();
  6.                        double precio2 = o2.getPrecio();
  7.                 return precio1 >  precio2 ? 1 : (precio1 == precio2) ? 0 : -1;
  8.             }        
  9.          
  10.      });

También puedes crearte una clase que implemente el comparador aparte para poder reutilizarla.

Código Java:
Ver original
  1. class ProductoPorPrecio implements Comparator<Producto>{
  2.             public int compare(Producto o1, Producto o2) {
  3.                double precio1 =o1.getPrecio();
  4.                        double precio2 = o2.getPrecio();
  5.                 return precio1 >  precio2 ? 1 : (precio1 == precio2) ? 0 : -1;
  6.             }
  7.      }
  8.  
  9.  ArrayList<Producto> productos = new ArrayList<Producto>();
  10.  Collections.addAll(productos,new Producto(10),new Producto(50),new Producto(30));
  11.      Producto max = Collections.max(productos,new ProductoPorPrecio());
  #7 (permalink)  
Antiguo 23/06/2012, 11:32
 
Fecha de Ingreso: junio-2012
Mensajes: 3
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Quiero recorrer un ArrayList y no puedo

Gracias a todos, pero sigo teniendo provblemas. Les comento como es que tengo que resolver esto:
Me dan un diagrama de clases que lo tengo implementado ya (lo adjunto mas abajo) y lo que me piden es resolver que Clientes han comprado el producto de mayor precio. La consulta tiene que retornar una coleccion de objeto Cliente. Les adjunto mi codigo.
Espero que me puedan ayudar ya que si tengo este caso resuelto puedo seguir haciendo mas ejercicios y aplicando la logica y que la mayoria son iguales.

Va codigo echo por mi, espero sus modificaciones.

import java.util.ArrayList;
import java.util.Iterator;
public class Facturacion{
public static void main (String[]args){

Cliente cli1 = new Cliente("Pablo");
Cliente cli2 = new Cliente("Diego");

Factura fac1 = new Factura(10,cli1);
Factura fac2 = new Factura(11,cli2);
Factura fac3 = new Factura(12,cli1);

Proveedor prvd1 = new Proveedor("Perez S.A.");
Proveedor prvd2 = new Proveedor("Luis S.A");

Producto prd1 = new Producto(10.0,5,"Banana",prvd1);
Producto prd2 = new Producto(20.0,5,"Pera",prvd1);
Producto prd3 = new Producto(30.0,5,"Durazno",prvd2);


LineaFactura lf1 = new LineaFactura(2,prd1);
LineaFactura lf2 = new LineaFactura(1,prd2);
LineaFactura lf3 = new LineaFactura(3,prd3);

fac1.asignarLineas(lf1);
fac1.asignarLineas(lf2);
fac1.asignarLineas(lf3);

fac2.asignarLineas(lf3);
fac2.asignarLineas(lf2);


System.out.println(fac1);
System.out.println(fac2);

ControlFacturas CF = ControlFacturas.getInstancia();
ControlStock CS = ControlStock.getInstancia();

}
}

class Cliente{
private String nombre;
private ArrayList<Factura> facturas;

public Cliente(String nombre){
this.nombre = nombre;
facturas = new ArrayList<Factura>();
}

public String getNombre(){
return this.nombre;
}

//public boolean equals(Object ob){
// return (ob != null && ob instanceof Cliente && this.nombre.equals((Cliente)ob.getNombre()));
//}


public void asociarFactura(Factura fac) {
facturas.add(fac);
}
public String toString() {
StringBuilder stringBuilder = new StringBuilder(" Cliente - " + this.nombre + "\n");
return stringBuilder.toString();
}
}

class Factura{
private int codigo;
private ArrayList<LineaFactura> lineasfacturas;
private Cliente cliente;

public Factura(int codigo, Cliente cliente){
this.codigo = codigo;
this.cliente = cliente;
this.lineasfacturas = new ArrayList<LineaFactura>();
}
public ArrayList<LineaFactura> getLineas(){
return this.lineasfacturas;
}
public void asignarLineas(LineaFactura lf) {
lineasfacturas.add(lf);
}
public void asignarCliente(Cliente cli){
this.cliente = cli; }

public int getId(){
return this.codigo;
}
public String toString() {
StringBuilder stringBuilder = new StringBuilder("Factura " + this.codigo + this.cliente+ "\n");
for (LineaFactura ln : this.lineasfacturas) {
subtotal = ln.getProducto().getPrecio()*ln.getCantidad();
stringBuilder.append("\t" +ln.getProducto().getNombre() + " " + ln.getProducto().getPrecio()+ "-----" + ln.getCantidad() + "\n");
}
return stringBuilder.toString();
}
}

class LineaFactura{
private int cantidad;
private Producto producto;

public LineaFactura(int cantidad, Producto producto){
this.cantidad = cantidad;
this.producto = producto;
}
public int getCantidad(){
return this.cantidad;
}
public Producto getProducto(){
return this.producto;
}
public double getTotal(Producto prd){
return this.cantidad*prd.getPrecio();
}
}

class Producto{
private double precio;
private int stock;
private String nombre;
private Proveedor proveedor;

public Producto(double precio,int stock, String nombre, Proveedor proveedor){
this.precio = precio;
this.stock = stock;
this.nombre = nombre;
this.proveedor = proveedor;
}
public String getNombre(){
return this.nombre;
}
public double getPrecio(){
return this.precio;
}
public String toString() {
StringBuilder stringBuilder = new StringBuilder(" Proveedor - " + this.proveedor.getNombre() + "\n");
return stringBuilder.toString();
}
public Proveedor getProveedor(){
return this.proveedor;
}
}

//Clase Singleton . Lo pedian en el diagrama de clase
class Proveedor{
private String nombre;
private ArrayList<Producto> productos;

public Proveedor(String nombre){
this.nombre = nombre;
this.productos = new ArrayList<Producto>();
}
public String getNombre(){
return this.nombre;
}
//public boolean equals(Object ob){
//return (ob != null && ob instanceof Cliente && this.nombre.equals((Cliente)ob.getNombre()));
// return (ob != null && ob instanceof Proveedor() && this.nombre.equals((Proveedor().getNombre()));
//}

public String toString() {
StringBuilder stringBuilder = new StringBuilder(" Proveedor - " + this.nombre + "\n");
return stringBuilder.toString();
}
}

//Clase Singleton . Lo pedian en el diagrama de clase
class ControlFacturas{
private ArrayList<Factura> facturas;
private static ControlFacturas instancia = null;

private ControlFacturas(){
this.facturas = new ArrayList<Factura>();
}
public static ControlFacturas getInstancia() {
if (instancia == null)
instancia = new ControlFacturas();
return instancia;
}
public ArrayList<Factura> getFacturas(){
return this.facturas;
}
}

//Clase Singleton . Lo pedian en el diagrama de clase
class ControlClientes{
private ArrayList<Cliente> clientes;
private static ControlClientes instancia = null;

private ControlClientes(){
this.clientes = new ArrayList<Cliente>();
}
public static ControlClientes getInstancia() {
if (instancia == null)
instancia = new ControlClientes();
return instancia;
}

public ArrayList<Cliente> getClientes(){
return this.clientes;
}
}

//Clase Singleton . Lo pedian en el diagrama de clase
class ControlStock{
private ArrayList<Producto> productos;
//private ArrayList<Proveedor> proveedores;

private static ControlStock instancia = null;
private static ControlStock instancia2 = null;

private ControlStock(){
this.productos = new ArrayList<Producto>();
//this.proveedores = new ArrayList<Proveedor>();
}

public static ControlStock getInstancia() {
if (instancia == null)
instancia = new ControlStock();
return instancia;
}

public ArrayList<Producto> getProductos(){
return this.productos;
}


public ArrayList<Producto> getProductoMayorPrecio(){
float precio;
for (int i=0; i < productos.size(); i++){
return productos;
}
return productos;
}
}



Mil gracias de nuevo, y porfavor necesito ayuda para resolver este problema. GRACIASSSS!!

Etiquetas: arraylist, clase, quiero
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 10:17.