当前位置: 首页 > 知识库问答 >
问题:

捕获块字符串/数字验证

马飞
2023-03-14

在catch块中,如果有人输入一个字符串或一个小于13或大于16的数字,我想打印输入有效的卡片no。

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;
            }

        });
    }
}

共有1个答案

潘弘博
2023-03-14

如果希望引发异常,则必须将其包含在代码中。您可以通过在希望发生的位置添加“throw new NumberFormatException()”来实现它。

无论如何,在您描述的情况下抛出异常不是最好的主意,因为抛出异常会阻止程序以“正常”的方式运行。我建议使用“if”语句来检查输入--如果输入令您满意,则继续,但如果不满意--则提供下一个输入(在提到的“if”语句周围使用无限while循环,当正确输入完成时结束其工作)或简单地编写错误消息。

 类似资料:
  • 我想匹配string1和以下行中出现的任何内容: 直到遇到以下情况: 因此,在上述4种情况下,使用正确的正则表达式,粗体显示的结果将是匹配的: ['string 1','string 2','string 3'] [“字符串 1” , “字符串 2” , “字符串3”] ['string1.domain.com ',' string2.domain.com ',' string3.domain.c

  • 我的Java应用程序“A”正在从另一个Java应用程序获取移动电话号码作为字符串。因此,在应用程序A获得手机号码字符串后,我需要验证该手机号码字符串中是否只有数字。为了验证我使用了如下的简单逻辑, 我正在检查I=1,因为国家代码的第一个字符将是“”。这种方法是O(n)。还有另一种方法,我们可以使用。这将抛出<代码> No.MultFrimeExtry,以便我们可以捕获并考虑它是一个字母数字字符串。

  • 本文向大家介绍VB.NET校验字符串函数,包括了VB.NET校验字符串函数的使用技巧和注意事项,需要的朋友参考一下 VB.NET校验字符串是否是日期 VB.NET检查字符串是否是数字 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 如何在Go中获取字符串的字符数? 例如,如果我有一个字符串“hello”,该方法应该返回5。我看到返回字节数,而不是字符数,因此返回2而不是1,因为在UTF-8中用两个字节编码。

  • @target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})@retention(value=runtime)@documented@constraint(validatedby={})public@interface Min 带注释的元素必须是一个数值,该数值必须大于或等于指定的最小值。 支持的类型有: 注意,由于舍入错误

  • 本节我们将了解最基础的数据类型,数字和字符串。打开你的Python REPL并写出以下语句。 >>> a = 2 >>> type(a) <class 'int'> >>> b = 2.5 >>> type(b) <class 'float'> 这样你就定义了两个变量(“a”和“b”)它们保存了一些数字:变量“a”保存的是一个整数,而“b”保存的是一个实数。 我们现在可以使用刚才定义的两个变量或