0
在catch块我想打印输入有效的卡没有,如果有人进入 字符串或数字小于13或大于16Catch块串/号验证
我刚才说NumberFormatException的,但它什么都不做如果我输入一个字符串或数字小于13或大于16的数字。
如何在这里有例外?此代码仅用于验证信用卡。我只是需要试试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'语句来进行验证。我不确定你为什么要添加例外。 –