因此,我的程序应该采用用于Visa或MasterCard的16位数字的附加形式。但是,当我运行它时,程序将读取一个空格作为输入的结尾。 例如:如果我输入1234 5678 9012 3444,程序将只在我进入空间之前添加数字的总和。然后,如果我输入整个字符串没有空格,它会一直给我错误代码。我在这里做错了什么?
import java.util.Scanner;
public class assignment4
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int sum = 0, number, modulo;
String cardBrand;
System.out.print("Visa or MasterCard? ");
cardBrand = in.nextLine();
System.out.print("Please enter your 16 digit credit card number (no spaces): ");
number = in.nextInt();
while (number > 0)
{
int digit = number % 10;
sum = sum + digit;
number = number/10;
}
modulo = (sum % 10);
if (cardBrand.equals("Visa"))
{
if (modulo == 0)
{
System.out.println("This is a valid Visa card. Good job.");
}
else
{
System.out.println("This is an invalid Visa card number.");
}
}
else if (cardBrand.equals("MasterCard"))
{
if (modulo == 1)
{
System.out.println("This is a valid MasterCard.");
}
else
{
System.out.print("This is an invalid MasterCard card number.");
}
}
}
}
答案 0 :(得分:0)
int
仅限于“2,147,483,647”,因此您的号码超出了范围。
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
如果你真的需要处理这么大的数字,请使用BigDecimal。
答案 1 :(得分:0)
您应该使用nextLine()
读取所有数字,然后按空格分割。
String line = in.nextLine();
String[] numbers = line.split(" ");
答案 2 :(得分:0)
您可以检查下一个字符是否为int,因为它已收到,并总结了整数。这样,你就不会遇到int大小的问题,因为你在收到每个int时总结它。
int sum = 0, number = 0, modulo;
while(in.hasNext()){
if(in.hasNextInt()){
number = in.nextInt();
sum = sum + number;
}
else{
in.next();
}
modulo = sum % 10;
(Ctrl + Z
或Ctrl + D
,是打破输入序列的字符)
答案 3 :(得分:0)
第一个解决方案:使用BigInteger
课程。它的构造函数输入是String
。
第二个解决方案:在split
课程中使用String
方法或使用StringTokenizer
课程。
Bhesh写了split
例子。 StringTokenizer
示例:
StringTokenizer st = new StringTokenizer ("1234 5678 9012 3444", " ");
st.nextToken() returns each part of your credit card number