Bem eu estou com um pequeno problema ao querer ler um char do teclado, desta forma venho aqui mais uma vez pedir a vossa ajuda para esclarecer as minhas duvidas e questões.
Bem a minha duvida é, eu pretendo criar um programa que leia um char do teclado, “apenas um”, contudo eu apenas quero que o utilizador digite 1 em 4 chars disponíveis e se o utilizador não usar um desses 4 chars o programa da uma mensagem de erro. Vou colocar aqui o método para que entendam melhor a minha duvida.
publicclassExample{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);booleancorrecta=true;charopcao;do{System.out.println("Escolha comando: A / B / C / D ");while(opcao!=A||opcao!=B||opcao!=C||opcao!=D){System.out.print("-> ");opcao=sc.next();if(opcao!=A||opcao!=B||opcao!=C||opcao!=D)System.out.println("Esse comando nao existe");}if(opcao==A){}if(opcao==B){}if(opcao==C){}if(opcao==D){}}while(!correcta);
Será que eu posso fazer assim ? ou está algo de errado?
Pensando bem rapidamente acho que faria conforme abaixo:
PS.: não compilei o código pq aqui no trabalho não tenho compilador java instalado… :’(
publicclassExample{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);charopcao;do{System.out.println("Escolha comando: A / B / C / D ");opcao=sc.nextLine().charAt(0);}while(!ComandoExiste(opcao));}staticbooleanComandoExiste(charopcao){booleanretorno=true;if(!(opcao=='A'||opcao=='B'||opcao=='C'||opcao=='D')){System.out.println("Esse comando nao existe.");retorno=false;}returnretorno;}}
Da forma acima você trabalha com o tipo char e usa apenas o primeiro caractere digitado pelo seu usuário, ignorando caso ele insira mais alguma informação que não será relevante… usando char você pode usar o operador de comparação “==”.
Ah! Muito (!!!) importante, o operador “=” é de atribuição, de comparação em Java é “==”.
Abraços!
M
Mitidiero
suelengc:
Olá!
Pensando bem rapidamente acho que faria conforme abaixo:
PS.: não compilei o código pq aqui no trabalho não tenho compilador java instalado… :’(
publicclassExample{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);charopcao;do{System.out.println("Escolha comando: A / B / C / D ");opcao=sc.nextLine().charAt(0);}while(!ComandoExiste(opcao))}staticbooleanComandoExiste(charopcao){booleanretorno=true;if(!(opcao=='A'||opcao=='B'||opcao=='C'||opcao=='D')){System.out.println("Esse comando nao existe.");retorno=false;}}}
Da forma acima você trabalha com o tipo char e usa apenas o primeiro caractere digitado pelo seu usuário, ignorando caso ele insira mais alguma informação que não será relevante… usando char você pode usar o operador de comparação “==”.
Ah! Muito (!!!) importante, o operador “=” é de atribuição, de comparação em Java é “==”.
Abraços!
Lógica perfeita, porém, talvez seja equivoco meu, mas eu trocaria o == por .equals(‘X’)
Como diz o ViniGodoy: “O == só testa conteúdo no caso dos tipos primitivos.”, como no caso do código que eu postei estamos usando o char, podemos tranquilamente usar o ==.
Acredito que, neste caso, o == seria a melhor opção pois deve ter uma melhor perfomance, mas para ter certeza precisaríamos ver o .class gerado (o que não consigo fazer agora infelizmente).
Como diz o ViniGodoy: “O == só testa conteúdo no caso dos tipos primitivos.”, como no caso do código que eu postei estamos usando o char, podemos tranquilamente usar o ==.
Acredito que, neste caso, o == seria a melhor opção pois deve ter uma melhor perfomance, mas para ter certeza precisaríamos ver o .class gerado (o que não consigo fazer agora infelizmente).
Abraços!
Valeu pela explicação, olharei sim =)
suelengc
Ah, outro pequeno detalhe… o .equals só existe em tipos de referência… não existe em tipos primitivos, como o char
Abraços!
A
andrefilipe6
Muito obrigado pela sua explicação suelengc . Contudo agora apareceu me outra duvida que já não tem muito a ver com o conteúdo do tópico, ainda assim é uma duvida no seguimento deste código.
A minha divida é, quando o utilizador escolhe por exemplo a letra a eu queria que, na escolha desta opcao, o programa imprimisse no ecra o conteudo de um ficheiro .txt eu tentei fazer da seguinte forma :
publicclassExample{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);BufferedReaderin;in=newBufferedReader(newFileReader("ficheiro.txt"));charopcao;do{System.out.println("Escolha comando: A / B / C / D ");opcao=sc.nextLine().charAt(0);if(opcao=='M'){System.out.println(in);}while(!ComandoExiste(opcao))}staticbooleanComandoExiste(charopcao){booleanretorno=true;if(!(opcao=='A'||opcao=='B'||opcao=='C'||opcao=='D')){System.out.println("Esse comando nao existe.");retorno=false;}}}}
Eu fazendo assim estão me a dar alguns erros, pois penso que esta não será a forma correta
suelengc
Olá andrefilipe6!
Realmente seu código não está correto. Mas por favor, ao citar um problema, além de dizer o código que tentou fazer, diga também qual erro está ocorrendo e quais foram suas tentativas de solucionar, não espere simplesmente que alguém venha e coloque o código correto.
Seu problema pode ser facilmente resolvido com o uso das classes FileReader e BufferedReader.
No próprio GUJ há um artigo muito bom e breve do Guilherme Silveira da Caelum que aborda de forma prática e muito simples algumas classes da biblioteca Java.io, dentre elas, ele aborda estas duas classes que citei que podem lhe ajudar.