Foro Oficial de Java

JKXL

Lanero Reconocido
Se unió
9 Sep 2009
Mensajes
1,061
Hola
.
Soy nuevo en el foro y en el mundo de java. Estoy realizando un ejercicio que me piden con las siguientes características:

Practicar haciendo una aplicación llamada PruebaLaptop que utilice una clase Laptop, dicha clase deberá de tener los siguientes descriptores: Manejar como variables de instancia: Marca (String), Modelo (String), Tamaño de Memoria (integer) y Precio (double) Menejar como variable estática: cuenta (integer. Investiga esto, se comporta igual que un método estático). Tener un constructor que cree un objeto Laptop sin parámetros Tener un constructor que cree un objeto Laptop con los 4 parámetros Tener los métodos de acceso correspondiente Tener los métodos modificadores correspondientes Tener un método estático que regresa el valor de la variable cuenta (integer)
La variable cuenta debe ser definida como estática, junto con las demás variables de instancia y con un valor de cero:
private static int cuenta = 0;
Cada constructor deberá incrementar esta variable en uno.
Crea una aplicación como las definidas en la lectura, que cree al menos 3 objetos de la clase Laptop y que muestre el uso de todos los métodos de la clase, utilizando para ello, los diferentes objetos creados, cada vez que modifiques algún valor de algun objeto, es importante que despliegues todos los objetos utilizados. Deberás utilizar el método estático.

El problema está en que no sé como llamar a un objeto específico para modificar algún parámetro.

A ver si me podéis ayudar. Mi código es el siguiente:

Esta es mi clase PruebaLaptop:

import java.awt.*;
import java.applet.*;
import java.awt.event.*;



public class PruebaLaptop extends Applet implements ActionListener {

Label l1, l2, l3, l4;
TextField t1, t2, t3, t4;
Button b1, b2, b3, b4, b5;
Panel p1, p2;
TextArea ta1;

Laptop laptop;

public PruebaLaptop() {
l1 = new Label("Marca");
l2 = new Label("Modelo");
l3 = new Label("Tamaño de Memoria");
l4 = new Label("Precio");
t1 = new TextField();
t2 = new TextField();
t3 = new TextField();
t4 = new TextField();
b1 = new Button("Crear");
b2 = new Button("Cambiar Marca");
b3 = new Button("Cambiar Modelo");
b4 = new Button("Cambiar Memoria");
b5 = new Button("Cambiar Precio");
p1 = new Panel(new GridLayout(8, 1, 10, 10));
p2 = new Panel();
ta1 = new TextArea("", 30, 30, TextArea.SCROLLBARS_VERTICAL_ONLY);
p1.add(l1);
p1.add(t1);
p1.add(l2);
p1.add(t2);
p1.add(l3);
p1.add(t3);
p1.add(l4);
p1.add(t4);
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b4);
p2.add(b5);

setLayout(new BorderLayout());
add(p1, BorderLayout.NORTH);
add(p2, BorderLayout.CENTER);
add(ta1, BorderLayout.SOUTH);

b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);



}

public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == b1) {
if ("".equals(t1.getText())) {
laptop = new Laptop();

}else
laptop = new Laptop((t1.getText()),
(t2.getText()),
(Integer.parseInt(t3.getText())),
(Double.parseDouble(t4.getText())));
}

if (ae.getSource() == b2) {
laptop.setMarca(t1.getText());
}

if (ae.getSource() == b3) {
laptop.setModelo(t2.getText());
}

if (ae.getSource() == b4) {
laptop.setMemoria(Integer.parseInt(t3.getText()));
}

if (ae.getSource() == b5) {
laptop.setPrecio(Double.parseDouble(t4.getText()));
}


ta1.append(" " + laptop.getMarca());
ta1.append(" " + laptop.getModelo());
ta1.append(" " + laptop.getPrecio());
ta1.append(" " + laptop.cuantasCuenta() + "\n");
}


Esta mi clase Laptop:

