Java CS50学分:似乎找不到错误,
程序总是输出“无效”。我已多次检查代码,但找不到错误。我是java初学者,非常感谢您的帮助 我已经寻找了所有可能的错误和这个问题的不同代码,但它仍然不起作用Java CS50学分:似乎找不到错误,,java,Java,程序总是输出“无效”。我已多次检查代码,但找不到错误。我是java初学者,非常感谢您的帮助 我已经寻找了所有可能的错误和这个问题的不同代码,但它仍然不起作用 package cs50; import java.util.*; public class Credit { int arr[]; static long credit_card; public static void main(String[] args) { Scanner sc = n
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");
}
}
visa或mastercard号码不显示预期输出,始终显示“无效”。根据lexicore的建议,需要仔细查看您的
digitsToArray()
方法
提供信用卡号码:5105 1051 0510 5100
digitsToArray()
方法将arr
变量设置为:[5,1,0,5,1,1,0,9,-1,-4,-9,5,8,0]
,这似乎不正确
请查看lexicore提供的链接,它将引导您了解为什么以及如何使用它