当我在NetBeans中使用Java 8中的以下代码时,它看起来效果不佳。例如,在一种方法中,我创建了以下内容:
boolean isGuessCorrect = true;
然后将其传递给另一种可以使用的方法。但是,如果我有一些条件语句更改它不起作用的值。 NetBeans实际上告诉我它无法更改。相反,我被迫使用这样的东西:
int isGuessCorrect = 1;
当我使用这种方法时,将1视为true,将0视为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 :嗯。即使我在几个小时前和昨晚遇到问题,在更改代码后使用布尔变量在需要的地方我没有看到相同的错误代码。我可能遇到的问题是一些无关的问题,这个问题看起来就像布尔本身一样。也有可能我之前有一个最终的操作员,我目前没有使用它。虽然我对其他语言非常熟悉,但我仍然在课堂上学习Java。
我会接受任何能够向我展示通常会发生此类问题的情况的正确答案。
答案 0 :(得分:1)
在Java中,参数为passed by reference - 或者更确切地说,object references are passed by value。
对int
,double
和...... bool
等基元进行了例外处理,这些基元按值传递。
因此,
public static void game_menu2(boolean newGame, int difficulty, int digit1, int digit2, int choice, int counter)
{
newGame = false;
在newGame的本地副本上运行,该副本随函数而死。
对newGame
(或difficult
,digit1
...对此事项进行的任何更改 仅适用于本地副本强>在你的方法之外是不可见的。
Boolean
类和任何其他类一样,可以通过引用传递;遗憾的是Boolean
是immutable,所以你无法做很多事情。
我会考虑将bool
包装在(可变)类
class BooleanWrapper {
public bool value
}
然后转过来。
但请注意,我可以想到传递bool
引用的几种情况是个好主意,而您可能不是其中之一:如果我理解您的使用如果情况正确,我会手工更新你的旗帜。
答案 1 :(得分:0)
因为Java通过引用传递参数,所以更改参数的值不会更改用于将值压入该变量的变量。你有至少两种选择。
创建一个类成员来保存该值。
返回新值并在调用方法中执行赋值。