En esta entrada vamos a escribir un programa Java que crea un
ArrayList de Objetos de tipo Coche. El programa pide por teclado los datos de
los coches y los guarda en el array. A continuación utilizará el ArrayList para
mostrar por pantalla lo siguiente:
- Todos los coches introducidos.
- Todos los coches de una marca determinada.
- Todos los coches con menos de un número determinado de Kilómetros.
- El coche con mayor número de Kilómetros.
- Todos los coches ordenados por número de kilómetros de menor a mayor.
Primero creamos
la clase Coche:
//Clase Coche
public class Coche {
private String matricula;
private String marca;
private String modelo;
private int Km;
public int getKm() {
return Km;
}
public void setKm(int Km) {
this.Km = Km;
}
public String getMarca() {
return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
public String getMatricula() {
return matricula;
}
public void setMatricula(String matricula) {
this.matricula = matricula;
}
public String getModelo() {
return modelo;
}
public void setModelo(String modelo) {
this.modelo = modelo;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("\nMatrícula: ");
sb.append(matricula);
sb.append("\nMarca: ");
sb.append(marca);
sb.append("\nModelo: ");
sb.append(modelo);
sb.append("\nKm: ");
sb.append(Km);
return sb.toString();
}
}
A continuación creamos la clase principal del proyecto:
//Clase principal
public class Basico1 {
static Scanner sc = new Scanner(System.in);
//Se crea un ArrayList para guardar objetos de tipo Coche.
static ArrayList<Coche> coches = new ArrayList<>();
//método main
public static void main(String[] args) {
leerCoches();
System.out.println("\nCoches introducidos:");
mostrarCoches();
mostrarPorMarca();
mostrarPorKm();
System.out.println("\nCoche con mayor número de Km: " + mostrarMayorKm());
System.out.println("\nCoches ordenados de menor a mayor número de Km");
mostrarOrdenadosPorKm();
} //fin método main
//Método para leer coches e introducirlos en el array
public static void leerCoches(){
//Declaración de variables para leer los datos de los coches
String matricula;
String marca;
String modelo;
int Km;
//Variable auxiliar que contendrá la referencia a cada coche nuevo.
Coche aux;
int i, N;
//se pide por teclado el número de coches a leer
do {
System.out.print("Número de coches? ");
N = sc.nextInt();
} while (N < 0);
sc.nextLine(); //limpiar el intro
//lectura de N coches
for (i = 1; i <= N; i++) {
//leer datos de cada coche
System.out.println("Coche " + i);
System.out.print("Matrícula: ");
matricula = sc.nextLine();
System.out.print("Marca: ");
marca = sc.nextLine();
System.out.print("Modelo: ");
modelo = sc.nextLine();
System.out.print("Número de Kilómetros: ");
Km = sc.nextInt();
sc.nextLine(); //limpiar el intro
aux = new Coche(); //Se crea un objeto Coche y se asigna su referencia a aux
//se asignan valores a los atributos del nuevo objeto
aux.setMatricula(matricula);
aux.setMarca(marca);
aux.setModelo(modelo);
aux.setKm(Km);
//se añade el objeto al final del array
coches.add(aux);
}
} //fin método leerCoches()
Podemos representar de forma gráfica el contenido del ArrayList según se van introduciendo los objetos:
//Método para mostrar todos los coches
public static void mostrarCoches(){
for(int i = 0; i< coches.size(); i++)
System.out.println(coches.get(i)); //se invoca el método toString de la clase Coche
}
//Método para mostrar todos los coches de una marca que se pide por teclado
public static void mostrarPorMarca(){
String marca;
System.out.print("Introduce marca: ");
marca = sc.nextLine();
System.out.println("Coches de la marca " + marca);
for(int i = 0; i < coches.size(); i++){
if(coches.get(i).getMarca().equalsIgnoreCase(marca))
System.out.println(coches.get(i));
}
}
//Método para mostrar todos los coches con un número de Km inferior
//al número de Km que se pide por teclado
public static void mostrarPorKm(){
int Km;
System.out.print("Introduce número de kilómetros: ");
Km = sc.nextInt();
System.out.println("Coches con menos de " + Km + " Km");
for(int i = 0; i < coches.size(); i++){
if(coches.get(i).getKm() < Km)
System.out.println(coches.get(i));
}
}
//Método que devuelve el Coche con mayor número de Km
public static Coche mostrarMayorKm(){
Coche mayor = coches.get(0);
for(int i = 0; i < coches.size(); i++){
if(coches.get(i).getKm() > mayor.getKm())
mayor = coches.get(i);
}
return mayor;
}
//Método que muestra los coches ordenados por número de Km de menor a mayor
public static void mostrarOrdenadosPorKm(){
int i, j;
Coche aux;
for(i = 0; i < coches.size()-1; i++)
for(j=0; j < coches.size()-i-1; j++)
if(coches.get(j+1).getKm() < coches.get(j).getKm()){
aux = coches.get(j+1);
coches.set(j+1, coches.get(j));
coches.set(j, aux);
}
mostrarCoches();
}
} //fin de la clase principal
Al transcribir las lineas de este código me aparecen muchas alertas que no logro arreglar. He desarrollado todos los ejercicios hasta aquí y ninguno me ha arrojado tantas inconsistencias de código. No se si es la instalación de NetBeans o no he importado las librerías correctas. Requiero una respuesta por favor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
Eliminarevastos, el código esta completo, lo que llamas inconsistencias es por la falta de las librerías adecuadas, pon algo de tu parte, conchudo
Eliminarseguro que no as importado la libreria del arraylist , de equals y algunos mas. buen día.
EliminarHola, me encuentro con el mismo problema que evastos, supongo que es cosa de mis pocos conocimientos de JAVA. por ahora he ido entendiendo todos los ejercicios y realizándolos yo mismo, pero en este me he quedado encallado.
ResponderEliminarMe gustaria a ver si alguien puede darnos un poco de ayuda. cada clase, ha de estar en un archivo diferente? o pueden estar en el mismo?
Hola, creo que a los dos os deben estar dando los mismos tipos de error. Las dos clases tal y como están escritas aquí son public y deben estar en archivos diferentes. La clase Coche en un archivo Coche.java y la principal en otro archivo Basico1.java.
EliminarSi las habeis escrito en el mismo archivo, dentro de un archivo .java solo puede haber una clase pública que es la que da nombre al archivo por lo tanto podeis corregir el error quitando public en la clase Coche.
Además teneis que añadir los import. En el ejemplo no aparecen. Si pinchais sobre cada error netBeans os indicará el import que falta y lo podeis añadir.
Gracias, ya me funciona :)
EliminarUna pregunta:
ResponderEliminarcual es la diferencia entre:
public void setModelo(String modelo) {
this.modelo = modelo;
}
y
public void setModelo(String modelo) {
modelo = modelo;
}
public void setModelo(String modelo) {
Eliminarthis.modelo = modelo;
}
el THIS hace referencia a un atributo de la clase que tiene como nombre "modelo" y al cual se le esta asignando un valor que recibe en un atributo del método setModelo que tiene el mismo nombre al atributo de la clase. entonces para que al compilar se reconozca cual es el atributo de la clase y cual el que recibe se le pone el this
public void setModelo(String modelo) {
modelo = modelo;
}
en este caso el atributo que se recibe se esta asignando a el mismo, nunca he visto trabajar un metodo asi.
public void setModelo(String modelo) {
Eliminarthis.modelo = modelo;
}
el THIS hace referencia a un atributo de la clase que tiene como nombre "modelo" y al cual se le esta asignando un valor que recibe en un atributo del método setModelo que tiene el mismo nombre al atributo de la clase. entonces para que al compilar se reconozca cual es el atributo de la clase y cual el que recibe se le pone el this
public void setModelo(String modelo) {
modelo = modelo;
}
en este caso el atributo que se recibe se esta asignando a el mismo, nunca he visto trabajar un metodo asi.
Funciona tanto si trabajas con this.modelo como si trabajas con modelo, las dos formas hacen referencia al atribuno "modelo" de la clases Coche
EliminarHola,
ResponderEliminarEstoy siguiendo todos los ejercicios y estoy aprendiendo bastante, muchas gracias por tu esfuerzo.
Este ultimo ejerccio es ya bastante mas complicado pero casi me entero, aunque el uso del metodo con : "public static Coche mostrarMayorKm(){ "
No me queda claro el uso de "Coche" en vez de "void".
¿podrias explicar con mas detalle su funcionamiento y porque?
Gracias
Para que retorne el objeto de la clase Coche que tenga mas kilometraje.
EliminarYo copiè todo tal cual està el còdigo y me dio perfecto!!! es un excelente aporte dado que me estaba volviendo loco para implementar un array de objetos! no me daba nunca y siempre me tiraba Exceptions, luego de esto creo que tengo solucionado mi problema de carga y muestra de arrays de objetos!!! Infinitas gracias!!!
ResponderEliminarMariano.
De verdad esta muy bien este ejercicio, yo ando haciendo los deberes y me hacia falta ingresar numero de personas y luego pedir que tipo de persona agregar de entre varias clases pero bueno no me funciona por sc no existe y debo crearla aunque todavia me falta la segunda parte, por ejemplo podrias crear varios tipos de coches camion, auobus, encava entre otras y luego de pedir el numero de coches a ingresar pedir por opciones uno e instanciar los metodos de la clase a usar gracias seguire a ver :S
ResponderEliminarmmmm ya no habia caido tanto codigo me tiene mal :S, ya sc es Scanner a ver si logro ajustar las opciones ahora :D
ResponderEliminar3. Construir un programa que permita ingresar el Código, Nombre, Sueldo, Condición (Estable, Contratado), etc. de N empleados, luego calcule el sueldo promedio por condición, sabiendo que si el empleado tiene más de 10 años de servicio tiene una bonificación del 15%, ordene los datos de acuerdo al código e imprima sus datos.
ResponderEliminarMe pueden ayudar con estoo
hola copie el codigo tal cual pero me da varios errores en os get y los set que se esta usando en la clase principal
ResponderEliminarHola Clara, puedes poner que error te da?
Eliminarvolvi y copie el codigo completo ahora no hay ningun error. solo me subraya en amarillo la instancia coche y cuando compilo el programa y registro dos coches me sigue pidiendo marca y kilometraje y ahi termina el programa sin mostrarme los dos coches registrados.
Eliminar¿Nadie se ha dado cuenta de que el ultimo método devuelve los coches ordenados de mayor a menor kilometraje y no de menor a mayor como indica el enunciado del ejercicio?
ResponderEliminarGracias por avisar. Ya está corregido. Solo había que cambiar > por <
EliminarHola, quisiera saber si puedes ayudarme, pasa que mi profe pidio hacer un equipo de futbol, el cual ya posee ingresado datos, no hay que ingresarlos por teclado, tengo una clase llamada Futbolista, el cual tiene sus atributos correspondientes, el main en donde ya tengo ingresados todos los datos de los futbolistas y tengo otra clase llamada equipo el cual posee un arreglo por equipo, es aqui mi duda, como hago para que el arreglo que tengo en la clase Equipo guarde y muestre por pantalla los datos que ingrese en la clase Futbolista??... Espero puedas ayudar, muchas gracias
ResponderEliminarEl condicional de los metodos me da fallo me dice que no encuentra el simbolo, no se que hago mal porque si quito el condicional si que me da todos los datos. El problema parece estar en getMarca(), getKm,...¿Alguien sabe que puede ser, porque le he dado vueltass y no se me ocurre?
ResponderEliminarif(coches.get(i).getMarca().equalsIgnoreCase(marca))
Gracias me sirvió mucho
ResponderEliminarUna pregunta haber si sabeis.
ResponderEliminarSi cuando se quieren obtener todos los coches de una marca determinada., no hay ningun coche de esa marca, ¿como harías para que me te mandase un mensaje de que no existen coches de esa marca?
Disculpen alguno de ustedes tendrá el método de eliminar con el arraylist ocupando dos vectores (y despues se introdujeran los datos al array original
ResponderEliminarEjemplo: Tengo estos datos en el vector
1
2
3--> & quiero eliminar este
4
Tengo que pasar los primeros a otro array y me deben de quedar así
4
1
2
Gracias por este gran aporte, me aclaro una gran duda. Saludos.
ResponderEliminarpara los que le da algunos errores, les cuento que deben importar java util arraylist y tambien java util scanner.
ResponderEliminarque hace este metodo?
ResponderEliminar@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("\nMatrícula: ");
sb.append(matricula);
sb.append("\nMarca: ");
sb.append(marca);
sb.append("\nModelo: ");
sb.append(modelo);
sb.append("\nKm: ");
sb.append(Km);
return sb.toString();
Este método creamos un String con el formato con el que queremos que se muestre el objeto. Puedes verlo como que se pasa el contenido del objeto a un String.
EliminarEl método toString se invoca de forma automática desde print o println cuando se quiere mostrar un objeto por pantalla:
System.out.println(unCoche); muestra por pantalla el String devuelto pro el método toString() de la clase Coche.
Es lo mismo que si escribimos:
System.out.println(unCoche.toString());
En esta entrada se explica como funciona este método:
http://puntocomnoesunlenguaje.blogspot.com.es/2013/12/clase-object-java.html
Saludos
y para eliminar un coche aprovechando el buscar poor matricula?
ResponderEliminarHola una pregunta que librerias agregar? me tira un error en coches.add(aux)
ResponderEliminarimport java.util.ArrayList;
Eliminares la unica libreria involucrada con esa linea de codigo.
me tira error en estas dos partes
ResponderEliminar//se añade el objeto al final del array
coche.add(aux); //the method add coche is undefined for the type coche
}
}
public static void mostrarCoches(){
for(int i = 0; i< coche.size(); i++) //the method size() is undefined for the method coche
System.out.println(coche.get(i)); //the method get int is undefined for the method coche
}
}
¿puede ser porque has puesto "coche" en vez de "coches"? que es el nombre del arrayList, imagino que por eso el compilador no lo reconoce
EliminarEL código anda perfecto muchas gracias!!!!
ResponderEliminarbuenas tardes una pregunta ese metodo main para que es
ResponderEliminar//método main
public static void main(String[] args) {
leerCoches();
System.out.println("\nCoches introducidos:");
mostrarCoches();
mostrarPorMarca();
mostrarPorKm();
System.out.println("\nCoche con mayor número de Km: " + mostrarMayorKm());
System.out.println("\nCoches ordenados de menor a mayor número de Km");
mostrarOrdenadosPorKm();
} //fin método main
Muchas gracias tenia ya bastante tratando de agregar a un arraylist por medio del scanner
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarno entiendo la lógica de este código
ResponderEliminarse que es para ordenar los km del arrayList de menor a mayor
pero trato de desglosar el código un poco pero no llego a entenderlo
public static void mostrarOrdenadosPorKm(){
int i, j;
Coche aux;
for(i = 0; i< array.size()-1; i++){
for(j=0;j<array.size()-i-1; j++)
if(array.get(j+1).getKm() < array.get(j).getKm()){
aux = array.get(j+1);
array.set(j+1, array.get(j));
array.set(j, aux);
}
}
motrarCoches();
}
no se que hacer en esto
ResponderEliminarimport java.util.ArrayList;
import java.util.Iterator;
/**
* Manage the stock in a business.
* The stock is described by zero or more Products.
*
* @author (your name)
* @version (a version number or a date)
*/
public class StockManager
{
// A list of the products.
private ArrayList stock;
/**
* Initialise the stock manager.
*/
public StockManager()
{
stock = new ArrayList();
}
/**
* Add a product to the list.
* @param item The item to be added.
*/
public void addProduct(Product item)
{
stock.add(item);
}
public int numberOfStock()
{
return stock.size();
}
/**
* Receive a delivery of a particular product.
* Increase the quantity of the product by the given amount.
* @param id The ID of the product.
* @param amount The amount to increase the quantity by.
*/
public void delivery(int id, int amount)
{
}
/**
* Try to find a product in the stock with the given id.
* @return The identified product, or null if there is none
* with a matching ID.
*/
/**
* Locate a product with the given ID, and return how
* many of this item are in stock. If the ID does not
* match any product, return zero.if(nota.contains(cadABuscar))
encontrado= true;
* @param id The ID of the product.
* @return The quantity of the given product in stock.
*/
public int numberInStock(int id)
{
return 0;
}
/**
* Print details of all the products.
*/
public void printProductDetails()
{
Iterator it = stock.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
}
public void id (int id){
while(id < stock.size()){
System.out.println(stock.get(id));
}
}
public void buscar (String ProBuscar){
int id = 0;
boolean encontrado = false;
while (id < stock.size()){
String Product =stock.();
if (Product.contains(ProBuscar)){
encontrado = true;
}
else {
System.out.println("null");
}
}
}
}
me marca mal en el stock.();
Eliminarhola chicos necesit0 ayuda
ResponderEliminarHacer un POO, que pida varios datos enteros, hasta que se ingrese un cero, y los guarde en un vector, para luegomostrar por pantalla aquellos datos enteros pares que estan por debajo del promedio de los datos enteros impares.
quien pueda, se los agradeceria
hola cuanto ejecuto el progrma da error en la parte de los kilometros alguna solucion ya hice lo de añadir public static void pero meda ese error
ResponderEliminarhola,
ResponderEliminarel ejemplo está muy claro y agradezco que compartas tus conocimientos.
Estoy haciendo un carrito de la compra con java EE y estoy en el punto de tener los elementos del carrito en un arrayList de objetos, necesito ahora persistir los objetos o mejor aún recuperar un atributo de cada objeto del arrayList, en concreto el IDdeProducto.
En este ejemplo el arrayList de objetos "Coche" desaparece al cerrar el programa...
Muchas gracias de antemano
Hola, soy estudiante. Necesito ayuda. Debo crear un programa el cual permita capturar 5 nombres diferentes en consola y donde al finalizar deberá mostrar una leyenda y posteriormente los 5 nombres. ( :
ResponderEliminarCordial saludo,
ResponderEliminarExcelente explicación esto es lo que llevaba buscando hace tiempo.
El código es funcional el 100%
Muchas gracias!!!!!!!!!!!!!!!
me fue muy útil, muchas gracias
ResponderEliminarMuchas gracias, estaba bastante atascado en una practica, me ayudaste mucho
ResponderEliminarSuper util
ResponderEliminar