gpt4 book ai didi

java - 当我打印它们时,值不会改变

转载 作者:行者123 更新时间:2023-12-01 21:15:59 26 4
gpt4 key购买 nike

我试图在 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 是一种按值传递语言。传递给方法的任何原始变量都不会更改(您仅传递此变量的值,将为该方法创建一个新的局部变量)。

如何解决?

  1. 从方法返回更改后的值
  2. 在不使用局部变量的情况下对实例变量进行操作
  3. 编写一个保留原语的自定义类

编辑:

当我们开始谈论从一个方法返回多个值时,我们的方法可能构建得并不完全好(例如,打破了单一责任原则)。在这种情况下,我们需要重构我们的方法。考虑具有单一职责的方法(calculateDollarscalculateCentsdisplayCoin)。它将有助于将您的代码分成小的逻辑部分并使它们更加独立。

编辑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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com