当前位置: 首页 > 知识库问答 >
问题:

类不会计算它应该计算的内容:对对象数组进行排序?

高玮
2023-03-14

我正在尝试编写一个程序,允许用户创建“贷款”对象并在通过利息等式后测量他们必须支付的总金额。我有两个问题,我已经处理了几个小时,但由于某种原因无法解决。最大的问题是,应该在插入变量后计算贷款总支付额的类,但它总是返回零,我不知道为什么。是语法问题吗?我创建了一个测试贷款类来测试程序,该程序创建了十个具有十个随机时间长度的随机贷款,并且“总计支付”和“每月支付”(依赖于总计支付)始终为零。

第二个问题是,我试图根据贷款的年数对十个随机贷款进行排序,但我无法让它起作用!我尝试了几种排序方法,我包含的是最近的,可能是最愚蠢的哈哈哈,但它是我最近玩的那个。我已经包含了下面所有的代码,有什么想法吗?

贷款类别:(有点长,但重要的是主要贷款类别、总付款和月付款)

public class Loan {

double annualInterestRate = 2.5;
int numberOfYears = 1;
double loanAmount = 1000;
double base;
double exponent;
double totalPay;
String summary;
double monthly;
String[] list = new String[10];
String s;

/**
 * creates default loan with 2.5 annual interest rate 1 year and 1000$
 */
public Loan(){
}



/**
 *       totalPay = amount(1+rate/12)^(year*12)
 * 
 * @param anualInterestRate
 * @param numberOfYears
 * @param loanAmount
 */
public Loan(double anualInterestRate, int numberOfYears, double loanAmount){

    base = (double) ( loanAmount * (1+anualInterestRate/12));
    exponent = (double) (numberOfYears * 12);
    totalPay = (double) Math.pow(base, exponent); 
}   

/**
 * 
 * @return total payment
 */
public double totalPayment(){
    return this.totalPay;
}


/**
 * 
 * @return Monthly Payment
 */
public double monthlyPayment(){
    monthly = (totalPay/12);
    return monthly;
}


}

测试贷款:

import java.util.Random;


public class TestLoan {

public static void main (String[] args){

    Random r = new Random();


    Loan[] list = new Loan[10];


    for (int i = 0; i < 10; i++){
        Loan x = new Loan();
        list[i] = x;
        System.out.println(list[i].toString());
    }

    System.out.println();
    System.out.println();

    for (int i = 0; i < 9; i++){
        list[i].setNumberOfYears(r.nextInt(30));
        if (list[i].getNumberOfYears() > list[i+1].getNumberOfYears())
            list[i] = list[i+1];
        System.out.println(list[i].toString());
        }


}
}

谢谢你的寻找!

编辑删除了不相关的代码


共有1个答案

戚飞虎
2023-03-14

您设置了年数,但从未计算基数、指数或总薪酬。这只会发生在从不调用的构造函数中。

您需要做的是将函数代码移出构造函数并进入数据口径。该构造函数应该用于构造对象。

旧构造函数:

public Loan(double anualInterestRate, int numberOfYears, double loanAmount) {
    base = (double) (loanAmount * (1 + anualInterestRate / 12));
    exponent = (double) (numberOfYears * 12);
    totalPay = (double) Math.pow(base, exponent);
}

更好的方式:

public Loan(double annualInterestRate, int numberOfYears, double loanAmount) {
    this.annualInterestRate = annualInterestRate;
    this.numberOfYears = numberOfYears;
    this.loanAmount = loanAmount;
}

public void calculatePay() {
    base = (double) (loanAmount * (1 + annualInterestRate / 12));
    exponent = (double) (numberOfYears * 12);
    totalPay = (double) Math.pow(base, exponent);
}

此外,您的排序方法也有缺陷。您应该确定贷款的自然顺序是什么,然后实现可比较的界面。

然后可以使用现有的排序库,如下所示:

    for (int i = 0; i < 9; i++) {
        list[i].setNumberOfYears(r.nextInt(30));
        list[i].calculatePay();
    }
    Arrays.sort(list);
    for (Loan loan: list) {
        System.out.println(loan);
    }
 类似资料:
  • 我有个问题。我编写了一个简单的抽象类,尝试对该类的数组列表进行排序,并为compareTo函数but list实现了Comparator接口。sort给出了一个错误。请帮忙。下面是一个代码: 在主要课程中,我有: 这给我一个错误,不会排序列表。什么是问题?我应该在扩展类中扩展或实现一些东西吗?当然,我有2类扩展抽象天线类。

  • 我显示了这个错误,但我不知道为什么: [15:52:26]TypeError:TypeError:undefined不是对象(计算“props.navigationstate.index”)

  • 问题内容: 我有一组建立形状的X和Y点,我需要知道对象是否在其中,该对象的计算是什么? X和Y坐标示例: 我对数学不是很满意:(因此,我希望得到一些支持来理解它的完成方式。 我到目前为止的例子,但似乎并不十分可靠: 问题答案: 您可以从这里开始:http : //en.wikipedia.org/wiki/Point_in_polygon 您可能还会研究JTS拓扑套件。特别是使用此功能。 编辑 :

  • 问题内容: 我有以下JSON数组,我想创建对象表单状态键计数 要计算状态键值并创建以下对象 问题答案: 使用 方法 虽然可以使用 具有相同代码的方法。

  • 我和朋友在讨论是否可以在不排序数组的情况下,使用分治算法计算数组a[1…n]中出现的某个元素k的数量? 我们遇到了一个障碍,如果我们使用二进制搜索,一旦找到元素,它就会停止。有什么想法吗?