public class Laptop {

private String marca;
private String modelo;
private int memoria;
private double precio;
private static int cuenta = 0;

//Constructor sin parámetros
public Laptop(){
marca = "Desconocida";
modelo = "Desconocido";
memoria = 0;
precio = 0.0;
cuenta++;
}
//Constructor con parámetros
public Laptop(String marca, String modelo, int memoria, double precio){
this.marca = marca;
this.modelo = modelo;
this.memoria = memoria;
this.precio = precio;
cuenta++;
}
//Método estático que regresa el valor de la variable cuenta
public static void contarCuenta() {
cuenta++;
}

public String getMarca() {
return marca;
}

public String getModelo() {
return modelo;
}

public int getMemoria() {
return memoria;
}

public double getPrecio() {
return precio;
}

public static int cuantasCuenta() {
return cuenta;
}


public void setMarca(String nuevaMarca){
this.marca = nuevaMarca;
}

public void setModelo(String nuevoModelo) {
this.modelo = nuevoModelo;
}

public void setMemoria(int nuevaMemoria) {
this.memoria = nuevaMemoria;
}

public void setPrecio(double nuevoPrecio) {
this.precio = nuevoPrecio;
}
}

Bueno, según lo que te entendí, primero, ¿para qué "contarCuenta()" si igual en el constructor lo sumas?, segundo, ¿y si guardas los objetos "laptop" en un array?, y accedes a ellos por el índice.

Saludos!
 

Parsifal Poirot

Lanero Activo
Se unió
15 Sep 2013
Mensajes
3
Gracias Jorgealexl.

Vale. contarCuenta() eliminado. He investigado los arrays pero, teniendo en cuenta que cada objeto Laptop tiene cuatro atributos (marca, modelo, memoria y precio) no sé como crear un array con ellos. Además es un tema que aún no hemos tocado en el curso y me estaría adelantando.
¿Cómo puedo llamar a un objeto determinado para modificar algún atributo? Por ejemplo, quiero modificar el precio del Laptop 1
 
Última edición:

[sC+].Kmilocho

Lanero Reconocido
Se unió
24 May 2009
Mensajes
1,914
Si está en la misma clase basta con referenciar el objeto seguido de un punto y el atributo.

System.out.print(objeto.atributo1);
objeto.atributo1 = 232;

Y sin ánimo de parecer grosero, estas dudas se resuelven fácilmente realizando una búsqueda sencilla en Google o similares, obtendrá la respuesta más rápidamente y hasta con mejores explicaciones.
 

JKXL

Lanero Reconocido
Se unió
9 Sep 2009
Mensajes
1,061
Mmm sin arrays, creas los laptop1, laptop2... y haces como dijo Kmilocho, para modificar a laptop1 lo llamas como laptop1.setValor(valor a guardar), porque los atributos son privados.

Quedaría algo así:

Laptop laptop1 = new Laptop(...);
Laptop laptop2 = new Laptop(...);

//Para modificar

laptop1.setPrecio(precio);

Saludos!
 

Parsifal Poirot

Lanero Activo
Se unió
15 Sep 2013
Mensajes
3
Gracias por responder Kmilocho. Tienes razón tu respuesta ya la había encontrado en Google pero no es lo que necesito. De todas maneras gracias y perdona por la molestia.
JorgealexI. Me has aclarado las ideas y creo que desde el principio he tenido mal el enfoque. Gracias.
 

roger2210

Lanero Reconocido
Se unió
15 Oct 2010
Mensajes
107
hola laneros tengo un problema con un proyecto de la u , tengo una base de datos en acces y quiero que esos datos me los muestre en la jtable que tengo el codigo es el siguiente:

void cargartabla(){
String[] titulos={"NOMBRE","COSTO","FECHA","CUOTAS","TOTAL"};
String[] fila=new String[5];
model= new DefaultTableModel(null,titulos);
conectar con= new conectar();
con.conexion();
String sql="select * from gastos";
try{

sentencia=conectar.createStatement();

rs=sentencia.executeQuery(sql);
while(rs.next()){
fila[0]=rs.getString("Nombre");
fila[1]=rs.getString("Costo");
fila[2]=rs.getString("Fecha");
fila[3]=rs.getString("Cuotas");
fila[4]=rs.getString("Faltan");
model.addRow(fila);

}
tgastos.setModel(model);

}
catch(Exception ex){JOptionPane.showConfirmDialog(null,"ERROR :" + ex);
}

}

la base de datos solo cuenta con 5 columnas Nombre Costo Fecha Cuotas Faltan al ejecutar el programa me sale un error java.lang.nullpointerexception estaba investigando y tengo todo declarado y la base de datos tiene informacion , el que me pueda ayudar muchas gracias.
 

jpgu7

Lanero Reconocido
Se unió
20 Feb 2009
Mensajes
604
Primero decirle que el código es mero desorden, lee un poco respecto al principio SOLID. Lo más seguro es que no se está conectando a la Base de Datos, igualmente postea la traza. Saludos.
 

