Java基础知识—二维数组
样例代码
package basicLearingJava;
/*
* 2D Array --- 用于计算利率
*/
public class CompoundInterest
{
// 1实操 2看语法 3总结
public static void main(String[] args) {
final double STARTRATE = 10;
final int NRATES = 6; // int 打成了 double
final int NYEARS = 10;
// set interest rates to 10% ... 15%
double[] interestRate = new double[NRATES]; // 注意 Java 数组定义方式
for (int j = 0; j < interestRate.length; j++)
interestRate[j] = (STARTRATE + j) / 100.0;
double[][] balances = new double[NYEARS][NRATES]; // 注意定义方式
// set initial balances to 1000
for (int j = 0; j < balances[0].length; j++) //
balances[0][j] = 1000;
// compute interest for next years
for (int i = 1; i < balances.length; i++) // 错误1
for (int j = 0; j < balances[i].length; j++)
balances[i][j] = balances[i - 1][j] * interestRate[j] + balances[i - 1][j];
// print one row of interest rates --- 打印利率
for (int j = 0; j < interestRate.length; j++)
System.out.printf("%9.0f%%", 100 * interestRate[j]);
System.out.println(); // 重要的换行
// print balance table
for(double[] row : balances)
{
// print table row
for (double b : row)
System.out.printf("%10.2f", b); // 这里printf 打成了 println
System.out.println();
}
}
}
- 初始化方式:
double[][] array2D; // 方式1
Array2D = new double [100][100]; // 方式2
int [][] magicSquare = { // 方式3
{1, 2, 3, 4},
{5, 6, 7, 8}
}
- balances.length 返回的是 NYEARS ,它的第一个下标的个数,即二维数组行数;balances[i].length 返回第 i 行元素个数。要搞清这个!是我的 错误1 在注释中
- 二维数组输出处理方式用了 for each。
for(double[] row : balances)
{
// print table row
for (double b : row)
System.out.printf("%10.2f", b);
System.out.println();
}
聊聊理论
Java语言,本质上没有二维数组。多维数组被解释为 "数组的数组”;
不规则数组
package basicLearingJava;
public class LotteryArray {
public static void main(String[] args) {
// TODO Auto-generated method stub
final int MAX = 10;
// allocate triangular array
int[][] odds = new int [MAX + 1][];
for (int n = 0; n <= MAX; n++)
odds[n] = new int[n + 1]; // 让第 n 行有 n + 1 个元素
// fill triangular array
for (int n = 0; n < odds.length; n++) // 这里并没有用 块 来控制
for (int k = 0; k < odds[n].length; 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();
}
}
}
-
注释处比较重要;
-
可以将行进行交换;
double[] temp = balances[i];
balances[i] = balances[i + 1];
balances[i + 1] = temp;