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.
Como converter em inteiro dados recebidos do teclado por Buffered read
21 Respostas
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)
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.
Voce tá usando o método readLine ou read? para ler do console?
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.
huuummm… entao o problema é mais complexo… tem como vc postar o código?
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;
}
}
Coloque seu código nas tags [code] se nao fica impossivel de ler...
Onde tem o código… o cliente enviou… tá mostrando corretamente?
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();
}
}
}
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;
}
}
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?
“Onde tem o código o cliente enviou?”.
Nesse ponto não mostra o dado que digitei no teclado mostra outro.
É 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
Aparecem assim:
O cliente enviou [220]
Independente do que vc digitar?
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.
É… num to acahndo o problema nao…
Voce tem a manha de dar um debug?
esse char da leitura não é um caracter texto, é um byte;
Para converter em um inteiro faça:
int valor = seuChar - '0';
obrigado pela ajuda galera consegui resolver ontem a noite o problema no meu código.
Como faço pra postar que o tópico foi resolvido
altera editando o titulo do topico, e posta a solução.
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.
show de bola.