我试图在 main 中调用我的方法,但是在输入我的美元和美分后,当我打印它们时,这些值不会改变
import java.text.DecimalFormat;
import java.util.Scanner;
public class ChangeMachine {
public static void main(String[] args) {
System.out.println("Change is good");
int dollars = 0;
int cents = 0;
int toonie = dollars/2;
int loonie = dollars%2;
int quarter = cents/25;
int dime = (cents%25)/10;
int nickel = ((cents%25)%10)/5;
ChangeMachine.getAmountFromUser(dollars, cents);
ChangeMachine.calculateCoins(dollars, cents);
ChangeMachine.displayInvoice(dollars, cents, toonie, loonie, quarter, dime, nickel);
}
美元和美分的输入方法 在这里我可以输入金额,但当我尝试显示它时它不会出现
public static void getAmountFromUser(int dollars, int cents) {
Scanner input = new Scanner(System.in);
System.out.print("How many dollars? ");
dollars = input.nextInt();
System.out.print("How many cents? ");
cents = input.nextInt();
System.out.println();
input.close();
}
金币计算方法
public static void calculateCoins (int dollars, int cents){
DecimalFormat df = new DecimalFormat("#0.00");
double amount = dollars + cents/100.0;
System.out.println("$"+df.format(amount)+" requires:");
//-----Bonus-----
dollars=dollars+(cents+2)/100;
cents=(cents+2)%100;
//---------------
}
显示所需硬币的方法
public static void displayInvoice (int dollars, int cents, int toonie, int loonie, int quarter, int dime, int nickel){
System.out.println(toonie+" Toonies");
System.out.println(loonie+" Loonies");
System.out.println(quarter+" Quarters");
System.out.println(dime+" Dimes");
System.out.println(nickel+" Nickels");
}
}
最佳答案
... the values don't change when I print them
是的,它们不应该更改,因为 Java 是一种按值传递语言。传递给方法的任何原始变量都不会更改(您仅传递此变量的值,将为该方法创建一个新的局部变量)。
如何解决?
- 从方法返回更改后的值
- 在不使用局部变量的情况下对实例变量进行操作
- 编写一个保留原语的自定义类
编辑:
当我们开始谈论从一个方法返回多个值时,我们的方法可能构建得并不完全好(例如,打破了单一责任原则)。在这种情况下,我们需要重构我们的方法。考虑具有单一职责的方法(calculateDollars
、calculateCents
、displayCoin
)。它将有助于将您的代码分成小的逻辑部分并使它们更加独立。
编辑2:
现在您与程序开头定义的变量绑定(bind)在一起。反过来,它们与此时的变量值绑定(bind)。看看如何纠正这个问题:
public int getLoonie(int dollars) {
return dollars % 2;
}
更好吗?让我们在 displayInvoice
中调用它:
System.out.println(getLoonie(dollars) + " Loonies");
或者更好
System.out.println(getLoonie(userCash.getDollars()) + " Loonies");
关于java - 当我打印它们时,值不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40076246/