Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java代码总是返回错误消息(valid never等于true)_Java_If Statement - Fatal编程技术网

Java代码总是返回错误消息(valid never等于true)

Java代码总是返回错误消息(valid never等于true),java,if-statement,Java,If Statement,我的布尔valid变量似乎总是返回false,这会触发else错误消息。你知道为什么吗?我正在尝试将条形码转换为邮政编码,我必须检查数据验证(确保条形码仅使用:和|,并且确保其长度仅为32个字符。然后,我必须忽略第一个和最后一个|,只计算前5个条形码(实际字符串/条形码中的第1-25行。)然后我将1-25中的任何条形码转换为zipcode/数字 public class JordanReynoldsHW7 { public static void main(String[] args)

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

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;
        }
    }
}
公共类JordanReynoldsHW7
{
公共静态void main(字符串[]args)
{
字符串条形码=“| | |::::::::::::;::::::::::::::;:::::;”;
布尔有效;
有效=真;
如果(条形码长度()!=32)
有效=错误;
对于(int i=0;i
 if(barCode.charAt(i) !=':' || barCode.charAt(i) != '|')
     valid=false;

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

Change

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


您的当前条件将始终返回true(因为每个字符不是“:”或不是“|”),因此valid将始终为false。

此行中的逻辑不正确:

if(barCode.charAt(i) !=':' || barCode.charAt(i) != '|')
字符始终不是
:“
或不是
”|“
,因此
有效的
总是被设置为
。您希望使用
和&
进行“和”。请尝试

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

这一行中的逻辑不正确:

if(barCode.charAt(i) !=':' || barCode.charAt(i) != '|')
字符始终不是
:“
或不是
”|“
,因此
有效的
总是被设置为
。您希望使用
和&
进行“和”。请尝试

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

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

if(barCode.charAt(i) !=':' && barCode.charAt(i) != '|')
因为唯一的选项是包含一个或另一个,所以第一条语句将始终返回true;

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

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

由于唯一的选项是包含一行或另一行,因此第一条语句将始终返回true;

建议之词,始终在您的
if
语句中添加括号-即使只有一行。这样更易于阅读(其他语句也是如此)并且更容易看到受影响变量的范围,等等。建议您在
if
语句中始终添加括号,即使只有一行。这样更容易阅读(对其他人也是如此),也更容易看到受影响变量的范围,等等。