Comment prendre le caractère unique de saisie de l'utilisateur en Java?
Dans l'exemple ci-dessous , je suis en train d'accepter caractère unique d'entrée de l'utilisateur, mais lors de l'exécution du programme, j'obtiens boucle do..while exécutée plusieurs fois. Consultez le résultat du programme ci-dessous.
Si quelqu'un pourrait m'aider pour la réponse, comment résoudre ce problème?
import java.io.*;
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
char c;
//BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
DataInputStream in =new DataInputStream(System.in);
//Asking the user what to do with the application
do{
System.out.println("Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E' ");
byte b = in.readByte();
c = (char) b;
c = Character.toUpperCase(c);
if (c=='Y'){
System.out.println(c);
}
else if (c=='N') {
System.out.println(c);
}
else if (c=='E'){
System.out.println(c);
}
else{
System.out.println("Incorrect Entry, try again: "+c);
}
}while (c!='E');
}
}
Sortie
init:
deps-jar:
compile:
run:
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E'
asdfgaf
Incorrect Entry, try again: A
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E'
Incorrect Entry, try again: S
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E'
Incorrect Entry, try again: D
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E'
Incorrect Entry, try again: F
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E'
Incorrect Entry, try again: G
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E'
Incorrect Entry, try again: A
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E'
Incorrect Entry, try again: F
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E'
Incorrect Entry, try again:
Would you like to access your account, if yes,type 'Y' or if you want to create a new account press 'N'to exit press 'E'
Peut-être que vous pourriez utiliser readLine() au lieu de readByte()
Pourquoi avez-vous pas attendre la
Pourquoi avez-vous pas attendre la
while
boucle pour exécuter plusieurs fois? C'est le point d'une boucle, et le vôtre en boucle jusqu'à ce que c == 'E'
. Puisque tu ne semble pas saisir un E, ce comportement semble exactement comme je m'attends. Il serait utile d'expliquer quelles sont les autres comportements que vous attendiez.
OriginalL'auteur Dani | 2013-02-14
Vous devez vous connecter pour publier un commentaire.
À l'aide de DataInputStream n'est probablement pas la meilleure façon de gérer votre situation.
DataInputStream tampons d'entrées que vous avez tapé, c'est pourquoi vous obtenez indésirables de longs messages avec des boucles.
Essayez d'utiliser un Scanner à la place.
Voici un exemple de Scanner:
OriginalL'auteur wns349
Utilisation Du Système.dans.read() au lieu de DataInputStream.
OriginalL'auteur Sumit Desai
DataInputStream
(InputStream
) est fondamentalement un binaire construire. Si vous voulez lire des données de texte (par exemple, à partir de la console), vous devez utiliser un Lecteur. Dans le code source Il y avait une commentéBufferedReader
. Il est mieux d'utiliser les mêmes au lieu deDataInputStream
. Vous pouvez faire en tant que ci-dessous,Ou vous pouvez utiliser
DataInputStream.readLine()
, mais ses obsolète pour une raison. Et son il y à également utiliserBufferedReader.readLine()
.Vous pouvez aller pour obtenir d'autres options, comme Scanner.
OriginalL'auteur Jayamohan
De l'utilisateur du Scanneur classe pour l'obtention d'entrée. Son bon moyen pour résoudre votre problème.
OriginalL'auteur Anurag
Depuis ce thread a pas encore de RÉPONSE, je vais quand même répondre, même si ses vraiment vieux; pour les gens qui veulent toujours une explication.
À l'aide d'un
Scanner
sont la meilleure idée de la situation.Les Scanners sont faciles à utiliser, et arrêter le fil jusqu'à la fin. Vous pouvez l'utiliser à votre avantage, ou vous pouvez créer un nouveau thread pour garder le thread en cours d'exécution.
L'utilisation de base d'un scanner:
"lettre" sera de retour avant TOUT un espace dans le scanner. Pour trouver la première lettre, diviser la chaîne en
""
, puis prendre la 1ère (0e) de la matrice.Enfin, une bonne citation tirée ce fil à propos de scanners
Plus tard, lors de la recherche de plusieurs mots, utilisez nextLine() au lieu de() pour obtenir le plein Chaîne
OriginalL'auteur 0xA
Probablement au-dessus d'exécution l'exemple que vous avez donné à l'entrée comme "asdfgaf" puis appuie sur entrée.
c'est donc en prenant A, S, D, F .... comme entrée un caractère à la fois.
vous devriez donner votre avis en tant que 'y' ou 'n' ou 'e' (un seul caractère à la fois) et puis appuyez sur Entrée.
e.g
Aimeriez-vous pour accéder à votre compte, si oui,tapez " Y "ou si vous voulez créer un nouveau compte, appuyez sur la touche" N " pour sortir, appuyez sur 'E' :
y
OriginalL'auteur VishalDevgire