Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在所选场景中实现传递值?_Java_Pass By Value - Fatal编程技术网

Java 如何在所选场景中实现传递值?

Java 如何在所选场景中实现传递值?,java,pass-by-value,Java,Pass By Value,我在项目中实现传递值时遇到了一个小问题。如果是buyOption,fillOption和takeOption 我不知道如何使更改后的值应用于整个程序,而不仅仅是应用于方法。如有任何提示/解决方案/反馈,将不胜感激 public class CoffeeMachine { static int water = 400; static int milk = 540; static int beans = 120; static int cups = 9; s

我在项目中实现传递值时遇到了一个小问题。如果是
buyOption
fillOption
takeOption

我不知道如何使更改后的值应用于整个程序,而不仅仅是应用于方法。如有任何提示/解决方案/反馈,将不胜感激

public class CoffeeMachine {

    static int water = 400;
    static int milk = 540;
    static int beans = 120;
    static int cups = 9;
    static int money = 550;
    static boolean exit = false;

    public static void main(String[] args) {
        do {
            printMenu(water, milk, beans, cups, money);
        } while (!exit);
    }

    private static void printMenu(int water, int milk, int beans, int cups, int money) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Write action (buy, fill, take, remaining, exit): ");
        String input = scanner.nextLine();

        switch (input) {
            case "buy":
                buyOption(water, milk, beans, cups, money);
                break;

            case "fill":
                fillOption(water, milk, beans, cups, money);
                break;

            case "take":
                takeOption(water, milk, beans, cups, money);
                break;

            case "remaining":
                contentOption(water, milk, beans, cups, money);
                break;

            case "exit":
                exit = true;
                System.exit(0);
                break;

            default:
                System.out.println("Wrong option!");
                break;
        }
    }

    private static void contentOption(int water, int milk, int beans, int cups, int money) {
        System.out.println("The coffee machine has: ");
        System.out.println(water + " of water");
        System.out.println(milk + " of milk");
        System.out.println(beans + " of coffee beans");
        System.out.println(cups + " of disposable cups");
        System.out.println(money + " of money");
    }

    private static void buyOption(int water, int milk, int beans, int cups, int money) {
        Scanner scanner = new Scanner(System.in);

        String temp = null;

        System.out.println("What do you want to buy? 1 - espresso, 2 - latte, 3 - cappuccino: ");

        String input = scanner.nextLine();

        switch (input) {
            case "1":
                if (water >= 250 && beans >= 16 && cups >= 1) {
                    water -= 250;
                    beans -= 16;
                    cups -= 1;
                    money += 4;
                    System.out.println("I have enough resources, making you a coffee!");
                } else {
                    if (water < 250) {
                        temp = "water";
                    } else if (beans < 16) {
                        temp = "beans";
                    } else if (cups < 1) {
                        temp = "cups";
                    }
                    System.out.println("Sorry, not enough " + temp + "!");
                }
                break;

            case "2":
                if (water >= 350 && milk >= 75 && beans >= 20 && cups >= 1) {
                    water -= 350;
                    milk -= 75;
                    beans -= 20;
                    cups -= 1;
                    money += 7;
                    System.out.println("I have enough resources, making you a coffee!");
                } else {
                    if (water < 350) {
                        temp = "water";
                    } else if (milk < 75) {
                        temp = "milk";
                    } else if (beans < 20) {
                        temp = "beans";
                    } else if (cups < 1) {
                        temp = "cups";
                    }
                    System.out.println("Sorry, not enough " + temp + "!");
                }
                break;

            case "3":
                if (water >= 200 && milk >= 100 && beans >= 12 && cups >= 1) {
                    water -= 200;
                    milk -= 100;
                    beans -= 12;
                    cups -= 1;
                    money += 6;
                    System.out.println("I have enough resources, making you a coffee!");
                } else {
                    if (water < 200) {
                        temp = "water";
                    } else if (milk < 100) {
                        temp = "milk";
                    } else if (beans < 12) {
                        temp = "beans";
                    } else if (cups < 1) {
                        temp = "cups";
                    }
                    System.out.println("Sorry, not enough " + temp + "!");
                }
                break;

            case "back":
                break;

            default:
                System.out.println("Wrong option!");
        }
    }

    private static void fillOption(int water, int milk, int beans, int cups, int money) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Write how many ml of water do you want to add: ");
        water = water + scanner.nextInt();
        System.out.println("Write how many ml of milk do you want to add: ");
        milk = milk + scanner.nextInt();
        System.out.println("Write how many grams of coffee beans do you want to add: ");
        beans = beans + scanner.nextInt();
        System.out.println("Write how many disposable cups of coffee do you want to add: ");
        cups = cups + scanner.nextInt();
    }

    private static void takeOption(int water, int milk, int beans, int cups, int money) {
        System.out.println("I gave you " + money);
        money = 0;
    }
}
公共级咖啡机{
静态int水=400;
静态整数=540;
静态int bean=120;
静态积分=9;
静态整数货币=550;
静态布尔退出=false;
公共静态void main(字符串[]args){
做{
打印菜单(水、牛奶、豆子、杯子、钱);
}同时(!退出);
}
私有静态void打印菜单(int-water、int-milk、int-beans、int-cups、int-money){
扫描仪=新的扫描仪(System.in);
System.out.println(“写入操作(购买、填充、获取、剩余、退出):”;
字符串输入=scanner.nextLine();
开关(输入){
案例“购买”:
购买选择权(水、牛奶、豆类、杯子、金钱);
打破
案例“填充”:
填充选项(水、牛奶、豆子、杯子、钱);
打破
案例“take”:
抽头(水、牛奶、豆子、杯子、钱);
打破
“剩余”一案:
内容选项(水、牛奶、豆类、杯子、金钱);
打破
案例“退出”:
退出=真;
系统出口(0);
打破
违约:
System.out.println(“错误选项!”);
打破
}
}
私有静态void contentOption(int-water、int-milk、int-beans、int-cups、int-money){
System.out.println(“咖啡机有:”);
系统输出打印LN(水+水的数量);
系统输出打印项次(牛奶+“牛奶”);
System.out.println(beans+“of coffee beans”);
系统输出打印项次(杯+一次性杯);
System.out.println(money+“of money”);
}
私人静态无效购买选项(整数水、整数牛奶、整数豆、整数杯、整数钱){
扫描仪=新的扫描仪(System.in);
字符串temp=null;
“你想买什么?1-浓缩咖啡,2-拿铁,3-卡布奇诺:”;
字符串输入=scanner.nextLine();
开关(输入){
案例“1”:
如果(水>=250和豆>=16和杯>=1){
水-=250;
豆-=16;
杯数-=1;
货币+=4;
System.out.println(“我有足够的资源,给你煮杯咖啡!”);
}否则{
如果(水<250){
temp=“水”;
}else if(beans<16){
temp=“bean”;
}否则如果(杯数<1){
temp=“cups”;
}
System.out.println(“对不起,不够”+temp+“!”;
}
打破
案例“2”:
如果(水>=350和牛奶>=75和豆>=20和杯>=1){
水-=350;
牛奶-=75;
豆类-=20;
杯数-=1;
货币+=7;
System.out.println(“我有足够的资源,给你煮杯咖啡!”);
}否则{
如果(水<350){
temp=“水”;
}否则,如果(牛奶<75){
temp=“牛奶”;
}否则如果(豆<20){
temp=“bean”;
}否则如果(杯数<1){
temp=“cups”;
}
System.out.println(“对不起,不够”+temp+“!”;
}
打破
案例“3”:
如果(水>=200和牛奶>=100和豆类>=12和杯子>=1){
水-=200;
牛奶-=100;
豆类-=12;
杯数-=1;
货币+=6;
System.out.println(“我有足够的资源,给你煮杯咖啡!”);
}否则{
如果(水<200){
temp=“水”;
}否则,如果(牛奶<100){
temp=“牛奶”;
}else if(bean<12){
temp=“bean”;
}否则如果(杯数<1){
temp=“cups”;
}
System.out.println(“对不起,不够”+temp+“!”;
}
打破
案例“背”:
打破
违约:
System.out.println(“错误选项!”);
}
}
私人静态无效填充选项(整数水、整数牛奶、整数豆、整数杯、整数钱){
扫描仪=新的扫描仪(System.in);
System.out.println(“写下您要添加多少毫升水:”;
水=水+扫描仪。nextInt();
System.out.println(“写下你想添加多少毫升牛奶:”;
牛奶=牛奶+扫描仪.nextInt();
System.out.println(“写下你想添加多少克咖啡豆:”;
bean=bean+scanner.nextInt();
System.out.println(“写下你想添加多少杯一次性咖啡:”);
cups=cups+scanner.nextInt();
}
私人静态无效接管(整数水、整数牛奶、整数豆、整数杯、整数钱){
System.out.println(“我给了你”+钱);
货币=0;
}
}

Java总是按值传递。这里的问题是,您使用的是隐藏静态成员的局部变量(每个方法中声明的参数)。 您可以简单地忽略所有参数
private static void takeOption(int water, int milk, int beans, int cups, int money) {
   //sample code
   milk = milk+1;
}
private static void takeOption() {
   //code here
}
water -= 250;
CoffeeMachine.water -= 250;
private static void buyOption(int water, int milk, int beans, int cups, int money)
private static void buyOption(int localWater, int localMilk, int localBeans, int localCups, int localMoney)
if (localWater >= 250 && localBeans >= 16 && localCups >= 1) {
                water -= 250;
                beans -= 16;
                cups -= 1;
                money += 4;
                System.out.println("I have enough resources, making you a coffee!");
            }