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

salir cuando no haya casos de prueba

Estas en el tema de salir cuando no haya casos de prueba en el foro de Java en Foros del Web. Hola amigos resulta que tengo éste código de un problema de la web aceptaelreto.com y no se como hacer porque cuando los valores leídos sean ...
  #1 (permalink)  
Antiguo 23/03/2016, 08:14
 
Fecha de Ingreso: agosto-2008
Mensajes: 606
Antigüedad: 15 años, 8 meses
Puntos: 11
salir cuando no haya casos de prueba

Hola amigos resulta que tengo éste código de un problema de la web aceptaelreto.com y no se como hacer porque cuando los valores leídos sean N, 0 me debe dejar el resultado y continuar el programa y es cuando no haya valores en las variables cuando tengo que salir del programa. Bien yo no se como hacer esto ultimo. Dejo el código fuente tal como lo tengo pero repito lo que me gustaría es salir del programa cuando no se introduzca nada en las variables.


Código Java:
Ver original
  1. import java.util.Scanner;
  2. public class BarJavierDenuevo {
  3.  
  4.  
  5.    public static void main(String[] args) {
  6.     Scanner in = new Scanner(System.in);
  7.      in.useLocale(java.util.Locale.UK);
  8.       String  letra = "e";
  9.      double [] caja = new double [5] ;
  10.      double  numero = 0;
  11.     double mayor = 0;
  12.     double menor = 0;
  13.     int  empateMayor = 0;
  14.     int empateMenor = 0;
  15.     double sumaCaja  = 0;
  16.     String resultadoMayor = "EMPATE";
  17.     String resultadoMenor = "EMPATE";
  18.     int indiceMayor = 0;
  19.     int indiceMenor = 0;
  20.     String mayorCopas = "";
  21.     double mediaCaja = 0;
  22.  
  23.    
  24.       //recogo los casos de prueba según condición e introduzco en array
  25.      while(!(letra.equals("N")) | (numero!=0)){
  26.    
  27.      letra = in.next();
  28.      numero = in.nextDouble();
  29.      
  30.      
  31.        
  32.     switch (letra) {
  33.       case "D":
  34.         caja[0]+= numero;
  35.         break;
  36.       case "A":
  37.        caja[1]+= numero;
  38.         break;
  39.        
  40.       case "M":
  41.       caja[2]+= numero;
  42.         break;
  43.        
  44.       case "I":
  45.       caja[3]+= numero;
  46.         break;
  47.        
  48.        
  49.       case "C":
  50.       caja[4]+= numero;  
  51.         break;
  52.        
  53.         }
  54.  
  55.       }
  56.    
  57.  
  58.    
  59.       //sumar array par ver dinero total y la media de la caja
  60.     for(int i = 0; i<5; i++){
  61.       sumaCaja += caja[i];
  62.       mediaCaja = sumaCaja/5;
  63.     }
  64.    
  65.     // comprobar mayor y menor y sacar sus indices
  66.       mayor = caja [0];
  67.       menor = caja [0];
  68.     for(int i = 1; i<5; i++){
  69.       if(caja[i]>mayor){
  70.         mayor = caja[i];
  71.         indiceMayor = i;
  72.       }
  73.      
  74.        else if (caja[i]<menor){
  75.        
  76.         menor=caja[i];
  77.         indiceMenor = i;
  78.        
  79.       }
  80.     }    
  81.    
  82.    
  83.      
  84.     // comprobar si hay empate
  85.    
  86.      for(int i = 0; i<5; i++){
  87.       if(caja[i]==mayor){
  88.         empateMayor += 1;
  89.       }
  90.     if (caja[i]==menor){
  91.      
  92.         empateMenor += 1;
  93.      
  94.       }
  95.      
  96.     }
  97.    
  98.    
  99.        
  100.    
  101.  
  102.  
  103.  
  104.  
  105.  
  106.      
  107.      
  108.      
  109.      
  110.      
  111.      
  112.      
  113.      
  114.   // si en mayor no hay empate sacar mayor con los indices sino porner empate
  115.     if(empateMayor<=1){
  116.        switch (indiceMayor) {
  117.         case 0:
  118.           resultadoMayor = "DESAYUNOS";
  119.           break;
  120.         case 1:
  121.           resultadoMayor = "COMIDAS";
  122.           break;
  123.          
  124.         case 2:
  125.          resultadoMayor = "MERIENDAS";
  126.           break;
  127.          
  128.         case 3:
  129.         resultadoMayor = "CENAS";
  130.           break;
  131.          
  132.          
  133.         case 4:
  134.         resultadoMayor = "COPAS";
  135.           break;
  136.          
  137.      
  138.  
  139.         }
  140.     }else{
  141.        
  142.         resultadoMayor = "EMPATE";
  143.        
  144.       }
  145.      
  146.      
  147.        // si en menor no hay empate sacar menor con los indices sino poner empate
  148.     if(empateMenor<=1){
  149.        switch (indiceMenor) {
  150.         case 0:
  151.           resultadoMenor = "DESAYUNOS";
  152.           break;
  153.         case 1:
  154.           resultadoMenor = "COMIDAS";
  155.           break;
  156.          
  157.         case 2:
  158.          resultadoMenor = "MERIENDAS";
  159.           break;
  160.          
  161.         case 3:
  162.         resultadoMenor = "CENAS";
  163.           break;
  164.          
  165.          
  166.         case 4:
  167.         resultadoMenor = "COPAS";
  168.           break;
  169.        
  170.  
  171.         }
  172.        
  173.         }else{
  174.        
  175.         resultadoMenor = "EMPATE";
  176.       }
  177.      
  178.      
  179.       //comprobar si las comidas supera a la media de  ventas del dia
  180.      
  181.      
  182.       if(caja[1]>mediaCaja){
  183.        
  184.       mayorCopas = "SI";
  185.       } else{
  186.           mayorCopas = "NO";
  187.        
  188.       }
  189.      
  190.       //Mostrar resultados
  191.      
  192.     System.out.println(resultadoMayor + "#" + resultadoMenor + "#" + mayorCopas);    
  193.   }
  194. }
  #2 (permalink)  
