I have the following code that I am working on for my college assignment. I am asked to use arrays, which I am using. I am asked to use for-loops and if-statement that I am doing already. I have come up with the following code:
class HardwareStore2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.printf("%55s", "**WELCOME TO THE HARDWARE STORE**\n");
System.out.printf("%55s", "=================================\n");
String [] codes = {"G22", "K13", "S21", "I30"};
String [] description = {"STICKY Construction Glue", "CAR-LO Key Ring", "SCREW-DUP Screwy Screws", "LET-IT-RAIN Padlock"};
List<String> codeList = Arrays.asList(codes);
String output = "";
int i = 1000;
String [] userCode = new String[i];
char dolSymb = '$';
int [] pricesAndTax = {10989, 5655, 1099, 4005, 20};
int [] weight = {};
int [] userQuantity = {1};
int [] userPrice = new int[i];
int userStickyPrice = 0;
int userKeyringPrice = 0;
int userScrewyPrice = 0;
int userPadlockPrice = 0;
int userPreWithTax = 0;
int userTotal = 0;
int userPreTotal = 0;
int userShipping = 0;
System.out.printf("%-10s%-40s%-15s%-10s\n", "CODE", "DESCRIPTION", "WEIGHT", "PRICE\n");
System.out.printf("%-10s%-55s%s%d.%02d\n", codes[0], description[0], dolSymb, pricesAndTax[0]/100, pricesAndTax[0]%100);
System.out.printf("%-10s%-55s%s%d.%02d\n", codes[1], description[1], dolSymb, pricesAndTax[1]/100, pricesAndTax[1]%100);
System.out.printf("%-10s%-55s%s%d.%02d\n", codes[2], description[2], dolSymb, pricesAndTax[2]/100, pricesAndTax[2]%100);
System.out.printf("%-10s%-55s%s%d.%02d\n", codes[3], description[3], dolSymb, pricesAndTax[3]/100, pricesAndTax[3]%100);
System.out.println("PLEASE ENTER YOUR ORDER:");
System.out.print("NAME: ");
String username = in.nextLine();
System.out.print("ADDRESS Line 1: ");
String address1 = in.nextLine();
System.out.print("ADDRESS Line 2: ");
String address2 = in.nextLine();
System.out.print("POSTAL CODE: ");
String postalcode = in.nextLine();
for (i = 0;; i++) {
System.out.print("CODE (X to QUIT):");
userCode[i] = in.nextLine();
if (userCode[i].equalsIgnoreCase("x")) {
break;
}
System.out.print("QUANTITY: ");
userQuantity[i] = in.nextInt();
in.nextLine();
if (userCode[i].equalsIgnoreCase(codes[0])) {
userStickyPrice += userQuantity[i]*pricesAndTax[0];
}
else if (userCode[i].equalsIgnoreCase(codes[1])) {
userKeyringPrice += userQuantity[i]*pricesAndTax[1];
}
else if (userCode[i].equalsIgnoreCase(codes[2])) {
userScrewyPrice += userQuantity[i]*pricesAndTax[2];
}
else if (userCode[i].equalsIgnoreCase(codes[3])) {
userPadlockPrice += userQuantity[i]*pricesAndTax[3];
}
else if (!codeList.contains(userCode)) {
i = i - 1;
}
}
}
}
Now, everything is working seamlessly with a million ifs, and elses but I want to know if there is a way to replace all the if-else-if statements wirht one or two that do something like this:
if (userCode[i].contains(codes[0], codes[1], codes[2], codes[3] {}
Or maybe something better like:
if (userCode.contains(any.one.item.in.codeList) {
then.get.the.price.of.that.item.and.do.item.specific.operations
}
Please let me know if the question is not clear enough. And once again, this is a college assignment so I would appreciate explanations.
Without changing the rest of your data structures for something more efficient (say, a Map) you could achieve the same effect with a single if and a nested loop:
boolean found = false;
for (int j = 0 ; !found && j != codes.length ; j++) {
if (userCode[i].equalsIgnoreCase(codes[j])) {
userScrewyPrice += userQuantity[i]*pricesAndTax[j];
found = true;
}
}
if (!found) {
i--;
}
The variable codeList is a List and it has a contains function that could be helpful if I understood what you're trying to do.
Also, since Java 7 you can use strings as an argument of switch statements and that would make your code look nicer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With