Duvida comando ler

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.

public class Teste {	
	 int a,b,v;	
	 void informa(){
		System.out.println("a recebeu " + a + " votos");
		System.out.println("a recebeu " + b + " votos");		
	}	
}
public class Teste2 {
	public static void main(String[] args){
		Teste votar = new Teste();
		int i;
		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.v
			if (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. :smiley:

Bom, se você quiser ler o valor via teclado, você pode usar a classe scanner.

Exemplo

import java.util.Scanner;

public class Inicio {
	
	public static void main(String[] args) {
		
		Scanner entrada = new Scanner(System.in);  
		i = entrada.nextInt();
		
	}

}

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?

Nossa, mais simples do que eu esperava, Muito obrigado deu certinho :smiley:

Simples e errado. O correto, quando usar o Scanner para ler do teclado, é usar sempre o comando nextLine():

[code]import java.util.Scanner;

public class Inicio {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
i = Integer.parseInt(entrada.nextLine());
}
}
[/code]

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()?

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).

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?

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.

Entendi!

Obrigado pela explicação, é bom saber as boas praticas alem da Tecnica pura.

Valews!

[quote=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).[/quote]

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.