我理解如何将变量传递给另一个方法,我甚至学会了如何对单个方法执行多个变量。我的问题是我试图做一个switch语句,当用户在声明中输入地高辛(用于心脏的药物)的症状我要奖励他10点将它存储在一个变量中,当用户输入我想要的另一个症状时将它存储在变量中以及新方法中。我的问题是,在将变量发送到我的方法并继续执行程序后,它不可避免地将其重置为零,从而使我的努力付诸实施。
代码:
switch(input5) {
case "Vomiting":
score = 0;
num = 0;
score = num + 10;
getMethod(score,0);
System.out.println(getMethod(num));
JOptionPane.showMessageDialog (null,"you're correct") ;
break;
case "Dizziness":
JOptionPane.showMessageDialog (null,"you're correct") ;
score = num + 10;
getMethod(0,score);
break;
case "Confusion":
JOptionPane.showMessageDialog (null,"you're correct");
break;
case "Vision":
JOptionPane.showMessageDialog (null,"you're correct");
break;
default :
JOptionPane.showMessageDialog (null,"you're Wrong");
break;
}
...
static int getMethod(int total) {
int amount = total;
int amount2 = total2;
int result = amount + amount2;
return result;
}
答案 0 :(得分:2)
这个问题的问题在于它的措辞很差,很难理解你实际上认为正在发生什么。除非我们理解,否则很难正确回答。所以我只想指出一些看似错误的事情。
变量不会在Java中“重置”。在这种情况下,问题是您的getMethod
方法未更新score
。
如果某个方法返回一个值,并且该值未分配给某个值,那么它将被丢弃。在您的情况下,您没有在您调用它的地方分配getMethod
返回的值。
在Java中,参数传递给“按值”方法。结果是这样的事情不起作用:
int test = 1;
increment(test, 2);
public void increment(int value, int by) {
// FAIL - the local copy of "value" is incremented, but the
// the original "test" variable is not touched.
value = value + by;
}
请注意,这与变量的名称无关。问题是方法内部的变量不以任何方式“连接”到呼叫站点使用的变量。该方法更新了前者......而不是后者。
关于代码需要说几件事:
一致地缩进代码非常重要。有风格指南告诉你该怎么做。 (我们以大多数样式指南可接受的方式重新编写代码。)
对方法,变量和类等事物使用合理且信息丰富的名称非常重要。这有助于读者了解代码作者想要代码的内容/意思。在你的情况下,“getMethod”告诉读者没有关于该方法应该做什么。
方法还应该有javadoc注释,说明它们应该做什么,参数和结果意味着什么,等等。
答案 1 :(得分:0)
我认为这里的问题是每次输入内容并输入switch语句时,它会将分数重置为0。
switch(input5){
case "Vomiting":
score = 0;
我认为您需要在第一次输入之前将得分设置为0,而不是每次进行呕吐时都将其重置。我无法完全按照您的代码,请链接全班。
答案 2 :(得分:0)
试试这个:
score = getMethod(score, 0);
在java中,原语是“按值传递”。 值,而不是变量,将传递给该方法。更改方法中的值会对用于调用方法的变量 nothing 。
答案 3 :(得分:0)
创建静态全局变量以维持或保持分数。这将允许您对您的方法进行后续调用,并仍然可以跟踪准确的分数。
因此,创建一个全局变量public static int score = 0;
。在你的方法内部,你可以将得分变量初始化除去为零score = 0;
,因为你将使用全局得分变量。