elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Imprimir un parámetro de un método
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Imprimir un parámetro de un método  (Leído 5,472 veces)
Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Imprimir un parámetro de un método
« en: 14 Septiembre 2011, 08:21 am »

Esta es mi clase principal:
Código
  1. public class Practica5c {
  2.  
  3. public class Practica5c {
  4. public static void main (String args[]){
  5. Coche coche1 = new Coche("Toyota", "Camry");
  6. Coche coche2 = new Coche("Honda", "Accord");
  7. Garaje garaje = new Garaje();
  8.  
  9. garaje.aceptarCoche(coche1, "goma pichada");
  10. garaje.devolverCoche();
  11.  
  12. garaje.aceptarCoche(coche2, "aceite");
  13. garaje.devolverCoche();
  14.  
  15. System.out.println("El coche 1 es: "+ coche1.getMarca() +" "+ coche1.getModelo() +"\n La averia es "+ garaje.getAveria() +"\n El precio en averias es "+ coche1.getImporteAveria());
  16. System.out.println("El coche 2 es: "+ coche2.getMarca() +" "+ coche2.getModelo() +"\n La averia es "+ garaje.getAveria() +"\n El precio en averias es "+ coche2.getImporteAveria());
  17. }
  18. }
  19. }

Pero cuando se imprime la avería y el precio en averías son iguales.

La clase Garaje es esta:
Código
  1. public class Garaje{
  2. //atributos
  3. private Coche coche;
  4. private String averia;
  5. private int nCochesAtendidos;
  6. private boolean cocheAdentro;
  7.  
  8. //constructor PUEDE QUE NO VAYA
  9. public Garaje(){
  10. }
  11.  
  12.  
  13.  
  14. //metodo Aceptar Coche
  15. public boolean aceptarCoche(Coche param1, String dano){
  16. averia = dano;
  17. nCochesAtendidos += 1;
  18. if(cocheAdentro == true){
  19. System.out.println("Ya hay un coche en el garage");
  20. return false;
  21. }
  22. else{
  23. cocheAdentro = true;
  24. if(averia == "aceite"){
  25. Motor motor = new Motor(10);
  26. Motor.setLtAceite(10);
  27. Coche.acumularAveria(Math.random()*1000);
  28. }
  29. return true;
  30. }
  31. }
  32.  
  33. //metodo obtener averia
  34. public String getAveria(){
  35. return averia;
  36. }
  37.  
  38. //metodo devolverCoche
  39. public void devolverCoche(){
  40. cocheAdentro = false;
  41. }
  42. }

Tal vez haya hecho mucho disparates porque todavía no entiendo bien la orientación a objetos, pero ahora mismo lo que más  me interesa es saber como puedo hacer que se imprima la correspondiente avería para cada uno de los carros y lo mismo con el precio de averias. Creo que si puediera imprimir el parámetro del método aceptarCoche lo podría hacer para la avería.

Es una versión simplificada de esta práctica


« Última modificación: 14 Septiembre 2011, 08:47 am por Aikanáro Anário » En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
Valkyr


Desconectado Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
Re: Imprimir un parámetro de un método
« Respuesta #1 en: 14 Septiembre 2011, 12:46 pm »

Vamos a ir por partes para ver si consigo expresarme correctamente.

En primer lugar deberías haber colgado el método acumularAvería de la clase coche, ya que es ahí donde puede ser que tengas el problema.

Por otro lado, en la clase Garaje, más concretamente en el método aceptarCoche haces esto:

Código
  1. public boolean aceptarCoche(Coche param1, String dano){
  2. averia = dano;
  3. nCochesAtendidos += 1;
  4. if(cocheAdentro == true){
  5. System.out.println("Ya hay un coche en el garage");
  6. return false;
  7. }
  8. else{
  9. cocheAdentro = true;
  10. if(averia == "aceite"){
  11. Motor motor = new Motor(10);
  12. Motor.setLtAceite(10);
  13. Coche.acumularAveria(Math.random()*1000);
  14. }
  15. return true;
  16. }
  17. }
En primer lugar deberías comprobar al mismo entrar la condición de que no haya ningún coche dentro, porque si se da el caso de que hay uno dentro el método va a devolver false sí, pero has cambiado los valores de avería y nCochesAtendidos cuando eso no debería pasar ya que el coche no se va a quedar dentro.

También en esa clase tienes un atributo de tipo Coche que no usas para nada.

En el método Main me imagino que a la hora de imprimir por pantalla el tipo de avería te mostrará la misma, eso es por que estás mostrando la información cuando ya han pasado los dos coches. Tendrías que mostrarla en cuanto salga del garaje y antes de que entre otro coche, porque si no la información de la avería se pierde, no se si me explico correctamente.

Postea el método acumularAveria y getImporteAveria y te podremos ayudar con eso.

Saludos y no te preocupes, al empezar siempre cuesta un poco, pero luego la cosa sale sola ;)


En línea

Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Imprimir un parámetro de un método
« Respuesta #2 en: 14 Septiembre 2011, 17:56 pm »

Citar
En el método Main me imagino que a la hora de imprimir por pantalla el tipo de avería te mostrará la misma, eso es por que estás mostrando la información cuando ya han pasado los dos coches. Tendrías que mostrarla en cuanto salga del garaje y antes de que entre otro coche, porque si no la información de la avería se pierde, no se si me explico correctamente.

Tienes razón, ese era parte del problema. La otra parte es que
Código
  1. Coche.acumularAveria(Math.random()*1000);
estaba dentro del if y esa sentencia debe ejecutarse tanto si la averia es aceite como si es cualquier otra.

