Foros del Web » Programación para mayores de 30 ;) » Java »

Problema en mi tarea con Java, no cicla...

Estas en el tema de Problema en mi tarea con Java, no cicla... en el foro de Java en Foros del Web. Amigos, disculpen que les escriba este tema, pero ya no he encontrado una solución a mi problema. Estoy viendo clases encapsuladas en Java, y tengo ...
  #1 (permalink)  
Antiguo 21/04/2013, 16:34
 
Fecha de Ingreso: octubre-2008
Mensajes: 147
Antigüedad: 16 años, 2 meses
Puntos: 3
Problema en mi tarea con Java, no cicla...

Amigos, disculpen que les escriba este tema, pero ya no he encontrado una solución a mi problema.

Estoy viendo clases encapsuladas en Java, y tengo que crear un programa que al terminar de solicitarme los datos haga los cálculos y me pregunte si quiero volver a calcular todo de nuevo.

La cosa es: Si funciona, pero cuando respondo que si deseo continuar capturando más datos se salta la primer pregunta de datos() y omite preguntarme el nombre...

Para que me comprendan dejo aqui el código que he hecho en total:

Clase ENCAPSULADA llamado Nadador.java:

Código:
/* Nadador.java

public class Nadador {
  private String Nombre;
  private byte Londres;
  private byte Sydney;
  private byte Atenas;
  private byte Pekin;
    
  

 public String getNombre( ){
    return this.Nombre;
  }

  public void setNombre(String Nombre){
    this.Nombre = Nombre;
  }

  public byte getLondres( ){
    return this.Londres;
  }

  public void setLondres(byte Londres){
    this.Londres = Londres;
  }

  
  public byte getSydney( ){
    return this.Sydney;
  }

  public void setSydney(byte Sydney){
    this.Sydney = Sydney;
  
  }
  
  public byte getAtenas( ){
    return this.Atenas;
  }

  public void setAtenas(byte Atenas){
    this.Atenas = Atenas;
  
  }
  
  public byte getPekin( ){
    return this.Pekin;
  }

  public void setPekin(byte Pekin){
    this.Pekin = Pekin;
  
  }
  
  
  
  
}
Clase Principal, llamada PruebaNadador.java:


Código:
import java.util.Scanner;
import java.io.*; 
import static java.lang.Math.*;


public class PruebaNadador {
               int Suma,Promedio;
                  Nadador s = new Nadador();
                  Scanner x = new Scanner(System.in);
    
    
    
    
    void inicio() {
            System.out.println("\n\nSistema para obtener el promedio de medallas ganadas por un nadador en varias olimpiadas\n\n");
           }
   
     void datos (Nadador n){
         
         System.out.print("Escriba el nombre del nadador:\n");
          n.setNombre(x.nextLine());
      
          System.out.print("Indique la cantidad de medallas ganadas en Londres:\n");
              n.setLondres ( x.nextByte());
          
              System.out.print("Indique la cantidad de medallas ganadas en Atenas:\n");
              n.setAtenas ( x.nextByte());
              
              System.out.print("Indique la cantidad de medallas ganadas en Pekin:\n");
              n.setPekin ( x.nextByte());
              
              
              System.out.print("Indique la cantidad de medallas ganadas en Sydney:\n");
              n.setSydney ( x.nextByte());
              
              
                              }
    
     void calculos(Nadador z){
          
         Suma =  s.getLondres() + s.getAtenas()  + s.getPekin() + s.getSydney();
       
         Promedio = Suma /4;
         
              
         }
     
    
    
    void resultado() {
         
          System.out.println("El Nadador: " + s.getNombre() + "tiene nn promedio de " +Promedio+ "  medallas ganadas en 4 juegos Olimpicos");
    
    }
    
    
    
    
    public static void main(String[] args) throws IOException {
        PruebaNadador w = new PruebaNadador();
      int resp = 'S';
         
         
      w.inicio();
    while (resp == 's' || resp == 'S'){
      w.datos(w.s);
      w.calculos(w.s);
      w.resultado();
      
      System.out.print("Desea evaluar el promedio de medallas de otro nadador olimpico? S/N:");
      resp = System.in.read();
      System.in.skip(2);

      
    
    } 
      
    }
}

Yo creo que mi problema está aquí:

Código:
    public static void main(String[] args) throws IOException {
        PruebaNadador w = new PruebaNadador();
      int resp = 'S';
         
         
      w.inicio();
    while (resp == 's' || resp == 'S'){
      w.datos(w.s);
      w.calculos(w.s);
      w.resultado();
      
      System.out.print("Desea evaluar el promedio de medallas de otro nadador olimpico? S/N:");
      resp = System.in.read();
      System.in.skip(2);

      
    
    } 
      
    }
¿Alguien que pudiera orientarme por favor, ?
  #2 (permalink)  
Antiguo 22/04/2013, 01:51
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 7 meses
Puntos: 306
Respuesta: Problema en mi tarea con Java, no cicla...

No utilices nextByte, con scanner y entradas de teclado es mejor utilizar siempre nextLine()
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 23/04/2013, 13:17
 
Fecha de Ingreso: octubre-2008
Mensajes: 147
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: Problema en mi tarea con Java, no cicla...

Gracias por tu respuesta, sin embargo no entendí nada... es que tengo mal maestro, y en el libro que llevo no habla mucho del tema...

¿alguna otra forma de orientarme más a cómo corregir el problema?, es decir, yo seguí los pasos de usar nextbyte y si a nextbyte lo cambio por nextline me da error al compilar que porque dice que no es compatible o algo asi

Al intentar cambiar el nextByte por nextLine me sale error así:

Cita:
D:\DropBox\ITL\ISC\Java\Encapsulados\Javas>javac PruebaNadador.java
PruebaNadador.java:30: error: method setLondres in class Nadador cannot be appli
ed to given types;
n.setLondres ( x.nextLine());
^
required: byte
found: String
reason: actual argument String cannot be converted to byte by method invocatio
n conversion
1 error

D:\DropBox\ITL\ISC\Java\Encapsulados\Javas>
Cabe aclarar que los datos a ingresar en las preguntas son numéricos y después los sumo, y no son String, entonces según esto no puedo declarar un String a un dato que guardaré como numérico y no cadena, o algo así razona mi cabeza...

Última edición por dfmex; 23/04/2013 a las 13:23
  #4 (permalink)  
Antiguo 24/04/2013, 06:03
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 7 meses
Puntos: 306
Respuesta: Problema en mi tarea con Java, no cicla...

Es evidente que si usas nextLine te devuelve una String y no puedes usarla como parámetro de un método que espera un int o un byte, pero la solución también es evidente.

También puedes dejar el código sin cambiar y únicamente añadir detrás del último nextByte de cada ciclo

Cita:
System.out.print("Indique la cantidad de medallas ganadas en Sydney:\n");
n.setSydney ( x.nextByte());
x.nextLine();
El porqué está explicado en el foro unas cuantas veces.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: clase, programa, string, tarea
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:50.