1

我了解如何将变量传递给另一个方法,我什至学会了如何将多个变量传递给单个方法。我的问题是我正在尝试做一个 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

4 回答 4

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 注释,说明它们应该做什么、参数和结果的含义等等。

于 2012-06-16T02:04:02.117 回答
0

我认为这里的问题是每次你输入一些东西并输入你的 switch 语句时,它都会将分数重置为 0。

switch(input5){
             case "Vomiting":
             score = 0;

我认为您需要在第一次输入之前将分数设置为 0,而不是每次输入呕吐时都将其重置。我不能完全按照你的代码,请链接完整的课程。

于 2012-06-15T23:44:28.733 回答
0

尝试这个:

score = getMethod(score, 0);

在java中,原语是“按值传递”的。传递给方法的是value 而不是variable 。更改方法中的值对用于调用该方法的变量没有任何影响。

于 2012-06-15T23:44:31.403 回答
0

创建一个静态全局变量来维护或持久化分数。这将允许您对您的方法进行后续调用并仍然跟踪准确的分数。

所以,创建一个全局变量public static int score = 0;。在您的方法内部,您可以将分数变量初始化为零score = 0;,因为您将使用全局分数变量。

于 2012-06-16T00:11:47.047 回答