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
语句中始终添加括号,即使只有一行。这样更容易阅读(对其他人也是如此),也更容易看到受影响变量的范围,等等。