如何先更新变量,然后在java中执行其余代码
我正在学习Android应用程序开发,我的代码有一个小问题。在谷歌教程中,我正在使用我们创建的咖啡订购应用程序。我为我的加号和减号按钮做了一些额外的编码,因为我想让它们在更改订购数量的同时更新价格。这很有效,我一按下按钮,杯子的数量和总价就会同时更新 现在我的问题来了。我想输出一个带有“Total:+totalPrice”的字符串,但这不起作用,我找到了原因如何先更新变量,然后在java中执行其余代码,java,android,Java,Android,我正在学习Android应用程序开发,我的代码有一个小问题。在谷歌教程中,我正在使用我们创建的咖啡订购应用程序。我为我的加号和减号按钮做了一些额外的编码,因为我想让它们在更改订购数量的同时更新价格。这很有效,我一按下按钮,杯子的数量和总价就会同时更新 现在我的问题来了。我想输出一个带有“Total:+totalPrice”的字符串,但这不起作用,我找到了原因 public void addCups(View view) { numberOfCups = numberOfCups + 1;
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
!它只存储已经完成的乘法的结果,因此它永远不会更新自身;)@正如米思罗普在这里解释的那样,一台计算机会完全按照你的要求去做,而不会做更多的事情。这里的部分关键是理解代码的执行顺序。此外,您需要了解,更改一个变量不会自动更改以前基于该变量计算的其他变量。您必须按照您希望的确切顺序显式执行这些计算,因此使用变量不会在使用时对其进行更新。好吧,现在一切都有意义了。谢谢你们!