我正在使用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;
}
}
答案 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。