数组的概念:一组连续的储存空间,存储多个相同数据类型的值。
特点:
1、类型相同
2、长度固定
3、拥有索引(下标),从0开始,长度为初始值+1
定义数组分为动态初始化和静态初始化
动态初始化:先定义长度,在赋值
String[] names = new String[4]
静态初始化:定义长度的同时直接赋值
//写法一
String[] names = new String[]{"a","b","c","d"};
//写法二
String[] names;
names = new String[]{"a","b","c","d"};
//写法三
//带姓名储存的数组
String[] names = {"小明","小红","小黄","小花"};
数组的添加,修改和删除数据
public class Demo{
public static void main(String[] args){
//定义3个String类型的数据
String name1 = "晓珠";
String name2 = "晓苟";
String name3 = "晓茂";
//定义一个String类型的数组,长度为3
String[] names = new String[3];
//String类型的数组初始值为null,i为索引
for(int i =0,i<names.length,i++){
System.out.println(name[i]);
}
System.out.println(------添加数据------);
//根据索引,把数据存放在数组中
names[0] = "晓珠";
names[1] = "晓苟";
names[2] = "晓茂";
//通过for循环遍历数组
for(int i=0;i<names.length,i++){
System.out.println(name[i]);
}
System.out.println(------修改数据------);
names[0] = "晓婷";
//遍历数组
for(int i=0;i<names.length,i++){
System.out.println(name[i]);
}
System.out.println(------删除数据------);
names[0] = null;
//使用foreach遍历数据:
//for(数据类型 循环值(变量名):数组名){}
for(String name:names) {
System.out.println(name);
}
}
}
随机点名系统:随机点名五个人10次,打印每次被点名的人和每个人被点名的次数
import java.util.Random;
public class Demo{
public static void main(String[] args){
//新建一个数组储存人名
String[] names = {"俊文","斯聪","国峰","志洋"};
//新建一个数组储存点名的次数
int[] counts = new int[names.length];
Random ran = new Random();
int ranNum;
//随机点名10次,i为次数
for(int i = 0;i<10;i++){
//生成随机数0~3
ranNum=ran.nextInt(names.length);
//把随机数当成索引获取名字
System.out.println("被点名的人:"+names[ranNum]);
//被单名的人次数+1
counts[ranNum]++;
}
//循环结束后,打印每次被点名的人和每个人被点的次数,i为索引
for(int i = 0;i<names.length;i++){
System.out.println(names[i]+"\t"+counts[i]+"次");
}
}
}
二维数组经典案例,杨辉三角:
/* 杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
*/
public class Demo03 {
public static void main(String[] args) {
triangle(8);
}
public static void triangle(int num){
//定义一个二维数组
int[][] newNum = new int[num][num];
//i为二维数组的索引,i是行数
for (int i = 0; i < newNum.length ; i++) {
//j为一维数组的索引,j为列数
for (int j = 0; j <i+1 ; j++) {
//判断是否为每行的第一个和最后一个
if(j==0 || i==j){
newNum[i][j]=1;
}else{
newNum[i][j]=newNum[i-1][j]+newNum[i-1][j-1];
}
System.out.print(newNum[i][j]+" ");
}
System.out.println();
}
}
}
可变参数的测试:
public class Demo05 {
public static void main(String[] args) {
//引用不确定会报错
//add(1,2,3,4);
//调用第一个方法
//add(1,new int[]{2,3,4});
//调用第一个方法
int[] nums01 = new int[]{2,3,4};
add(1,nums01);
//调用第二个方法
//add(new int[]{1,2,3,4});
int[] nums02 = new int[]{1,2,3,4};
add(nums02);
}
//可变参数前加相同数据类型
public static void add(int num,int ... nums){
System.out.println("a");
}
//重载
public static void add(int ... nums){
System.out.println("b");
}
//重载
public static void add(String str,int ... nums){
}
//可变参数后加不同数据类型 -- 不可行
/*public static void add(int ... nums,String num){
}*/
//可变参数后加相同数据类型 -- 不可行
/* public static void add(int ... nums,int num){
}*/
数组扩容:
import java.util.Arrays;
// 数组扩容
public class Demo03 {
public static void main(String[] args) {
int[] nums = {1,2,3,4,5,6};
nums = grow(nums);
//索引为7的值赋值为8
nums[7] = 8;
System.out.println(Arrays.toString(nums));
}
//需要返回值且返回值是一个数组
public static int[] grow(int[] nums){
//创建一个新数组,并把数组扩大1.5倍
int[] newNum = new int[(nums.length >> 1 )+nums.length];
//把旧数组的元素存到新数组中
for (int i = 0; i < nums.length; i++) {
newNum[i] = nums[i];
}
return newNum;
}
}