Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Tambien error en temporadas y evaluacion opcion 7

las opciones hasta la 6 funcionan perfecto.

tengo en SerieRepository.java


public interface SerieRepository extends JpaRepository<Serie, Long> {
     Optional<Serie> findByTituloContainsIgnoreCase(String nombreSerie);
     List<Serie> findTop5ByOrderByEvaluacionDesc();

      List<Serie> findByGenero(Categoria categoria);

   @Query("SELECT s FROM Serie s WHERE s.totalTemporadas <= :totalTemporadas AND s.evaluacion >= :evaluacion")
   List<Serie> seriesPorTemporadaYEvaluacion(int totalTemporadas, Double evaluacion);


   //Optional<Serie> findByGenero(Categoria categoria); // probe y no funciono cuando no existe categoria
   // busca una cantidad de temporadas >= #dado y una evaluacion>=numero dado, en resumen filtrar series
   //List<Serie> findByTotalTemporadasLessThanEqualAndEvaluacionGreaterThanEqual(int totalTemporadas, Double evaluacion);
   // qUEIRES NATIVAS
   //@Query(value="SELECT * FROM series WHERE series.total_temporadas <= 6 AND series.evaluacion >=7.5", nativeQuery=true)
   // JPAL

En en programa principal esta esta rutina.

private void filtrarSeriesPorTemporadayEvaluacion() {
      System.out.print("Filtar series, con cuantas temporadas? : ");
      var totalTemporadas = teclado.nextInt();
      teclado.nextLine();
      System.out.print("Con evaluacion a partir de cual valor : ");
      var evaluacion = teclado.nextDouble();
      teclado.nextLine();
      // findByTotalTemporadasLessThanEqualAndEvaluacionGreaterThanEqual(numTemp, evalua)
      List<Serie> filtroSeries= repositorio.seriesPorTemporadaYEvaluacion(totalTemporadas,evaluacion);
      System.out.println("** series filtradas **");
      filtroSeries.forEach(s->
            System.out.println(s.getTitulo()+" - Evaluación "+s.getEvaluacion()));
   }

esta es la captura de datos. Ya mire que el equipo en configuración regional, números, manejara el punto para decimales. ESTE ES EL ERROR QUE SALE. en la consola.

Digite Opcion [1..7, 0=salir]-->7
Filtar series, con cuantas temporadas? : 5
Con evaluacion a partir de cual valor : 7.5
2025-05-31T17:38:51.460-05:00  INFO 6668 --- [           main] .s.b.a.l.ConditionEvaluationReportLogger : 

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2025-05-31T17:38:51.527-05:00 ERROR 6668 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:789) ~[spring-boot-3.2.0.jar:3.2.0]
    at org.springframework.boot.SpringApplication.lambda$callRunners$3(SpringApplication.java:770) ~[spring-boot-3.2.0.jar:3.2.0]
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:186) ~[na:na]
    at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:571) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na]
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:153) ~[na:na]
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:176) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:636) ~[na:na]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:765) ~[spring-boot-3.2.0.jar:3.2.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:330) ~[spring-boot-3.2.0.jar:3.2.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1342) ~[spring-boot-3.2.0.jar:3.2.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1331) ~[spring-boot-3.2.0.jar:3.2.0]
    at com.aluracursos.screenmatch.ScreenmatchApplication.main(ScreenmatchApplication.java:17) ~[classes/:na]
Caused by: java.util.InputMismatchException: null
    at java.base/java.util.Scanner.throwFor(Scanner.java:964) ~[na:na]
    at java.base/java.util.Scanner.next(Scanner.java:1619) ~[na:na]
    at java.base/java.util.Scanner.nextDouble(Scanner.java:2590) ~[na:na]
    at com.aluracursos.screenmatch.principal.Principal.filtrarSeriesPorTemporadaYEvaluacion(Principal.java:177) ~[classes/:na]
    at com.aluracursos.screenmatch.principal.Principal.muestraElMenu(Principal.java:67) ~[classes/:na]
    at com.aluracursos.screenmatch.ScreenmatchApplication.run(ScreenmatchApplication.java:23) ~[classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:786) ~[spring-boot-3.2.0.jar:3.2.0]
    ... 14 common frames omitted

gracias, si hay alguna idea, por favor enviarla. A veces se queda en estos errores y no avanzo nada en el curso.

1 respuesta

Hola Rene, espero que estés bien

Parece que estás enfrentando un problema con la entrada de datos en tu aplicación Java. El error que mencionas, java.util.InputMismatchException, generalmente ocurre cuando el programa espera un tipo de entrada diferente al que se proporciona.

En tu caso, parece que el programa está esperando un número decimal (un double), pero no está recibiendo el formato correcto.

Aquí hay algunas cosas que podrías verificar y probar para solucionar el problema:

  1. Formato de Entrada: Asegúrate de que estás ingresando el número decimal con el separador correcto según la configuración regional de tu JVM. Por ejemplo, algunas configuraciones regionales usan el punto (.) como separador decimal, mientras que otras usan la coma (,). Dado que mencionaste que tu configuración regional está correctamente establecida para usar el punto, asegúrate de que estás ingresando los números en ese formato.

  2. Configuración Regional: Puedes intentar establecer explícitamente la configuración regional para el Scanner en tu código para asegurarte de que está utilizando el formato correcto. Puedes hacerlo así:

    Scanner teclado = new Scanner(System.in).useLocale(Locale.US);
    

    Esto forzará al Scanner a usar el punto como separador decimal.

  3. Validación de Entrada: Considera agregar una validación de entrada para asegurarte de que el usuario está ingresando un número válido. Puedes hacer esto envolviendo la entrada en un bloque try-catch para manejar posibles excepciones:

    try {
        System.out.print("Con evaluacion a partir de cual valor : ");
        var evaluacion = teclado.nextDouble();
        teclado.nextLine();
    } catch (InputMismatchException e) {
        System.out.println("Por favor, ingresa un número válido.");
        teclado.nextLine(); // Limpiar el buffer
    }
    
  4. Depuración: Habilita el modo de depuración para obtener más detalles sobre el error. Esto puede proporcionar más contexto sobre lo que está fallando.

Espero que estas sugerencias te ayuden a resolver el problema. ¡Bons estudios!