• Martes 7 de Mayo de 2024, 10:56

Autor Tema:  Problemas con Ejercicio Sencillo  (Leído 2408 veces)

franZn

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Problemas con Ejercicio Sencillo
« en: Viernes 23 de Marzo de 2012, 23:54 »
0
Buenas gente, como verán sigo con ejercicios sencillos a fin de entender un poco mas esto.
La idea de este programita es cargar los datos de clientes, saldos y dni en un arreglo de Clientes y luego ingresar un DNI y que me devuelva el saldo del cliente a quien le pertenece dicho numero de dni.

pero tengo bastantes problemas, el primero es ke no me permite compilar porque en la funcion getSaldo me dice que no me va devolver un entero.

ahi les adjunto el codigo

Código: [Seleccionar]
import java.util.Scanner;


public class Cajero   {


protected int dnisearch;

protected Cliente[] clientes = new Cliente[2];


public static void main(String[] args) {
int i;
int valor;
Cajero ca = new Cajero();

for (i=0;i<=1;i++)
{
ca.clientes[i] = new Cliente();
System.out.println("Ingrese Cliente, DNI y Saldo");
ca.clientes[i].setData();




}
System.out.println("ingrese dni para obtener saldo");
valor=ca.getSaldo();

if (valor != 0)
System.out.println("el saldo es "+valor);
else
System.out.println("No se encontro el Cliente");


}

public int getSaldo ()

{
Scanner s = new Scanner(System.in);
Cajero ca = new Cajero();
dnisearch = s.nextInt();

int k;
for (k=0;k<=1;k++)
{
if ( dnisearch == ca.clientes[k].dni )
return (ca.clientes[k].saldo);
else
return 0;



}


}
}

Ademas tengo otras dudas como porque tengo ke definir 2 veces esto: Cajero ca = new Cajero(), intente ponerlo fuera de los metodos pero no funciona.

nota: el saldo lo hago de valor entero a modo de simplificar. sepan disculpar.

Espero sus respuestas y por supuesto sus sugerencias de como puedo mejorar el codigo.
Muchas gracias!

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:Problemas con Ejercicio Sencillo
« Respuesta #1 en: Sábado 24 de Marzo de 2012, 01:59 »
0
Hola franZn, bueno das muy poca informacion para poder ayudarte, en el codigo que publicaste estas usando la clase Cliente, pero no veo su definicion, sospecho que el error esta en que el miembro saldo de la clase Cliente no es de tipo entero, digo sospecho porque si no pones el codigo es imposible de saber.

Ahora respecto a esto:

Citar
porque tengo ke definir 2 veces esto: Cajero ca = new Cajero(), intente ponerlo fuera de los metodos pero no funciona.

Al decir "no me funciona" no podemos saberlo sin mas datos, disculpa si parezco algor rudo, pero no somos adivinos. Para saber por que no funciona, necesitamos saber exactamente cual es el error que te da, ¿es error de sintaxis?, ¿o acaso es error de logica?, por lo tanto deber colocar cual es el error EXACTO que te marca, si es error de compilador, o es un error en el resultado, ademas debes colocar EXACTAMENTE el codigo tal como lo tienes, y la linea en que te esta marcando el error.

De esa manera se puede analizar y ver que estas haciendo mal, de otra forma, es solo adivinar.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

franZn

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re:Problemas con Ejercicio Sencillo
« Respuesta #2 en: Sábado 24 de Marzo de 2012, 03:42 »
0
Profesorx estas en lo cierto, voy a tratar de ser un poco mas especifico. Te comento que he refinado un poco mas el codigo y ahora el problema es que me devuelve el saldo = 0 SIEMPRE

Aqui adjunto el codigo:

Código: Java(TM) 2 Platform Standard Edition 5.0
  1. import java.util.*;
  2. public class Cliente {
  3.  
  4.        
  5.         protected String nombre;
  6.         protected int dni;
  7.         protected int saldo;
  8.        
  9.        
  10.         public void setData() {
  11.                 Scanner s = new Scanner(System.in);
  12.                
  13.                
  14.                 nombre= s.nextLine();
  15.                 dni=s.nextInt();
  16.                 saldo=s.nextInt();
  17.                
  18.                
  19.         }
  20.        
  21.        
  22. }
  23.  
  24. import java.util.*;
  25.  
  26.  
  27. public class Cajero   {
  28.  
  29.        
  30.        
  31.        
  32.         public Cliente[] clientes = new Cliente[2];
  33.        
  34.        
  35.         public static void main(String[] args) {
  36.                 int valor;
  37.                 int dnisearch;
  38.                 int i;
  39.                 Scanner s = new Scanner(System.in);
  40.                 Cajero ca = new Cajero();
  41.                                
  42.                 for (i=0;i<=1;i++)
  43.                 {
  44.                 ca.clientes[i] = new Cliente();
  45.                 System.out.println("Ingrese Cliente, DNI y Saldo");
  46.                 ca.clientes[i].setData();
  47.                        
  48.                 }
  49.                
  50.        
  51.                
  52.                 for (i=0;i<=1;i++)//compruebo q los datos estan bien ingresados
  53.                 {
  54.                         System.out.println("Cliente: "+ca.clientes[i].nombre);
  55.                         System.out.println("Saldo: "+ca.clientes[i].saldo);
  56.                 }
  57.                
  58.                
  59.                 System.out.println("ingrese dni para obtener saldo");
  60.                 dnisearch = s.nextInt();
  61.                
  62.                 valor= ca.getSaldo(dnisearch);
  63.                 System.out.println("saldo "+valor);
  64.  
  65.         }
  66.  
  67.        
  68.         public int getSaldo (int dnis)
  69.        
  70.         {
  71.                
  72.                 int i;
  73.                 int r=0;
  74.                 for (i=0;i<=1;i++)
  75.                        
  76.                 {
  77.                         if (clientes[i].dni == dnis)
  78.                                 r=clientes[i].saldo;
  79.                         else
  80.                                 r=0;
  81.                                
  82.                                
  83.                        
  84.                 }
  85.        
  86.                         return(r);             
  87.                        
  88.                
  89.                
  90.         }
  91. }
  92.  
  93.  

