2016-04-13 3 views
0

В случае, если я должен вычислить 16 цифр числа может быть 4388576018402626Как рассчитать с помощью String?

Я хочу, чтобы рассчитать три пути

способ 1. (Part14 * 2 + part12 * 2 + part10 * 2 + part8 * 2 + part6 * 2 + part4 * 2 + часть2 * 2 + part0 * 2) = 37
однако результат ошибки

способом 2. (+ part15 part13 + часть11 + part9 + part7 + part5 + часть3 + часть1) = 38 однако это результат 66080783

путь 3. (способ 1 + way2)% 10 потому что способ 1 ошибка у него не может быть никакой результат

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    //code for loop of follow program 
    boolean run = true; 
    while(run){ 

    //User enter the data 
    Scanner sc = new Scanner (System.in); 
    System.out.print("Enter the credit card number:"); 

    String cs = sc.nextLine(); 

    //String divide the 16 number in to one different part 
    String[] parts = cs.split(""); 
    String part0 = parts[0]; 
    String part1 = parts[1]; 
    String part2 = parts[2]; 
    String part3 = parts[3]; 
    String part4 = parts[4]; 
    String part5 = parts[5]; 
    String part6 = parts[6]; 
    String part7 = parts[7]; 
    String part8 = parts[8]; 
    String part9 = parts[9]; 
    String part10 = parts[10]; 
    String part11 = parts[11]; 
    String part12 = parts[12]; 
    String part13 = parts[13]; 
    String part14 = parts[14]; 
    String part15 = parts[15]; 

    String sd = (part14 * 2 + part12 * 2 + part10 * 2 + part8 * 2 + part6 * 2 + part4 * 2 + part2 * 2 +part0 * 2); 
    String sd1 = (part15 + part13 + part11 + part9 + part7 + part5 + part3 +part1); 
    String sd2 = (sd+sd1); 

    int sd3 = (sd2%10); 

    if (sd3 =0) 
    System.out.println ("The card is valid"); 
    else 
    System.out.println ("The card is invalid"); 

} 
} 

} 
+0

Пожалуйста, добавьте сообщение об ошибке, которое вы получаете. Я предполагаю, что это какая-то ошибка типа. Подсказка: вы должны анализировать свои строки как целые числа. И, пожалуйста, ознакомьтесь с тегами, которые вы добавили в этот вопрос. – ventiseis

+1

Вы не можете выполнять арифметику по строкам. Преобразуйте строки в числа, затем сделайте свой расчет – smac89

+0

, так что я могу сделать для вычисления, будет частью 16digit –

ответ

0

Whaat? :) Почему бы вам не использовать BigDecimals, если вы хотите сделать арифметику с номерами, которые не могут соответствовать int или double?

Какова ваша цель? Никто не рассчитывает со строками. Строки приятно хранить произвольные вещи, включая номера карт :), но для выполнения математики вам всегда нужно что-то числовое.

String sd = (part14 * 2) is not something which works. 
Integer.valueOf(part14)*2 does work. 

рассмотреть также с использованием метода Шара строки, чтобы получить какой-либо символ, а замыкающие строк part1 ... part999999.

Принимая во внимание фрагмент кода, I Угадай Ваш вопрос: «как рассчитать номер луна» или «как проверить номер кредитной карты в java». Хороший вопрос открывает путь к хорошему ответу, см., Например, Check Credit Card Validity using Luhn Algorithm для примера.

+0

, потому что я хочу сделать программу с вводом 16 цифр и делить на 16 частей для вычисления. Однако я знаю только использование в String и part для записи –

+0

Вам не нужно разбить его на 16 частей - вы можете использовать метод charAt() любой строки, чтобы получить символ в любой позиции. Это, вместе с простым циклом for-loop, позволяет вашему коду работать с произвольной длиной входных строк (и гораздо более коротким для записи тоже). Я предлагаю вам проконсультироваться с Java trails на Oracle - это довольно приличное описание языка. Java и его функции помогут вам и сделать вашу жизнь намного проще. Я счел, что это хорошо изучать. Получайте удовольствие от Java! –

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