我是一名新编程学生,我正在尝试使用Java编写一个算法来执行以下操作:
计算信用卡号码的每个其他数字(从倒数第二位开始),并将每位数乘以2。
取结果整数并将所有数字加在一起(即如果我得到14,6和2,我会加1 + 4 + 6 + 2)
到目前为止我所拥有的是:
for(i = creditCard.length() - 2; i >= 1; i = i - 2){
int x = Integer.parseInt(creditCard.substring(i,i+1));
String y = Integer.toString(x);
for(j = 0; j < y.length() - 1; j++){
int z = Character.getNumericValue(y.charAt(j));
unselectedSum = unselectedSum + z;
}
}
这将返回0作为unselectedSum
。
同样,我的编程知识非常有限,所以我很感激我能得到的任何帮助!
答案 0 :(得分:2)
我希望您将变量unselectedSum初始化为0,如:
int unselectedSum = 0;
我从代码片段中看到的是一些你可能并不打算犯的错误。我将用一个例子来解释它。
String creditCard = 1234567812345678;
对于外循环的第一次迭代,creditCard.substring(i,i+1)
将返回7
,因为String.substring(int beginIndex, int endIndex)
方法返回从beginIndex
开始并以 {{结尾的字符串1}} ,包括两者。
接下来,在内循环中,您要求循环运行到endIndex-1
。
现在,由于y的长度为1,因此,条件减少到j < y.length() - 1
,这是永远不会的,因此循环永远不会运行。这就是j<0
的值在程序中没有变化的原因。
以下是解决该问题的另一种方法:
unselectedSum