I am very new to Java and I am trying to learn as best as I can.The actual question of the problem I am trying to solve is in the picture above. Please do refer to the picture in case I am not detailed enough in the description of my problem. I am currently writing a java program that has to do with buying coffee. I have a method that computes the cost of buying the coffee(BuyCoffee) and the amount of resources used. There are also different types of coffee, with each coffee using different amount of resources. I also have another method that computes the resources left after any coffee is sold**(getRemainingResources)**. I do have a problem looping my getRemainingResources method. So when I buy coffee once, the amount of resources I have reduces. I have a method to fill this resources. But everytime I try to buy the same coffee again, the amount of resources I have left does not reduce. My code is below
import java.util.Scanner;
public class MethodsTest {
//global variable--starting quantity of resources in machine
static final int water = 400;
static final int milk = 540;
static final int coffeeBean = 120; // in g
static int disposableCups = 9;
static final int cost = 550; //in $
//global variable --refill quantity of resources in machine
static int fillWater, fillMilk, fillCoffeeBeans, fillDisposableCups;
//global variable -- remaining quantity of resources in machine
static int newRemCost, remCost, remWater, remMilk, remCoffeeBean, remDisposableCups;
static int espressoWater, espressoMilk, espressoCoffeeBeans, espressoCost; // Resources for espresso
static int latteWater, latteMilk, latteCoffeeBeans, latteCost;
static int cappuccinoWater, cappuccinoMilk, cappuccinoCoffeeBeans, cappuccinoCost;
static int regWater, regMilk, regCoffeeBeans, regCost; //Resources for regular coffees
static void FillCoffeeMachine() {
Scanner input = new Scanner(System.in);
System.out.println("Write how many ml of water you want to add: ");
fillWater = input.nextInt();
System.out.println("Write how many ml of milk you want to add: ");
fillMilk = input.nextInt();
System.out.println("Write how many grams of coffee beans you want to add: ");
fillCoffeeBeans = input.nextInt();
System.out.println("Write how many disposable cups of coffee you want to add: ");
fillDisposableCups = input.nextInt();
MainMenu();
}
static void BuyCoffee() { //method for buying coffee
disposableCups--;// always decreasing when coffee is sold
class TypesOfCoffee {
void Espresso() { //nested class, since there are different kind of coffee
espressoWater = 250;
espressoMilk = 0;
espressoCoffeeBeans = 16;
espressoCost = 4;
if (remWater > espressoWater && remMilk > espressoMilk && remCoffeeBean > espressoCoffeeBeans) {
System.out.println("I have enough resources, making you a coffee!");
} else if (remWater < espressoWater) {
System.out.println("Sorry, not enough water!");
disposableCups++;
} else if (remCoffeeBean < espressoCoffeeBeans) {
System.out.println("Sorry, not enough coffee beans!");
disposableCups++;
} else
disposableCups++;
}
void Latte() {
latteWater = 350;
latteMilk = 75;
latteCoffeeBeans = 20;
latteCost = 7;
if (remWater > latteWater && remMilk > latteMilk && remCoffeeBean > latteCoffeeBeans) {
System.out.println("I have enough resources, making you a coffee!");
} else if (remWater < latteWater) {
System.out.println("Sorry, not enough water!");
disposableCups++;
} else if (remMilk < latteMilk) {
System.out.println("Sorry, not enough milk!");
disposableCups++;
} else if (remCoffeeBean < latteCoffeeBeans) {
System.out.println("Sorry, not enough coffee beans!");
disposableCups++;
} else
disposableCups++;
}
void Cappuccino() {
cappuccinoWater = 200;
cappuccinoMilk = 100;
cappuccinoCoffeeBeans = 12;
cappuccinoCost = 6;
if (remWater > cappuccinoWater && remMilk > cappuccinoMilk && remCoffeeBean > cappuccinoCoffeeBeans) {
System.out.println("I have enough resources, making you a coffee!");
} else if (remWater < cappuccinoWater) {
System.out.println("Sorry, not enough water!");
disposableCups++;
} else if (remMilk < cappuccinoMilk) {
System.out.println("Sorry, not enough milk!");
disposableCups++;
} else if (remCoffeeBean < cappuccinoCoffeeBeans) {
System.out.println("Sorry, not enough coffee beans!");
disposableCups++;
} else
disposableCups++;
}
void regularCoffee() {
regWater = 200;
regMilk = 50;
regCoffeeBeans = 15;
regCost = 0;
if (remWater > regWater && remMilk > regMilk && remCoffeeBean > regCoffeeBeans) {
System.out.println("I have enough resources, making you a coffee!");
} else if (remWater < regWater) {
System.out.println("Sorry, not enough water!");
disposableCups++;
} else if (remMilk < regMilk) {
System.out.println("Sorry, not enough milk!");
disposableCups++;
} else if (remCoffeeBean < regCoffeeBeans) {
System.out.println("Sorry, not enough coffee beans!");
disposableCups++;
} else
disposableCups++;
}
}
Scanner input = new Scanner(System.in);
System.out.println("What kind of coffee would you like to buy today?");
System.out.println("""
Please enter:
1 for espresso
2 for latte
3 for cappuccino
4 for a regular coffee
back - to go back to main menu""");
String choice = input.next();
switch (choice) { //lets user choose what type of coffee to buy
case "1":
new TypesOfCoffee().Espresso();
break;
case "2":
new TypesOfCoffee().Latte();
break;
case "3":
new TypesOfCoffee().Cappuccino();
break;
case "4":
new TypesOfCoffee().regularCoffee();
break;
case "back":
MainMenu();
break;
default:
System.out.println("Please enter an option from the above");
}
MainMenu();
}
static void takeMoney() { //method to take the money
System.out.println("I gave you" + " " + "$" + remCost);
newRemCost = remCost;
MainMenu();
}
static void getRemainingResources() {
//TODO --has to loop..but it works only once
remDisposableCups = fillDisposableCups + disposableCups;
boolean found = remDisposableCups > 0; // true for coffee to be sold
while (found) {
remWater = water + fillWater - espressoWater - cappuccinoWater - latteWater;//
remMilk = milk + fillMilk - espressoMilk - cappuccinoMilk - latteMilk;
remCoffeeBean = coffeeBean + fillCoffeeBeans - espressoCoffeeBeans - cappuccinoCoffeeBeans - latteCoffeeBeans;
remCost = cost + espressoCost + cappuccinoCost + latteCost - newRemCost;
//found = remDisposableCups > 0 && remWater>=water && remMilk>=milk&&remCoffeeBean>=coffeeBean;
System.out.println("The coffee machine has: ");
System.out.println(remWater + " " + "ml of water");
System.out.println(remMilk + " " + "ml of milk ");
System.out.println(remCoffeeBean + " " + "g of coffee beans ");
System.out.println(remDisposableCups + " " + "disposable cups ");
System.out.println("$" + remCost + " " + "of money");
found = remDisposableCups < 0;
}
MainMenu();
}
static void MainMenu() { // Gives user option to decide what they want to do
Scanner input = new Scanner(System.in);
System.out.println("Main Menu: " + "\n");
System.out.println("Please choose from the following options below");
System.out.println("""
To buy coffee - Enter buy
To fill the machine - Enter fill
To get cash from machine - Enter take
To see remaining resources - Enter remaining
To exit program - Enter exit""");
String choice = input.next();
switch (choice) {
case "buy":
BuyCoffee();
break;
case "fill":
FillCoffeeMachine();
break;
case "take":
takeMoney();
break;
case "remaining":
getRemainingResources();
break;
case "exit":
System.exit(0);
break;
default:
MainMenu();//goes back to main menu if user types in an unknown value
}
}
public static void main(String[] args) {
MainMenu();
}
}
It should go now But there are other errors (besides the scanner, which they have already told you about) For example, you can't buy coffee without "remaining" first (and also: too many static variables, OO not used ...). This is just one example. I corrected the code for the error you asked for, but there would be a lot to change.
import java.util.Scanner;
public class MethodsTest {
//global variable--starting quantity of resources in machine
static final int water = 40000;
static final int milk = 54000;
static final int coffeeBean = 12000; // in g
static int disposableCups = 900;
static final int cost = 550; //in $
static int remCost = 550; //in $
//global variable --refill quantity of resources in machine
static int fillWater, fillMilk, fillCoffeeBeans, fillDisposableCups;
//global variable -- remaining quantity of resources in machine
static int newRemCost, remWater, remMilk, remCoffeeBean, remDisposableCups;
static int espressoWater, espressoMilk, espressoCoffeeBeans, espressoCost; // Resources for espresso
static int latteWater, latteMilk, latteCoffeeBeans, latteCost;
static int cappuccinoWater, cappuccinoMilk, cappuccinoCoffeeBeans, cappuccinoCost;
static int regWater, regMilk, regCoffeeBeans, regCost; //Resources for regular coffees
static void FillCoffeeMachine() {
Scanner input = new Scanner(System.in);
System.out.println("Write how many ml of water you want to add: ");
fillWater = input.nextInt();
System.out.println("Write how many ml of milk you want to add: ");
fillMilk = input.nextInt();
System.out.println("Write how many grams of coffee beans you want to add: ");
fillCoffeeBeans = input.nextInt();
System.out.println("Write how many disposable cups of coffee you want to add: ");
fillDisposableCups = input.nextInt();
MainMenu();
}
static void BuyCoffee() { //method for buying coffee
disposableCups--;// always decreasing when coffee is sold
class TypesOfCoffee {
void Espresso() { //nested class, since there are different kind of coffee
espressoWater = 250;
espressoMilk = 0;
espressoCoffeeBeans = 16;
espressoCost = 4;
if (remWater > espressoWater && remMilk > espressoMilk && remCoffeeBean > espressoCoffeeBeans) {
System.out.println("I have enough resources, making you a coffee!");
} else if (remWater < espressoWater) {
System.out.println("Sorry, not enough water!");
disposableCups++;
} else if (remCoffeeBean < espressoCoffeeBeans) {
System.out.println("Sorry, not enough coffee beans!");
disposableCups++;
} else
disposableCups++;
}
void Latte() {
latteWater = 350;
latteMilk = 75;
latteCoffeeBeans = 20;
latteCost = 7;
if (remWater > latteWater && remMilk > latteMilk && remCoffeeBean > latteCoffeeBeans) {
System.out.println("I have enough resources, making you a coffee!");
} else if (remWater < latteWater) {
System.out.println("Sorry, not enough water!");
disposableCups++;
} else if (remMilk < latteMilk) {
System.out.println("Sorry, not enough milk!");
disposableCups++;
} else if (remCoffeeBean < latteCoffeeBeans) {
System.out.println("Sorry, not enough coffee beans!");
disposableCups++;
} else
disposableCups++;
}
void Cappuccino() {
cappuccinoWater = 200;
cappuccinoMilk = 100;
cappuccinoCoffeeBeans = 12;
cappuccinoCost = 6;
if (remWater > cappuccinoWater && remMilk > cappuccinoMilk && remCoffeeBean > cappuccinoCoffeeBeans) {
System.out.println("I have enough resources, making you a coffee!");
} else if (remWater < cappuccinoWater) {
System.out.println("Sorry, not enough water!");
disposableCups++;
} else if (remMilk < cappuccinoMilk) {
System.out.println("Sorry, not enough milk!");
disposableCups++;
} else if (remCoffeeBean < cappuccinoCoffeeBeans) {
System.out.println("Sorry, not enough coffee beans!");
disposableCups++;
} else
disposableCups++;
}
void regularCoffee() {
regWater = 200;
regMilk = 50;
regCoffeeBeans = 15;
regCost = 0;
if (remWater > regWater && remMilk > regMilk && remCoffeeBean > regCoffeeBeans) {
System.out.println("I have enough resources, making you a coffee!");
} else if (remWater < regWater) {
System.out.println("Sorry, not enough water!");
disposableCups++;
} else if (remMilk < regMilk) {
System.out.println("Sorry, not enough milk!");
disposableCups++;
} else if (remCoffeeBean < regCoffeeBeans) {
System.out.println("Sorry, not enough coffee beans!");
disposableCups++;
} else
disposableCups++;
}
}
Scanner input = new Scanner(System.in);
System.out.println("What kind of coffee would you like to buy today?");
System.out.println("""
Please enter:
1 for espresso
2 for latte
3 for cappuccino
4 for a regular coffee
back - to go back to main menu""");
String choice = input.next();
switch (choice) { //lets user choose what type of coffee to buy
case "1":
new TypesOfCoffee().Espresso();
break;
case "2":
new TypesOfCoffee().Latte();
break;
case "3":
new TypesOfCoffee().Cappuccino();
break;
case "4":
new TypesOfCoffee().regularCoffee();
break;
case "back":
MainMenu();
break;
default:
System.out.println("Please enter an option from the above");
}
MainMenu();
}
static void takeMoney() { //method to take the money
System.out.println("I gave you" + " " + "$" + remCost);
newRemCost = remCost;
MainMenu();
}
static void getRemainingResources() {
//TODO --has to loop..but it works only once
remDisposableCups = fillDisposableCups + disposableCups;
boolean found = remDisposableCups > 0; // true for coffee to be sold
while (found) {
remWater = water + fillWater - espressoWater - cappuccinoWater - latteWater;//
remMilk = milk + fillMilk - espressoMilk - cappuccinoMilk - latteMilk;
remCoffeeBean = coffeeBean + fillCoffeeBeans - espressoCoffeeBeans - cappuccinoCoffeeBeans - latteCoffeeBeans;
remCost = remCost + espressoCost + cappuccinoCost + latteCost - newRemCost;
espressoCost = 0;
cappuccinoCost = 0;
latteCost = 0;
//found = remDisposableCups > 0 && remWater>=water && remMilk>=milk&&remCoffeeBean>=coffeeBean;
System.out.println("The coffee machine has: ");
System.out.println(remWater + " " + "ml of water");
System.out.println(remMilk + " " + "ml of milk ");
System.out.println(remCoffeeBean + " " + "g of coffee beans ");
System.out.println(remDisposableCups + " " + "disposable cups ");
System.out.println("$" + remCost + " " + "of money");
found = remDisposableCups < 0;
}
MainMenu();
}
static void MainMenu() { // Gives user option to decide what they want to do
Scanner input = new Scanner(System.in);
System.out.println("Main Menu: " + "\n");
System.out.println("Please choose from the following options below");
System.out.println("""
To buy coffee - Enter buy
To fill the machine - Enter fill
To get cash from machine - Enter take
To see remaining resources - Enter remaining
To exit program - Enter exit""");
String choice = input.next();
switch (choice) {
case "buy":
BuyCoffee();
break;
case "fill":
FillCoffeeMachine();
break;
case "take":
takeMoney();
break;
case "remaining":
getRemainingResources();
break;
case "exit":
System.exit(0);
break;
default:
MainMenu();//goes back to main menu if user types in an unknown value
}
}
public static void main(String[] args) {
MainMenu();
}
}