Hola a todos, he estado experimentando problemas para implementar la interfaz de comparable ya que mi programa fue realizado de una forma distinta con unas clases definidas como tarjeta, producto y compras la cual funciona con el main en este caso lo dejo aca insertado el codigo, pasa y resulta que hasta las pruebas quitando la implementacion de la interfaz funciona bien, osea no organiza los productos por costo, pero a la hora de hacerlo al metodo @Override que me organiza la lista de compras no me asimila mi parametro Producto pero si otroProducto para realizar la comparacion de precio correspondiente, no he podido encontrar una solucion, espero que me puedan ayudar.
import java.util.*;
public class Compra implements Comparable<Producto>{
//VARIABLES QUE SE DECLARAN PARA LA CLASE INCLUYE INSTANCIA DE TARJETA Y ARRAYLIST CON PRODUCTOS
private ArrayList<Producto> listaCompra;
private Tarjeta tarjeta;
private double totalCompra;
public Compra(){//CONSTRUCTOR DE LA CLASE COMPRA CON SU ESTADO INICIAL LISTA DE COMPRA TARJETA CON SALDO CERO Y TOTAL COMPRA CERO
listaCompra =new ArrayList<Producto>();
tarjeta=new Tarjeta(0);
totalCompra=0;
}
//METODO MAIN QUE INICIA NUESTRO PROGRAMA
public static void main(String[] args) {
Scanner entradaOpcion=new Scanner(System.in);
Compra compra=new Compra();//INSTANCIA NUEVA COMPRA LLAMANDO AL CONSTRUCTOR
//INICIO DE NUESTRA INTERFAZ
System.out.println("Bienvenido a nuestro sistema de ventas por favor ingrese el cupo de su tarjeta:");
double saldo=entradaOpcion.nextDouble();
entradaOpcion.nextLine();
compra.tarjeta.setSaldo(saldo);
int opcion;
if (compra.totalCompra<saldo) {//BUCLE QUE VERIFICA SALDO CON EL TOTAL DE LA COMPRA INICIAL
do { //ESTRUCTURA DE CONTROL QUE VERIFICARA OPCIONES DE AGREGAR PRODUCTO O SALIR
System.out.println("Presiona 1. para agregar producto, 2. para salir.");
opcion=entradaOpcion.nextInt();
entradaOpcion.nextLine();
if (opcion==1) {
compra.agregarProducto(); //LLAMA METODO QUE AGREGA PRODUCTO
compra.tarjeta.getSaldo();//LLAMA METODO QUE VERIFICA SALDO DE LA TARJETA
}
} while (opcion!=2);
compra.muestraLista();//LLAMA METODO DE LISTADO DE COMPRA
}
}//FIN MAIN
//METODO AGREGAR PRODUCTO
public void agregarProducto(){
Scanner entradaProducto=new Scanner(System.in);
System.out.println("Ingresa nombre del producto:");
String nombreProducto=entradaProducto.nextLine();
System.out.println("Ingresa precio del producto:");
double precioProducto=entradaProducto.nextDouble();
if (tarjeta.getSaldo()>=precioProducto) {
Producto producto=new Producto(nombreProducto, precioProducto);
listaCompra.add(producto);
tarjeta.restaSaldo(precioProducto);
totalCompra+=precioProducto;
System.out.println("Compra realizada! su producto ha sido añadido a la lista de compra.");
}
else{
System.out.println("Producto no pudo ser comprado por saldo insuficiente!");
}
}
//METODO QUE MUESTRA LISTA DE COMPRA
public void muestraLista(){
System.out.println("Lista de productos comprados:");
Collections.sort((listaCompra);// A CAUSA DEL PROBLEMA CON LA IMPLEMENTACION EL METODO NO HA SIDO RESUELTO
for (Producto producto : listaCompra) {
System.out.println("*******************************************");
System.out.println("Producto: "+producto.getNombreProducto()+" con un valor de: $"+producto.getPrecioProducto());
}
System.out.println("El total de su compra fue de: $"+totalCompra);//MUESTRA TOTAL
System.out.println("-----------------------------------------------");
System.out.println("El saldo de su tarjeta es de: $"+tarjeta.getSaldo());//MUESTRA SALDO DE LA TARJETA
System.out.println("*******************************************");
}
//METODO QUE ORGANIZA ARRAYLIST Y PROBLEMA EN CUESTION A LA HORA DE REESTRUCTURAR
@Override
public int compareTo(Producto otroProducto) {
return Double.compareTo(this.precioProducto,otroProducto.getPrecioProducto());
}
}