Este tipo de arreglo tiene la misma definición de un Arreglo de datos Primitivos, estos difieren en la instancia que poseen, mas claramente, estos se crean en base a una clase ya existente y definida con sus atributos y métodos correspondientes, recordando: Una clase es la definición de un objeto, ya que esta posee los atributos (características) y funciones (métodos) que describen un objeto. La definición de un Arreglo de Objetos es la misma que un Arreglo de datos Primitivos, su syntaxis es de la siguiente forma:
1 | clase nombreArreglo[] = new clase [numeroElementos]; |
clase nombreArreglo[] = new clase [numeroElementos];
Descargar Ejemplo Arreglo de Objetos en Java
Solo tienes que realizar una acción social para descargar el código fuente del ejemplo, y usarlo sin problemas en Netbeans o eclipse. Ayuda a que este articulo llegue a mas personas.
Como Usar un Arreglo de Objetos en Java?
El uso de este tipo de arreglos es para usar adecuadamente los espacios de memorias reservados por un arreglo, ya que no es lo mismo tener en un campo un valor (De un mismo tipo) que varios valores (De diferentes tipos), pero ya que una imagen vale mas que mil palabras, espero que con la siguiente imagen quede algo mas claro 🙂
Como apreciamos en la anterior imagen podemos almacenar mas de un dato en un solo campo de un arreglo, y no solo mas de un valor, sino también del mismo tipo, supongamos que tenemos un estudiante, este tiene un Código, Nombre, Notas (n1, n2, n3, nF); entonces, en un solo campo podemos almacenar todos los datos de un solo estudiante (Int, String, Double, Double, Double, Double, respectivamente).
Para almacenar datos en este tipo de arreglos es necesario crear un Objeto para manipular la inserción de cada dato en el campo del arreglo. Como ejemplo, mostraré como ingresar, mostrar, buscar y eliminar los datos básicos de un Usuario de Banco (Código, nombre, apellido, teléfono, saldo).
Ejemplo Arreglo de Objetos o Arreglo de Clases
Para empezar crearemos nuestra clase con los datos del Usuario (Código, nombre, apellido, teléfono, saldo) y el encapsulamiento de estos para la manipulación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | package arrobj; import java.math.BigInteger; public class userBanc { private int cod; private BigInteger telefono; private String nombre, apellido; private Double saldo; /** * @return the cod */ public int getCod() { return cod; } /** * @param cod the cod to set */ public void setCod(int cod) { this.cod = cod; } /** * @return the nombre */ public String getNombre() { return nombre; } /** * @param nombre the nombre to set */ public void setNombre(String nombre) { this.nombre = nombre; } /** * @return the apellido */ public String getApellido() { return apellido; } /** * @param apellido the apellido to set */ public void setApellido(String apellido) { this.apellido = apellido; } /** * @return the saldo */ public Double getSaldo() { return saldo; } /** * @param saldo the saldo to set */ public void setSaldo(Double saldo) { this.saldo = saldo; } /** * @return the telefono */ public BigInteger getTelefono() { return telefono; } /** * @param telefono the telefono to set */ public void setTelefono(BigInteger telefono) { this.telefono = telefono; } } |
package arrobj; import java.math.BigInteger; public class userBanc { private int cod; private BigInteger telefono; private String nombre, apellido; private Double saldo; /** * @return the cod */ public int getCod() { return cod; } /** * @param cod the cod to set */ public void setCod(int cod) { this.cod = cod; } /** * @return the nombre */ public String getNombre() { return nombre; } /** * @param nombre the nombre to set */ public void setNombre(String nombre) { this.nombre = nombre; } /** * @return the apellido */ public String getApellido() { return apellido; } /** * @param apellido the apellido to set */ public void setApellido(String apellido) { this.apellido = apellido; } /** * @return the saldo */ public Double getSaldo() { return saldo; } /** * @param saldo the saldo to set */ public void setSaldo(Double saldo) { this.saldo = saldo; } /** * @return the telefono */ public BigInteger getTelefono() { return telefono; } /** * @param telefono the telefono to set */ public void setTelefono(BigInteger telefono) { this.telefono = telefono; } }
Ahora la clase principal, en la cual estará el menú con las operaciones que se pueden realizar con este tipo de arreglos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | package arrobj; import java.math.BigInteger; import javax.swing.JOptionPane; public class ArrObj { int contUser=0, cod=1; //variable llevar control usuarios ingresados userBanc usuario [] = new userBanc[5]; //creando el arreglo de objetos (clase userBanc) public ArrObj(){ //constructor de la clase ArrObj String ax; int op=0; do{ ax = JOptionPane.showInputDialog(null, "1. Ingresar \n" +"2. Mostrar \n" +"3. Buscar \n" +"4. Eliminar \n" +"5. Salir"); if(ax!=null && !ax.equals("")){ op = Integer.parseInt(ax); switch(op){ case 1: ingresar(); break; case 2: mostrar(); break; case 3: buscar(); break; case 4: eliminar(); break; case 5: break; default: JOptionPane.showMessageDialog(null, "No es una opción valida!!!"); } } }while(op!=5); } public void ingresar(){ BigInteger telefono; String nombre, apellido; Double saldo; nombre = JOptionPane.showInputDialog(null, "Ingrese el Nombre del usuario: "); apellido = JOptionPane.showInputDialog(null, "Ingrese el Apellido del usuario: "); telefono = new BigInteger(JOptionPane.showInputDialog(null, "Ingrese el Telefono del Usuario: ")) ; saldo = Double.parseDouble(JOptionPane.showInputDialog(null, "Ingrese el Saldo inicial del Usuario: ")); userBanc temp = new userBanc(); temp.setCod(cod); temp.setNombre(nombre); temp.setApellido(apellido); temp.setTelefono(telefono); temp.setSaldo(saldo); usuario[contUser] = temp; contUser++; cod++; } public void mostrar(){ String ay=""; for(int i=0; i<contUser; i++){ ay+="Codigo: "+usuario[i].getCod()+"\n" + "Nombre: "+usuario[i].getNombre()+"\n" + "Apellido: "+usuario[i].getApellido()+"\n" + "Telefono: "+usuario[i].getTelefono()+"\n" + "Saldo: "+usuario[i].getSaldo()+"\n\n"; } JOptionPane.showMessageDialog(null, ay); } public void buscar(){ String ax; int c; ax = JOptionPane.showInputDialog(null, "Digite el codigo a buscar"); if(ax!=null && !ax.equals("")){ c = Integer.parseInt(ax); ax=""; if(contUser!=0){ for(int i=0; i<contUser; i++){ if(usuario[i].getCod() == c){ ax=""; ax+="Codigo: "+usuario[i].getCod()+"\n" + "Nombre: "+usuario[i].getNombre()+"\n" + "Apellido: "+usuario[i].getApellido()+"\n" + "Telefono: "+usuario[i].getTelefono()+"\n" + "Saldo: "+usuario[i].getSaldo()+"n"; break; } else{ ax="No se ha encontrado el usuario :("; } } JOptionPane.showMessageDialog(null, ax); } } } public void eliminar(){ int c; userBanc alumTemp[] = new userBanc[contUser-1];//creando un arreglo temporal con un campo menos c = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite el codigo del estudiante a eliminar: "));//pidiendo el codigo a eliminar if(c<=contUser){ //si el codigo a eliminar es menor o igual al contador de estudiantes for(int i=0; i<contUser; i++){ //Inicio ciclo para realizar la eliminacion if(c == usuario[i].getCod()){ //si el codigo a aliminar coincide con el codigo que hay en la posicion i continue; //continua con el ciclo } else{ if(usuario[i].getCod() < c) alumTemp[i] = usuario[i];//si esl codigo es menor se almacena tal cual if(usuario[i].getCod() > c){ usuario[i].setCod(i);//si el codigo es mayor se le resta para que quede en consecutivo alumTemp[i-1] = usuario[i]; //se almacena con el nuevo codigo } } } //Fin ciclo para realizar la eliminacion usuario=null; cod--; contUser--; //se hacen las modificaciones para los nuevos valores usuario = new userBanc[5]; //se vuelve a crear el arreglo for(int i=0; i<alumTemp.length; i++){ //se almacenan los valores no eliminados usuario[i]=alumTemp[i]; } } else JOptionPane.showMessageDialog(null, "El estudiante a eliminar no existe !!!"); } public static void main(String[] args) { ArrObj w = new ArrObj(); //creacion del objeto w, llamado al constructor de la clase ArrObj System.exit(0); } } |
package arrobj; import java.math.BigInteger; import javax.swing.JOptionPane; public class ArrObj { int contUser=0, cod=1; //variable llevar control usuarios ingresados userBanc usuario [] = new userBanc[5]; //creando el arreglo de objetos (clase userBanc) public ArrObj(){ //constructor de la clase ArrObj String ax; int op=0; do{ ax = JOptionPane.showInputDialog(null, "1. Ingresar \n" +"2. Mostrar \n" +"3. Buscar \n" +"4. Eliminar \n" +"5. Salir"); if(ax!=null && !ax.equals("")){ op = Integer.parseInt(ax); switch(op){ case 1: ingresar(); break; case 2: mostrar(); break; case 3: buscar(); break; case 4: eliminar(); break; case 5: break; default: JOptionPane.showMessageDialog(null, "No es una opción valida!!!"); } } }while(op!=5); } public void ingresar(){ BigInteger telefono; String nombre, apellido; Double saldo; nombre = JOptionPane.showInputDialog(null, "Ingrese el Nombre del usuario: "); apellido = JOptionPane.showInputDialog(null, "Ingrese el Apellido del usuario: "); telefono = new BigInteger(JOptionPane.showInputDialog(null, "Ingrese el Telefono del Usuario: ")) ; saldo = Double.parseDouble(JOptionPane.showInputDialog(null, "Ingrese el Saldo inicial del Usuario: ")); userBanc temp = new userBanc(); temp.setCod(cod); temp.setNombre(nombre); temp.setApellido(apellido); temp.setTelefono(telefono); temp.setSaldo(saldo); usuario[contUser] = temp; contUser++; cod++; } public void mostrar(){ String ay=""; for(int i=0; i<contUser; i++){ ay+="Codigo: "+usuario[i].getCod()+"\n" + "Nombre: "+usuario[i].getNombre()+"\n" + "Apellido: "+usuario[i].getApellido()+"\n" + "Telefono: "+usuario[i].getTelefono()+"\n" + "Saldo: "+usuario[i].getSaldo()+"\n\n"; } JOptionPane.showMessageDialog(null, ay); } public void buscar(){ String ax; int c; ax = JOptionPane.showInputDialog(null, "Digite el codigo a buscar"); if(ax!=null && !ax.equals("")){ c = Integer.parseInt(ax); ax=""; if(contUser!=0){ for(int i=0; i<contUser; i++){ if(usuario[i].getCod() == c){ ax=""; ax+="Codigo: "+usuario[i].getCod()+"\n" + "Nombre: "+usuario[i].getNombre()+"\n" + "Apellido: "+usuario[i].getApellido()+"\n" + "Telefono: "+usuario[i].getTelefono()+"\n" + "Saldo: "+usuario[i].getSaldo()+"n"; break; } else{ ax="No se ha encontrado el usuario :("; } } JOptionPane.showMessageDialog(null, ax); } } } public void eliminar(){ int c; userBanc alumTemp[] = new userBanc[contUser-1];//creando un arreglo temporal con un campo menos c = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite el codigo del estudiante a eliminar: "));//pidiendo el codigo a eliminar if(c<=contUser){ //si el codigo a eliminar es menor o igual al contador de estudiantes for(int i=0; i<contUser; i++){ //Inicio ciclo para realizar la eliminacion if(c == usuario[i].getCod()){ //si el codigo a aliminar coincide con el codigo que hay en la posicion i continue; //continua con el ciclo } else{ if(usuario[i].getCod() < c) alumTemp[i] = usuario[i];//si esl codigo es menor se almacena tal cual if(usuario[i].getCod() > c){ usuario[i].setCod(i);//si el codigo es mayor se le resta para que quede en consecutivo alumTemp[i-1] = usuario[i]; //se almacena con el nuevo codigo } } } //Fin ciclo para realizar la eliminacion usuario=null; cod--; contUser--; //se hacen las modificaciones para los nuevos valores usuario = new userBanc[5]; //se vuelve a crear el arreglo for(int i=0; i<alumTemp.length; i++){ //se almacenan los valores no eliminados usuario[i]=alumTemp[i]; } } else JOptionPane.showMessageDialog(null, "El estudiante a eliminar no existe !!!"); } public static void main(String[] args) { ArrObj w = new ArrObj(); //creacion del objeto w, llamado al constructor de la clase ArrObj System.exit(0); } }
A tener en cuenta, los métodos set* son los que asignan los valores y los métodos get* son para obtener los valores; de la linea 57 a la 65, podemos ver como es el proceso para asignar valores y usar cada campo del arreglo; en el metodo eliminar, se uso una Modificación en el Tamaño del Arreglo, para hacer el arreglo algo dinamico, y no matarnos la cabeza con redundancia en los códigos almacenados.
alguien que me ayude con un codigo que estoy haciendo y no he podido terminar
una duda como le arias en el ejemplo UserBanco en caso de que el tamaño fuera ingresado por el usuario
una duda en caso de que el tamaño del vector fuera ingresado por el usuario ,como lo arias en la clase UserBanco
Linea 67. Aun no logro entender para que es esa linea. Explicacion por favor.
buenos dias amigos alguien que me ayude con este problema llebo 2 horas intentando y no doy,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
La empresa eléctrica, desea calcular el consumo generado por sus abonados. Por cada uno de ellos se ingresará el código del abonado y el consumo de electricidad en Kw/h. Se pide:
a) Ingresar abonados o clientes hasta que se ingrese una marca de fin de datos, en la cual el código del abonado sea -99.
b) Mostrar el listado de los abonados, el consumo en kw/h, y también mostrar el consumo en dólares pero teniendo en cuenta que si el consumo ingresado es mayor a 125 kw/h cobrarlo a 6 cvos, en otro caso cobrarlo a 4 cvos.
c) Mostrar el número de abonados ingresados
d) Mostrar el consumo de kw/h de todos los abonados.
e) Mostrar el total de cobro que ha realizado la empresa eléctrica.
Proyecto: Taller de Estudiante 1 y Estudiante 2.
Clase: Tablas
Realizar un programa en Java, que realice y muestre las tablas de multiplicar del 2 al 6, y sume sus valores individuales y en conjunto.
Que claro eres. Gracias
disculpe en mi colegio me dejaron algo paresido pero en uno de los casos me mide que modifique algunos datos
el problema es el siguiente:
El almacén Pasteles y más desea un programa el cual contenga el siguiente menú de opciones:
a.- Altas
b.-Bajas
c.-Consultas
d.-Modificaciones
e.-Ventas
f.- Reporte de ventas
g.-Salida del programa
En la opción de altas deberá preguntar la clave del producto, precio, descripción y cantidad en existencia.
Deberá guardar la información en un vector el cual deberá tener capacidad para 100 productos. No debe capturar claves iguales.
En la opción de bajas deberá preguntar la clave del producto y deberá eliminar toda la información que le corresponde.
En la opción de consultas deberá presentar el siguiente menú:
1.- Consultas por clave
2.- Consultas por nombre
3.- Consultas generales ordenadas por clave
4.- Consultas generales ordenadas por nombre
En la opción de modificaciones deberá preguntar la clave del producto que desea modificar y posteriormente presentará el siguiente menú:
1.-Modificar descripción
2.-Modificar precio
3.-Modificar cantidad en existencia
En la opción de ventas deberá preguntar la clave del producto que se desea vender y el mes en el que se realiza la venta. Al momento de realizar la venta se deberá disminuir la cantidad en existencia de ese producto y se almacenará el monto de la venta en una matriz en el mes correspondiente.
En la opción de reporte de ventas deberá imprimir el importe de las ventas por mes.
El programa se repetirá mientras no se seleccione la opción de salir.
Mi codigo es este:
class protien {
int clave, existencia, fecha;
double precio;
String descripcion;
String nombre;
public int getClave() {
return clave;}
public void setClave(int clave) {
this.clave = clave; }
public int getExistencia() {
return existencia; }
public void setExistencia(int existencia) {
this.existencia = existencia; }
public double getPrecio() {
return precio;}
public void setPrecio(double precio) {
this.precio = precio;}
public String getDescripcion() {
return descripcion;}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion; }
public String getNombre() {
return nombre; }
public void setNombre(String nombre) {
this.nombre = nombre;}
public int getFecha() {
return fecha;}
public void setFecha(int fecha) {
this.fecha = fecha; } }
CLASE 2:
import javax.swing.JOptionPane;
public class i {
int conpro = 0, clave = 1;
protien producto[] = new protien[10];
public i() {
String opcion;
int op = 0;
do {
opcion = JOptionPane.showInputDialog(null, «seleccionar una opcion: \n »
+ «1.- altas\n»
+ «2.- bajas\n»
+ «3.- consultas\n»
+ «4.- modificaciones\n»
+ «5.- ventas\n»
+ «6.- reporte de ventas\n»
+ «7.- salir de programacion\n»
+ «ingrese una opccion [1-7]», «Pasteles y mas», JOptionPane.QUESTION_MESSAGE);
if (opcion != null && !opcion.equals(«»)) {
op = Integer.parseInt(opcion);
switch (op) {
case 1:
altas();
break;
case 2:
bajas();
break;
case 3:
consultas();
break;
case 4:
modificasiones();
break;
case 5:
ventas();
break;
case 6:
reportedeventas();
break;
case 7:
JOptionPane.showMessageDialog(null, «que tenga un buen dia»);
System.exit(0);
break;
default:
JOptionPane.showMessageDialog(null, «Eliga una opcion valida\n», «ERROR OPCION», JOptionPane.WARNING_MESSAGE);
}
}
} while (op != 7);
}
public void altas() {
int clave, existencia;
double precio;
String descripcion;
String nombre;
clave = Integer.parseInt(JOptionPane.showInputDialog(null, «ingrese la clave delproducto: «));
nombre = JOptionPane.showInputDialog(null, «ingrese el nombre del producto: «);
existencia = Integer.parseInt(JOptionPane.showInputDialog(null, «ingrese el numero de existencia de producto: «));
descripcion = JOptionPane.showInputDialog(null, «ingrese la descripcio del producto: «);
precio = Double.parseDouble(JOptionPane.showInputDialog(null, «ingrese el precio del producto: «));
protien temp = new protien();
temp.setClave(clave);
temp.setNombre(nombre);
temp.setDescripcion(descripcion);
temp.setPrecio(precio);
temp.setExistencia(existencia);
producto[conpro] = temp;
conpro++;
clave++;
}
public void bajas() {
int c;
protien alumTemp[] = new protien[conpro-1];
c = Integer.parseInt(JOptionPane.showInputDialog(null, «Digite el codigo del producto: «));
if (c <= conpro) {
for (int i=0; i<conpro; i++) {
if (c == producto[i].getClave()) {
continue;
} else {
if (producto[i].getClave() c) {
producto[i].setClave(i);
alumTemp[i-1] = producto[i];
}
}
}
producto = null;
clave–;
conpro–;
producto = new protien[10];
for (int i=0; i<alumTemp.length; i++) {
producto[i] = alumTemp[i];
}
} else {
JOptionPane.showMessageDialog(null, "El producto se a eliminar ya no existe !!!");
}
}
public void consultas() {
String opcion;
int op = 0;
do {
opcion = JOptionPane.showInputDialog(null, "Consultar por: \n "
+ "1.- clave\n"
+ "2.- nombre\n"
+ "3.- consulta general ordenadas por clave\n"
+ "4.- consulta general ordenados por nombre\n"
+ "5.- regresar al menu anterior"
+ "6.- salir\n"
+ "ingrese una opccion [1-6]", "Pasteles y mas", JOptionPane.QUESTION_MESSAGE);
if (opcion != null && !opcion.equals("")) {
op = Integer.parseInt(opcion);
switch (op) {
case 1:
clave();
break;
case 2:
nombre();
break;
case 3:
pornombre();
break;
case 4:
porclave();
break;
case 5:
return;
case 6:
JOptionPane.showMessageDialog(null, "que tenga un buen dia");
System.exit(0);
break;
default:
JOptionPane.showMessageDialog(null, "Eliga una opcion valida\n", "ERROR OPCION", JOptionPane.WARNING_MESSAGE);
}
}
} while (op != 6);
}
public void clave() {
String ax;
int c;
ax = JOptionPane.showInputDialog(null, "Digite introduca la clave a buscar");
if (ax != null && !ax.equals("")) {
c = Integer.parseInt(ax);
ax = "";
if (conpro != 0) {
for (int i = 0; i < conpro; i++) {
if (producto[i].getClave() == c) {
ax = "";
ax += "Codigo : " + producto[i].getClave() + "\n"
+ "Nombre : " + producto[i].getNombre() + "\n"
+ "Descripcio : " + producto[i].getDescripcion() + "\n"
+ "precio : " + producto[i].getPrecio() + "\n"
+ "Existencia : " + producto[i].getExistencia() + "\n";
break;
} else {
ax = "No se ha encontrado el producto :(";
}
}
JOptionPane.showMessageDialog(null, ax);
}
}
}
public void pornombre() {
}
public void porclave() {
}
public void nombre() {}
public void modificasiones() {
String opcion;
int op = 0;
do {
opcion = JOptionPane.showInputDialog(null, "modificar: \n "
+ "1.- descripcion\n"
+ "2.- precio\n"
+ "3.- cantidad existenci\n"
+ "5.- regresar al menu anterior"
+ "6.- salir\n"
+ "ingrese una opccion [1-6]", "modificasiones", JOptionPane.QUESTION_MESSAGE);
if (opcion != null && !opcion.equals("")) {
op = Integer.parseInt(opcion);
switch (op) {
case 1:
descripcion();
break;
case 2:
precio();
break;
case 3:
cantidad();
break;
case 4:
return;
case 5:
JOptionPane.showMessageDialog(null, "que tenga un buen dia");
System.exit(0);
break;
default:
JOptionPane.showMessageDialog(null, "Eliga una opcion valida\n", "ERROR OPCION", JOptionPane.WARNING_MESSAGE);
}
}
} while (op != 5);
}
public void ventas() {
int clave;
int fecha;
clave = Integer.parseInt(JOptionPane.showInputDialog(null, "ingrese la clave delproducto: "));
fecha = Integer.parseInt(JOptionPane.showInputDialog(null, "ingrese la fecha de venta "));
protien temp = new protien();
temp.setClave(clave);
temp.setFecha(fecha);
producto[conpro] = temp;
conpro++;
clave++;
}
public void reportedeventas() {
}
public void precio() {
}
public void descripcion() {
}
public void cantidad() {
}
public static void main(String[] args) {
i w = new i(); //creacion del objeto w, llamado al constructor de la clase ArrObj
System.exit(0);
}
}
donde tienes la clase userBanc? disculpe y gracias por la ayuda
hola tengo un gran problema nose como empezar un trabajo en java usando eclipse , es un partido de fútbol,con las tablas jugador ,equipo,partido al que tengo que ir ingresado a una base de datos donde te pide que ;
Ingresar un equipo y sus jugadores
Crear los partidos
Finalizar un partido
Mostrar la lista de posiciones
Eliminar un jugador
hola muy buen aporte, amigo me podrías ayudar con un programa en java, lo que tengo que hacer es hacer una lista de tipo concepto gasto, que tiene: cantidad presupuestada, cantidad, gastada, clave, concepto,. lo que quiero es hacer una clase especial que manipule el arreglo, con interfaces, osea crear una ListaConceptoGasto, en la lista que pueda agregar otro concepto, ver si existe la clave, ver la posición de la clave, incluir un get que buscara objeto que tenga una clave y lo entregue para la clave, imprimir la lista, y ordenar ya sea por clave o saldo.
tengo el arreglo, pero no se como crear otra clase para ListaConceptoGasto:
clase:
import javax.swing.*;
public class ConceptoGasto {
private String clave;
private String concepto;
private double cantidadpresupuestada;
private double cantidadgastada;
private double b;
public ConceptoGasto()
{
this.clave= new String ();
this.concepto= new String ();
this.cantidadpresupuestada=cantidadpresupuestada;
this.cantidadgastada=cantidadgastada;
this.b=0;
}
public String getclave()
{
return clave;
}
public void setclave(String clave)
{
this.clave=clave;
}
public String getconcepto()
{
return concepto;
}
public void setconcepto(String concepto)
{
this.concepto=concepto;
}
public double getcantidadpresupuestada()
{
return cantidadpresupuestada;
}
public void setcantidadpresupuestada(double cantidadpresupuestada)
{
this.cantidadpresupuestada=cantidadpresupuestada;
}
public double getcantidadgastada()
{
return cantidadgastada;
}
public void setcantidadgastada(double cantidadgastada)
{
this.cantidadgastada=cantidadgastada;
}
public void imprimir()
{
JOptionPane.showMessageDialog(null,» » + » «+ this.clave+ » » + this.concepto + » » + saldo() + » » + this.cantidadgastada+ » «+ this.b);
}
public void sumarGasto(double gasto)
{
cantidadgastada =this.cantidadgastada+gasto;
}
public void cantidadPresupuestada()
{
String cantidad= JOptionPane.showInputDialog(null,»ingresar la cantidad presupuestada:»);
this.b= Double.parseDouble(cantidad);
}
public double saldo()
{
double saldo =this.b – this.cantidadgastada;
//JOptionPane.showMessageDialog(null,»la cantidad presupuestada es: » + saldo);
return saldo;
}
}
ARREGLO:
import javax.swing.JOptionPane;
public class Prueba2
{
public static void main() {
int opcion,c,i = 0;
String p = JOptionPane.showInputDialog(null,»Numeros de arreglos»);
c = Integer.parseInt(p);
ConceptoGasto Re[]= new ConceptoGasto[10];
do
{
String CadMenu=»Menu de conceptos \n\n»;
CadMenu= CadMenu+»1. ingresar datos\n»;
CadMenu= CadMenu+»2. sumar gastos\n»;
CadMenu= CadMenu+»3. saldo\n»;
CadMenu= CadMenu+»4. mostrar datos\n»;
CadMenu= CadMenu+»5. Salir\n»;
String r=JOptionPane.showInputDialog(CadMenu);
opcion=Integer.parseInt(r);
switch(opcion)
{
case 1:
for(i = 0; i<c; i++)
{
Re[i] =new ConceptoGasto();
Re[i].setclave(JOptionPane.showInputDialog("ingrese la clave:"));
Re[i].setconcepto(JOptionPane.showInputDialog("ingrese la concepto:"));
Re[i].cantidadPresupuestada();
}
break;
case 2:
for(i = 0; i<c; i++)
{
String gasto = JOptionPane.showInputDialog(null,"sumar gastos");
Re[i].sumarGasto(Double.parseDouble(gasto));
}
break;
case 3:
for(i = 0; i<c; i++)
{
Re[i].saldo();
JOptionPane.showMessageDialog(null,"la cantidad presupuestada es: " + Re[i].saldo());
}
break;
case 4:
System.out.println(" CONCEPTO GASTO\n ");
System.out.println(" clave: Concepto: Saldo: C.Gastada: C.Presupuestada:");
for(i = 0; i<c; i++)
{
Re[i].imprimir();
}
break;
case 5: JOptionPane.showMessageDialog(null,"Fin");
break;
}
}while(opcion!=5);
}
}
te lo agradeceria mucho amigo!
excelente el tutorial me ayudo mucho pero tengo una duda…. si yo quisiera ingresar otro dato como por ejemplo un numero de identificacion ¿como haria para validar que ese dato no haya sido ingresado antes? y pues si existe que no se cree el objeto o crearlo si no existe
¡Buen aporte!
Hola espero estés bien, mira estoy realizando un pequeño programa con arreglos, los datos del mismo son ingresados por teclado con un ciclo for, pero tengo un problema, no he encontrado la manera de que al estar ingresando los datos y si en alguno no ingreso nada y doy aceptar me aparece un error de compilación. lo siguiente es parte del código que estoy utilizando, espero puedas sugerirme alguna solución, saludos:
cant=Integer.parseInt(this.txtCantidad.getText());
int arreglo[]=new int[cant];
for(int i=0;i<arreglo.length;i++){
arreglo[i]=Integer.parseInt(JOptionPane.showInputDialog(null, "ingresa el valor " + (i+1) + " del arreglo"));
while(!isNumber(null)){
arreglo[i]=Integer.parseInt(JOptionPane.showInputDialog(null, "dato invalido, ingrese un dato correcto"));
}
y este es el método que utilizo pero no me sirve :
private static boolean isNumber(String n){
try{
Integer.parseInt(n);
return true;
}catch(NumberFormatException nfe){
return false;
}
}
Disculpa en tu método mostrar() guardas todos los datos en una cadena pero nunca la muestras, o al menos no lo veo estoy en lo cierto? O en que parte lo muestras?
Mi error por un momento vi un if en vez de un for… Mea culpa :v
Excelente tutorial me has salvado de un parcial!! 😀
Excelente tutorial.
Tengo una consulta y espero puedas ayudarme. Para modificar, en este caso «n» como haría?
Saludos
Tengo una pregunta, se puede hacer un arreglo de una clase abstracta?
Hola miguel, claro que si 😀 Espero tener algo de tiempo para seguir con lo de java. Aunque la idea es mostrar otras cosas interesantes, como Laravel 5.
excelente we
lo que has posteado me ha servido en grande,
he logrado adaptarlo a mi proyecto y del más malo, he pasado al mejor proyecto de la clase XD jajajajajaj
analizar, deducir, adaptar, implementar y mejorar XD
es básicamente lo que he hecho.
Que bueno que te haya servido! Esa es la idea, que puedan tomar el código y mejorarlo. Saludos 🙂
Buenas como esta disculpa una pregunta, en tu primer programa de userbanc justo en el menú a la ejecución supongamos que el usuario te ingreso por equivocación una letra como evitas eso porque en tu programa ingresas como opción una letra y sale un error
Muchas gracias
Hola amigo, para esto es necesario un pequeño método para saber si lo que se ingresa es numero o no. El método es el siguiente:
Luego, justo en la linea 22 tendrás que añadir el llamado a este método, pasando como parámetro el valor que se ingrese, debería quedar justo de la siguiente manera:
Y listo! Con esto, cada vez que se ingrese un texto, se volverá a mostrar el menú, si deseas tener un mensaje personalizado con respecto al texto, la invocación del método tendrás que hacerlo en otra condicional, y así mostrar el mensaje que desees. Saludos 🙂
Hola, tengo que hacer algo parecido a lo de arriba, pero cuando integro lo que quiero siempre me tira error.
Este es mi código:
package funciones;
import java.math.BigInteger;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class menuinternet {
int j;
int contUser=0, cod=1; //variable llevar control usuarios ingresados
userBanc usuario [] = new userBanc[5]; //creando el arreglo de objetos (clase userBanc)
public menuinternet(){ //constructor de la clase ArrObj
String ax;
int op=0;
do{
ax = JOptionPane.showInputDialog(null, «1. fs»
+»2. Cubo»
+»3. fact»
+»4. Math»
+»5. Phisics»
+»6. Salida»);
if(ax!=null && !ax.equals(«»)){
op = Integer.parseInt(ax);
switch(op){
case 1:
fs();
break;
case 2:
Cubo();
break;
case 3:
fact();
break;
case 4:
Math();
break;
case 5:
Phisics();
break;
case 6:
break;
default:
JOptionPane.showMessageDialog(null, «No es una opción valida!!!»);
}
}
}while(op!=5);
}
private void fs() {
// TODO Auto-generated method stub
float a; float b; float resu;
System.out.println(«Ingrese Un valor Decimal»);
a = System.in.read();
System.out.println(«Ingrese Un valor Decimal Dos»);
b = System.in.read();
resu = fs (a,b);
System.out.println(resu);
System.out.println(«Ingrese Un valor Decimal Tres»);
int c = System.in.read();
System.out.println(cubo(c));
j = fact(c);
System.out.println(j);
}
private float Cubo() {
// TODO Auto-generated method stub
float fs; float n1; float n2;{
float suma = n1 + n2;
return suma;
}
}
private int fact() {
// TODO Auto-generated method stub
int cubo; int n1;{
int cub = n1 * n1 * n1;
return cub;
}
}
private void Math() {
// TODO Auto-generated method stub
Scanner c;
c = new Scanner(System.in);
System.out.println(«LONGITUD DE UN CIRCULO»);
System.out.println(«Cuál es el Radio de la Circunferencia»);
int radio = c.nextInt();
if (radio > 0){
System.out.println(«FÓRMULA»);
System.out.println(«LONGITUD = 2 * RADIO * π»);
System.out.println(«La Longitud es:»);
System.out.println(Math.PI * radio * 2);
}
}
private void Phisics() {
// TODO Auto-generated method stub
Scanner c;
c = new Scanner(System.in);
int aceleracion;
int vi;
int vf;
int t;
int a;
System.out.println(«ACELERACIÓN»);
System.out.println(«Velocidad Inicial»);
vi = c.nextInt();
System.out.println(«Velocidad Final»);
vf = c.nextInt();
System.out.println(«Tiempo»);
t = c.nextInt();
aceleracion = (vf – vi);
a = (aceleracion / t);
System.out.println(«FÓRMULA»);
System.out.println(«ACELERACIÓN = Velocidad Final – Velocidad Inical / Tiempo»);
System.out.println(«La Aceleracion es:»);
System.out.println(a);
}
public static void main(String[] args) {
menuinternet w = new menuinternet(); //creacion del objeto w, llamado al constructor de la clase ArrObj
System.exit(0);
}
}
Hola disculpa la demora 😀 Pero por cuestiones personales he tenido bastante abandonado el blog. Ahora bien, he encontrado ciertas cosas, como en el menu, usa saltos de linea para hacer un menu mas chevere, te solucione el ciclo del menu 😉 El siguiente codigo es lo que pude mirar:
Mira la linea 72, la cual tiene el problema. Saludos.
Hola amigo gran sitio, mi pregunta es que tengo un vector de objetos y lo ordeno con metodo de burbuja pero al ordenalo alfabeticamente lo ordena solo los nombres el resto queda igual no cambia como haria para corregirlo
void ordenar(){
for(int k=0;k<2;k++) {
for(int f=0;f0) {
String aux;
aux=datos[f].getNombre();
datos[f].setNombre(datos[f+1].getNombre());
datos[f+1].setNombre(aux);
}
}
}
}
Hola luis 🙂 Primero dejame disculpar por la demora en contestarte. Segun lo que veo es que estas ordenando directamente. Para hacer lo que quieres tienes que manejar una condicional y un arreglo temporal para manejar los datos a ordenar. Este ejercicio lo tengo en el articulo sobre como modificar el tamaño de un arreglo, exactamente en la funcion public void arreDin. Espero analises el codigo y saques lo que necesitas 😉
hay un falla en el codigo en el menu de opciones
do{
en le case 5:
si le pusieras System.exit(0);
break;
y luego el default: estaria mejor
}while(op!=5);
ya que si lo dejas como esta al selecionar las opcion 5 de salir
esta bien sale de la aplicacion pero muestra el mensaje del default
Hola luizander, he corregido lo que propones, pero no es una falla como tu dices, si te fijas en el método Main, esta la instrucción para salir de la aplicación 😉 Lo del mensaje de default no lo quise añadir, ya que el programa funciona para lo que es el ejemplo, gracias por tu aporte 🙂 Saludos !
Buenos dìas, tengo una duda.. mi idea es poder realizar un objeto de tipo vector que al ingresar en ese objeto indique la posicion que va colocando el bucle, pero que igualmente tome en cuenta el metodo que estoy llamando:
Este es mi caso:
case «a»:
System.out.println(«Cuantas casas desea ingresar:»);
InputStreamReader l = new InputStreamReader(System.in);
BufferedReader o = new BufferedReader(l);
n = Integer.parseInt(o.readLine());
obj [] p2 = new obj[n];
int f = p2.lenght;
for(int i=0; i<f;i++){
p2[i].pedirdatos();
}
Dice que tiene un error: que da un valor nulo y no entiendo el porque… Y no quiere ingresar al metodo de pedir datos. Agradecerìa tu respuesta.
Hola Carolina, cuando ingreses datos en una posición tienes que usar el operador de asignación = ; en tu caso seria p2[i] = pedirdatos(); ten en cuenta que los datos que recibas tienen que contener los mismos datos que tiene tu objeto, en otras palabras, si tu objeto contiene un entero, un string, son estos valores que debes de pedir. Como valor agregado, te recomiendo que quites ese entero f y pongas directamente en el for el p2.lenght.
Muchas gracias, era p2[i]= new obj(); que me faltaba. Sabes que como es vector yo necesito que ingrese, varias veces diferentes datos. En este caso lo hace, pero sucede que pido cuantas casas desea ingresar ejemplo: ingreso 2. Ingreso el nombre el apellido la direccion dos veces pero esos datos los copio de un .txt y los pego a la consola, apena termino se queda esperando datos empiezo a teclear enter como corriendo espacios y termina. Pero me di cuenta que al momento de imprimir solo me imprime el primer lote, es decir el primer nombre apellido direccion y el segundo lote no lo guarda mucho menos lo imprime no entiendo porque…..
Buenas noches, gracias por la colaboración en la pregunta anterior, pero tengo otro problema en el siguiente ejercicio:
Tengo estas dos clases:
package testmicoleccion;
import java.util.*;
public class TestMiColeccion {
public static void main(String arg[]){
System.out.println(«Mi Coleccion 1»);
MiColeccion mc1=new MiColeccion();
mc1.insertarAlFinal(1);
mc1.insertarAlFinal(2);
mc1.insertarAlFinal(3);
mc1.insertarAlPrincipio(4);
mc1.mostrarContenido();
ArrayList al= new ArrayList();
al.add(9);
al.add(10);
al.add(11);
mc1.agregarAlFinal(al);
mc1.mostrarContenido();
mc1.eliminar(0);
mc1.eliminar(5);
mc1.mostrarContenido();
mc1.setValor(0,0);
mc1.setValor(6,0);
mc1.mostrarContenido();
System.out.println(«En la posicion 4 esta el «+mc1.getValor(4));
System.out.println(«La sumatoria de sus elementos es:»+mc1.getSumatoria());
System.out.println(«El promedio de sus elementos es:»+mc1.getPromedio());
System.out.println(«En la coleccion hay «+mc1.cuentaElementos()+» elementos»);
System.out.println(«Y hay «+mc1.cuentaCeros()+ » ceros»);
System.out.println(«La sumatoria de los pares es: «+mc1.sumaPares());
System.out.println(«El numero 2 esta «+mc1.cuentaRepeticiones(2)+ » veces»);
mc1.reemplazarValor(0,9);
mc1.mostrarContenido();
mc1.reemplazarTodo(al);
mc1.mostrarContenido();
System.out.println(mc1.invertir());
System.out.println(«El mayor elemento es: «+mc1.getMayor());
System.out.println(«El menor elemento es: «+mc1.getMenor());
mc1.insertarAlFinal(1);
mc1.insertarAlFinal(2);
mc1.insertarAlFinal(3);
mc1.mostrarContenido();
System.out.println(mc1.getPrimeros(2));
System.out.println(mc1.getUltimos(2));
mc1.mostrarContenido();
System.out.println(«Palindrome=»+mc1.esPalindrome());
System.out.println(«Esta el 3 en la lista? «+mc1.buscar(3));
}
}
y…
package testmicoleccion;
import java.util.*;
public class MiColeccion {
int Valor, valor, posicion, sumatoria, cuentaelementos, cuentaceros, sumapares, antiguoValor, nuevoValor, mayor, menor, numero;
List al;
double promedio;
ArrayList invertir;
boolean espalindrome, buscar;
int eliminar;
public MiColeccion () {
}
void insertarAlFinal(int valor) {
this.valor=valor;
sumatoria +=valor;
}
void insertarAlPrincipio(int valor) {
this.valor=valor;
sumatoria +=valor;
}
void agregarAlFinal(ArrayList al) {
this.al=al;
int i;
int sum = 0;
for (i=0; i< al.size(); i++)
{
int num= (int) al.get(i);
sum += num;
}
sumatoria +=sum;
}
void eliminar(int posicion ) {
this.posicion=posicion;
}
void setValor (int posicion, int valor) {
}
int getValor (int posicion) {
return posicion;
}
int getSumatoria() {
return sumatoria;
}
double getPromedio() {
return promedio;
}
int cuentaElementos() {
return cuentaelementos;
}
int cuentaCeros() {
return cuentaceros;
}
int sumaPares() {
return sumapares;
}
int cuentaRepeticiones(int numero) {
return numero;
}
void reemplazarValor(int antiguoValor, int nuevoValor) {
this.antiguoValor=antiguoValor;
this.nuevoValor=nuevoValor;
}
void reemplazarTodo(List al) {
this.al=al;
}
ArrayList invertir() {
return invertir;
}
int getMayor() {
return mayor;
}
int getMenor() {
return menor;
}
int getPrimeros(int cantidad) {
return cantidad;
}
int getUltimos(int cantidad) {
return cantidad;
}
boolean esPalindrome() {
return espalindrome;
}
boolean buscar(int numero) {
return buscar;
}
void mostrarContenido() {
}
Mi pregunta es como hago para que cuando diga por ejemplo void eliminar (int posición) me tome el valor que esta representando la posición y no el número de la posición….
Muchas gracias por tu ayuda…..
Hola Marcela, cuando haces esto: MiColeccion mc1=new MiColeccion(); creas un objeto y manipulas sus atributos, en ningún momento eso tiene que ver con un arrayList 😛 Ahora, esto si es un arrayList: ArrayList al= new ArrayList(); pero solo estas añadiendo elementos, mas no usando como debería de ser, para eliminar un elemento en determinada posición lo haces por un bucle, luego comparas haciendo lo siguiente:
Ademas, los arryList son arreglos dinámicos, osea, si se elimina un elemento la posición de los demás se afectaran. Gracias a tu pregunta estoy preparando la explicación de este concepto, pronto publicare unos cuantos ejemplos 😉
Muchísimas gracias por tu colaboración, y en verdad deberías publicar los ejemplos.
Gracias.
Buenas noches, muchísimas gracias por publicar este ejercicio. Pero quisiera preguntarte en el lugar donde tu programas para buscar un código, como seria si lo que necesito buscar es un nombre y cuando lo encuentre me publique todos los apellidos con dicho nombre. Te agradecería muchísimo tu ayuda.
Hola Marcela, para tal cuestión te recomiendo usar un arreglo bidimensional, imagina 3 columnas donde se tenga el nombre, el primer apellido y segundo apellido, cuando encuentre el nombre en la columna 1, se muestre la informacion de las columnas 2 y 3. Para mas claridad revisa lo que son los arreglos bidimensionales. Éxitos !
buen trabajo men, pero en tu trabajo si se ingresan mas de 5 objetos no veo q redefinas el tamaño del vector de objetos ( q es lo que quiero aprender ) tambien quisiera save si es posible definir el tamaño del vector por entrada de teclado porque hay es donde caben mis mayores dudas
Hola fernando, gracias por tu comentario 😀 En un anterior ejemplo con arreglos realice un ejercicio donde se modifica o re define el tamaño del arreglo, como también se ingresa el tamaño del arreglo a usar, el ejercicio trataba sobre Modificar el Tamaño de un Arreglo, espero te sirva. Saludos 🙂
Como sería para ordenarlos sin usar SORT comparator etc es mi duda se puede?
Hola:
Excelente ejemplo, pero tengo una duda sobre cómo se debe estructurar un programa con POO.
No deberian estás los metodos del objeto (agregar, eliminiar, buscar, etc) dentro de la calse del objeto? es decir, donde están los metodos set/get.
Gracias!
Hola, gracias por tu comentario 😀 La POO es bastante flexible, si tu quieres poner tales métodos en dicha clase bien puedes hacerlo, el resultado sera el mismo 🙂 En cuanto a la estructura tienes la razón, pero trato de seguir un hilo, mas adelante daré guías de lo que tu hablas 🙂
porfavor ayudeenme con este ejercicio
Mis saludos implementar un programa que permita calcular el área, longitud y diámetro. Almacenarlo en un arreglo de objetos. Implementar la búsqueda de datos en el arreglo de objetos.
O muy buen ejemplo.
gracias por compartir .
uy no te pasaste de capo
vengo de mas de 10 sitios web viendo esto de objetos
y tu les ganas de lejos
y una pregunta
es aconsejable crear una clase dentro de otra????
Este tipo de anidamiento tiene sus ventajas una de estas es la siguiente:
– La clase anidada (clase interna) puede acceder a todos los atributos y métodos de la clase contenedora (incluso los privados) pero la clase contenedora no.
Si quieres una explicación mas completa la encontraras aquí.
Saludos 😉
buenos dias amigo mucho gusto moises durante, soy de colombia , por fafor necesito ayuda, me mandaron hacer un vector en java o c++ , con los metodo de ORDENAMIENTO DE BURBUJA , ORDENAMIENTO SHELL ,ORDENAMIENTO POR INSERCION ORDENAMIENTO POR SELECCION