【问题标题】:How to pass a variable between methods without parameters and arguments如何在没有参数和参数的方法之间传递变量
【发布时间】:2015-11-06 15:55:25
【问题描述】:

我的一个学校项目有点问题。我们应该编写一个 Loan 类来处理与贷款相关的事情,例如返回每月付款和贷款的总付款。我的问题是我对此代码有特定的说明,我绝对不能超出这些说明。 代码如下:

    import java.util.Scanner;
    import java.text.DecimalFormat;
    import java.lang.Math;

    public class Loan
    {
        public double annualInterestRate = 0;
        public int numberOfYears = 0;
        public double loanAmount = 0;

        public Loan()
        {
            annualInterestRate = 0.025;
            numberOfYears = 1;
            loanAmount = 1000;
        }

        public Loan(double interestRate, int numYears, double amount)
        {
            setRate(interestRate);
            setYears(numYears);
            setLoanAmount(amount);
        }

        public void setRate(double interest)
        {
        DecimalFormat percent = new DecimalFormat( "0.0%" );
            if(interest > 25 || interest < 0)
            {
                System.out.println("WARNING: Invalid annual interest rate: " + percent.format(interest) + ".");
                System.out.println("Current value not changed: " + percent.format(annualInterestRate * 100) + ".");
            }
            else
            {
                annualInterestRate = interest;
            }
        }

        public void setYears(int years)
        {
            if(years > 30 || years <= 0)
            {
                System.out.println("WARNING: Invalid number of years: " + years + ".");
                System.out.println("Current value not changed: " + numberOfYears + ".");
            }
            else
            {
                numberOfYears = years;
            }
        }

        public void setLoanAmount(double amnt)
        {
            DecimalFormat loan = new DecimalFormat( "$#,##0.00" );
            if(amnt <= 0)
            {
                System.out.println("WARNING: Invalid loan amount: " + loan.format(amnt) + ".");
                System.out.println("Current value not changed: " + loan.format(amnt) + ".");
            }
            else
            {
                loanAmount = amnt;
            }
        }

        public double getAnnualInterestRate()
        {
            return annualInterestRate;
        }

        public int getNumberOfYears()
        {
            return numberOfYears;
        }

        public double getLoanAmount()
        {
            return loanAmount;
        }

        public double getMonthlyPayment()
        {
            double monthly = annualInterestRate/12;
            double monthlyPayment = (loanAmount * monthly)/1 - (1/(1 + monthly));
            monthlyPayment = Math.pow(monthlyPayment, 12);
            return monthlyPayment;
        }

        public double getTotalPayment()
        {
            double totalPayment = getmonthlyPayment() * 12;
            return totalPayment;
        }

        public String toString()
        {
            DecimalFormat percent = new DecimalFormat( "0.0%" );
            DecimalFormat loan = new DecimalFormat( "$#,##0.00" );

            String interestRate = percent.format(annualInterestRate);
            String numOfYears = Integer.toString(numberOfYears);
            String loanAmnt = loan.format(loanAmount);

            String total = "Annual Interest Rate:\t" + interestRate + "\nNumber of Years:\t\t" + numOfYears + "\nLoan Amount:\t\t\t" + loanAmnt;

            return total;
        }
    }

我的问题在于 getTotalPayment 方法。如果没有我将monthlyPayment 声明为一个字段(如annualInterestRate)或将其传递给getTotalPayment 方法,它就无法访问monthlyPayment 变量。问题是,getTotalPayment 不允许有参数,并且我们不允许有比她指示我们拥有的三个字段更多的字段,也就是您将在代码开头看到的三个字段。 所以,我的问题是:有没有办法让 getTotalPayment 可以访问变量monthlyPayment,而不用让monthlyPayment 成为一个字段或给getTotalPayment 一个参数?

【问题讨论】:

  • 为什么不直接从 getTotalPayment() 调用 getMonthlyPayment() 函数? :)
  • 我刚刚尝试过,因为我没有想到这一点,并且遇到了与使用monthlyPayment 相同的错误;这是错误:找不到符号。
  • 你要加括号吗? -> double totalPayment = getMonthlyPayment() * 12;
  • 你的课看起来很奇怪。为什么所有方法都是静态的?如果你让你的方法无效,就不要返回任何东西: public void setSmtH(int smh) { this.smth = smth; }
  • 另外,从构造函数初始化静态字段是非常非常错误的。请记住,一个类的所有实例共享相同的静态字段。

标签: java class methods mutators


【解决方案1】:

您的getTotalPayment() 方法中有拼写错误。

您尝试做的是调用方法getmonthlyPayment(),而您应该调用getMonthlyPayment()

如果你错过了我回答中的细微差别,当你想要一个大写的“M”时,你有一个小写的“m”。

我不完全确定这是否是您的问题,但这是我的 IDE 告诉我的唯一语法错误。

【讨论】:

    【解决方案2】:

    在您修改后的代码中,您需要大写的M 来调用getMonthlyPayment()

    【讨论】:

    • 不是你的反对者,但可能是你没有格式化你的答案以包含代码格式的方法。另一个原因可能是您的回答太短或没有提供足够的信息。
    • 欢迎第一次发帖,不管是谁!无论如何,在时间戳从几分钟变为几小时之前 - 我希望记录下我在@Luke Melaia 之前 7 分钟回答了这个问题;-)
    • 实际上比 7 分钟早了很多。顺便说一句:欢迎来到 Stack Overflow。为了获得更多声誉,请前往常见问题解答并查看一些好的答案。感受一下这里的一切是如何运作的。关于您的答案,虽然有些不完整,但在技术上是正确的。
    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 2020-11-28
    • 2015-07-11
    • 2021-02-20
    相关资源
    最近更新 更多