O que estou errando neste While?

8 respostas
D

Olá Pessoal, sou um zé mané em java e estou terminando um trabalhinho aonde preciso criar uma telinha em modo caracter, aonde o usuario vai inserir um caracter que corresponde uma funcao. Já fiz a tela e abaixo criei uma funcao para nela ter um while que depedendo do que foi inserido pelo usuário vai chamar um método de outra classe.

Na primeira volta do laço funciona, mas na segunda não, ele entra no if mas nao deixa digitar a frase.

Exemplo, digito i, ai entao vai entrar no primeiro if, que lê novamente o teclado para que eu digite uma frase, em seguida chamo um metodo. Na segunda volta do laço, se eu digitar i ou qualquer outra funcao, ele não me DEIXA digitar a frase.

public void funcao(){
		
		String funcao = "qualquer coisa"; 
		 
		while(!funcao.equals("fim")){
		 
		 funcao = Leitura.lerTeclado("Informe a funcao desejada:  ");
		 funcao = funcao.toLowerCase();
		  
		 if (funcao.equals("")) {
		 System.out.println("funcao vazia");	
		 }
		 
		if(funcao.equals("i")){
			String frase = Leitura.lerTeclado("Informe a frase: ");
			System.out.println("Digitou: " + frase);
			linha.insereinicio(frase);
		}
		
		else if(funcao.equals("in")){
			String nrolinha = Leitura.lerTeclado("Informe o numero da linha: ");
			String frase = Leitura.lerTeclado("Informe a frase: ");
			//linha.insereaposlinha(nrolinha,frase);
		}
		
		else if(funcao.equals("dif")){
			String li = Leitura.lerTeclado("Informe a linha inicio: ");
			int l1 = Integer.parseInt(li);
			String lf = Leitura.lerTeclado("Informe a linha fim: ");
			//linha.deletaintervalo(li,lf);
		}
		
		else if(funcao.equals("dl")){
			String nrolinha = Leitura.lerTeclado("Informe o numero da linha: ");
			//linha.insereaposlinha(nrolinha,frase);
		}
		
		else if(funcao.equals("lc")){
			linha.MostraCrescente();
		}
		
		else if(funcao.equals("ld")){
			linha.MostraCrescente();
		}
		
		else if(funcao.equals("li")){
			String nrolinha = Leitura.lerTeclado("Informe o numero da linha: ");
			//linha.mostralinha(nrolinha);
		}
		
		else if(funcao.equals("l")){
			//linha.mostralinhacorrente();
		}
		
		else if(funcao.equals("ia")){
			String apos = Leitura.lerTeclado("Informe a frase que deseja ser a anterior a frase que sera inserida: ");
			String frase = Leitura.lerTeclado("Informe a frase desejada a ser inserida: ");
			linha.insereapos(apos,frase);
		}
		
		else if(funcao.equals("a")){
			String frase = Leitura.lerTeclado("Informe a frase a ser anexada: ");
			//linha.anexar(frase);
		}
		
		else if(funcao.equals("t")){
			String lx = Leitura.lerTeclado("Informe a linha X: ");
			String ly = Leitura.lerTeclado("Informe a linha Y: ");
			//linha.invertelinhas(lx,ly);
		}
		
		else if(funcao.equals("v")){
			//linha.ctrlz();
		}
		
		else if(funcao.equals("s")){
			//linha.salvararquivo();
		}
		
		else if(funcao.equals("")){
			System.out.println("Trapaceiro");
		}
		
	 }
	}
	
	
	public static void main(String args[]){
		Tela Inicio = new Tela();
		Inicio.Instrucoes();
		Inicio.funcao();
		
	}

Obrigado a todos, parabéns pelo fórum.

8 Respostas

evertonsilvagomesjav

Não deveria ficar dentro do seu while nao? String funcao = "qualquer coisa";

facholi

Muito provável que o problema esteja dentro do seu Leitura.lerTeclado.

Posta aqui o código dele se não encontrar :wink:

evertonsilvagomesjav

ainda acho que deveria ficar dentro do while:

String funcao = "qualquer coisa";
P

Então creio que seja o método lerTeclado(), tbm…
posta o código ae…
por que não usa o Scanner em vez de criar um metódo pra leitura…
e tente trocar o nome da variável funcao para outro nome para não entrar em conflito com o nome da classe…

evertonsilvagomesjav

ele poderia declarar a variavel fora e usar ela dentro do while nao?

D

Primeiro muito obrigado pela atenção de todos!

Abaixo o código da Classe Leitura

public class Leitura
{
	public static String lerTeclado(String msg)
	{
		int a=0;
		String retorno = "";
		byte[] vetor = new byte[100];
		try 
		{ 
			System.out.println(msg); 
			a = System.in.read(vetor); 
			retorno = new String(vetor);
			retorno = retorno.trim();
		} 
		catch(Exception e) 
		{
			e.printStackTrace();
		}
		return retorno;
	}
}

Tentei colocar o funcao=“qualquer coisa” dentro do while mas realmente não funcionou

Tem outra forma de ler o dados do teclado sem ter essa classe, talvez como nosso amigo falou utilizando o Scanner, como utilizar?

Muito obrigado a todos!

D

Olá,

O problema era a classe Leitura mesmo, pesquisei melhor e achei esse post: http://www.guj.com.br/posts/list/2820.java.

Nele tem um classe chamada Keyboard, todo documentado e dividido em readString, readInt, etc… muito bom.

obrigado a todos!

WellingtonRamos

[quote=evertonsilvagomesjava]ainda acho que deveria ficar dentro do while:

Não deveria…
Questão de escopo de método :slight_smile:
No caso de colocar essa linha dentro do while, a condição vai possuir uma variável não declarada e vai dar erro de compilação.

Pode ser que esteja ocorrendo uma exceção “tratada” em algum ponto que faz com que o programa deixe de funcionar…
O laço aparenta estar correto mas os métodos estáticos podem não estar.

Criado 23 de outubro de 2009
Ultima resposta 23 de out. de 2009
Respostas 8
Participantes 5