Como converter em inteiro dados recebidos do teclado por Buffered read

21 respostas
J

Olá sou novo no fórum e queria a ajuda de vocês.
Como posso converter os dados recebidos do teclado em inteiros através do Buffered Read?
Agradeço pela a ajuda.

21 Respostas

rogelgarcia

Isso é seu dever de casa num é nao?

http://java.sun.com/docs/books/tutorial/essential/io/

Depois que ler do console é só dar new Integer(valor)

J

Sim Rogel é um trabalho da facul.
Já tentei converter através do Integer, só que quando digito o numero no teclado ele não passa o numero que digitei
e sim outro numero. E dessa forma não funciona corretamente os metos que iriam utilizar esse dados que são recebidos do teclado.
Queria saber se existe outra forma?

Agradeço.

rogelgarcia

Voce tá usando o método readLine ou read? para ler do console?

J

Estou utilizando o metodo readline para obter do teclado na classe cliente. Na classe servidora esta recebendo o metodo por bufferedStream ai utilizo um atributo inteiro e converto pelo Integer.parseInt. Esse atributo inteiro é usado em outra classe, a qual possui os metodos que o utiliza e esses metodos não estão conseguindo utilizar os dados.

rogelgarcia

huuummm… entao o problema é mais complexo… tem como vc postar o código?

J

Ai está o código fonte das três classes que eu estou utilizando.

CLASSE DO CLIENTE

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.ObjectInputStream;

import java.io.OutputStreamWriter;

import java.io.PrintStream;

import java.io.PrintWriter;

import java.net.Socket;

public class Cliente {

/**
 * @param args
 */
public static void main(String[] args) {
	// TODO Auto-generated method stub

	try {

		// Criando um cliente
		Socket cliente = new Socket("localhost", 3500);

		// canal de entrada de um cliente
		BufferedReader entrada = new BufferedReader(new InputStreamReader(
				cliente.getInputStream()));

		// canal de saida de um cliente
		PrintWriter saida = new PrintWriter(cliente.getOutputStream());
		
		// Canal que recebe dados do teclado
		
		
		//  Recebe a conexão iniciada
		String msgDeConexao;

		while ((msgDeConexao = entrada.readLine()) != null) {
			
			System.out.println(msgDeConexao);
			break;
		}
		
		//Recebe a primeira pergunta do servidor
		while ((msgDeConexao = entrada.readLine()) != null) {
			
			System.out.println(msgDeConexao);
			break;
		}

		
		//Envia a resposta para o servidor
		BufferedReader stdIn = new BufferedReader(new InputStreamReader(
				System.in));
		String mensagem;
		System.out.print("echo:>");
		while ((mensagem = stdIn.readLine()) != null) {

			saida.println(mensagem);
			saida.flush();
			break;
		}
		
		// Recebe o primeiro resultado do servidor (Frequencia cardíaca
		// máxima)
		String msgPergunta1;
	
		while((msgPergunta1 = entrada.readLine())!=null){
			
			System.out.println(msgPergunta1);
			break;
		}
		
		//  Recebe a segunda pergunta do servidor
		String msgResul1;
		
		while((msgResul1 = entrada.readLine())!=null){
			
			System.out.println( msgResul1);
			break;
		}

		//Envia a resposta para o servidor
		System.out.print("echo:>");
		while ((mensagem = stdIn.readLine()) != null) {
			saida.println(mensagem);
			saida.flush();
			break;
		}
		
		// Recebe o  resultado do servidor (zona de treinamento minima e
		// a máxima)
		
		String msgPergunta2;
		
		while((msgPergunta2 = entrada.readLine())!=null){
			
			System.out.println(msgPergunta2);
			break;
		}
		
		
		//Fecha os canais de saida
		entrada.close();
		saida.close();
		
	} catch (Exception e) {
		// TODO: handle exception
		e.getStackTrace();
		System.out.print("Erro de conexão");
	}

}

}

CLASSE DO SERVIDOR

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.ObjectOutputStream;

