1. 一维数组的初始化和拷贝
package com.java.basis.array;
import java.util.Arrays;
/**
* 1. 初始化数组
* 2. 数组的拷贝,扩展数组的长度
* @author 物业小学徒
*
*/
public class ArrayTest {
public static void main(String[] args) {
//1. 初始化数组
int[] smallPrimes = {2,3,4,5,7,11,13};
//2.匿名重新初始化数组
smallPrimes = new int[] {13,15,17,18,21};
//3.数组拷贝
int[] luckyNumbers = smallPrimes;
smallPrimes[4] = 23; // 这个时候luckyNumbers=smallPrimes,luckyNumbers[4]也会随之改变
System.out.println(Arrays.toString(luckyNumbers));
System.out.println(Arrays.toString(smallPrimes));
//4. 将一个数组中的值全部拷贝到另一个数组中
int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers, luckyNumbers.length);
System.out.println(Arrays.toString(copiedLuckyNumbers));
// 5. 用来增加新数组的长度
luckyNumbers = Arrays.copyOf(luckyNumbers, 2 * luckyNumbers.length);
System.out.println(Arrays.toString(luckyNumbers));
// 6. 命令行参数 执行: java ArrayTest -g cruel world 这个时候
// args[0]: "-g" args[1]:"cruel" args[2]:"world"
}
}
2. 数组的排序和Math方法的使用以及Arrays
package com.java.basis.array;
import java.util.Arrays;
import java.util.Scanner;
/**
* 1. 数组的排序
* 2. Arrays的其他方法见API
*
* @author 物业小学徒
*
*/
public class LotteryDrawing {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner in = new Scanner(System.in);
System.out.println("How many numbers do you need to draw?");
int k = in.nextInt();
System.out.println("what is the highest number you can draw?");
int n = in.nextInt();
// fill an array with numbers 1,2,3,4,...n
int[] numbers = new int[n];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = i + 1;
}
// draw k numbers and put them into a second array
int[] result = new int[k];
for (int i = 0; i < result.length; i++) {
// make a random index between 0 and n-1
int r = (int) (Math.random() * n);
// pick the element at the random location
result[i] = numbers[r];
// move then last element into the random location
numbers[r] = numbers[n-1];
n--;
}
// print the sorted array
Arrays.sort(result);
for(int r:result) {
System.out.println(r);
}
}
}
3. 二维数组的初始化和使用
package com.java.basis.array;
import java.util.Arrays;
/**
* 1. 多维数组
* 2. 多维数组的初始化
* @author 物业小学徒
*
*/
public class CompoundInterest {
public static void main(String[] args) {
// 数组的初始化
int[][] array = new int[][] {
{1,2,3,4,5},
{6,7,8,9,0}
};
System.out.println(array[0][1]);
System.out.println(Arrays.deepToString(array));
final double STARTRATE = 10;
final int NRATES = 6;
final int NYEARS = 10;
double[] interestRate = new double[NRATES];
for(int j=0;j<interestRate.length;j++) {
interestRate[j] = (STARTRATE + j)/100.0;
}
double[][] balances = new double[NYEARS][NRATES];
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++) {
// get last year from previous row
double oldBalance = balances[i-1][j];
// compute interest
double interest = oldBalance * interestRate[j];
// compute this's year balance
balances[i][j] = oldBalance + interest;
}
}
// print
for(int j=0;j<interestRate.length;j++) {
System.out.printf("%9.0f%%",100 * interestRate[j]);
}
System.out.println();
// print balance
for(double[] row: balances) {
for(double b:row) {
System.out.printf("%10.2f",b);
}
System.out.println();
}
}
}
4. 不规则数组
package com.java.basis.array;
/**
* 1. 不规则数组
*
* @author 物业小学徒
*
*/
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++) {
int lotteryOdds = 1;
// compute
// compute binomial coefficient n*(n-1)*(n-2)*...*(n-k+1)/1*2*3*...*k
for (int i = 1; i <= k; i++) {
lotteryOdds = lotteryOdds * (n - i + 1) / i;
}
odds[n][k] = lotteryOdds;
}
}
// print
for (int[] row : odds) {
for (int ood : row) {
System.out.printf("%4d",ood);
}
System.out.println();
}
}
}