2012-08-16 2 views
-1

Цитируется моего назначения: Цели данного вопроса являются (а) на практике структуру выбора (б) применять итерации структуры (с), чтобы манипулировать снабжать струной, тетивой и т.п.Назначение проблемы: Кредитная карта проверки

Ну я учиться неполный рабочий день и работа полный рабочий день, так голый со мной.

do { 
    System.out.print("Enter MC for MasterCard or VISA for VISA card: "); 
    cardType = scn.next(); 
} while (!cardType.equals("MC") && !cardType.equals("VISA")); 
if (cardType.equals("MC")) { 
    do { 
     System.out.print("Enter MasterCard card no.: "); // Get input: 
                  // mastercard 
                  // number 
     cardNo = scn.nextLong(); 
     cardLength = Long.toString(cardNo).length(); // Get length of 
                 // mastercard 
                 // number input 
     dbUserPrefix = cardNo/java.lang.Math.pow(10, 14); 
     intUserPrefix = (int) dbUserPrefix; 
     for (int i = 0; i <= 5; i++) {// for validating prefix 
      // 4 possibilities 
      if (intUserPrefix == cardPrefix[i]) { 
       if (cardLength == 16) { // Prefix & length correct      break; 
       } else { // Prefix correct, length wrong 
        state = 1; 
        break; 
       } 
      } else { 
       if (cardLength == 16) { // Prefix wrong, length correct      state = 2; 
       } else { // Prefix & length incorrect 
        state = 3; 
       } 
      } 
     } 
     if (state == 0) { 
      System.out.println("SUCESS"); 
     } else if (state == 1) { 
      System.out.println("Your length of card number is incorrect."); 
     } else if (state == 2) { 
      System.out.println("Your card prefix is incorrect."); 
     } else { 
      System.out.println("Your card prefix and length of card number is incorrect."); 
     } 
     break; 
    } while (cardLength != 16); 
} 

Главное я хочу здесь программа для проверки того, что право Приставка кредитной карты 51,52,53,54 или 55. и правильной длины, чтобы быть 16 (количество цифр). Если проверка не завершена, ошибка должна быть распечатана. Проблема в том, что кроме префикса == 51, остальная часть префикса i пыталась получить результат в состоянии == 2.

+0

Почему бы не использовать оператор switch здесь? – CoolBeans

+3

Какой у вас вопрос? –

+0

Почему в этом вопросе было задано «переменное присвоение»? Он не имеет ничего общего с назначением переменной, и скорее всего это был надзор со стороны искателя с синонимами * присваивания *. –

ответ

2

Я бы об этом по-другому. Вы берете свой ввод (номер карты) как длинный. Я думаю, было бы легче сделать такую ​​проверку, если бы вы взяли ее как строку.

Чтобы проверить длину, где cardNum имеет тип Строка:

boolean isValidLength = (cardNum.length() == 16); 

Чтобы получить префикс:

String prefix = cardNum.substring(0,2); // gets first two digits of cardNum 

Для проверки, я бы поставил все допустимые префиксы в списке и вызова .contains():

List<String> validPrefixes = new ArrayList<String>(); 
validPrefixes.add("52"); 
// ... etc 

boolean isValidPrefix = validPrefixes.contains(prefix); 

Тогда ваша логика будет выглядеть примерно так:

  1. Запрашивать числа
  2. Возьмите вход в строку
  3. Проверьте длину входного правильно; if not return error
  4. Убедитесь, что префикс верен; if not return error
  5. Успех возврата
Смежные вопросы