2014-10-28 52 views
0

需要取得髮卡機構的卡號,只輸出「未知」。 (底部只是測試儀代碼)。 我想測試錯誤的變量,我錯誤地使用indexOf()?請,任何幫助,將不勝感激取出信用卡號碼並輸出公司名稱

public class CreditCard 
{ 
    private String card_number; 
    private boolean is_number; 
    private String number_string = ""; 
    public String issuer_name = ""; 

    public CreditCard(String card_number) 
    { 
     this.card_number = card_number; 
    } 

    public String toString() 
    { 
     for (int x = 0; x < card_number.length(); x++) 
     { 
      char y = card_number.charAt(x); 
      is_number = Character.isDigit(y); 
      if (is_number) 
      { 
       number_string += y; 
      } 

     } 

     String s = number_string + " was issued by " + getIssuer(); 
     return s; 
    } 

    public void setIssuer(String issuer) 
    { 
     issuer_name = issuer; 
    } 

    public String getIssuer() 
    { 
     String issuer_Name; 
     if (card_number.indexOf('4') == 0 && card_number.length() == 13 || card_number.length() == 16) 
     { 
      issuer_Name = "VISA"; 
     } 
     if (card_number.indexOf('3') == 0 && card_number.indexOf('0') == 1 && card_number.indexOf('0') == 2 && number_string.length() == 14) 
     { 
      issuer_Name = "Diner's Club"; 
     } 
     if (card_number.indexOf('3') == 0 && card_number.indexOf('0') == 1 && card_number.indexOf('5') == 2 && number_string.length() == 14) 
     { 
      issuer_Name = "Diner's Club"; 
     } 
     if (card_number.indexOf('3') == 0 && card_number.indexOf('6') == 1 && card_number.length() == 14) 
     { 
      issuer_Name = "Diner's Club"; 
     } 
     if (card_number.indexOf('3') == 0 && card_number.indexOf('8') == 1 && card_number.length() == 14) 
     { 
      issuer_Name = "Diner's Club"; 
     } 
     if (card_number.indexOf('3') == 0 && card_number.indexOf('4') == 1 && card_number.length() == 15) 
     { 
      issuer_Name = "American Express"; 
     } 
     if (card_number.indexOf('3') == 0 && card_number.indexOf('7') == 1 && card_number.length() == 15) 
     { 
      issuer_Name = "American Express"; 
     } 
     if (card_number.indexOf('5') == 0 && card_number.indexOf('1') == 1 && card_number.length() == 16) 
     { 
      issuer_Name = "MasterCard"; 
     } 
     if (card_number.indexOf('5') == 0 && card_number.indexOf('5') == 1 && card_number.length() == 16) 
     { 
      issuer_Name = "MasterCard"; 
     } 
     if (card_number.indexOf('6') == 0 && card_number.indexOf('0') == 1 && card_number.indexOf('1') == 2 && number_string.indexOf('1') == 3 && number_string.length() == 16) 
     { 
      issuer_Name = "Discover"; 
     } 
     else 
     { 
      issuer_Name = "Unknown"; 
     } 
     return issuer_Name; 
    } 

    public static void main(String[] args) 
    {  
     System.out.println(new CreditCard("42225-22222222")); 
     System.out.println(new CreditCard("76009644571")); 
     System.out.println(new CreditCard("50197170-10103742")); 
     System.out.println(new CreditCard("6331101899890016")); 
    } 


} 
+0

這不是javascript – zerkms 2014-10-28 00:48:47

+0

它似乎是'Java'。 – 2014-10-28 00:49:46

+2

根據您的程序,輸出可能只有「* Discover *」或「* Unknown *」。先前的條件是否滿足並不重要,最後一個'if-else'覆蓋變量。 – 2014-10-28 00:52:08

回答

1

的,如果其他條款將開始類似

if (card_number.indexOf('4') == 0 && card_number.length() == 13 || card_number.length() == 16) { 
    issuer_Name = "VISA"; 
} else if (card_number.indexOf('3') == 0 && card_number.indexOf('0') == 1 && card_number.indexOf('0') == 2 && number_string.length() == 14) { 
    issuer_Name = "Diner's Club"; 
} else if (card_number.indexOf('3') == 0 && card_number.indexOf('0') == 1 && card_number.indexOf('5') == 2 && number_string.length() == 14) { 
    issuer_Name = "Diner's Club"; 
} else if (card_number.indexOf('3') == 0 && card_number.indexOf('6') == 1 && card_number.length() == 14) { 
    issuer_Name = "Diner's Club"; 
} else { 
    issuer_Name = "Other"; 
} 

注意我不是在尋找在算法的正確性,但你問,如果該怎麼辦/ else

1
if (card_number.indexOf('6') == 0 && card_number.indexOf('0') == 1 && card_number.indexOf('1') == 2 && number_string.indexOf('1') == 3 && number_string.length() == 16) 
    { 
     issuer_Name = "Discover"; 
    } 
    else 
    { 
     issuer_Name = "Unknown"; 
    } 

查看此代碼。 如果卡發行者不查詢,則輸出總是「不明」

if (true) { 
    n=1; 
} 
if (true) { 
    n=2; 
} 
if (true) { 
    n=3; 
} 
else { 
n=0; 
} 

的n是3或0,不能是1或2。 因爲最後的if-else將覆蓋所述n

您可以通過將「if」更改爲「else if」來解決此問題