【发布时间】:2015-01-01 01:13:01
【问题描述】:
a) 从校验位开始向左移动,计算所有解码数字的总和。 b) 使用整数除以 10 计算和的余数。如果结果不为零,则信用卡号无效。否则,卡号很可能是有效的。
这里有两个例子:
Card number: 2315778 Card number 1234567
decode(8, false) = 8 decode(7, false) = 7
decode(7, true) = 5 decode(6, true) = 3
decode(7, false) = 7 decode(5, false) = 5
decode(5, true) = 1 decode(4, true) = 8
decode(1, false) = 1 decode(3, false) = 3
decode(3, true) = 6 decode(2, true) = 4
decode(2, false) = 2 decode(1, false) = 1
Sum = 30 Sum = 31
30 mod 10 = 0 31 mod 10 = 1
This number may be valid This number is invalid
编写一个名为 checkDigits 的静态方法,传递一个七位数的信用卡号码并执行上述步骤。重用您在实验 5.5.1 中编写的解码方法。如果数字通过测试,该方法应该返回单词“valid”,否则返回“invalid”。
import java.util.Scanner;
public class JavaApplication90
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
int num = 2315778;
System.out.println("Credit card number: " + num + " is " + checkDigits(num));
num = 1234567;
System.out.println("Credit card number: " + num + " is " + checkDigits(num));
num = 7654321;
System.out.println("Credit card number: " + num + " is " + checkDigits(num));
num = 1111111;
System.out.println("Credit card number: " + num + " is " + checkDigits(num));
}
public static boolean checkDigits(int num)
{
int sum = 0;
String reverse = new StringBuffer(num).reverse().toString();
for (int i = 0; i < reverse.length(); i++){
int product = 0;
if (i % 2 == 0)
{
product = num * 2;
}
if (product < 9)
product = (product%10)-1;
sum = sum+ product ;
}
return (sum % 10 == 0);
}
}
输出:
我得到所有数字的真实/有效答案。我无法找到我的错误。救命!
【问题讨论】:
-
你能正确缩进你的代码吗?
-
这段代码无法阅读,这很可能是您犯错的原因。请学习使用 IDEA 和自动格式化功能。切勿在此处发布未格式化的代码。
-
@DavidWallace 自动更正再次出现。也许我的意思是 IDE “IDEA”...
-
你能正确缩进你的代码吗? --首先是将int转换为字符串
-
你能正确缩进你的代码吗?首先是将 int 转换为字符串;然后如果数字是偶数,它将加倍,如果是两位数,我添加它。例如,如果数字是 8 并且它在偶数位置,它将加倍,即 16 和 16 是两位数,所以我添加 1+6 即 if(product