Создание контрольной цифры Луна - Java

Я пытался сделать контрольную цифру в Java, используя алгоритм Луна, и я пришел сюда из полного разочарования. Я на самом первом шаге, который суммирует все цифры вместе (с каждой второй цифрой, удвоенной и вычтенной на 9, если она становится больше 9 после удвоения), но я не могу получить ответ где-нибудь рядом с тем, что сумма должна быть, Если бы мне нужно было ввести "11" в качестве строки, итоговая сумма будет равна 138, тогда как она должна быть 3. Я понятия не имею, что не так в моем коде, и мне интересно, может ли кто-нибудь с большим опытом помочь мне.

    import javax.swing.JOptionPane;
    public class Assignment
    {    public static void main (String []args)
{
    String UserNum;
    char c;
    int secondnum, ctwo;
    secondnum = 0;
    ctwo = 0;
    UserNum = JOptionPane.showInputDialog("Please enter a number: ");
    int len, i;
    len = UserNum.length();
    i = 0;
    System.out.println(UserNum);
    while (i < len) {
        c = UserNum.charAt(i);
        System.out.println(c);
        i++;
        if (i%2==0){
            ctwo = c*2;
            if (ctwo > 9) { 
                ctwo = ctwo - 9;
                secondnum = secondnum + ctwo;
            }
            else { secondnum = secondnum + ctwo;
            }
}
else {
    secondnum = secondnum + c;
    }
    System.out.println(secondnum);
        }
    }
    }

Дополнение: Даже после упрощения кода до простого сложения значений каждой отдельной цифры, сумма указанных значений все еще далека.

1 ответ

Решение

Вы используете значение ASCII каждой цифры вместо самой цифры. Поскольку коды ASCII являются последовательными, довольно просто извлечь числовое значение - просто вычтите '0':

c = UserNum.charAt(i) - '0'; // Note that c must be defined as an int
Другие вопросы по тегам