gpt4 book ai didi

java - 在另一种方法中更改 boolean 值?

转载 作者:行者123 更新时间:2023-11-30 11:01:04 25 4
gpt4 key购买 nike

当我在 NetBeans 中的 Java 8 中使用以下代码时,它似乎无法正常工作。例如,在一种方法中,我创建了以下内容:

boolean isGuessCorrect = true;

然后它被传递给另一个可以使用它的方法。但是,如果我有一些条件语句来更改它不起作用的值。 NetBeans 实际上告诉我它无法更改。相反,我被迫使用这样的东西:

int isGuessCorrect = 1;

当我使用这种方法时,将 1 视为真,将 0 视为假,我可以毫无问题地更改变量的值并根据需要传递它们。

问题是,为了可读性,我宁愿使用 true/false 而不是使用数字来存储 true/false 条件。它们是否有什么特别之处阻止它按我想要的方式工作?

编辑:这是一个非常简单的基于文本的游戏,它使用方法的逻辑控制和传递变量来处理游戏中的事件。

public static void main(String[] args)
{
//Sets the game status and difficulty.
//Using as a separate method so I don't have these variables overwritten on subsequent runs.
int newGame = 1;
int difficulty = 6;
game_menu1(newGame, difficulty);
}

以上是我目前必须使用的,然而,我最初尝试的是:

        boolean newGame = true;

这个想法是,根据游戏是否是新游戏,会发生不同的事情。

在程序的后面部分:

        public static void game_menu2(int newGame, int difficulty, int digit1, int digit2, int choice, int counter)
{
newGame = 0;

以上是我目前使用的。我将 1 更改为 0 以指示游戏不再是新游戏。但是,如果我使用

        public static void game_menu2(boolean newGame, int difficulty, int digit1, int digit2, int choice, int counter)
{
newGame = false;

这是行不通的。很抱歉,但我必须做更多更改,因为我在几个地方引用了它才能得到确切的错误消息。

编辑 2:嗯。尽管我在几个小时前和昨晚遇到了问题,但在将代码更改为在需要的地方使用 boolean 变量后,我没有看到相同的错误代码。我遇到的问题很可能是不相关的,一个看起来像是 boolean 值本身问题的错误。也有可能我之前有一个 final 运算符,而我目前没有使用它。尽管我非常熟悉其他语言,但我仍在类里面学习 Java。

我会接受任何可以向我展示通常预计会发生此类问题的情况的任何人的正确答案。

最佳答案

在 Java 中,参数是 passed by reference - 或者,更准确地说,object references are passed by value .

int这样的基元是一个异常(exception)。 , double , 和... bool , 它们按值传递。

因此,

public static void game_menu2(boolean newGame, int difficulty, int digit1, int digit2, int choice, int counter)
{
newGame = false;

在 newGame 的本地副本上运行,该副本随函数一起消亡。

newGame 所做的任何更改(或 difficultdigit1 ... 就此而言)适用于本地副本,并且在您的方法之外不可见。

Boolean 与任何其他类一样,类可以通过引用传递;不幸的是Booleanimmutable , 所以你不能用它做很多事情。

我会考虑包装你的 bool在一个(可变的)类中

class BooleanWrapper {
public bool value
}

并改为传递它。

但是请注意,我能想到传递 bool 的几种情况。引用是一个好主意,您可能不是其中之一:如果我正确理解您的用例,我会手动更新您的标志。

关于java - 在另一种方法中更改 boolean 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31347756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com