2014-04-09 2 views
0
  • Luhn 알고리즘을 사용하여 신용 카드 번호의 유효성을 검사하고 사용자 정의 예외를 throw하는 프로그램이 있습니다.
  • 만료 된 신용 카드 번호 목록이있는 cc_expired_db.xml이 있습니다.
  • 나는 cc_stolen_db.xml에 도난당한 신용 카드 번호 목록이 있습니다.

제 출력물의 pseudo code을 보시기 바랍니다.XML에서 신용 카드 번호 목록 읽기

개별 테스트시, Luhn 알고리즘을 작동시키지 못하고 FAILED에 대해 잘못된 예외가 발생합니다. 나는 성공적으로 writtenread XML이 자습서를 사용하여이

public boolean checkCreditCard(String strCardNumber, double amount, String luhnStatus) 
    throws ExpiredCreditCardException, InvalidCreditCardException, 
    StolenCreditCardException { 

    if(luhnStatus.equals("PASSED")) { 
     if() { // missing condition for expired 
      throw new ExpiredCreditCardException(); 

     } else if() { // missing condition for stolen 
      throw new StolenCreditCardException(); 
     } 

    } else if(luhnStatus.equals("FAILED")) { // invalid 
     throw new InvalidCreditCardException(); 

    } else { 
     payItem(amount); 
     System.out.print("Thank you for shopping with us!"); 
    } 

    return true; 
} 

:

여기 내 코드입니다.

그러나 의사 코드에서 의도 한대로 if 문에 만료 및 도난 예외 조건을 적용하는 방법을 모르겠습니다.

+0

날짜를 길게 변경할 수 있습니다. 날짜가 필요하면 Util을 java로 보내주십시오. –

답변

1

if 문 모두에 대해 isExpired(String strCardNumber) 또는 isStolen(String strCardNumber)과 유사한 각 메서드를 정의하여 부울 값을 반환합니다. 이 메소드는 해당 파일의 항목을 반복 할 수 있고 일치하는 항목이 있으면 true를 리턴합니다. 코드는 다음이된다 : 더 적절 isValidNumber 또는 그 효과에 뭔가를 호출 할 수있는 부울 값을 사용하여 값 luhnStatus에 대한 다른 값이없는 경우 나 또한, 권 해드립니다

if (isExpired(strCardNumber)) { 
    throw new ExpiredCreditCardException(); 
} else if (isStolen(strCardNumber)) { 
    throw new StolenCreditCardException(); 
} 

. PASSEDFAILED의 두 값보다 크지 않으면 블록 payItem에 도달하지 않습니다. 이 문제를 해결하려면 두 개의 if 문 뒤에 payItem 블록을 넣을 수 있습니다. 예외가 발생하면 건너 뜁니다.

샘플 의사 코드 ifExpired 방법 :

private boolean isExpired(String strCardNumber) { 
    for each card number in expired card numbers: 
     if strCardNumber.equals(current number of iteration): 
      return true; 

    after iteration, return false as the value was not contained. 
} 
+0

안녕하십니까, 잘 부탁드립니다. 또한 부울 인'luhnStatus'에 대한 팁을 고려할 것입니다. 대답과 함께'isExpired (String strCardNumber)'에 대한 템플릿 코드를 제공해 주시겠습니까? 귀하의 도움은 대단히 감사하겠습니다. – silver

+0

@ohtph. 내 대답에 추가되었습니다. – The6P4C

+0

안녕하세요, 제 사과는 있지만 이것은 나에게 약점이 될 수 있습니다. 나는 XML에 매우 익숙하다. 이것에 대한 실제 코드를 제공 할 수 있습니까? [여기] (https://app.box.com/s/wj8u6d7kwzxuurwdodpp)는 내가 사용한 소스 코드와 실제 도움이 될만한 XML입니다. 다시 미안 해요. 나는 정말로 감사 할 것입니다. – silver

1

XML 파일을 읽는 동안, 당신은 목록 내 신용 카드 (도난 또는 만료)의 각 유형에 대한 항목을 저장할 수 있습니다.

는 IS 다음 파트 의사, 파트 자바 :

List<String> expiredCCList = new ArrayList<String>(); 
while (reading_CC_Expired.xml) { 
    String expiredCC = readEntryFromExpiredXML(); 
    expiredCCList.add(expiredCC); 
} 


List<String> stolenCCList = new ArrayList<String>(); 
while (reading_CC_Stolen.xml) { 
    String stolenCC = readEntryFromStolenXML(); 
    stolenCCList.add(stolenCC); 
} 

이 목록을 채우기 후에는 다음과 같은 코드를 호출 할 수

public boolean checkCreditCard(String strCardNumber, double amount, String luhnStatus) ExpiredCreditCardException, InvalidCreditCardException, { 

if(luhnStatus.equals("PASSED")) { 
    if(expiredCCList.contains(strCardNumber)) { 
     throw new ExpiredCreditCardException(); 

    } else if(stolenCCList.contains(strCardNumber) { 
     throw new StolenCreditCardException(); 
    } 

} else if(luhnStatus.equals("FAILED")) { // invalid 
    throw new InvalidCreditCardException(); 

} else { 
    payItem(amount); 
    System.out.print("Thank you for shopping with us!"); 
} 

return true; 
} 

가 I가 당신을 위해 코드를 왼쪽 Gist