2010-09-20 9 views
0

J'ai une classe que j'ai écrite en Java et l'une des méthodes est getCommand() Le but de cette méthode est de lire une chaîne et de voir ce que l'utilisateur tapé correspond à l'une des commandes acceptables .Application d'une entrée valide en Java

Voici comment je l'ai écrit d'abord:

public char getCommand(){ 


    System.out.println("Input command: "); 
    command = input.nextLine(); 

    while(command.length() != 1){ 
     System.out.println("Please re-enter input as one character: "); 
     command = input.nextLine(); 
    } 

    while( command.substring(0) != "e" || 
      command.substring(0) != "c" || 
      command.substring(0) != "s" || 
      command.substring(0) != "r" || 
      command.substring(0) != "l" || 
      command.substring(0) != "u" || 
      command.substring(0) != "d" || 
      command.substring(0) != "k" || 
      command.substring(0) != "f" || 
      command.substring(0) != "t" || 
      command.substring(0) != "p" || 
      command.substring(0) != "m" || 
      command.substring(0) != "q"){ 
     System.out.println("Please enter a valid character: "); 
     command = input.nextLine(); 
    } 

    fCommand = command.charAt(0); 

    return fCommand; 

} 

Maintenant, je vois le problème est que, depuis que j'utilise l'opérateur OR, il ne sera pas échapper à cette boucle parce que le caractère de type I dans la volonté toujours pas égal l'un d'entre eux. J'ai essayé de le changer à l'opérateur ET, mais le même problème. Quel serait le meilleur moyen d'accepter uniquement ces caractères spécifiques? Très apprécié.

Répondre

2

Votre logique est incorrecte. Vous devriez utiliser des AND logiques et non des OR. Aussi je crois que vous voulez utiliser charAt() au lieu de substring() puis comparer les caractères.

dire,

while( command.charAt(0) != 'e' && 
     command.charAt(0) != 'c' && 
     command.charAt(0) != 's' && 
     ...) 

Sinon, si vous voulez tester pour les entrées de chaîne unique caractères réels, il suffit de vérifier à l'aide de l'égalité chaîne.

while( !command.equals("e") && 
     !command.equals("c") && 
     !command.equals("s") && 
     ...) 
+0

Peut-être une bonne idée de convertir la commande en majuscules ou en minuscules, car il valide les données –

+0

Bien travaillé. J'ai essayé d'utiliser && plus tôt, et cela n'a pas fonctionné. J'ai découvert que c'était parce que je n'avais pas sauvegardé le fichier après avoir changé les opérateurs. Merci beaucoup pour la réponse! – Seephor

+0

et pour différents cas, je viens d'utiliser command.toLowerCase() après avoir lu dans la chaîne. – Seephor

0

Vous devez définir vos commandes comme des constantes (individuellement). Les valeurs de codage dur de ce type rendent plus difficile la mise à jour de votre code dans le futur.

Si le programme est tout simplement la preuve de concept ou devoirs j'utiliser:

private static final String COMMANDS = "ecsrludkftpmq"; 

while(!COMMANDS.contains(command.getChar(0)) { 
    System.out.println("Please enter a valid character: "); 
    command = input.nextLine(); 
} 

Sinon, si cela est le code de production, j'envisagerait de faire une simple commande (char) classe et en fournissant des constantes de commande individuelles dans le cadre d'une collection (éventuellement une carte par rapport à la touche Caractère), qui peut être testée pour voir si elle contient une commande correspondante.