Создание контрольной цифры Луна - 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