问题描述
在项目中实现传递值时,我遇到了一个小问题。对于int[]
,buyOption
和fillOption
。
我不知道如何使更改的值不仅适用于方法,而且适用于整个程序。任何提示/解决方案/反馈将不胜感激。
takeOption
解决方法
Java总是按值传递。这里的问题是您正在使用隐藏静态成员的局部变量(在每个方法中声明的参数)。 您可以简单地省略方法声明中的所有参数:这样,您将“使用”开始时声明的静态成员。
编辑
private static void takeOption(int water,int milk,int beans,int cups,int money) {
//sample code
milk = milk+1;
}
在这种情况下,您使用的每个操作(例如“牛奶”)将仅存在于此方法中。您的参数名为milk,但与在类顶部声明的“ milk”没有任何共享。它们被命名为相同只是一个巧合。
您不能使用this.milk(或CoffeeMachine.milk,因为它是一个静态字段)来引用static milk
,但是由于目前正在编写代码,因此如果不进一步编辑方法,我将看不到任何用处。 / p>
private static void takeOption() {
//code here
}
像这样编辑方法签名将使您可以使用静态变量。
,为了影响您为CoffeeMachine设置的静态变量。
您必须直接在方法内部引用静态变量:
因此,不仅仅是使用
water -= 250;
仅影响参数(本地范围)
您将必须使用:
CoffeeMachine.water -= 250;
正如已经指出的那样,字段不应该是静态的,但是我假设您现在正在学习Java。
注意: 出于您的目的,在影响初始静态变量时,您的方法中可能不需要参数,但是如果您实际需要参数,则可以:
您可以更改参数名称:
private static void buyOption(int water,int money)
很容易变成:
private static void buyOption(int localWater,int localMilk,int localBeans,int localCups,int localMoney)
使用新名称,您可以使用变量 water 表示静态变量,而使用 localWater 表示参数
然后这将起作用:
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!");
}