caros amigos
fiz uma classe para estudo como segue abaixo:
porque nao da a mensagem “nao passa aqui 03” nem a mensagem
“nao passa aqui 01” mas executa a mensagem “passa aqui 02”
o que esta acontecendo?
import java.io.*;
public class LeTeclado {
public String Leitura() {
int a = 0;
String s = "";
InputStream t = System.in;
System.out.println("Inicio");
while (a != 65) {
try {
a = t.read();
} catch (IOException e) {
System.out.println("nao passa aqui01");
System.out.println(e);
}
s = s + (char) a;
System.out.println("passa aqui02");
System.out.println(s);
}
System.out.println("nao passa aqui03" + s);
return s;
}
}
cara… antes de tudo coloque seu código entre as tags CODE
Primeiro coloque seu código em tag code, para podermos visualizar melhor o seu código e assim ajudá-lo…
Não aparece a mensagem “não passa aqui 01”, porque não gerou um exception, caso gere, ele entrara no blobo catch e exibirá a mensagem, já a mensagem “passa aqui02” é normal passar pois está fora do try-catch e exibirá todas as vezes em que o while executar o loop. já o não passa aqui03 não sei porque não está exibindo, já experimentou debugar para ver porque não está mostrando a mensagem?
[code]public String Leitura() {
int a = 0;
String s = “”;
InputStream t = System.in;
System.out.println("Inicio");
while (a != 65) {
try {
a = t.read();
} catch (IOException e) {
System.out.println("nao passa aqui01");
System.out.println(e);
}
s = s + (char) a;
System.out.println("passa aqui02");
System.out.println(s);
}
System.out.println("nao passa aqui03" + s);
return s;
}[/code]
Não vai cair no “nao passa aqui01” pois não ta dando erro e levantando a Exception
e so vai cair no “nao passa aqui03” se você sair do laço while.
PS - Usa a tag [code] pra colocar o código pra ficar mais fácil de ajudar.
[quote=alexvingg][code]public String Leitura() {
int a = 0;
String s = “”;
InputStream t = System.in;
System.out.println("Inicio");
while (a != 65) {
try {
a = t.read();
} catch (IOException e) {
System.out.println("nao passa aqui01");
System.out.println(e);
}
s = s + (char) a;
System.out.println("passa aqui02");
System.out.println(s);
}
System.out.println("nao passa aqui03" + s);
return s;
}[/code]
Não vai cair no “nao passa aqui01” pois não ta dando erro e levantando a Exception
e so vai cair no “nao passa aqui03” se você sair do laço while.
PS - Usa a tag [code] pra colocar o código pra ficar mais fácil de ajudar.[/quote]
Isso, faltava isso e eu não tinha visto… jonasjgs2 coloque ao final do laço while, senão irá realizar o loop infinitamente…
a++;
Simples você não está saindo do do seu loop para executar o resto do método que aparece “passa aqui02” e ao digitar a entrada no teclado você não está lançando nenhuma exceção por isso não irá mostrar a mensagem “nao passa aqui01”.
Depois ajeita seu código entre as tags CODE para ficar legível. flw!!
O “nao passa aqui03” só vai ser impresso quando sair do loop.
Para sair do loop é necessário digitar “A” (maiúsculo e sem aspas), equivalente ao char 65.
Isso vai cair em um loop infinito…
coloca na linha 17
a++;
ai ele vai rodar até o numero 65
uhmm… não havia percebido… vlw!
[quote=wellington.nogueira][quote=rodi_ramos]Isso vai cair em um loop infinito…
coloca na linha 17
a++;
ai ele vai rodar até o numero 65[/quote]
Não é porque é while que será loop infinito. E não é porque está testando um int que a variável deve ser incrementada 
No caso, ele está comparando int com um valor que representa um caracter ANSII (‘A’).[/quote]
Verdade, não tinha me atentado para o fato. O loop só termina se encontrar a letra ‘A’ no System… precisa por um ‘A’ ai …
caros amigos obrigado pelas dicas…
realmente o loop so terminava quando encontrava a letra “A”…
[quote=jonasjgs2]caros amigos
fiz uma classe para estudo como segue abaixo:
porque nao da a mensagem “nao passa aqui 03” nem a mensagem
"nao passa aqui 01" mas executa a mensagem "passa aqui 02"
o que esta acontecendo?
[code]import java.io.*;
public class LeTeclado {
public String Leitura() {
int a = 0;
String s = "";
InputStream t = System.in;
System.out.println("Inicio");
while (a != 65) {
try {
a = t.read();
} catch (IOException e) {
System.out.println("nao passa aqui01");
System.out.println(e);
}
s = s + (char) a;
System.out.println("passa aqui02");
System.out.println(s);
}
System.out.println("nao passa aqui03" + s);
return s;
}
}[/code]
[/quote]
Indico a você, que deseja participar do GUJ a leitura destes dois tópicos:
http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor
http://www.guj.com.br/java/15777-antes-de-voce-perguntar
Quanto a tua dúvida, primeiro: Ocorre alguma exceção?
O que você está esperando em a != 65? O codigo ANSII 65 representa ‘A’, não ‘a’
[quote=mauricionarcizo]…
Isso, faltava isso e eu não tinha visto… jonasjgs2 coloque ao final do laço while, senão irá realizar o loop infinitamente…
a++;[/quote]
Se você se atentar, verá que ele está verificando se uma determinada letra foi digitada. Logo, ele NÃO deve incrementar a variável.
Aliás, só por sugestão: Troque a != 65 por a != ‘A’ pois char, na realidade é um tipo inteiro.
[quote=rodi_ramos]Isso vai cair em um loop infinito…
coloca na linha 17
ai ele vai rodar até o numero 65[/quote]
Não é porque é while que será loop infinito. E não é porque está testando um int que a variável deve ser incrementada 
No caso, ele está comparando int com um valor que representa um caracter ANSII (‘A’).