Essentially i'm making a shopping application in blueJ and I've stumbled across a problem. I've made and If statement which allows the user to 1. shop 2. check basket 3. go to checkout and when I enter 1 to go through my shopping and add my stuff to the shopping list, I cant seem to exit the while loop within. An y ideas on how I would fix this?
import java.util.Scanner;
import java.util.ArrayList;
public class List
{
public String itemsList;
ArrayList<String> alist=new ArrayList<String>();
public List()
{
}
/*public String itemList()
{
System.out.println("1. Veg");
System.out.println("2. sweets");
System.out.println("3. drink");
System.out.println("4. toiletries");
return itemsList;
}
*/
public void Shopping()
{
Scanner sc = new Scanner(System.in);
System.out.println("1. do shopping");
System.out.println("2. check basket");
System.out.println("3. go to checkout");
String choice1 = sc.next();
if(choice1.equals("1"))
{
boolean stop = false;
while(!stop){
Scanner scanner = new Scanner(System.in);
System.out.println("1. Veg");
System.out.println("2. sweets");
System.out.println("3. drink");
System.out.println("4. toiletries");
System.out.println("5. alcohol");
System.out.println("6. go back");
String choice = scanner.next();
if(choice.equals("1"))
{
System.out.println("Veg has been added to your basket");
alist.add("veg");
}else if(choice.equals("2"))
{
System.out.println("sweets have been added to your basket");
alist.add("veg");
}else if(choice.equals("3"))
{
System.out.println("drinks have been added to your basket");
alist.add("veg");
}else if(choice.equals("4"))
{
System.out.println("toiletries have been added to your basket");
alist.add("veg");
}else if(choice.equals("5"))
{
Scanner scanner1 = new Scanner(System.in);
System.out.println("Check ID if age is under 25");
System.out.println("How old are you?");
int underAge = scanner1.nextInt();
int i;
i = 18;
if(underAge < i)
{
System.out.println("You are not old enough to buy alcohol");
} else{
System.out.println("Alcohol has been added to your basket");
alist.add("veg");
}
}else if(choice.equals("6"))
{
}
}
}else if(choice1.equals("2")){
System.out.println(alist);
}else if(choice1.equals("3")){
System.out.println("Are you sure you want to checkout? ");
System.out.println("1. No");
System.out.println("2. Yes");
Scanner scanner3 = new Scanner(System.in);
String checkout = scanner3.next();
if(checkout.equals("1"))
{
return;
} else {
System.out.println("test");
}
}
}
}
1.I can recommend you to use separate methods for each of operations you'd like to do. In this way you can easily return to any part of the code, because in fact it will be a return to a method. 2. You have not to initiate Scanner a lot of times, but only once at the beginning. 3. You can optimize your code by combining common or similar operations into one method. For example your code can be modified in the next way:
import java.util.ArrayList;
import java.util.Scanner;
public class List{
static ArrayList<String> alist = new ArrayList<String>();
static Scanner sc = new Scanner(System.in);
static String choice;
public static void main(String args[]){
mainMenue();
}
private static void mainMenue() {
System.out.println("1. do shopping \n2. check basket \n3. go to checkout");
choice = sc.next();
if(choice.equals("1")) shoppingMenue();
else if(choice.equals("2")) checkingMenue();
else if(choice.equals("3")) checkoutMenue();
}
private static void checkoutMenue() {
System.out.println("Are you sure you want to checkout? \n1. No \n2. Yes");
choice = sc.next();
if(choice.equals("1"))return;
else System.out.println("test");
}
private static void checkingMenue() {
System.out.println(alist);
}
private static void shoppingMenue() {
boolean stop = false;
while(!stop){
System.out.println("1. Veg \n2. sweets \n3. drink \n4. toiletries \n5.
alcohol \n6. go back");
choice = sc.next();
if(choice.equals("1")) printAndSave(1);
else if(choice.equals("2")) printAndSave(2);
else if(choice.equals("3")) printAndSave(3);
else if(choice.equals("4")) printAndSave(4);
else if(choice.equals("5")) {
System.out.println("Check ID if age is under 25 \nHow old are you?");
if(sc.nextInt() < 18) System.out.println("You are not old enough to buy
alcohol");
else printAndSave(5);
}
else if(choice.equals("6")) mainMenue();
}
}
private static void printAndSave(int i) {
ArrayList <String> textList = new ArrayList <>(6);
textList.add(0, "");
textList.add(1, "Veg has been added to your basket");
textList.add(2, "Sweets have been added to your basket");
textList.add(3, "Drinks have been added to your basket");
textList.add(4, "Toiletries have been added to your basket");
textList.add(5, "Alcohol has been added to your basket");
System.out.println(textList.get(i));
alist.add("veg");
}
}