这个程序用来创建一个随机的银行卡号码。卡号是使用帐户类型和客户端位置为前8位创建的,其余8位是完全随机的。我是这个网站的新手,但我相信这只是为了让代码评审来获得对代码的意见。如果我说错了,请告诉我,我可以把这个记下来。否则,随时给我反馈。谢谢!
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();
}
}发布于 2020-10-22 14:26:07
嗨,尼古拉斯,欢迎来到代码评审。
我在您的代码中注意到了一些事情:
menu的结束括号不是它应该在的位置。整个setAccountLocation方法是位于最右边的一个选项卡。如果您要修复这个问题,代码的可读性会更好。在Eclipse中,您可以按Ctrl + Shift +F键自动修复缩进Scanners会产生问题。我建议在主方法中只打开一个Scanner,然后在其他方法中使用它。setAccountLocation中,可以多次使用location.equalsIgnoreCase。这没什么用。我认为您希望将字符串分配给location变量,这样您就可以简单地编写location = "useast";等。setAccountType中的帐户类型也是一样的。accountType和location从不由用户输入,因此您不需要equalsIgnoreCase,但您可以简单地使用equals。accountType和location作为字符串传递,而是为它们创建枚举。menu中,您有一行System.out.println(storedCardNumbers.get(i).toString());。您不需要toString,因为它已经是一个字符串了。此外,println方法隐式调用您传递的每个对象的toString方法。发布于 2020-10-23 02:39:24
这个程序用来创建一个随机的银行卡号码。卡号是使用帐户类型和客户端位置为前8位创建的,其余8位是完全随机的。
这不是对编码本身的批评,而是对需求收集的批评。银行卡不允许使用完全随机的最后八个字符。因为第16个字符是校验和。所以你应该生成七个随机数字,而不是八个。然后计算前十五的最后一个数字。
https://codereview.stackexchange.com/questions/251009
复制相似问题