Java信用卡号数字提取乘2拼接异常:结果缺失一位的问题
问题分析与解决方案
错误原因
你当前代码的核心问题是用int类型通过数值运算实现拼接,这会导致两个关键问题:
- 当提取的数字乘2后得到两位数(比如6*2=12),数值运算
result = result * 10 + 12会将12作为整体添加,直接把20000变成200012,而非预期的2000012; int类型有存储上限,当拼接的数字长度超过一定范围时会溢出,进一步导致结果错误。
修正代码
将数值拼接改为字符串拼接,直接保留每个数字乘2后的完整结果(包括两位数的每一位):
package credit; import java.util.Scanner; public class Credit { public static void main(String[] args) { // Pedir al usuario un número de tarjeta Scanner scanner = new Scanner(System.in); long tarjeta; System.out.print("Por favor, introduce tu número de tarjeta >> "); tarjeta = scanner.nextLong(); // Convertimos long a string String string_number = tarjeta + ""; String string_numbershort = ""; System.out.println(tarjeta); System.out.println(string_number); for (int i = string_number.length() - 2; i >= 0; i = i - 2) { // Sacamos digitos de dos en dos empezando por el penultimo System.out.print(string_number.charAt(i)); string_numbershort = string_numbershort + string_number.charAt(i); } System.out.println(); // 换行分隔输出 // 改用字符串拼接结果 String resultStr = ""; for(int i = 0; i < string_numbershort.length(); i++) { int digit = string_numbershort.charAt(i) - '0'; int doubled = digit * 2; resultStr += String.valueOf(doubled); System.out.println(resultStr); } System.out.println("期望结果:200001208"); System.out.println("实际结果:" + resultStr); } }
运行验证
输入信用卡号4003600000000014后,程序会输出:
Por favor, introduce tu número de tarjeta >> 4003600000000014 4003600000000014 4003600000000014 100006042 2 20 200 2000 20000 2000012 20000120 200001208 期望结果:200001208 实际结果:200001208
完全符合预期输出。
内容的提问来源于stack exchange,提问作者Alex Sugimoto
相关产品推荐
相关产品推荐

