使用FOR语句从string.length()中检索字符

时间:2015-03-05 23:27:30

标签: java

我正在使用for语句和字符串来实现Luhn算法。

我的问题是," j"在字符串的那个位置(数字)分配字符的值,或者在字符串长度中为它分配数字位置的值?

谢谢

如果我不想将代码直接粘贴到此

中,请道歉

*编辑:我很确定它实际上并没有检索字符,而只是它在字符串中的数字位置,研究char方法


    if (card.length() < 13 || card.length() > 16)
    {
        JOptionPane.showMessageDialog(null, "Invalid credit card number");
         card = JOptionPane.showInputDialog("Please enter the credit card number.");
        num = Long.parseLong(card);
    }

    for (int j = 0; j < card.length(); j++) {
        sum = sum + j*2;
        if ( j%2 != 0 ) {
         product = j * 1;
         sum += product;
        }
         else {
             product = j * 2;
         }
         if (product > 9) {
             product -= 9;
         sum += product;
         }
    }

3 个答案:

答案 0 :(得分:0)

您有for声明

for (int j = 0; j < card.length(); j++) {

它使用值0声明并初始化变量j。它使用j表达式在每次迭代时将j++的值递增1。它会在j的值小于card.length()的值时执行此操作。

答案 1 :(得分:0)

这是位置的数量。 card.length()返回一个int,因此j将获得该值(“位置”)。

尝试以下示例来查看差异:

    String s = "Hello World";

    for (int i = 0; i < s.length(); i++){
        System.out.println("        Value of i: " + i);
        System.out.println("   Value of i in s: " + s.charAt(i));
        System.out.println("Value of i as char: " + (char)i);
        System.out.println("---");
    }

前3次迭代:

        Value of i: 0
   Value of i in s: H
Value of i as char: NUL**
---
        Value of i: 1
   Value of i in s: e
Value of i as char: SOH**
---
        Value of i: 2
   Value of i in s: l
Value of i as char: STX**

** char值不可见,你可以在这里查找:http://ascii.cl/ 如果i达到33,则会变为可读,从!开始。

答案 2 :(得分:0)

在您的代码中,“j”只是位置并将获取值: 0,1,2,3,4 ....直到字符串长度。

你想要的是那个位置的字符所代表的数字,所以字符“0”(其值为“30”)需要转换为值为+ 0的整数,字符“9”(x'39 ')需要转换为整数值+9。

你可以这样做:

int cval = Integer.parseInt(card.charAt(j));

或快速而又肮脏:

int cval = card.charAt(j) - 30;

当你给它一个非数字字符时,第一个方法会抛出一个异常,第二个方法会从它得到的任何东西中减去30(这个代码是一个非常高值的unicode字符)所以只有当你完全使用时才使用这个方法确保该字符串仅包含ASCII字符0123456789。