Antiguo 23/03/2016, 11:27
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: salir cuando no haya casos de prueba

System.exit(0);
__________________
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/03/2016, 11:28
 
Fecha de Ingreso: agosto-2008
Mensajes: 606
Antigüedad: 15 años, 8 meses
Puntos: 11
Respuesta: salir cuando no haya casos de prueba

pero donde lo pondrías.
  #4 (permalink)  
Antiguo 23/03/2016, 11:58
 
Fecha de Ingreso: agosto-2008
Mensajes: 606
Antigüedad: 15 años, 8 meses
Puntos: 11
Respuesta: salir cuando no haya casos de prueba

Cita:
System.exit(0);
Esto no sirve.
  #5 (permalink)  
Antiguo 23/03/2016, 12:16
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: salir cuando no haya casos de prueba

En realidad no estoy seguro de entender qué significa "me gustaría es salir del programa cuando no se introduzca nada en las variables"

El programa espera que le pases algún valor, por lo que hasta que no lo hagas estará detenido en la línea

letra = in.next();

La clase Scanner no tiene forma de que deje de esperar al cabo de X tiempo, así que no tienes forma de salir. Por lo que he estado leyendo en esa página tampoco es algo de lo que te tengas que preocupar.


https://www.aceptaelreto.com/doc/faq...mprobarEntrada
Cita:
¿Tengo que comprobar que la entrada es correcta?
No. El objetivo principal de la gran mayoría de los problemas es que pongas en práctica tus conocimientos de programación, no que pierdas tiempo en detalles poco importantes como la entrada.

Si en el enunciado de un problema dice, por ejemplo, que cada caso de prueba estará compuesto de un número positivo, no necesitas comprobar que es así; al fin y al cabo, ¿qué harías si no lo fuera? Por tanto, puedes confiar plenamente en que la entrada seguirá el formato especificado y no preocuparte de reaccionar dignamente si no es así.

La contrapartida es que el juez exige lo mismo en la salida. Tu programa debe ser totalmente estricto en el formato de la salida. No añadas texto adicional para ser "amigable" con el usuario (tipo "Introduce el siguiente número"), porque despistarán al juez y no dará por bueno el resultado. Sigue a pies juntillas el formato de salida, incluídos los espacios.
__________________
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.
  #6 (permalink)  
Antiguo 23/03/2016, 12:26
 
Fecha de Ingreso: agosto-2008
Mensajes: 606
Antigüedad: 15 años, 8 meses
Puntos: 11
Respuesta: salir cuando no haya casos de prueba

Gracias por tu respuesta me han sugerido por ahi que pruebe:

hasnext() el problema es que no se como usarlo.
  #7 (permalink)  
Antiguo 23/03/2016, 12:32
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: salir cuando no haya casos de prueba

hasNext no te va a funcionar porque lo que busca es un EOF, se te va a quedar esperando igual en hasNext.
__________________
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.
  #8 (permalink)  
Antiguo 23/03/2016, 13:39
 
Fecha de Ingreso: agosto-2008
Mensajes: 606
Antigüedad: 15 años, 8 meses
Puntos: 11
Respuesta: salir cuando no haya casos de prueba

Cita:
hasNext no te va a funcionar porque lo que busca es un EOF, se te va a quedar esperando igual en hasNext.
Gracias, justo por eso creo que hay que usarlo pero no se como. Hay que tener en cuenta que el problema es para enviarlo a un boot que corregirá el resultado seguramente mediante un archivo. Pero no se como enviarlo donde ponerlo en el código.
  #9 (permalink)  
Antiguo 24/03/2016, 05:03
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: salir cuando no haya casos de prueba

Ejecutando tu código creo que por fin he entendido tu problema.

No falla al meter datos por consola, falla al leer de un fichero, que es como lo prueban los de la página.

Tal y como has creado tu bucle no se detiene al llegar al final del fichero, intenta leer otro next pero ni existe ni va a esperar a que se introduzca, por lo que falla.

Para resolverlo efectivamente tienes que usar hasNext

Cita:
while(in.hasNext() && !(letra.equals("N")) | (numero!=0))
No me gusta como solución, pero es lo único que se me ocurre sin tocar el resto del código.

Si no buscabas solucionar el problema que comento, el hasNext no te sirve para nada, sólo sirve para leer de fichero.
__________________
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.
  #10 (permalink)  
Antiguo 25/03/2016, 06:15
 
Fecha de Ingreso: agosto-2008
Mensajes: 606
Antigüedad: 15 años, 8 meses
Puntos: 11
Respuesta: salir cuando no haya casos de prueba

Muchas gracias, voy a ver así si va bien aunque he probado el hasNext() de otra forma y tampoco me va, pero bueno seguiré a ver. Gracias!

Etiquetas: casos, jar, programa, prueba, salir, string
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 22:19.