したがって、これは割り当てです:
クレジットカード番号 8桁の数字で確認 • 右端の桁から1桁おきに合計してください。たとえば、クレジット カード番号が 4358 9795 の場合、合計は 5 + 7 + 8 + 3 = 23 になります。 • 前の手順で含めなかった各数字を 2 倍にします。結果の数字のすべての桁を追加します。たとえば、上記の数値の場合、最後から 2 番目の桁から 2 倍すると、18 18 10 8 になります。これらの値のすべての桁を足すと、1 + 8 + 1 + 8 + 1 + 0 + になります。 8 = 27。 • 前の 2 つのステップの合計を加算します。結果の最後の桁が 0 の場合、数値は有効です。私たちの場合、23 + 27 = 50 なので、数値は有効です。--有効/無効?
テスター プログラムと、メソッド用の別のプログラムを作成しました。すべてが正常にコンパイルされたため、技術的なエラーは発生しないはずですが、有効なカード番号を入力しても、プログラムは番号が無効であると返すため、実際のアルゴリズムに問題があると想定していますが、私はかなり初心者ですこれだから何だか分からない。
import java.util.Scanner;
public class CreditCardTester{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String retry = ("y");
String n = null;
while(retry.equalsIgnoreCase("y")){ // allows program to keep running even if the user enters in a capital Y
int lengthCheck = 1;
System.out.println("Please enter your 8-digit credit card number");
// check to see whether the input number is exactly 8 digits
while(lengthCheck==1){
n = scanner.next();
if(n.length()==8)
lengthCheck=0;
else
System.out.println("Please make sure the credit card number you have entered is 8 digits");
} // end inner while loop
// instantiate CardNumber and check validity
CardNumber number = new CardNumber(n);
number.check();
if (number.isValid())
System.out.println("The number you entered is a valid credit card number.");
else
System.out.println("The number you entered is not a valid credit card number. Would you like to enter in another number? (y/n)");
retry = scanner.next();
} // end outer while loop
}
}
そして別クラス
public class CardNumber {
private String number;
private boolean valid;
public CardNumber(String n){
number = n;
valid = true;
}
private void check1(){
int a = Integer.parseInt(number.substring(7));
int b = Integer.parseInt(number.substring(5,6));
int c = Integer.parseInt(number.substring(3,4));
int d = Integer.parseInt(number.substring(1,2));
int oddsum = a + b + c + d;
int e = (Integer.parseInt(number.substring(6,7))) * 2;
int f = (Integer.parseInt(number.substring(4,5))) * 2;
int g = (Integer.parseInt(number.substring(2,3))) * 2;
int h = (Integer.parseInt(number.substring(0,1))) * 2;
String ee = String.valueOf(e);
String ff = String.valueOf(f);
String gg = String.valueOf(g);
String hh = String.valueOf(h);
int evensum = (Integer.parseInt(ee.substring(0))) + (Integer.parseInt(ff.substring(0))) + (Integer.parseInt(gg.substring(0))) + (Integer.parseInt(hh.substring(0)));
int totalsum = evensum + oddsum;
if (!(totalsum%10 == 0))
valid=false;
}
public void check(){
check1();
}
public boolean isValid(){
return valid;
}
}
これを行うにはもっと良い方法もあると確信しているので、すべての提案を歓迎します!