制作 Luhn 的校验位 - Java
Making Luhn's Check Digit - Java
我一直在尝试使用 Luhn 算法在 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);
}
}
}
加法:即使将代码简化为仅将每个单独数字的值加在一起,所述值的总和仍然相去甚远。
您正在使用每个数字的 ASCII 值而不是数字本身。由于 ASCII 码是连续的,因此提取数值非常容易 - 只需减去 '0'
:
c = UserNum.charAt(i) - '0'; // Note that c must be defined as an int
我一直在尝试使用 Luhn 算法在 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);
}
}
}
加法:即使将代码简化为仅将每个单独数字的值加在一起,所述值的总和仍然相去甚远。
您正在使用每个数字的 ASCII 值而不是数字本身。由于 ASCII 码是连续的,因此提取数值非常容易 - 只需减去 '0'
:
c = UserNum.charAt(i) - '0'; // Note that c must be defined as an int