6
respostas

Problema com o Scanner

O SCANNER NÃO ESTÁ CAPTURANDO NOMES COMPOSTOS.

Fiz tudo direitinho no meu projeto e abri outro tópico para solucionar esse problema, porém não obtive solução. Enfim, as outras opções também estão bugadas. Agora, fazendo download do projeto do curso, o problema continua.

Qual acao de cargo deseja executar
0 - Sair
1 - Salvar
2 - Atualizar
3 - Visualizar
4 - Deletar
1
Descricao do cargo
Auxiliar Administrativo
Salvo
Qual acao de cargo deseja executar
0 - Sair
1 - Salvar
2 - Atualizar
3 - Visualizar
4 - Deletar
2021-03-05 04:38:42.624  INFO 7606 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-03-05 04:38:42.627 ERROR 7606 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:798) ~[spring-boot-2.3.3.RELEASE.jar:2.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:779) ~[spring-boot-2.3.3.RELEASE.jar:2.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:322) ~[spring-boot-2.3.3.RELEASE.jar:2.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) ~[spring-boot-2.3.3.RELEASE.jar:2.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.3.3.RELEASE.jar:2.3.3.RELEASE]
    at br.com.alura.spring.data.SpringDataApplication.main(SpringDataApplication.java:35) ~[classes/:na]
Caused by: java.util.InputMismatchException: null
    at java.base/java.util.Scanner.throwFor(Scanner.java:939) ~[na:na]
    at java.base/java.util.Scanner.next(Scanner.java:1594) ~[na:na]
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258) ~[na:na]
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212) ~[na:na]
    at br.com.alura.spring.data.service.CrudCargoService.inicial(CrudCargoService.java:29) ~[classes/:na]
    at br.com.alura.spring.data.SpringDataApplication.run(SpringDataApplication.java:53) ~[classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:795) ~[spring-boot-2.3.3.RELEASE.jar:2.3.3.RELEASE]
    ... 5 common frames omitted

2021-03-05 04:38:42.629  INFO 7606 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2021-03-05 04:38:42.630  INFO 7606 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2021-03-05 04:38:42.633  INFO 7606 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
6 respostas

Oi Camila

O problema do comando String descricao = scanner.next(); é que ele vai ler apenas o 'Auxiliar', deixa o 'Administrativo' para o próximo comando Scanner.nextInt Se você passar "Auxiliar Administrativo" (com as aspas) o comando vai entender que é uma String única e não vai mais ocorrer esse esse "at java.base/java.util.Scanner.nextInt(Scanner.java:2258) ~[na:na]", pois o "Administrativo" estava sendo lido pelo "scanner.nextInt();", gerando o problema.

Oi Otávio, tudo bem? Mesmo com as aspas ("") ainda está aprensentando o mesmo erro.

Qual ação você quer executar: 
0 - Sair
1 - Cargo
1
Descrição do cargo
"Auxiliar Administrativo"
Salvo
Qual ação você quer executar: 
0 - Sair
1 - Cargo
2021-03-06 14:18:24.587  INFO 6180 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-03-06 14:18:24.597 ERROR 6180 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:807) ~[spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:788) ~[spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:333) ~[spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1311) ~[spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) ~[spring-boot-2.4.3.jar:2.4.3]
    at br.com.alura.spring.data.SpringDataApplication.main(SpringDataApplication.java:23) ~[classes/:na]
Caused by: java.util.InputMismatchException: null
    at java.base/java.util.Scanner.throwFor(Scanner.java:939) ~[na:na]
    at java.base/java.util.Scanner.next(Scanner.java:1594) ~[na:na]
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258) ~[na:na]
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212) ~[na:na]
    at br.com.alura.spring.data.SpringDataApplication.run(SpringDataApplication.java:35) ~[classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:804) ~[spring-boot-2.4.3.jar:2.4.3]
    ... 5 common frames omitted

Estou com o mesmo erro da Camila. Mesmo inserindo aspas duplas o Scanner não funciona com nomes compostos e dá erro:

Qual função deseja executar?
0 - Sair
1 - Cargo
2 - Funcionário
3 - Unidade de trabalho
4 - Relatórios
3
Qual acao de cargo deseja executar
0 - Sair
1 - Salvar
2 - Atualizar
3 - Visualizar
4 - Deletar
1
Digite o nome da unidade
CENTRAL
Digite o endereco
"RUA DO CENTRO SEM NUMERO"
Salvo
Qual acao de cargo deseja executar
0 - Sair
1 - Salvar
2 - Atualizar
3 - Visualizar
4 - Deletar
2021-03-14 22:46:25.855  INFO 10052 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-03-14 22:46:25.885 ERROR 10052 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:807) [spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:788) [spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:333) [spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1311) [spring-boot-2.4.3.jar:2.4.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) [spring-boot-2.4.3.jar:2.4.3]
    at br.com.alura.spring.data.SpringDataApplication.main(SpringDataApplication.java:37) [classes/:na]