lanero12

Lanero Reconocido
Se unió
22 May 2007
Mensajes
171
Amigos lanero soy juevo en programacion, alguien sabe como se resuelve estos ejercicios:
1. Ingresar n números enteros a un vector, luego ingrese un numero, si el numero ingresado se encuentra dentro del vector, que muestre su posición, caso contrario mostrar el mensaje: “El numero no está en el arreglo”.
2. En una competencia de lanzamiento de bala se almacena en un vector los nombres de N participantes y en otros vectores las distancias obtenidas en los 3 intentos respectivos, se pide mostrar el nombre del participante que obtuvo la mayor distancia promedio, en caso exista más de un ganador mostrar los nombres de todos estos.
3. Guardar N números enteros en un vector A y M números enteros otro vector B, luego trasladar los números pares del vector A al final de B.
4. Ingresar a un vector de tamaño N números enteros, e intercambiar el primer número par por el último número par. En caso no exista ningún número par mostrar un mensaje respectivo.
5. Ingresar a un vector de tamaño N números enteros, e intercambiar el primer número múltiplo de 7 por el último número impar. En caso no exista ningún número múltiplo de 7 mostrar un mensaje respectivo.
 

Oesoto

Director de Comunidad
Miembro del equipo
Lanero VIP
Se unió
28 Abr 2004
Mensajes
28,184
Amigos lanero soy juevo en programacion, alguien sabe como se resuelve estos ejercicios:
1. Ingresar n números enteros a un vector, luego ingrese un numero, si el numero ingresado se encuentra dentro del vector, que muestre su posición, caso contrario mostrar el mensaje: “El numero no está en el arreglo”.
2. En una competencia de lanzamiento de bala se almacena en un vector los nombres de N participantes y en otros vectores las distancias obtenidas en los 3 intentos respectivos, se pide mostrar el nombre del participante que obtuvo la mayor distancia promedio, en caso exista más de un ganador mostrar los nombres de todos estos.
3. Guardar N números enteros en un vector A y M números enteros otro vector B, luego trasladar los números pares del vector A al final de B.
4. Ingresar a un vector de tamaño N números enteros, e intercambiar el primer número par por el último número par. En caso no exista ningún número par mostrar un mensaje respectivo.
5. Ingresar a un vector de tamaño N números enteros, e intercambiar el primer número múltiplo de 7 por el último número impar. En caso no exista ningún número múltiplo de 7 mostrar un mensaje respectivo.

Para comenzar a resolver estos problemas se empieza por escribir la solución en palabras, un pseudocódigo. Que avance lleva por esa parte y qué dificultades puntuales ha tenido?
 

lanero12

Lanero Reconocido
Se unió
22 May 2007
Mensajes
171
Para comenzar a resolver estos problemas se empieza por escribir la solución en palabras, un pseudocódigo. Que avance lleva por esa parte y qué dificultades puntuales ha tenido?
Hola; en java estoy comenzando recien... eh avanzado del primer ejecicio:
import java.util.Scanner;

