简单的方法验证

时间:2016-02-04 12:52:20

标签: java

我有这种方法,我验证和ID,我遇到了问题。 ID必须遵循这些规则才有效:

  • 完全有6个字符
  • 必须以A,E或P开头。

以下是代码:

public static String getCartId(String cartId) {
    Boolean correctId = false;

    while (!correctId) {
        cartId = JOptionPane.showInputDialog("Type the Cart ID:");
        cartId = cartId.trim();
        cartId = cartId.toUpperCase();
        char c = cartId.charAt(0);

        // VALIDATION
        if (cartId.length() != 6)
            JOptionPane.showMessageDialog(null, "Cart ID must have only 6 chars, type it again.");
        else if (c != 'A' || c != 'E' || c != 'P')
            JOptionPane.showMessageDialog(null, "Invalid Cart ID, type it again.");
        else
            correctId = true;
    }
    return cartId;
}

如果我输入,请说 aaaaaa ,最后会说这个ID无效。

任何有关错误的想法?

5 个答案:

答案 0 :(得分:5)

尝试替换它:

  else if (c != 'A' || c != 'E' || c != 'P')

使用&&代替||,如下所示:

  else if (c != 'A' && c != 'E' && c != 'P')

答案 1 :(得分:1)

我相信你最好使用这样的正则表达式:

if (cartId.matches("(?s)([AEP]{1}[A-Z0-9]{5})")) {
...}

答案 2 :(得分:1)

这种情况正在发生, || 短路运算符。Read this

在你的情况下

let z = [x, y].flatMap { $0 }.reduce(0, combine: +)

此处else if (c != 'A' || c != 'E' || c != 'P')返回 false 。因此,它会检查下一个条件c != 'A',它会向其返回 true ,因此会将您的ID设置为无效。

尝试将其替换为 AND ,就像&&

一样
c != 'E'

或者如果您想尝试其他方法,只需谷歌使用正则表达式,并使用 [ACP] ..... 作为正则表达式。它会将您的代码减少到两行验证。

答案 3 :(得分:1)

您已使用

(c != 'A' || c != 'E' || c != 'P')

这是不对的。

根据您的要求,如果c不等于A或E或P,则需要 只有这样才能将其打印为无效。但是什么||确实如此,如果给定条件中的任何一个为真,则返回true。这意味着如果c =' A',则第一个条件为false,但其他两个条件为true,因此整个if语句的值返回true。

替换它
(c != 'A' && c != 'E' && c != 'P')

将有所帮助,因为只有在所有条件都为真时才返回true。因此,如果c =' A',则第一个条件为false,它将false返回到整个if语句。 希望你明白我的意思。

答案 4 :(得分:-1)

在验证第一个字母之前,您将整个字符串转换为大写字母。因此,如果您输入aaaaaa,您将尝试验证AAAAAA