Java代码始终返回错误消息(有效永远不等于true)

时间:2014-11-07 19:23:21

标签: java if-statement

我的布尔valid变量似乎总是返回false,这会触发else错误消息。有什么想法吗?我正在尝试从条形码转换为邮政编码,我必须检查数据验证(确保只有:|用于条形码,并确保它只有32然后,我必须忽略第一个和最后一个|并且只计算前5个条形码(实际字符串/条形码中的第1-25行。))然后我转换我在的所有条形码1- 25成邮政编码/数字。

public class JordanReynoldsHW7 
{
    public static void main(String[] args) 
    {
        String barCode = "|||:::||:::||:::||:::||:::||:::|";
        boolean valid;
        valid = true;
        if (barCode.length() != 32)
            valid = false;
        for (int i = 0; i < barCode.length(); i++)
            if (barCode.charAt(i) != ':' || barCode.charAt(i) != '|')
                valid = false;

        if (valid == true) {
            String zipCode = "";
            for (int i = 1; i <= 25; i = i + 5)
                zipCode += getNumber(barCode.substring(i, i + 5));
            System.out.println(zipCode);
        } else
            System.out.print("error message");
    }

    public static int getNumber(String s) 
    {
        switch (s) {
            case "||:::":
                return 0;
            case ":::||":
                return 2;
            case "::|:|":
                return 3;
            case ":|::|":
                return 4;
            case ":|:|:":
                return 5;
            case ":||::":
                return 6;
            case "|:::|":
                return 7;
            case "|::|:":
                return 8;
            default:
                return 9;
        }
    }
}

3 个答案:

答案 0 :(得分:4)

此行中的逻辑不正确:

if(barCode.charAt(i) !=':' || barCode.charAt(i) != '|')

该字符始终不是':' 而不是'|',因此valid始终设置为false。你需要&#34;和&#34;,&&。尝试

if(barCode.charAt(i) !=':' && barCode.charAt(i) != '|')

答案 1 :(得分:3)

更改

 if(barCode.charAt(i) !=':' || barCode.charAt(i) != '|')
     valid=false;

 if(barCode.charAt(i) !=':' && barCode.charAt(i) != '|')
     valid=false;

您拥有的当前条件将始终返回true(因为每个字符都不是':'或不是'|'),因此有效将始终为false。

答案 2 :(得分:-1)

该行

if(barCode.charAt(i) !=':' || barCode.charAt(i) != '|')

应为:

if(barCode.charAt(i) !=':' && barCode.charAt(i) != '|')

由于唯一的选择是它包含一个或另一个,所以第一个语句将始终返回true;