public class Cuatro{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int[] numero; // Vector
int n; // Cantidad de numeros a almacenar.

System.out.println("Ingresar cantidad de números al vector");
n = in.nextInt();

numero = new int[n]; // Inicialización del vector
// Ingresando datos
for(int i = 0; i < numero.length; i++){
System.out.print("Ingrese numero " + (i+1) + ": ");
System.out.println("El numero ingresado es: " + numero);
}
pero me falta... que mas debo hacer, ayudame man
 

lanero12

Lanero Reconocido
Se unió
22 May 2007
Mensajes
171
Antes de pensar en el código piense en la lógica de la solución.

Está haciendo el trabajo al revés

Ok man, veamos el primer ejercicio vale: Ingresar n números enteros a un vector, luego ingrese un numero, si el numero ingresado se encuentra dentro del vector, que muestre su posición, caso contrario mostrar el mensaje: “El numero no está en el arreglo”.

Mi logica dice:
Leer N numeros (ejemplo 3) ingresar n1, ingresar n2, ingresar n3; Leer numero NUM, comparar si NUM se encuentra dentro del vector (comparar), Mostrar posicion () caso contrario mostrar mensaje.
Algo asi man?¿
 

sábado

Castrochavista.
Se unió
25 Ago 2010
Mensajes
6,084
Ok man, veamos el primer ejercicio vale: Ingresar n números enteros a un vector, luego ingrese un numero, si el numero ingresado se encuentra dentro del vector, que muestre su posición, caso contrario mostrar el mensaje: “El numero no está en el arreglo”.

Mi logica dice:
Leer N numeros (ejemplo 3) ingresar n1, ingresar n2, ingresar n3; Leer numero NUM, comparar si NUM se encuentra dentro del vector (comparar), Mostrar posicion () caso contrario mostrar mensaje.
Algo asi man?¿

si exacto. Y el código va bien, solo que si te piden un vector deberías usar un Vector en lugar de un arreglo de enteros. Leete la javadoc del objeto Vector: http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html
 

jared dourden

Lanero Reconocido
Se unió
14 Nov 2013
Mensajes
318
si exacto. Y el código va bien, solo que si te piden un vector deberías usar un Vector en lugar de un arreglo de enteros. Leete la javadoc del objeto Vector: http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html
no lo confundas son ejercicios basicos, le estan preguntando por un simple array que en nuestro idioma se llama vector.
basicamente le falta lo que el mismo dice:
comparar si NUM se encuentra dentro del vector (comparar), Mostrar posicion () caso contrario mostrar mensaje.
 

latxor

Lanero Reconocido
Lanero VIP
Se unió
18 Jul 2006
Mensajes
4,828
Señores una pregunta.

Tengo una String que me da un web services, esta es un xml.
Código:
<ArrayAdapter>
  <Cliente>
          <Id></Id>
          <Nombre></Nombre>
          <Telefono></Telefono> 
  </Cliente>
  <Cliente>
          <Id></Id>
          <Nombre></Nombre>
          <Telefono></Telefono> 
  </Cliente>
  <Cliente>
          <Id></Id>
          <Nombre></Nombre>
          <Telefono></Telefono> 
  </Cliente>
</ArrayAdapter>

necesito pasarla a un array de cliente o una list<Cliente> de la clase cliente, como carajos lo hago? alguien tiene idea de como hacerlo?

esto es una prueba que necesito hacer, porque la vista que me va a pasar el web services de producción es algo parecido.

gracias de antemano.
 

[sC+].Kmilocho

Lanero Reconocido
Se unió
24 May 2009
Mensajes
1,914
Se refiera a leer del XML? Acá hay algo que le puede servir, hay muchas formas de hacerlos, la siguiente es una, solo que se carga en un Hashtable.

La estructura del XML:


<?xml version="1.0" encoding="UTF-8"?>

<clientes>
<Cliente>
<nombre>Juanito Parra</nombre>
<cedula>1080446310</cedula>
<user>ccpam</user>
<clave>1185</clave>
</Cliente>
<Cliente>
<nombre>Jaimito Ossa</nombre>
<cedula>1133358364</cedula>
<user>meosiusa</user>
<clave>free</clave>
</Cliente>
</clientes>


Código:
public static Hashtable<String, Cliente> cargarClientes() {

        Hashtable<String, Cliente> listaClientes = new Hashtable<String, Cliente>();

        datos = new String[4]; //Array que contendrá los 4 datos de cada Cliente

        try {

            //Construimos un DocumentBuiilder
            DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            //Se procesa el XML y se obtiene el objeto Document
            Document doc = documentBuilder.parse(new InputSource(new FileInputStream("clientes.xml")));

            //Obtengo raíz
            Element raizPersonal = doc.getDocumentElement();

            //Obtengo lista de nodos hijos de la raíz "clientes"
            //Obtengo hijos
            NodeList hijosDeRaiz = raizPersonal.getElementsByTagName("Cliente");

            //Iteramos sobre los hijos
            for (int i = 0; i < hijosDeRaiz.getLength(); i++) {
                Node nodo = hijosDeRaiz.item(i);          //Obtengo una entrada en cada iteracción
                NodeList subNodos = nodo.getChildNodes();  //Guardo lista de datos de cada cliente

                for (int j = 0; j < subNodos.getLength(); j++) {
                    String dato = subNodos.item(j).getTextContent(); //Obtengo el contenido de cada dato del Cliente
                    datos[j] = dato;
                }
                listaClientes.put(datos[2], new Cliente(datos[0], datos[1], datos[2], datos[3]));
            }

        } catch (Exception e) {
        }

        return listaClientes;

Leyendo el XML me daba varios problemas con los saltos de línea y tabuladores pues los toma como otros hijos, nodos, ya no recuerdo, mi solución fue eliminar todo eso y todo el contenido del XML quedaba en una sola línea. :p Algo así:


<?xml version="1.0" encoding="UTF-8"?>

<clientes><Cliente><nombre>Juanito Parra</nombre><cedula>1096343210</cedula><user>ccopram</user><clave>1966</clave></Cliente><Cliente><nombre>Jaimito Ossa</nombre><cedula>1122668364</cedula><user>meopsasa</user><clave>free</clave></Cliente></clientes>
 

latxor

Lanero Reconocido
Lanero VIP
Se unió
18 Jul 2006
Mensajes
4,828
Se refiera a leer del XML? Acá hay algo que le puede servir, hay muchas formas de hacerlos, la siguiente es una, solo que se carga en un Hashtable.

La estructura del XML:


<?xml version="1.0" encoding="UTF-8"?>

<clientes>
<Cliente>
<nombre>Juanito Parra</nombre>
<cedula>1080446310</cedula>
<user>ccpam</user>
<clave>1185</clave>
</Cliente>
<Cliente>
<nombre>Jaimito Ossa</nombre>
<cedula>1133358364</cedula>
<user>meosiusa</user>
<clave>free</clave>
</Cliente>
</clientes>


Código:
public static Hashtable<String, Cliente> cargarClientes() {

        Hashtable<String, Cliente> listaClientes = new Hashtable<String, Cliente>();

        datos = new String[4]; //Array que contendrá los 4 datos de cada Cliente

        try {

            //Construimos un DocumentBuiilder
            DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            //Se procesa el XML y se obtiene el objeto Document
            Document doc = documentBuilder.parse(new InputSource(new FileInputStream("clientes.xml")));

            //Obtengo raíz
            Element raizPersonal = doc.getDocumentElement();

            //Obtengo lista de nodos hijos de la raíz "clientes"
            //Obtengo hijos
            NodeList hijosDeRaiz = raizPersonal.getElementsByTagName("Cliente");

            //Iteramos sobre los hijos
            for (int i = 0; i < hijosDeRaiz.getLength(); i++) {
                Node nodo = hijosDeRaiz.item(i);          //Obtengo una entrada en cada iteracción
                NodeList subNodos = nodo.getChildNodes();  //Guardo lista de datos de cada cliente

                for (int j = 0; j < subNodos.getLength(); j++) {
                    String dato = subNodos.item(j).getTextContent(); //Obtengo el contenido de cada dato del Cliente
                    datos[j] = dato;
                }
                listaClientes.put(datos[2], new Cliente(datos[0], datos[1], datos[2], datos[3]));
            }

        } catch (Exception e) {
        }

        return listaClientes;

Leyendo el XML me daba varios problemas con los saltos de línea y tabuladores pues los toma como otros hijos, nodos, ya no recuerdo, mi solución fue eliminar todo eso y todo el contenido del XML quedaba en una sola línea. :p Algo así:


<?xml version="1.0" encoding="UTF-8"?>

<clientes><Cliente><nombre>Juanito Parra</nombre><cedula>1096343210</cedula><user>ccopram</user><clave>1966</clave></Cliente><Cliente><nombre>Jaimito Ossa</nombre><cedula>1122668364</cedula><user>meopsasa</user><clave>free</clave></Cliente></clientes>

si a traves de DOM pude hacerlo, pero no tuve que borrar nada, solo leerlo decirle cual es el elemento padre en mi caso <cliente>, hacer 2 for para recorrer todo el documento y llenar una list<Cliente> y listo, como estoy haciéndolo en android, modifique la forma de mostrarse en un spinner que por lo general acepta una String[] y lo formatee para que mostrara Nombre + teléfono.

alguna cosa me dicen y paso el código.
 

Kurai

Lanero Reconocido
Se unió
19 Sep 2006
Mensajes
2,612
si a traves de DOM pude hacerlo, pero no tuve que borrar nada, solo leerlo decirle cual es el elemento padre en mi caso <cliente>, hacer 2 for para recorrer todo el documento y llenar una list<Cliente> y listo, como estoy haciéndolo en android, modifique la forma de mostrarse en un spinner que por lo general acepta una String[] y lo formatee para que mostrara Nombre + teléfono.

alguna cosa me dicen y paso el código.


A mi me serviría, si puedes compartirlo sería de utilidad.

Muchas gracias.

Enviado desde mi HTC One usando Tapatalk 4
 
Arriba