如何实现用户验证以仅接受几个字母为有效字母

时间:2018-07-19 03:41:44

标签: java validation while-loop

我在程序上进行输入验证时遇到麻烦。

       public static boolean inputValidation(String input) {
  for ( int i = 0; i < input.length(); i++){
     char c = input.charAt(i);
     if (!Character.isDigit(c) && c != A || c != J || c != Q || c != K || c != 'a' || c != 'j' || c != 'q' || c != 'k') {
        return false; 
     }

  }
  return true;
}

到目前为止,这是我的代码,但是当我将其与其余代码一起运行时,它没有正确验证它,它只会照常继续执行程序

        int input1 = humanVersion(operands[0]);
        int input2 = humanVersion(operands[1]);
        String input1String = String.valueOf(input1);
        String input2String = String.valueOf(input2);
        boolean valid1 = inputValidation(input1String);
        boolean valid2 = inputValidation(input2String);

   while (!valid1 || !valid2){
      if (!valid1){ 
        System.out.println("invalid input 1");
     }
     if (!valid2){
        System.out.println("invalid input 2");
     }
     System.out.println("Enter valid input: ");

     stringInput = scan.nextLine();
     operands = stringInput.split(" ");
     //
     input1 = humanVersion(operands[0]);
     input2 = humanVersion(operands[1]);
     //
     input1String = String.valueOf(input1);
     input2String = String.valueOf(input2);
     //
     valid1 = inputValidation(input1String);
     valid2 = inputValidation(input2String);

  }

该程序基于用户输入的两个数字相加并相乘,这些数字基于基于14的数字系统。字符0-9,A,J,K和Q。 我的想法是查看输入中是否存在除A,J,K和Q以外的其他字母,然后再次询问输入是否存在无效的字母。

1 个答案:

答案 0 :(得分:1)

问题出在您的 inputValidation()方法

  1. 存在编译错误;而不是c != A,您应该将A括在单个反斜杠中,因为您在这里指的是字符,而不是变量
  2. if 逻辑似乎不正确。如果要查找字符是否在某个特定字符集中,请使用||

您可以像这样修改if语句,然后它应该可以工作

if (!(Character.isDigit(c) || c == 'A' || c == 'J' || c == 'Q' 
      || c == 'K' || c == 'a' || c == 'j' || c == 'q' || c == 'k')) {
...

或者使用您的逻辑,将&&放在各处:

if (!Character.isDigit(c) && c != 'A' && c != 'J' && c != 'Q'
      && c != 'K' && c != 'a' && c != 'j' && c != 'q' && c != 'k') {