【问题标题】:Accumulated value -java - simple question累计值 -java - 简单问题
【发布时间】:2011-06-27 00:55:33
【问题描述】:

一个简单的问题。当一个条件得到验证时,我需要对一个值求和,所以我有这个代码

private int sum;
private int sum1;
private int sum2;
private int sum3;

public int pontuationOfplayers() {
    if (winner() == 0) {
        return sum += 20;
    }
    else if (winner()==1) {
        return sum1 += 20;
    }
    else if (winner() ==2) {
        return sum2 += 20;
}
    else
        return sum3 += 20;
    }

我遇到的问题是,当方法被调用时,它总是从 0 开始,所以结果必须是 20、40、60,但是因为新的初始化总是 20。

我该如何解决?比如存储变量的值

谢谢!

脚本:编辑

【问题讨论】:

  • return sum += value0 += 20;(以及else 的变体)非常聪明。请注意,我是一名 Python 程序员,我们不认为“聪明”是一种恭维;)阅读:最好把它写得不那么棘手,更容易理解。
  • 如果您不熟悉范围(重要概念),请查看以下链接:janeg.ca/scjp/declarations/scope.htmltechrepublic.com/article/intro-to-oop-java-scope-rules/5035301
  • 我不关注编辑 - 它们现在不会重置为 0,所以你能澄清问题所在吗?在更一般的说明中,您似乎希望拥有一个类的四个实例(可能在数组中)并在与获胜者编号匹配的数组元素上调用方法。
  • 是的,你是对的,但问题是我是否需要四个玩家的四个变量,但我认为是的
  • 是的,您需要四个变量,但您可能需要考虑为此使用arrays,因为您可以通过数字而不是大块 if 语句来访问它们。

标签: java variables store


【解决方案1】:

您可能想将 sum 设为 class member,例如:

private int sum = 0;

public int pontuationOfplayers() {
    if (winner() == 0) {
        System.out.println("aqui");
        int value0 = 0;
        return sum += value0+=20;
    }

    else {
        System.out.println("aquiii");
        int value3 = 0;
        return sum += value3+=20;
    }
}

根据您的更新,我建议这样做:

private int sum[] = new int[4];

public int pontuationOfplayers() {
    // (assuming winner() returns 3 for the final case)
    return sum[winner()] += 20;
}

【讨论】:

  • 已编辑后:可以简化它还是做不同的事情?
  • 由于您返回总和,因此您还可以在调用函数时将现有总和传递给函数,但从我在这里看到的情况来看,这看起来确实像一个您希望总和为的示例会员。
  • @Fei - 我已经更新了答案以显示现在也可以简化它。
【解决方案2】:

sum 应该是该类的成员并因此被定义

private int sum = 0;

在类内(但在方法外)。然后它保存在类的实例中,在该实例的生命周期内存在,并且可以通过类中的方法进行修改。

您当前定义的内容仅在方法调用的生命周期内存在,并且在您退出该方法后立即超出范围。

【讨论】:

  • 噢!几英里以外。已更正。谢谢。
【解决方案3】:

将 sum 作为类的实例变量。目前它是一个局部变量,因此每次方法调用都会对其进行初始化。

【讨论】:

    【解决方案4】:

    如果该方法被多次调用并且您想保持总和,则需要在此方法之外创建和存储总和值。将其存储在类变量或调用 pontuationOfplayers() 方法的方法中的局部变量中。

    【讨论】:

      【解决方案5】:

      尽管其他答案解决了您的问题,但它们并没有解决造成问题的原因:您才刚刚开始学习编程。

      阅读有关 Java、Java 类和 Java OOP(面向对象编程)的初学者教程。例如,您可以从这个问题开始:https://stackoverflow.com/questions/1168919/java-tutorials-for-beginning-programmer

      编码愉快!

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多