2014-11-07 1 views
0

내 부울 valid 변수는 항상 false를 반환하여 else 오류 메시지를 표시합니다. 어떤 아이디어? 바코드를 우편 번호로 변환하려고하는데 데이터 유효성 검사 (바코드에 :| 만 사용되고 32 자 길이인지 확인해야합니다.) 첫 번째와 마지막으로 |을 무시하고 처음 5 개의 바코드 만 계산하십시오 (실제 문자열/바코드의 1-25 행). 그런 다음 1-25에있는 바코드를 zipcode/digits로 변환합니다.Java 코드가 항상 오류 메시지를 반환합니다 (유효하지 않음은 true와 같음)

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; 
     } 
    } 
} 
+2

충고는 항상 'if'문에 대괄호를 추가하십시오. 영향을받는 변수 등의 범위를보다 쉽게 ​​읽고 쉽게 읽을 수 있습니다. – ochi

답변

3

변경

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

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

당신이 (모든 문자가 하나되지 이후 ':'여부 '|') 항상 true 반환이 현재의 상태 및 따라서 유효 기간은 항상 거짓입니다.

4

이 선에있는 당신의 논리는 잘못된 것입니다 :

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

문자는 항상하지 ':'여부 '|', 그래서 valid 항상 false로 설정지고있다. "and"를 원하면 &&으로 지정하십시오.

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

에게 선을 시도

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

읽어야합니다

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

유일한 옵션은 다음과 같이 하나를 포함하거나 다른 첫 번째 문은 항상 true를 돌려줍니다 위해;

관련 문제