Ahora el main me quedo así:
Código
  1. public class Practica5c {
  2. public static void main (String args[]){
  3. Coche coche1 = new Coche("Toyota", "Camry");
  4. Coche coche2 = new Coche("Honda", "Accord");
  5. Garaje garaje = new Garaje();
  6. Motor motor = new Motor(0);
  7.  
  8. int i;
  9. for(i=0;i<2;i++){
  10. System.out.print("\n\nEl coche 1 es: "+ coche1.getMarca() +" "+ coche1.getModelo() +"\nLa averia es ");
  11. garaje.aceptarCoche(coche1, "goma pichada");
  12. System.out.print(garaje.getAveria()+ "\nEl precio por averia es " +coche1.getImporteAveria()+ "\nLt de aceite: " +motor.getLtAceite());
  13. garaje.devolverCoche();
  14.  
  15. System.out.print("\n\nEl coche 2 es: "+ coche2.getMarca() +" "+ coche2.getModelo() +"\nLa averia es ");
  16. garaje.aceptarCoche(coche2, "aceite");
  17. System.out.print(garaje.getAveria() +"\nEl precio por averia es "+coche2.getImporteAveria()+ "\nLt de aceite: " +motor.getLtAceite());
  18. garaje.devolverCoche();
  19. }
  20.  
  21. System.out.println("\n\nCoches atendidos: "+garaje.getAtendidos());
  22. }
  23. }

Ahora está un poquito más "limpio" porque antes tenía un print en el método aceptarCoche(...) que me daba la avería. Eso fue lo que hice porque cuando accedía a getAveria salía la misma.

Métodos acumularAveria y getImporteAveria
Código
  1. public static void acumularAveria(double param1){
  2. importeAveria += param1;
  3. }
  4.  
  5. public double getImporteAveria(){
  6. return importeAveria;
  7. }
« Última modificación: 14 Septiembre 2011, 18:01 pm por Aikanáro Anário » En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
Valkyr


Desconectado Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
Re: Imprimir un parámetro de un método
« Respuesta #3 en: 14 Septiembre 2011, 20:40 pm »

El problema está aquí:

Código
  1. public boolean aceptarCoche(Coche param1, String dano){
  2. averia = dano;
  3. nCochesAtendidos += 1;
  4. if(cocheAdentro == true){
  5. System.out.println("Ya hay un coche en el garage");
  6. return false;
  7. }
  8. else{
  9. cocheAdentro = true;
  10. if(averia == "aceite"){
  11. Motor motor = new Motor(10);
  12. Motor.setLtAceite(10);
  13. Coche.acumularAveria(Math.random()*1000);
  14. }
  15. return true;
  16. }
  17. }
  18.  

La variable de tipo Coche no la inicializas a ningún valor así que al hacer la llamada no la hace sobre el objeto que tú le pasas como parámetro a la función. ¿Cómo solucionarlo? Cuando un coche entra al garaje (después de comprobar que esté vacío) le asigna a la variable "coche" el primer parámetro de la función, es decir:

Código
  1. public boolean aceptarCoche(Coche param1, String dano){
  2.                if(cocheAdentro == true){
  3. System.out.println("Ya hay un coche en el garage");
  4. return false;
  5. }
  6.                coche = param1;
  7. averia = dano;
  8. nCochesAtendidos += 1;
  9. else{
  10. cocheAdentro = true;
  11. if(averia == "aceite"){
  12. Motor motor = new Motor(10);
  13. Motor.setLtAceite(10);
  14. Coche.acumularAveria(Math.random()*1000);
  15. }
  16. return true;
  17. }
  18. }

De esta forma podrías llamar al método acumularAvería y no necesitarías que fuese Static.

Saludos, cualquier duda pregunta ;).
En línea

Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Imprimir un parámetro de un método
« Respuesta #4 en: 14 Septiembre 2011, 23:16 pm »

Ohh, ya. Si no hubiera estado programando con un IDE (Eclipse) es seguro que el programa no me hubiera corrido o lo hubiera hecho mal.

Por que el compilador me dió la solución de que esa clase debía ser static, pero no sabía porque, simplemente apliqué la sugerencia.
En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
Valkyr


Desconectado Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
Re: Imprimir un parámetro de un método
« Respuesta #5 en: 15 Septiembre 2011, 01:36 am »

Hay que saber que el IDE te recorta mucho la tarea y te ayuda muchísimas veces, pero no es una persona y no hay que fiarse de todo lo que diga. Ese error es normal, sobre todo si estás empezando a programar ahora con Java. Con un poco de práctica y equivocandote de vez en cuando seguro que consigues muy buenas cosas.

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda Metodo con Objeto como parametro....
Java
PAD_boy 2 3,187 Último mensaje 8 Octubre 2008, 00:56 am
por Ragnarok
Crear un Hilo pasandole parametro al metodo VB.NET
.NET (C#, VB.NET, ASP)
Fr4NN^ 1 10,099 Último mensaje 21 Febrero 2009, 21:03 pm
por Foxy Rider
[Python] invocar metodo desde metodo.
Scripting
Hesp 2 6,991 Último mensaje 8 Marzo 2009, 00:38 am
por Hesp
problemas metodo con parametro (solucionado) era sin parametro XD
Java
rub'n 6 6,566 Último mensaje 25 Noviembre 2010, 16:45 pm
por Afsoon
[ayuda]cual es metodo para imprimir
Programación C/C++
adamsst 0 1,642 Último mensaje 3 Agosto 2012, 17:48 pm
por adamsst
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines