如何在所选方案中实施按值传递?

问题描述

在项目中实现传递值时,我遇到了一个小问题。对于int[]buyOptionfillOption

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

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(或Cof​​feeMachine.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!");
            }