import java.io.PrintStream;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class Servidor {

int idade;
int freqRepouso;

public static void main(String[] args) {
	// TODO Auto-generated method stub
	try {
		// Instancia um objeto da classe calcula
		Calcula calc = new Calcula();

		// Instancia um objeto da classe servidor
		Servidor serv = new Servidor();

		// Criando um servidor
		ServerSocket servidor = new ServerSocket(3500);

		System.out.println("Servidor started");

		while (true) {

			Socket cli = servidor.accept();

			// Criando um canal de saida
			PrintWriter saida = new PrintWriter(cli.getOutputStream());

			// Criando canal de entrada onde ira receber dados do cliente
			BufferedReader entrada = new BufferedReader(
					new InputStreamReader(cli.getInputStream()));
			

			// Informa ao cliente que a conexão foi inciada
			saida.println("Conexão Iniciada");
			saida.flush();

			while (true) {

				// Envia a primeira pergunta ao cliente
				saida
						.println("Para saber sua frequência cardiáca máxima digite a sua idade");
				saida.flush();
				
				//Receb a resposta do cliente
				String info; 
				while ((info = entrada.readLine()) != null) {
					
					System.out.println("O cliente enviou [" + info + "]");
					break;
				}
				
				//Converte info em um inteiro
				serv.idade = Integer.parseInt(info);
				
				
				// Envia o primeiro resultado ao cliente (envia a frequência
				// cardíaca máxima
				saida.println("Sua frequencia cardiaca máxima é: "
						+ calc.frequenciaMax(serv.idade));
				saida.flush();

				// Envia a segunda pergunta
				saida
						.println("Para saber a sua zona de treinamento mínima e a máxima, digite a sua frequêcia cardiaca de repouso.");

				saida.flush();
				
				//Recebe a 2 resposta do cliente
				String informacao ;
				while((informacao = entrada.readLine())!=null){
				System.out.println("O cliente enviou [" + informacao + "]");
				break;
				}
				
				//Converte informação em um inteiro
				serv.freqRepouso =Integer.parseInt(informacao);
				
				
				// Envia o segundo resultado ( a zona de treinamento mínima
				// e a
				// máxima)
				saida.println("Sua zona de treinamento minima é: "
						+ calc.zonaTreinamentoMin(serv.freqRepouso,
								serv.idade)
						+ "  e a sua zona de treinamento máxima é:"
						+ calc.zonaTreinamentoMax(serv.freqRepouso,
								serv.idade));
				saida.flush();
				
				
				saida.close();
				entrada.close();
				
			}
		}
	} catch (Exception e) {
		// TODO: handle exception
		e.getStackTrace();
	}

}

}

CLASSE COM OS METODOS UTILIZADOS PELA CLASSE SERVIDOR (CLASSE CALCULA)

public class Calcula {

Servidor servi = new Servidor();

/*
 * Esse metodo deverá receber a idade do cliente e calcular a frquencia
 * cardiaca maxima e retornar para o servidor (int freq)
 */

public String frequenciaMax(int idade) {

	idade = servi.idade;
	
	int freq;
	
	freq = 220 - idade;

	String frequenciaMaxima = Integer.toString(freq);

	return frequenciaMaxima;

}

/*
 * Esse metodo deverá pegar a frequencia cardiaca de repouso do cliente (int
 * freqRepouso) e calcular a sua zona de treinamento minima (zonaFreqMin) e
 * retornar para o servidor
 */
public String zonaTreinamentoMin(int freqRepouso, int idade) {

	freqRepouso = servi.freqRepouso;
	idade = servi.idade;

	double zonaFreqMin;

	String freqMax = frequenciaMax(idade);
	int frequenciaCardiacMaxima = Integer.parseInt(freqMax);

	zonaFreqMin = (0.60 * (frequenciaCardiacMaxima - freqRepouso))
			+ freqRepouso;

	String zonaFrequenciaMin = Double.toString(zonaFreqMin);

	return zonaFrequenciaMin;
}

/*
 * Esse metodo deverá pegar a frequencia cardiaca de repouso do cliente
 * (intfreqRepouso) e calcular a sua zona de treinamento máxim a
 * (zonaFreqMax) e retornar para o servidor
 */
public String zonaTreinamentoMax(int freqRepouso, int idade) {

	freqRepouso = servi.freqRepouso;
	idade = servi.idade;

	double zonaFreqMax;

	String freqMax = frequenciaMax(idade);
	int frequenciaCardiacMaxima = Integer.parseInt(freqMax);

	zonaFreqMax = (0.80 * (frequenciaCardiacMaxima - freqRepouso))
			+ freqRepouso;

	String zonaFrequenciaMax = Double.toString(zonaFreqMax);

	return zonaFrequenciaMax;
}

}

rogelgarcia

Coloque seu código nas tags [code] se nao fica impossivel de ler...

rogelgarcia

Onde tem o código… o cliente enviou… tá mostrando corretamente?

J

Desculpe não sabia que tinha as tags code. Agora ficou bem melhor mesmo de visualizar

CLASSE CLIENTE

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.ObjectInputStream; 
import java.io.OutputStreamWriter; 
import java.io.PrintStream; 
import java.io.PrintWriter; 
import java.net.Socket; 

