使用二维和一维数组计算利率
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 中的名称以大写开头。
我是 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 中的名称以大写开头。