首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >银行卡生成码

银行卡生成码
EN

Code Review用户
提问于 2020-10-22 10:16:08
回答 2查看 598关注 0票数 4

这个程序用来创建一个随机的银行卡号码。卡号是使用帐户类型和客户端位置为前8位创建的,其余8位是完全随机的。我是这个网站的新手,但我相信这只是为了让代码评审来获得对代码的意见。如果我说错了,请告诉我,我可以把这个记下来。否则,随时给我反馈。谢谢!

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    private static ArrayList<String> storedCardNumbers = new ArrayList<String>();

    public static void main(String[] args) {

        menu();

    }

    //create menu for checking list of cards or creating a new card
    public static void menu(){
        //used to check if client wants to exit program
        boolean exit = false;

        System.out.println("___________________\n" +
                "Welcome to our bank!\n" + "Choose an option below: \n" +
                "1. Create new bank card.\n" +
                "2. Check existing cards.\n" +
                "3. Exit.");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();

        if(choice == 1) {
            createNewCard();
        } else if(choice == 2){
            System.out.println("-------------------------");
            System.out.println("There are " + storedCardNumbers.size() + " cards in the system");
            for (int i = 0; i < storedCardNumbers.size(); i++) {
                System.out.println(storedCardNumbers.get(i).toString());
            }
            System.out.println("-------------------------");
        } else if(choice == 3) {
            System.out.println("Thank you for coming in!");
            exit = true;
        } else {
                System.out.println("Incorrect choice.\n" +
                        "Please choose a valid option: ");
                menu();
            }

        if(exit == false) {
            System.out.println("Would you like to do anything else?");
            menu();
        } else {

        }
        }


    //create new bank card with user params
    public static String createNewCard() {
//        String accountType = setCardAccountType();
//        String location = setAccountLocation();
        String cardNumber = getCardNumber(setCardAccountType(),setAccountLocation());
        System.out.println("New card successfully created.\n" +
                "Your new bank card number is: \n" +
                cardNumber);
        storedCardNumbers.add(cardNumber);
        return cardNumber;
        }

        public static String setAccountLocation() {

            String location = "other";

            System.out.println("What is your location?\n" +
                    "1. US East\n" +
                    "2. US West\n" +
                    "3. Hawaii\n" +
                    "4. Alaska\n" +
                    "5. Other.");
            Scanner scanner = new Scanner(System.in);
            int choice = scanner.nextInt();

            if (choice == 1) {
                location.equalsIgnoreCase("useast");
            } else if (choice == 2) {
                location.equalsIgnoreCase("uswest");
            } else if (choice == 3) {
                location.equalsIgnoreCase("alaska");
            } else if (choice == 4) {
                location.equalsIgnoreCase("hawaii");
            } else if(choice == 5) {
                location.equalsIgnoreCase("other");
            }else {
                System.out.println("Entered invalid selection.\n" +
                        "Please enter valid selection.");
                setCardAccountType();
            }

            return location;
        }

        //set the card account type for the creatNewCard method to use
        public static String setCardAccountType() {

            String accountType = "other";

            System.out.println("Which type of account do you have?\n" +
                    "1. Checking.\n" +
                    "2. Savings.\n" +
                    "3. Credit.\n" +
                    "4. Other.\n" +
                    "Enter corresponding digit: ");
            Scanner scanner = new Scanner(System.in);
            int choice = scanner.nextInt();

            if (choice == 1) {
                accountType.equalsIgnoreCase("checking");
            } else if (choice == 2) {
                accountType.equalsIgnoreCase("savings");
            } else if (choice == 3) {
                accountType.equalsIgnoreCase("credit");
            } else if (choice == 4) {
                accountType.equalsIgnoreCase("other");
            } else {
                System.out.println("Entered invalid selection.\n" +
                        "Please enter valid selection.");
                setCardAccountType();
            }

            return accountType;
        }

    //create random number for card
    public static int getRandom(int min, int max) {
        return (int) (Math.random()*(max - min)) + min;
    }

    public static String getCardNumber(String accountType, String location) {
        //first set of four
        int accountKeySet;
        //second set of four
        int locationKeySet;
        //third set of four
        int lastEightFirst;
        //fourth set of four
        int lastEightSecond;

        //assign a value to each account type
        if(accountType.equalsIgnoreCase("checking")) {
            accountKeySet = 4400;
        } else if(accountType.equalsIgnoreCase("savings")) {
            accountKeySet = 4300;
        } else if(accountType.equalsIgnoreCase("credit")) {
            accountKeySet = 4200;
        } else {
            accountKeySet = 4000;
        }


        //Assign a value to each location of client
        if(location.equalsIgnoreCase("useast")) {
            locationKeySet = 1011;
        } else if(location.equalsIgnoreCase("uswest")) {
            locationKeySet = 2011;
        } else if (location.equalsIgnoreCase("Alaska")) {
            locationKeySet = 3011;
        } else if (location.equalsIgnoreCase("hawaii")) {
            locationKeySet = 4011;
        } else {
            locationKeySet = 1022;
        }

        //create a randomized number for last of card number
        lastEightFirst = getRandom(1000,9999);
        lastEightSecond = getRandom(1000,9999);

        //construct card number
        StringBuilder key = new StringBuilder();
        key.append(accountKeySet);
        key.append(" ");
        key.append(locationKeySet);
        key.append(" ");
        key.append(lastEightFirst);
        key.append(" ");
        key.append(lastEightSecond);
        return key.toString();
    }
}
EN

回答 2

Code Review用户

回答已采纳

发布于 2020-10-22 14:26:07

嗨,尼古拉斯,欢迎来到代码评审。

我在您的代码中注意到了一些事情:

  • 压痕不一致。menu的结束括号不是它应该在的位置。整个setAccountLocation方法是位于最右边的一个选项卡。如果您要修复这个问题,代码的可读性会更好。在Eclipse中,您可以按Ctrl + Shift +F键自动修复缩进
  • 根据我的经验,开放多重Scanners会产生问题。我建议在主方法中只打开一个Scanner,然后在其他方法中使用它。
  • setAccountLocation中,可以多次使用location.equalsIgnoreCase。这没什么用。我认为您希望将字符串分配给location变量,这样您就可以简单地编写location = "useast";等。
  • setAccountType中的帐户类型也是一样的。
  • accountTypelocation从不由用户输入,因此您不需要equalsIgnoreCase,但您可以简单地使用equals
  • 我建议不要将accountTypelocation作为字符串传递,而是为它们创建枚举。
  • menu中,您有一行System.out.println(storedCardNumbers.get(i).toString());。您不需要toString,因为它已经是一个字符串了。此外,println方法隐式调用您传递的每个对象的toString方法。
票数 4
EN

Code Review用户

发布于 2020-10-23 02:39:24

这个程序用来创建一个随机的银行卡号码。卡号是使用帐户类型和客户端位置为前8位创建的,其余8位是完全随机的。

这不是对编码本身的批评,而是对需求收集的批评。银行卡不允许使用完全随机的最后八个字符。因为第16个字符是校验和。所以你应该生成七个随机数字,而不是八个。然后计算前十五的最后一个数字。

票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/251009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档