public class Cliente { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
// TODO Auto-generated method stub 

try { 

// Criando um cliente 
Socket cliente = new Socket("localhost", 3500); 

// canal de entrada de um cliente 
BufferedReader entrada = new BufferedReader(new InputStreamReader( 
cliente.getInputStream())); 

// canal de saida de um cliente 
PrintWriter saida = new PrintWriter(cliente.getOutputStream()); 

// Canal que recebe dados do teclado 


// Recebe a conexão iniciada 
String msgDeConexao; 

while ((msgDeConexao = entrada.readLine()) != null) { 

System.out.println(msgDeConexao); 
break; 
} 

//Recebe a primeira pergunta do servidor 
while ((msgDeConexao = entrada.readLine()) != null) { 

System.out.println(msgDeConexao); 
break; 
} 


//Envia a resposta para o servidor 
BufferedReader stdIn = new BufferedReader(new InputStreamReader( 
System.in)); 
String mensagem; 
System.out.print("echo:>"); 
while ((mensagem = stdIn.readLine()) != null) { 

saida.println(mensagem); 
saida.flush(); 
break; 
} 

// Recebe o primeiro resultado do servidor (Frequencia cardíaca 
// máxima) 
String msgPergunta1; 

while((msgPergunta1 = entrada.readLine())!=null){ 

System.out.println(msgPergunta1); 
break; 
} 

// Recebe a segunda pergunta do servidor 
String msgResul1; 

while((msgResul1 = entrada.readLine())!=null){ 

System.out.println( msgResul1); 
break; 
} 

//Envia a resposta para o servidor 
System.out.print("echo:>"); 
while ((mensagem = stdIn.readLine()) != null) { 
saida.println(mensagem); 
saida.flush(); 
break; 
} 

// Recebe o resultado do servidor (zona de treinamento minima e 
// a máxima) 

String msgPergunta2; 

while((msgPergunta2 = entrada.readLine())!=null){ 

System.out.println(msgPergunta2); 
break; 
} 


//Fecha os canais de saida 
entrada.close(); 
saida.close(); 

} catch (Exception e) { 
// TODO: handle exception 
e.getStackTrace(); 
System.out.print("Erro de conexão"); 
} 

} 

}

ClASSE DO SERVIDOR

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.ObjectOutputStream; 
import java.io.PrintStream; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class Servidor { 

int idade; 
int freqRepouso; 

public static void main(String[] args) { 
// TODO Auto-generated method stub 
try { 
// Instancia um objeto da classe calcula 
Calcula calc = new Calcula(); 

// Instancia um objeto da classe servidor 
Servidor serv = new Servidor(); 

// Criando um servidor 
ServerSocket servidor = new ServerSocket(3500); 

System.out.println("Servidor started"); 

while (true) { 

Socket cli = servidor.accept(); 

// Criando um canal de saida 
PrintWriter saida = new PrintWriter(cli.getOutputStream()); 

// Criando canal de entrada onde ira receber dados do cliente 
BufferedReader entrada = new BufferedReader( 
new InputStreamReader(cli.getInputStream())); 


// Informa ao cliente que a conexão foi inciada 
saida.println("Conexão Iniciada"); 
saida.flush(); 

while (true) { 

// Envia a primeira pergunta ao cliente 
saida 
.println("Para saber sua frequência cardiáca máxima digite a sua idade"); 
saida.flush(); 

//Receb a resposta do cliente 
String info; 
while ((info = entrada.readLine()) != null) { 

System.out.println("O cliente enviou [" + info + "]"); 
break; 
} 

//Converte info em um inteiro 
serv.idade = Integer.parseInt(info); 


// Envia o primeiro resultado ao cliente (envia a frequência 
// cardíaca máxima 
saida.println("Sua frequencia cardiaca máxima é: " 
+ calc.frequenciaMax(serv.idade)); 
saida.flush(); 

// Envia a segunda pergunta 
saida 
.println("Para saber a sua zona de treinamento mínima e a máxima, digite a sua frequêcia cardiaca de repouso."); 

saida.flush(); 

//Recebe a 2 resposta do cliente 
String informacao ; 
while((informacao = entrada.readLine())!=null){ 
System.out.println("O cliente enviou [" + informacao + "]"); 
break; 
} 

//Converte informação em um inteiro 
serv.freqRepouso =Integer.parseInt(informacao); 


// Envia o segundo resultado ( a zona de treinamento mínima 
// e a 
// máxima) 
saida.println("Sua zona de treinamento minima é: " 
+ calc.zonaTreinamentoMin(serv.freqRepouso, 
serv.idade) 
+ " e a sua zona de treinamento máxima é:" 
+ calc.zonaTreinamentoMax(serv.freqRepouso, 
serv.idade)); 
saida.flush(); 


saida.close(); 
entrada.close(); 

} 
} 
} catch (Exception e) { 
// TODO: handle exception 
e.getStackTrace(); 
} 

} 

}
CLASSE COM OS METODOS UTILIZADOS PELA CLASSE SERVIDOR (CLASSE CALCULA)
public class Calcula { 


Servidor servi = new Servidor(); 

/* 
* Esse metodo deverá receber a idade do cliente e calcular a frquencia 
* cardiaca maxima e retornar para o servidor (int freq) 
*/ 

public String frequenciaMax(int idade) { 

idade = servi.idade; 

int freq; 

freq = 220 - idade; 

String frequenciaMaxima = Integer.toString(freq); 

return frequenciaMaxima; 

} 

/* 
* Esse metodo deverá pegar a frequencia cardiaca de repouso do cliente (int 
* freqRepouso) e calcular a sua zona de treinamento minima (zonaFreqMin) e 
* retornar para o servidor 
*/ 
public String zonaTreinamentoMin(int freqRepouso, int idade) { 

freqRepouso = servi.freqRepouso; 
idade = servi.idade; 

double zonaFreqMin; 

String freqMax = frequenciaMax(idade); 
int frequenciaCardiacMaxima = Integer.parseInt(freqMax); 

zonaFreqMin = (0.60 * (frequenciaCardiacMaxima - freqRepouso)) 
+ freqRepouso; 

String zonaFrequenciaMin = Double.toString(zonaFreqMin); 

return zonaFrequenciaMin; 
} 

/* 
* Esse metodo deverá pegar a frequencia cardiaca de repouso do cliente 
* (intfreqRepouso) e calcular a sua zona de treinamento máxim a 
* (zonaFreqMax) e retornar para o servidor 
*/ 
public String zonaTreinamentoMax(int freqRepouso, int idade) { 

freqRepouso = servi.freqRepouso; 
idade = servi.idade; 

double zonaFreqMax; 

String freqMax = frequenciaMax(idade); 
int frequenciaCardiacMaxima = Integer.parseInt(freqMax); 

zonaFreqMax = (0.80 * (frequenciaCardiacMaxima - freqRepouso)) 
+ freqRepouso; 

String zonaFrequenciaMax = Double.toString(zonaFreqMax); 

return zonaFrequenciaMax; 
} 

}
rogelgarcia

