使用二维和一维数组计算利率

Calculate interest rate using 2D and 1D arrays

我是 Java 的新手,我应该计算 10 年内 1000 欧元的利率变化,增长率为 (3%, 4%, 5%, 6%, 7%) .我在弄清楚如何在两个数组之间进行计算时遇到了很多麻烦。真正的困难是将 1000 欧元放在二维数组(0 年)的第一行 [0] 中,然后在数组的下一行添加每年的汇率。这是我之前能够做到的,但现在我完全卡住了:

public class zinsenEntwicklung {
    /**
     * @param args
     */
    public static void main(String[] args) {
        final int N1 = 11;
        final int N2 = 5;
        double anfang = 1000;
        double zinsenTable[] = {0.03, 0.04, 0.05, 0.06, 0.07};
        double b[][] = new double[N1][N2];
        System.out.println("Jahr");
        for (int i = 0; i < 11; i++) {
            System.out.print(i + "\t");
            for (int j = 0; j < zinsenTable.length; j++) {
                for (int k = 0; k < i; k++) {
                    b[i][j] = (anfang * zinsenTable[j]) + anfang;
                }
                System.out.print(b[i][j] + "\t");
            }
            System.out.print("\n");
        }
    }
}

我应该得到什么:


Jahr   3%        4%        5%         6%       7%
0   1.000,00  1.000,00  1.000,00  1.000,00  1.000,00 
1   1.030,00  1.040,00  1.050,00  1.060,00  1.070,00
2   1.060,90  1.081,60  1.102,50  1.123,60  1.144,90
...
10  1.343,92  1.480,24  1.628,89  1.790,85  1.967,15

我得到了什么:

Jahr
0   0.0 0.0 0.0 0.0 0.0 
1   1030.0  1040.0  1050.0  1060.0  1070.0  
2   1030.0  1040.0  1050.0  1060.0  1070.0  
3   1030.0  1040.0  1050.0  1060.0  1070.0  
4   1030.0  1040.0  1050.0  1060.0  1070.0  
5   1030.0  1040.0  1050.0  1060.0  1070.0  
6   1030.0  1040.0  1050.0  1060.0  1070.0  
7   1030.0  1040.0  1050.0  1060.0  1070.0  
8   1030.0  1040.0  1050.0  1060.0  1070.0  
9   1030.0  1040.0  1050.0  1060.0  1070.0  
10  1030.0  1040.0  1050.0  1060.0  1070.0  

对于我做错的每一个建议,我将非常感激。

在您的代码中,您总是乘以相同的值:

b[i][j] = (anfang * zinsenTable[j]) + anfang;

这就是为什么你在每一行都得到相同的值,你需要做的是将矩阵的第一行设置为 1000(无论 anfang 是什么意思),然后根据前一行计算即将到来的值.

像这样:

for (int i = 0; i < N1; i++) {
    System.out.print(i + "\t");
    for (int j = 0; j < N2; j++) {
        if (i == 0) {
            b[i][j] = anfang;
        } else {
            b[i][j] = (b[i - 1][j] * zinsenTable[j]) + b[i - 1][j];
        }
        System.out.print(b[i][j] + "\t");
    }
    System.out.print("\n");
}

请注意第一个 运行 所有行如何初始化为 anfang

if (i == 0) {
    b[i][j] = anfang;
}

然后后面的所有行都是根据上一行*百分比计算的

b[i][j] = (b[i - 1][j] * zinsenTable[j]) + b[i - 1][j];

只需 运行ning 这段代码,你会看到显示了很多小数位,如果你想将其限制为 2(如你的示例),你可以使用 System.out.printf

System.out.printf("%.2f" + "\t", b[i][j]);

附加提示:

您正在使用 Double 计算货币,由于浮点精度,这是一种已知的不良做法。接受的方法是使用 BigDecimal

您需要将利息加到去年的价值上。还有我在第一年加了安防值

public class ZinsenEntwicklung {
    /**
     * @param args
     */
    public static void main(String[] args) {
        final int N1 = 11;
        final int N2 = 5;
        double anfang = 1000;
        double zinsenTable[] = {0.03, 0.04, 0.05, 0.06, 0.07};
        double b[][] = new double[N1][N2];
        for (int i = 0; i < b[0].length; i++) {
            b[0][i] = anfang;
        }
        System.out.println("Jahr");
        for (int i = 1; i < 11; i++) {
            System.out.print(i + "\t");
            for (int j = 0; j < zinsenTable.length; j++) {
                for (int k = 0; k < i; k++) {
                    b[i][j] = (b[i - 1][j] * zinsenTable[j]) + b[i - 1][j];
                }
                System.out.print(b[i][j] + "\t");
            }
            System.out.print("\n");
        }
    }
}

运行 这给了我以下输出:

Jahr
1       1030.0  1040.0  1050.0  1060.0  1070.0
2       1060.9  1081.6  1102.5  1123.6  1144.9
3       1092.727        1124.8639999999998      1157.625        1191.0159999999998      1225.0430000000001
4       1125.50881      1169.85856      1215.50625      1262.4769599999997      1310.79601
5       1159.2740743    1216.6529024    1276.2815624999998      1338.2255775999997      1402.5517307
6       1194.052296529  1265.319018496  1340.0956406249998      1418.5191122559997      1500.730351849
7       1229.87386542487        1315.93177923584        1407.1004226562497      1503.6302589913598      1605.78147647843
8       1266.770081387616       1368.5690504052736      1477.4554437890622      1593.8480745308414      1718.18617983192
9       1304.7731838292445      1423.3118124214845      1551.3282159785153      1689.478959002692       1838.4592124201545
10      1343.9163793441219      1480.244284918344       1628.894626777441       1790.8476965428533      1967.1513572895653

我希望你使用格式化的字符串作为输出,看起来不错,而且你不会有很多小数位。

顺便说一句。 class java 中的名称以大写开头。