1

因此,我的程序应该采用用于 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.");
            }
        }

    }

}
4

4 回答 4

0

int仅限于“2,147,483,647”,因此您的号码超出范围。

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

如果您确实必须处理如此大的数字,请使用BigDecimal 。

于 2012-10-27T20:04:57.243 回答
0

您可以检查下一个字符是否为 int,因为它被接收,并总结了 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 + ZCtrl + D, 是打断输入序列的字符)

于 2012-10-27T20:12:12.063 回答
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
于 2012-10-27T20:14:15.777 回答
0

您应该使用nextLine()读取所有数字,然后将它们按空格分隔。

String line = in.nextLine();
String[] numbers = line.split(" ");
于 2012-10-27T20:05:55.387 回答