我的布尔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;
}
}
}
答案 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;