2014-10-28 3 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

+0

Кажется, что это 'Java'. –

+2

Согласно вашей программе, выход может быть только «* Discover *» или «* Unknown *». Не имеет значения, выполняются ли предыдущие условия или нет, последний 'if-else' перезаписывает переменную. –

ответ

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"; 
    } 

Проверьте этот код. Если эмитент карты не Discover, Выход всегда «Unknow»

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

п либо 3 или 0, не может быть 1 или 2. Поскольку последний, если-то еще будет переопределить п

Вы можете исправить эту проблему, изменив «if» на «else if»

Смежные вопросы