Onde tem o código… System.out.println(“O cliente enviou [” + info + “]”); … tá mostrando corretamente?

No info tem só um número? É aqui que tá dando pau?

J

“Onde tem o código o cliente enviou?”.
Nesse ponto não mostra o dado que digitei no teclado mostra outro.

J

É nesse ponto que num da certo pois aparece outro numero fazendo com que o metodo da classe clacula frequenciaMax sempre mostre 220 independente do valor que vc digitar

rogelgarcia

Aparecem assim:

O cliente enviou [220]

Independente do que vc digitar?

J

por exemplo se vc digitar 10 no lado do cliente vai aparecer dessa forma no lado do servidor:

O cliente enviou [56]

E o método da classe calcula frequenciaMax () independente do numero que vc digitar sempre retorna 220, esse resultado sempre aparece para o cliente.

rogelgarcia

É… num to acahndo o problema nao…

Voce tem a manha de dar um debug?

J

esse char da leitura não é um caracter texto, é um byte;
Para converter em um inteiro faça:

int valor = seuChar - '0';
J

obrigado pela ajuda galera consegui resolver ontem a noite o problema no meu código.

J

Como faço pra postar que o tópico foi resolvido

J

altera editando o titulo do topico, e posta a solução.

J

O conceito de usar Integer.parseInt para converter os dados utilizados do teclado em inteiros estavam corretos.
Eu estava errando na classe que recebia esse parâmetro estava instanciando o atributo idade = servi.idade na classe calcula no método
frequenciaMax() estava dessa forma:

public String frequenciaMax(int idade) {
		
		idade = servi.idade;
		
		int freq = 220 - idade;
		

		String frequenciaMaxima = Integer.toString(freq);

		return frequenciaMaxima;

	}

E o correto seria:

public String frequenciaMax(int idade) {
		
		int freq = 220 - idade;
		

		String frequenciaMaxima = Integer.toString(freq);

		return frequenciaMaxima;

	}

Estava errando não na captura do inteiro e sim ao instanciar o parâmetro do método que recebia já servi.idade dessa forma sempre zerava ou alterava o valor digitado.

J

show de bola.

Criado 23 de março de 2010
Ultima resposta 26 de mar. de 2010
Respostas 21
Participantes 3