gpt4 book ai didi

java - 信用卡验证字符解析问题

转载 作者:行者123 更新时间:2023-12-02 06:13:20 30 4
gpt4 key购买 nike

我正在开展一个小组项目,该项目要求我们确定信用卡是否合法。我找到了一些获得算法的链接。综上所述,如果最终金额能被10整除,则信用卡号有效。如果不能被 10 整除,则该数字无效或为假数字!我有一个主要问题。

编辑:setSize() 方法无法正常工作。它不会接受我需要喂它的尺寸

public class Main extends JFrame implements ActionListener {

private Dimension d = new Dimension(500, 300);
private JPanel panel1, panel2;
private JButton test, reset;
private JLabel instructions;
private JTextField text;


public Main(){
setTitle("****Credit Card Test****");
setSize(d);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel1 = new JPanel();
panel1.setSize(this.getWidth() , this.getHeight());
panel1.setLayout(new GridBagLayout());

instructions = new JLabel("Enter a Creit Card number-------");
test = new JButton("Test");


reset = new JButton("Reset");
text = new JTextField();

addItem(panel1, instructions, 0, 0, 2, 1, GridBagConstraints.CENTER);
addItem(panel1,test, 0, 2, 1, 1, GridBagConstraints.CENTER);
addItem(panel1, reset, 2, 2, 1, 1, GridBagConstraints.CENTER);
addItem(panel1, text, 0, 1, 3, 1, GridBagConstraints.CENTER);


add(panel1);
pack();
setVisible(true);
}

//Good usage of static here because there is only 1 algorithm.
public static boolean luhmAlgorithm(String num) {
boolean bool;
for(int i = 0; i <= num.length(); i++){
num.toCharArray();
num [i] = Integer.parseInt(num[i]);
}
return bool;
}

public void addItem(JPanel p, JComponent c, int x, int y, int width, int height, int align){
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = x;
constraints.gridy = y;
constraints.gridwidth = width;
constraints.gridheight = height;

//Sets amount of space for padding (top, left, bottom, right)
constraints.insets = new Insets(5, 5, 5, 5);
////////////////////////////////////////////////////////////
constraints.anchor = align;//(CENTER, NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, NORTHWEST)
//Stretch components to fill space (NONE, HORIZONTAL, VERTICAL, BOTH)
constraints.fill = GridBagConstraints.NONE;
}

public void actionPerformed(ActionEvent event) {
switch (event.getActionCommand()){
case "Reset":
text.setText(null);
break;
//Remember use colons : instead of semi-colons ;
case "Test":
if(luhmAlgorithm(text.getText())){
JOptionPane.showMessageDialog(null, "This credit card is valid.");
} else {
JOptionPane.showMessageDialog(null, "INVALID CREDIT CARD!");
break;
}
default:
break;
}
}

public static void main(String[] args) {
new Main();
}
}

最佳答案

您的问题涉及获取用户的输入,因此我将根据您提供的 luhmAlgorithm 来回答这个问题(卡#s 的总和/10):

public static boolean luhmAlgorith(String num)
{
boolean bool;
char[] numAsCharArray = num.toCharArray();
int cardSum = 0;
for (int i = 0; i <= num.length(); i++)
{
cardSum += Integer.parseInt(String.valueOf(numAsCharArray[i]));
}
if (cardSum % 10 == 0)
{
bool = true;
}
else
{
bool = false;
}
return bool;
}

在此代码块中,我们在循环之前将字符串转换为字符数组(为什么每次循环时都创建一个字符数组?这太过分了)。然后,我们将循环遍历每个索引,并将该值添加到名为 cardSum 的总和中。 cardSum 将跟踪运行总计,因此它位于循环之外。然后,我们检查总和的模。如果cardSum % 10 ==0(总和可以被10整除),那么我们将bool设置为true。否则,我们将 bool 设置为 false。然后我们返回bool

但是,我们可以重构此代码以使其更简洁。既然我们返回一个 boolean 值,为什么不去掉 if/else block 呢?我们可以使用它代替 block 来使事情变得更干净:

return cardsum % 10 == 0

如果 cardsum % 10 等于 0,则条件将为 true,并且该方法将返回 true。这一行可以摆脱9行代码! -- 只是需要考虑一下:)

另一个注意事项:如果用户提供非数字输入,您可能希望捕获 NumberFormatException。如果这不是您的项目的要求,我不会过度担心。然而,这是一个很好的实践! (感谢米歇尔·迈克尔·迈耶的推荐)

关于java - 信用卡验证字符解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21691086/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com