0
はありません私はNumberFormatExceptionがが追加されているが、それは何もしません文字列または数字に13より小さいか16より大きい数字を入力した場合、Catchブロックの文字列/番号の検証
ここでの例外はありますか?このコードは、例外がスローされたい場合は、単にあなたがコードに含める必要があり、トライcatchブロック
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
//CreditCard class
public class CreditCard {
//Variable declaration
private JFrame frame;
private JPanel panel;
private JTextField textField;
private JLabel label;
private JLabel resLabel;
private JButton validateBtn;
//Constructor
public CreditCard() {
frame = new JFrame("Credit Card Details");
frame.setSize(350, 350);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// create a new panel and add the frame to the panel.
panel = new JPanel();
frame.add(panel);
panel.setLayout(null);
// add label
label = new JLabel("Enter Credit Card No.");
label.setBounds(10, 20, 165, 25);
panel.add(label);
// add input text
textField = new JTextField(16);
textField.setBounds(10, 50, 165, 25);
panel.add(textField);
// create a validation button
validateBtn = new JButton("Validate");
validateBtn.setBounds(10, 80, 80, 25);
panel.add(validateBtn);
frame.setVisible(true);
// set label as valid or invalid
resLabel = new JLabel();
resLabel.setBounds(180, 50, 265, 25);
panel.add(resLabel);
// add event listener
validateBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
String text = textField.getText();
if (text.length() < 13 || text.length() > 16) {
resLabel.setText("Entered Value Must Be Between 13-16 Chars");
return;
}
boolean isValid = validateText(text);
if(isValid)
resLabel.setText("Credit Card is Valid");
else
resLabel.setText("Credit Card is Invalid");
}catch(NumberFormatException f){
System.out.println("Enter Valid Card Number");
}
}
private boolean validateText(String text) {
int rSum = 0, lSum = 0;
for (int i = text.length() - 2; i >= 0; i -= 2) {
if (!Character.isDigit(text.charAt(i)))
return false;
int currentNum = Character.getNumericValue(text.charAt(i));
currentNum *= 2;
if (currentNum > 9) {
int tempSum = 0;
while (currentNum >= 10) {
tempSum += currentNum % 10;
currentNum /= 10;
}
tempSum += currentNum;
currentNum = tempSum;
}
rSum += currentNum;
}
System.out.println(rSum);
for (int i = text.length() - 1; i >= 0; i -= 2) {
if (!Character.isDigit(text.charAt(i)))
return false;
int currentNum = Character.getNumericValue(text.charAt(i));
lSum += currentNum;
}
System.out.println(lSum);
int totalSum = lSum + rSum;
if (totalSum % 10 == 0)
return true;
return false;
}
});
}
}
catchを使って入力を検証するのではなく、while(input.length <13 || input.length> 16)のような単純なループで行う必要がある処理System.out.println( "Please有効なカード番号、13〜16桁の数字を入力してください: "); *新しいCC番号を読み込み、ここに適切な変数に格納する*} – prsvr
NumberFormatExceptionはキャッチされないためにスローされません –
検証を行うには、必要な 'if'ステートメントと' else'ステートメントがすでに用意されています。なぜ例外を追加したいのか分かりません。 –