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

を使用nextLine()してすべての数字を読み取ってから、それらをスペースで分割する必要があります。

String line = in.nextLine();
String[] numbers = line.split(" ");
于 2012-10-27T20:05:55.387 に答える
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 + ZまたはCtrl + D, は入力シーケンスを分割する文字です)

于 2012-10-27T20:12:12.063 に答える
0

最初の解決策:BigIntegerクラスを使用します。そのコンストラクタ入力はString.

2番目の解決策:クラス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 に答える