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

标签 java eclipse methods program-entry-point

我试图在 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/

相关文章:

java - Android中没有api键的天气应用程序

java - 从文本文件中读取,然后将值赋给数组

java - 在 Kotlin 项目中使用 @Value 注释时出现编译器警告

java - Eclipse Java 调试器 : easier way see values in the debugger that are in nested collections?

Java:访问静态方法

java - 需要 Spring Boot CLIENT_PLUGIN_AUTH

Android SDK 内容加载器遇到问题。 parseSdkContent 失败

java - 为什么Eclipse为什么即使没有错误也以多种方式指出错误?

python - 如何判断一个方法何时被第一次调用

java - 无法访问导入的类方法