将变量传递给方法并停止变量重置

时间:2012-06-15 23:35:47

标签: java methods

我理解如何将变量传递给另一个方法,我甚至学会了如何对单个方法执行多个变量。我的问题是我试图做一个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;
}

4 个答案:

答案 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;,因为你将使用全局得分变量。