とある課題でクレジットカードによる決済処理の問題がありました。入力されたクレジットカード番号の文字を最後の4桁残して""に置き換えるクラスを作成するという問題です。なお文字長が19字でない場合や間が半角スペースでない場合は「フォーマットが正しくありません」と表示します。
その中で私は、
1、まずユーザーが入力した文字列が19字であるかどうかを調べる
2、問題無ければsplit(" ")で半角スペース区切りになっているかを調べる
3、問題無ければ半角スペース以外の数字をchar型の配列num[16]に代入し、それらをint型に変換する
4、その後変換できない場合(=数字以外の場合)プログラムを終了し、それ以外の場合はへの置換を行うという流れでコードを書いていました。
しかしいざ実行してみると、数字以外(具体的にはaやbなど)を入力してもプログラムは通常通り進んでしまいます。どのようにコードを変えれば、課題通りにプログラムを作成できるのでしょうか。
Java
1import java.io.*; 2 3 4class CardNumber{ 5 public static void main(String[] args)throws IOException{ 6 7 System.out.println("入力してください"); 8 9 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 10 String str = br.readLine(); 11 12 int len = str.length();//入力された文字列の要素数をチェック番号リスト 13 if(len != 19){ 14 System.out.println("フォーマットが正しくありません。"); 15 16 } 17 else if(len == 19){ 18 String[] split = str.split(" "); 19 20 if(split.length != 4){ 21 System.out.println("フォーマットが正しくありません。"); 22 } 23 else if(split.length == 4){ 24 char[] num = new char[16]; 25 for(int i = 0 ; i < 4; i++ ){ 26 num[i] =split[0].charAt(i); 27 } 28 for(int i = 4 ; i < 8 ; i++){ 29 num[i] = split[1].charAt(i -4); 30 } 31 for(int i = 8 ; i < 12; i++ ){ 32 num[i] =split[2].charAt(i -8); 33 } 34 for(int i = 12 ; i < 16; i++ ){ 35 num[i] =split[3].charAt(i -12); 36 } 37 38 for(int i = 0; i < 16 ; i++){ 39 try{ 40 int myInt = Character.getNumericValue(num[i]); 41 } 42 catch(NumberFormatException e){ 43 System.out.println("フォーマットが正しくありません。"); 44 } 45 } 46 47 48 StringBuilder sb = new StringBuilder(str); 49 sb.replace(0,4,"****"); 50 sb.replace(5,9,"****"); 51 sb.replace(10,14,"****"); 52 str = sb.toString(); 53 54 System.out.println(str); 55 } 56 } 57 } 58}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/14 06:08