tambien tengo una duda conceptual:
Supongan que tengo ke leer un entero en el metodo getSaldo(), deberia definir como lo hice en el main Scanner s = new Scanner(System.in); y ahi justamente es donde radica mi duda, porqué lo tengo que definir de nuevo??? si ya lo he hecho en el main.

y definirlo en donde se definen los atributos de la clase???

espero sus respuestas. Muchas Gracias!
« última modificación: Sábado 24 de Marzo de 2012, 03:45 por franZn »

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:Problemas con Ejercicio Sencillo
« Respuesta #3 en: Sábado 24 de Marzo de 2012, 23:20 »
0
Hola de nuevo.

Bueno ahora si publicaste tu codgio completo y analizandolo me doy cuenta que cometes un error de logica en el siguiente fragmento:

Código: [Seleccionar]
                for (i=0;i<=1;i++)
                       
                {
                        if (clientes[i].dni == dnis)
                                r=clientes[i].saldo;
                        else
                                r=0;
                               
                               
                       
                }

Utilizas un ciclo for para buscar el DNI, pero nunca sales del ciclo cuando lo encuentras, ademas en el else pones r=0, de esa forma aun cuando lo encuentras, vuelves a poner el saldo en cero. Asi como esta si por ejemplo tienes 10 DNI, solo en una pasada del ciclo haces r=clientes[ i ].saldo;, pero en las otras nueve pasadas haces r=0.

En mi opinion lo mas correcto es eliminar el else, esta de mas, ya que de todas formas antes de entrar al ciclo haces r=0, ademas debes agregar una forma de salir del ciclo una vez que encuentras el DNI, lo mejor es utilizar break, que te permite salir del for antes de que se ejecute n numero de veces.

Sin embargo veo otro problema, ¿que pasa si algun cliente tiene un saldo de cero? No tienes forma de distinguir cuando no encuentras el DNI, y cuando el saldo es cero, ya que en ambos casos te dara cero el resultado. En este supuesto yo sugeriria que en lugar de hacer r=0, hagas r=-1, ya que un saldo nunca podra tener un valor negativo, de esa manera separarias cuando el DNI no se encuenta de cuando alguien tiene un saldo de cero.

Dicho eso, el codigo corregio seria algo como:

Código: [Seleccionar]
import java.util.*;
 
 
public class Cajero   {
 
       
       
       
        public Cliente[] clientes = new Cliente[2];
       
       
        public static void main(String[] args) {
                int valor;
                int dnisearch;
                int i;
                Scanner s = new Scanner(System.in);
                Cajero ca = new Cajero();
                               
                for (i=0;i<=1;i++)
                {
                ca.clientes[i] = new Cliente();
                System.out.println("Ingrese Cliente, DNI y Saldo");
                ca.clientes[i].setData();
                       
                }
               
       
               
                for (i=0;i<=1;i++)//compruebo q los datos estan bien ingresados
                {
                        System.out.println("Cliente: "+ca.clientes[i].nombre);
                        System.out.println("Saldo: "+ca.clientes[i].saldo);
                }
               
               
                System.out.println("ingrese dni para obtener saldo");
                dnisearch = s.nextInt();
               
                valor= ca.getSaldo(dnisearch);
                if (valor == -1)
                System.out.println("DNI no encontrado");
                else
                System.out.println("saldo "+valor);
 
        }
 
       
        public int getSaldo (int dnis)
       
        {
               
                int i;
                // r = -1 para indicar que no encontro el dni
                int r=-1;
                for (i=0;i<=1;i++)
                       
                {
                        if (clientes[i].dni == dnis)
                        {
                                r=clientes[i].saldo;
                                // Salir del for si encuentra el DNI
                                break;
                              }
// Eliminamos esto, que es innecesario
//                        else
//                                r=0;
                               
                               
                       
                }
       
                        return(r);             
                       
               
               
        }
}

Ahora respecto a:
Citar
Supongan que tengo ke leer un entero en el metodo getSaldo(), deberia definir como lo hice en el main Scanner s = new Scanner(System.in); y ahi justamente es donde radica mi duda, porqué lo tengo que definir de nuevo??? si ya lo he hecho en el main.

El que lo definas en el main no significa que sera vaildo para todo el programa, ya que la variable "Scanner s" al estar definida dentro del main, solo es valida para ese metodo, entra en el ambito de lo que son "variables locales". Para que puedas utilizar esa variable en toda la clase debes definirla como tu mismo dices en los atributos de la clase, y ademas me parece que debes definirla como static, ya que de lo contrario tendrias que instanciar la clase Cajero para poder utilizar la variable.

Bueno espero con esto haber aclarado tus dudas.

Saludos =)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

franZn

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re:Problemas con Ejercicio Sencillo
« Respuesta #4 en: Lunes 26 de Marzo de 2012, 05:50 »
0
Muchas Gracias profesorx, me han servido mucho tus correciones.

 :jumpie: