Estou começando em java e queria fazer um programa para ler 100 valores para uma votação com o comando for.
Mas o problema é que eu não sei o comando ler, o valor lido sera uma integer.
publicclassTeste{inta,b,v;voidinforma(){System.out.println("a recebeu "+a+" votos");System.out.println("a recebeu "+b+" votos");}}publicclassTeste2{publicstaticvoidmain(String[]args){Testevotar=newTeste();inti;for(i=1;i<=100;i++){System.out.println(" 1 para votar em a");System.out.println(" 2 para votar em b");// aki vai o comando ler, o valor informado vai ir para variavel votar.vif(votar.v==1){votar.a++;}if(votar.v==2){votar.b++;}}votar.informa();}}
se puder explicar detalhadamente eu fico agradecido, pois estou começando em uma linguagem orientada a objetos.
Declara um scanner, atribui a ele um new Scanner, no construtor você passa o valor de onde vao vir os dados, poderia ser um arquivo de texto por exemplo, nesse caso o System.in serve para dizer que o padrão é o teclado. deu pra entender?
UdusCode
Nossa, mais simples do que eu esperava, Muito obrigado deu certinho
ViniGodoy
Simples e errado. O correto, quando usar o Scanner para ler do teclado, é usar sempre o comando nextLine():
dessa eu nao sabia. Me tire uma duvida, se eu só vou ler inteiros, porq usar o nextLine() ? e quando eu devo usar esse metodo nextInt()?
ViniGodoy
Você deve lembrar que todo comando do console termina em \n, mesmo que o usuário digite somente um inteiro, ao final, ele digitará enter para finalizar a linha.
Caso você use o nextInt() você lerá o inteiro da linha de comando e deixará o \n sem leitura.
Esse \n ficará no buffer interno do Scanner. Se o próximo comando for um nextLine(), apenas esse \n será lido, e você terá a impressão de que o Scanner não funcionou (ele retorna vazio imediatamente, sem nem sequer pedir dado nenhum do usuário).
angeliski
Isso realmente ja aconteceu comigo, e eu tive que descobrir isso na pratica.
mas supondo que eu só va ler inteiros, eu posso usar o nextInt, certo?
ViniGodoy
Até pode, mas sistemas profissionais tem a mania de crescer.
Aí é melhor não contar com a sabedoria do próximo programador a mexer no código, imaginando que ele vá alterar todos os nextInt() se tiver que colocar um nextLine() no programa, hehehe.
Só explicando, um novo nextInt() ignoraria o \n que já tem no buffer, leria o próximo inteiro e pararia com o próximo \n no buffer.
angeliski
Entendi!
Obrigado pela explicação, é bom saber as boas praticas alem da Tecnica pura.
Valews!
lucas_guj
ViniGodoy:
Você deve lembrar que todo comando do console termina em \n, mesmo que o usuário digite somente um inteiro, ao final, ele digitará enter para finalizar a linha.
Caso você use o nextInt() você lerá o inteiro da linha de comando e deixará o \n sem leitura.
Esse \n ficará no buffer interno do Scanner. Se o próximo comando for um nextLine(), apenas esse \n será lido, e você terá a impressão de que o Scanner não funcionou (ele retorna vazio imediatamente, sem nem sequer pedir dado nenhum do usuário).
PQP 10 mil vezes.
Quando estava bem no comecinho aprendendo java e fazendo os exercícios tive vários problemas que acontecia exatamente o que você está falando neste post. E eu nem entendia porque acontecia isso e em um post meu uma vez ninguem conseguiu me explicar também ¬¬ Mas o que importa é que agora entendi algo que acontecia lá atrás.