Caused by: java.util.InputMismatchException: null
    at java.util.Scanner.throwFor(Scanner.java:864) ~[na:1.8.0_261]
    at java.util.Scanner.next(Scanner.java:1485) ~[na:1.8.0_261]
    at java.util.Scanner.nextInt(Scanner.java:2117) ~[na:1.8.0_261]
    at java.util.Scanner.nextInt(Scanner.java:2076) ~[na:1.8.0_261]
    at br.com.alura.spring.data.service.CrudUnidadeTrabalhoService.inicial(CrudUnidadeTrabalhoService.java:29) ~[classes/:na]
    at br.com.alura.spring.data.SpringDataApplication.run(SpringDataApplication.java:62) [classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:804) [spring-boot-2.4.3.jar:2.4.3]
    ... 5 common frames omitted

2021-03-14 22:46:25.889  INFO 10052 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2021-03-14 22:46:25.892  INFO 10052 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2021-03-14 22:46:25.915  INFO 10052 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

No banco de dados salvou o endereço como "RUA, incluindo as aspas.

Oi Camila

Vamos fazer uma alteração lá na classe CrudCargoService então, vamos adicionar a linha scanner.useDelimiter("\n");

Exemplo:

    private void salvar(Scanner scanner) {
        System.out.println("Descricao do cargo");
        scanner.useDelimiter("\n");
        String descricao = scanner.next();
        Cargo cargo = new Cargo();
        cargo.setDescricao(descricao);
        cargoRepository.save(cargo);
        System.out.println("Salvo");
    }

Conte-me se resolveu o problema

Abraço

Olá Otávio Prado,

Fiz a alteração conforme sua sugestão no código:

    private void salvar(Scanner scanner) {
        System.out.println("Descrição do cargo");
        scanner.useDelimiter("\n");
        String descricao = scanner.next();
        Cargo cargo = new Cargo();
        cargo.setDescricao(descricao);
        cargoRepository.save(cargo);
        System.out.println("Salvo");
    }

Porém o resultado é que o comando gerou um comportamento no qual todo o código foi executado sem permitir a digitação:

 .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.4.3)

2021-03-15 13:53:10.439  INFO 9828 --- [           main] b.c.a.spring.data.SpringDataApplication  : Starting SpringDataApplication using Java 1.8.0_261 on DESKTOP-JSRAGLC with PID 9828 (C:\Users\marlo\eclipse-workspace\spring-data\target\classes started by marlo in C:\Users\marlo\eclipse-workspace\spring-data)
2021-03-15 13:53:10.442  INFO 9828 --- [           main] b.c.a.spring.data.SpringDataApplication  : No active profile set, falling back to default profiles: default
2021-03-15 13:53:10.968  INFO 9828 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-03-15 13:53:11.062  INFO 9828 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 77 ms. Found 3 JPA repository interfaces.
2021-03-15 13:53:11.859  INFO 9828 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2021-03-15 13:53:11.939  INFO 9828 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.28.Final
2021-03-15 13:53:12.194  INFO 9828 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2021-03-15 13:53:12.782  INFO 9828 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2021-03-15 13:53:13.758  INFO 9828 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2021-03-15 13:53:13.781  INFO 9828 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
2021-03-15 13:53:25.874  INFO 9828 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2021-03-15 13:53:25.884  INFO 9828 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2021-03-15 13:53:26.642  INFO 9828 --- [           main] b.c.a.spring.data.SpringDataApplication  : Started SpringDataApplication in 16.768 seconds (JVM running for 17.388)
Qual função deseja executar?
0 - Sair
1 - Cargo
2 - Funcionário
3 - Unidade de trabalho
4 - Relatórios
1
Qual ação de cargo deseja executar ?
0 - Sair
1 - Salvar
2 - Atualizar
3 - Visualizar
4 - Deletar
1 <<<--- Aqui digitei a opção e o código executou até o fim (vide mensagem salvo abaixo)
Descrição do cargo
Salvo
Qual ação de cargo deseja executar ?
0 - Sair
1 - Salvar
2 - Atualizar
3 - Visualizar
4 - Deletar

Consegui resolver, seguindo o que o Otávio Prado passou acima. Obrigado!!