Me ajudem... sou novato e apanhando ate...rs

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 :wink:
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 :wink:
No caso, ele está comparando int com um valor que representa um caracter ANSII (‘A’).