六、多维数组
Java 实际上没有多维数组, 只有一维数组 。 多维数组被解释为 “ 数组的数组 。
1.需求
需要建立一个数值表 , 用来显示在不同利率下投资 $ 10 , 000 会增长多少, 利息每年兑现 , 而且又被用于投资
2.演示
package com.eleven.array;
/**
* 建立一个数值表,用来显示在不同利率下投资10000会增长多少,利息每年兑现,而且可以被用于投资
*
* @author sywangu
*
*/
public class DoubleArrays {
public static void main(String[] args) {
final double STARTRATE = 10;
// YEARS:年
final int YEARS = 10;
// RATES:利率
final int RATES = 6;
/**
* 一维数组存储利率
*
*/
// 将利率设置为10%-15%
double[] interestRate = new double[RATES];
for (int j = 0; j < interestRate.length; j++) {
interestRate[j] = (STARTRATE + j) / 100;
}
/**
* 二维数组存储余额
*/
double[][] balances = new double[YEARS][RATES];
// 将初始余额设置为10000
for (int j = 0; j < balances[0].length; j++) {
balances[0][j] = 10000;
}
// 计算未来几年的利息
for (int i = 1; i < balances.length; i++) {
for(int j=0;j<balances[i].length;j++) {
// 从上一行中获取去年的余额
double oldBalance = balances[i - 1][j];
// 计算利息
double interest = oldBalance * interestRate[j];
// 计算今年的余额
balances[i][j] = oldBalance + interest;
}
}
// 打印利率
for (int j = 0; j < interestRate.length; j++) {
System.out.printf("%9.0f%%", 100 * interestRate[j]);
}
System.out.println();
// 打印余额表
for (double[] row : balances) {
// 打印表格行
for (double b : row) {
System.out.printf("%10.2f", b);
}
System.out.println();
}
}
}
3.输出
10% 11% 12% 13% 14% 15%
10000.00 10000.00 10000.00 10000.00 10000.00 10000.00
11000.00 11100.00 11200.00 11300.00 11400.00 11500.00
12100.00 12321.00 12544.00 12769.00 12996.00 13225.00
13310.00 13676.31 14049.28 14428.97 14815.44 15208.75
14641.00 15180.70 15735.19 16304.74 16889.60 17490.06
16105.10 16850.58 17623.42 18424.35 19254.15 20113.57
17715.61 18704.15 19738.23 20819.52 21949.73 23130.61
19487.17 20761.60 22106.81 23526.05 25022.69 26600.20
21435.89 23045.38 24759.63 26584.44 28525.86 30590.23
23579.48 25580.37 27730.79 30040.42 32519.49 35178.76
七、不规则数组
1.需求
利用不规则数组打印出一个三角形
2.演示
package com.eleven.array;
public class LotteryArray {
public static void main(String[] args) {
final int NMAX = 10;
// 分配三角形数组
int[][] odds = new int[NMAX + 1][];
for (int n = 0; n <= NMAX; n++) {
odds[n] = new int[n + 1];
}
// 填充三角形阵列
for (int n = 0; n < odds.length; n++) {
for (int k = 0; k < odds[n].length; k++) {
/**
* 计算二项式系数: n * ( n - l ) * ( n - 2 ) * . . . * ( n - k + l) / ( l * 2 * 3 * . . . * k )
*
*/
int lotteryOdds = 1;
for (int i = 1; i <= k; i++) {
lotteryOdds = lotteryOdds * (n - i + 1) / i;
}
odds[n][k] = lotteryOdds;
}
}
// 打印三角形矩阵
for (int[] row : odds) {
for (int odd : row) {
System.out.printf("%4d", odd);
}
System.out.println();
}
}
}
3.输出
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1