java - CS50 Credit : 似乎找不到错误,
问题描述
程序总是输出“无效”。我已经多次检查我的代码,但找不到错误。我是java初学者,不胜感激。
我已经寻找了这个问题的所有可能的错误和不同的代码,但它仍然不起作用
package cs50;
import java.util.*;
public class Credit {
int arr[];
static long credit_card;
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
System.out.println("Enter credit card number : ");
credit_card = sc.nextLong();
Credit obj = new Credit();
int count = (int)obj.countDigits();
obj.digitsToArray(count);
int sum = obj.sum(count);
obj.check(sum,count);
}
//count number of digits
long countDigits()
{
long n = credit_card;
int count = 0;
while(n>0)
{
n=n/10;
count++;
}
return count;
}
//store digits in an array
void digitsToArray(int count)
{
long m = credit_card;
arr = new int[count];
for (int i=count-1; i>=0; i--)
{
arr[i] = (int)m % 10;
m = m / 10;
}
}
//Calculate sum of digits
int sum(int count)
{
int sum = 0;
for (int i=count-2; i>=0; i=i-2)
{
int n = arr[i]*2;
if(n>9)
{
sum = sum + n%10 + (n/10 % 10);
}
else
sum = sum + n;
}
for (int i=count-1; i>=0; i=i-2)
{
int n = arr[i];
sum = sum + n;
}
return sum;
}
//Check credit card type
void check(int sum, int count)
{
if (sum%10 == 0)
{
if(count==15 && (arr[0]==3 && (arr[1]==4||arr[1]==7)))
{
System.out.println("AMEX");
}
else if(count==16)
{
if(arr[0]==5 && (arr[1]==1||arr[1]==2||arr[1]==3||arr[1]==4||arr[1]==5))
{
System.out.println("MasterCard");
}
else if(arr[0]==4)
{
System.out.println("Visa");
}
}
else if(count==13 && arr[0]==4)
{
System.out.println("Visa");
}
}
else
System.out.println("Invalid");
}
}
签证或万事达卡号码未显示预期输出,始终显示“无效”。
解决方案
根据 lexicore 的建议,单步执行您的代码,digitsToArray()
需要详细查看您的方法。
提供信用卡号码:5105 1051 0510 5100
该digitsToArray()
方法将arr
变量设置为:[5, 1, 0, 5, 1, 0, 5, 1, 0, 9, -1, -4, -9, 5, 8, 0]
这似乎不正确。
查看 lexicore 提供的链接,它将带您了解为什么以及如何使用它。
推荐阅读
- angular - Angular - 将数据连接到另一个接口(几个字段)
- excel - 电源查询编辑器 24 小时 (HH:MM:SS) 错误
- swagger - 如何配置 swagger-codegen 以在 openApi3 上为“allOf”类生成一个全参数构造函数?
- javascript - 使用 React 有条件地停止游戏循环
- search - Foursquare API - 场地搜索方法 - 优先级限制与半径
- python - 添加功能调度时本地Django服务器无响应
- linux - Ubuntu 上的 mingw - “未定义的引用”......对它自己的功能
- reactjs - Material UI theme.palette.type 打字稿错误
- php - PHP 全局 $_POST
- node.js - Docker 容器以代码 2 退出,并通过 Gitlab CI/CD 管道将节点应用程序部署到 Digital Ocean