如何先更新变量,然后在java中执行其余代码

如何先更新变量,然后在java中执行其余代码,java,android,Java,Android,我正在学习Android应用程序开发,我的代码有一个小问题。在谷歌教程中,我正在使用我们创建的咖啡订购应用程序。我为我的加号和减号按钮做了一些额外的编码,因为我想让它们在更改订购数量的同时更新价格。这很有效,我一按下按钮,杯子的数量和总价就会同时更新 现在我的问题来了。我想输出一个带有“Total:+totalPrice”的字符串,但这不起作用,我找到了原因 public void addCups(View view) { numberOfCups = numberOfCups + 1;

我正在学习Android应用程序开发,我的代码有一个小问题。在谷歌教程中,我正在使用我们创建的咖啡订购应用程序。我为我的加号和减号按钮做了一些额外的编码,因为我想让它们在更改订购数量的同时更新价格。这很有效,我一按下按钮,杯子的数量和总价就会同时更新

现在我的问题来了。我想输出一个带有“Total:+totalPrice”的字符串,但这不起作用,我找到了原因

public void addCups(View view) {
    numberOfCups = numberOfCups + 1;
    display(numberOfCups);
    displayMessage(gBetrag + endPreis);
}
以下是我的全局变量:

int numberOfCups = 0;
int priceOfCup = 5;
String message = "Vielen Dank!";
String gBetrag = "Gesamt: ";
String endPreis = NumberFormat.getCurrencyInstance().format(numberOfCups * priceOfCup);
我在调试模式下运行了代码,发现该方法在更新“numberOfCups”变量之前首先查找“gBetrag”和“endPreis”中的内容。 输出为“Gesamt:0.00€”,因为endPreis是在numberOfCups获得+1之前计算的。如何让java按照编写的顺序执行代码,或者更确切地说,在更新变量后读取它


如果将变量添加到我想使用的每个方法中,我可以解决这个问题,但这只会添加更多代码,我认为这就是为什么要使用全局变量。

每次添加杯子时,您需要计算
endPreis

public void addCups(View view) {
    numberOfCups = numberOfCups + 1;
    calculateTotal();
    display(numberOfCups);
    displayMessage(gBetrag + endPreis);
}

private void calculateTotal() {
    endPreis = NumberFormat.getCurrencyInstance().format(numberOfCups * priceOfCup);
}

我想你的课是这样写的:

public class MyClass {
  int numberOfCups = 0;
  int priceOfCup = 5;
  String message = "Vielen Dank!";
  String gBetrag = "Gesamt: ";
  String endPreis = NumberFormat.getCurrencyInstance().format(numberOfCups * priceOfCup);

  public void addCups(View view) {
      numberOfCups = numberOfCups + 1;
      display(numberOfCups);
      displayMessage(gBetrag + endPreis);
  }
}
下面是代码的执行方式:

  • numberOfCups
    设置为
    0
  • priceofcu
    设置为
    5
  • 设置了
    消息
  • gBetrag
    已设置
  • endPreis
    设置为(
    numberOfCups*priceOfCup
  • 调用
    addCups()
    时,它将显示
    endPreis

  • 如您所见,
    endPreis
    值从未重新计算;)

    如何计算
    endPreis
    ?在哪里?把它添加到问题中。因为在
    addCups
    方法中,您没有计算
    endPreis
    ,您只需要从类字段中获取它。endPreis是一个全局变量(有问题地添加),它使用杯子的数量和每杯的价格来计算总价。然后将总价换算成欧元。是的,我考虑过了!:D(我感到有点自豪)我只是想添加一个更新方法,但对于这样一个简单的问题来说,这可能有点过头了。我添加了更新方法,现在它按照我预期的方式工作。thxIt并不是矫枉过正,全局变量不是函数,这就是我认为您试图将其视为的。如果一个变量是全局变量,它只意味着它的值可以在整个类中访问(或其他类,如果它们是
    public
    ),但该值不会在每次访问时重新计算。这就是函数的用途。但是,如果在显示消息之前有numberOfCups+1,为什么会这样做呢?
    NumberFormat…
    进行计算,将结果转换为字符串,并将该字符串存储在
    endPreis
    中。当您设置
    numberOfCups+1
    时,您没有触发
    NumberFormat
    ,因此
    endPreis
    值永远不会更改。重要的一点是:
    endPreis
    根本没有链接到
    numberOfCups
    !它只存储已经完成的乘法的结果,因此它永远不会更新自身;)@正如米思罗普在这里解释的那样,一台计算机会完全按照你的要求去做,而不会做更多的事情。这里的部分关键是理解代码的执行顺序。此外,您需要了解,更改一个变量不会自动更改以前基于该变量计算的其他变量。您必须按照您希望的确切顺序显式执行这些计算,因此使用变量不会在使用时对其进行更新。好吧,现在一切都有意义了。谢谢你们!