一、数组的存储位置
数组是一个引用类型,数据存储在堆里面。
int [] arr = new int[3]
左边:
int : 定义一个int类型的数据
[] : 数据类型是 数组
arr : 数组名
右边:
new : 创建一个数组 分配内存
int : 数据元素的类型为int
[] : 说明是一个数组
3 :说明数据的长度是3
二、for-Each
for(数组中元素的数据类型 变量名 : 数组名){
// 变量名,指是数组中的具体元素
}
1.数组的遍历
// 把数组的每个元素取出来
int[] scores = {1,2,3,4,5};
// 数组名.length属性,作用是获取数组的长度
for(int i=0; i<scores.length;i++){
System.out.println(scores[i]);
}
for-Each方法
int[] scores = {1,2,3,4,5};
for (int item:scores) {
System.out.println(item);
}
2.求最大值
int[] scores = {11,2,3,34,45,56,67,888};
int max= scores[0] ; //用一个变量来存最大值
// 将数组的第2个,到数组 最后,依次与max 进行比较,把大数,放到max
for(int i=1; i< scores.length;i++){
if(max< scores[i]){
max = scores[i];
}
}
System.out.println("最大值为"+max);
3.求平均数
public static void main(String[] args){
double[] scores = {11,22}; //33 /2 = 16.5
// 求平均数
// 总数/ 个数 = 平均数
//1. 求和
double sum = 0;
for(double item:scores){
sum+=item;
}
//2.求平均
double avg = sum/scores.length;
System.out.println(avg);
}
4.产生随机数
语法
Random r = new Random();
r.nextInt(数字) ; // 产生的是 0 - (数字-1)
10 -20 r.nextInt(11) + 10 ;
public static void main(String[] args){
Random r = new Random();
for (int i=0;i<10;i++){
System.out.println(r.nextInt(11) + 10); // 10- 20 // (0-10) +10
}
}
5.猜数字游戏
public static void main(String[] args){
/*
* 思路:
* 1. 产生一个数字(随机数)
* 2. 用户猜 (放到循环里去猜,判断也在循环里 - while )
* 3. 提示: 大了,小了,正确了
* 4. 如果没有正确,
* 继续猜
* */
// 1-100
Random r = new Random();
int num = r.nextInt(100)+1; // 1 -100
Scanner sc = new Scanner(System.in);
int cai ;
while (true){
System.out.println("请输入你猜的数字");
cai = sc.nextInt();
if(cai>num){
System.out.println("大了");
}else if(cai<num){
System.out.println("小了");
}else{
System.out.println("恭喜您,猜对了");
break;
}
}
}
6. 数组逆序
public static void main(String[] args){
// 将数据倒序 , 输入出
// 98,78,566,34,12
int[] scores = {12,34,566,78,89};
System.out.println("原数组");
for(int item:scores){
System.out.print(item+" ");
}
// 数组倒序
// 两个变量的交互,需要定义一个新的变量
// 思路: 第1位和最后一位,进行交换, 第2位和倒数第2位
// 1 2 3 4 5 5/2 = 2
// 5 2 3 4 1
// 5 4 3 2 1
int temp; //临时变量
for(int i = 0; i<scores.length/2;i++)
{
// i scores.length- 1 - i
temp = scores[i];
scores[i] = scores[scores.length-1-i];
scores[scores.length-1-i] = temp;
}
System.out.println("");
System.out.println("倒序操作后的数组");
for(int item:scores){
System.out.print(item+" ");
}
}
7.数组的扩容
思路:
-
创建一个新的数组,长度再旧数组的长度+1
-
将旧数组的值,放到新数组中
-
将新的值,放到新数组的最后一位
扩容 将5添加到最后
int [] arr ={1,9,2,6,3,4};
int [] Temparr= new int [arr.length+1];
int i=0;
for (int item:
arr) {
Temparr[i]=item;
i++;
}
Temparr[arr.length]=5;
arr=Temparr;
for (int a:
arr) {
System.out.println(a);
}
8.数组的缩容
int [] arr ={1,9,2,6,3,4};
int [] arr2=new int[arr.length-1];
int i=0;
for (int item:
arr) {
if (item==2){
continue;
}
arr2[i]=item;
i++;
}
for (int a:
arr2 ) {
System.out.println(a);
}
9.数组的方法
Arrays 专门对数组进行相应的操作
Arrays.toString(arr) : 遍历
Arrays.sort(arr): 数组的排序, 默认升序, 会改变数组中元素的位置
Arrays.copy()
System.arraycopy
Arrays.copy 与 System.arraycopy的区别
二维数组
定义:
数组里的数据元素,又一个一维数组 , 这就是二维数组
申明
int[][] 数组名;
int 数组名[][];
int[] 数组名[];
初始化
int[][] nums = new int[5][2]; // 第一个中括号,相当于外层一维数组长度, 第二中括号表示内层一维数据的长度
int[][] nums = new int[5][]; //内层的一维数据长度可以不写int[][] nums = {{1,2,3},{4,5,6}}; //静态实始化,长度是由系统是计算的 ; 推荐这种简化的形式
int[][] nums = new int[][]{{1,2,3},{4,5,6}};
访问
二维数组名[外层一维所在的下标][内层一维数据的下标];