【问题标题】:Making Luhn's Check Digit - Java制作 Luhn 的校验码 - Java
【发布时间】:2017-10-05 22:00:36
【问题描述】:

我一直在尝试使用 Luhn 算法在 java 中创建一个校验位,但我完全是出于沮丧才来到这里。我处于第一步,即将所有数字相加(如果加倍后大于 9,则每隔一个数字加倍并减去 9)但我无法得到接近总和的答案应该是.如果我输入“11”作为字符串,输出总和应该是 3 时输出为 138。我不知道我的代码有什么问题,我想知道是否有更多经验的人可以帮助我。

    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);
        }
    }
    }

加法:即使将代码简化为仅将每个单独数字的值相加,所述值的总和仍然相去甚远。

【问题讨论】:

    标签: java luhn


    【解决方案1】:

    您使用的是每个数字的 ASCII 值而不是数字本身。由于 ASCII 码是连续的,因此很容易提取数值 - 只需减去 '0'

    c = UserNum.charAt(i) - '0'; // Note that c must be defined as an int
    

    【讨论】:

    • 谢谢,我想可能是这样。但我不知道如何克服所说的障碍。这有效,我接受它作为解决方案
    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多