数组的定义
数组定义有两种方式
1. int[]arr; 定义了int类型的数组,数组名是arr
2.int arr[];定义了int类型的变量,变量名是arr数组
所以推荐使用第一种
数组的格式初始化
格式初始化就是为数组中的每一个元素分配内存空间并赋值,数组中的每一个数据被称为元素
静态初始化
int[]arr = new int{1,2,3} 可以简化为:int []arr={1,2,3};
静态初始化确定了数组中每个元素的值,而长度则由系统来判断
动态初始化
int[]arr = new int[3]
表示定义了一个数组,他的长度为3,而具体的值没有设定,默认为0
案例数组打乱
首先获取数组中的随机索引
Random r =new Random(); int index = r.nextInt(a.length);
public static void main(String[] args) { int[] a = {1, 15, 6, 8, 3}; Random r =new Random(); int index = r.nextInt(a.length); int m; for(int i=0;i<a.length;i++){ m=a[i]; a[i]=a[index]; a[index]=m; } for (int i=0;i<a.length;i++){ System.out.println(a[i]); } //将得到的数组重新遍历 }
在数组中int []arr=new int[3],索引不能越界
且arr不能等于null否则会造成空指针异常,无法指向堆内存的数组
用for的嵌套打乱二维数组
public static void main(String[] args) { int[][] a ={{1,2,3},{4,6,9},{5,7,8}}; Random r =new Random(); for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { int x = r.nextInt(a.length); int y =r.nextInt(a[x].length); int vemp = a[i][j]; a[i][j] =a[x][y]; a[x][y]=vemp; } } for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { System.out.println(a[i][j]); } }
用二维数组完成4x4的GUI拼图,并且打乱顺序
public class PinTu { public static void main(String[] args) { JFrame jf =new JFrame("美女拼图"); jf.setSize(380,400); jf.setAlwaysOnTop(true); jf.setLocationRelativeTo(null); jf.setDefaultCloseOperation(3); jf.setLayout(null);//一定要加这行去掉窗体的默认布局,否则图片一直居中 int[][] a ={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; Random r =new Random(); for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { int x = r.nextInt(a.length); int y =r.nextInt(a[x].length); int vemp = a[i][j]; a[i][j]=a[x][y]; a[x][y]=vemp; } } for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { JLabel jLabel =new JLabel(new ImageIcon("test\\images\\"+a[i][j]+".png")); jLabel.setBounds(j*90,i*90,90,90); jf.add(jLabel); } } jf.setVisible(true);// 加上这行代码才能正确显示图片 } }