概念:Java语言中的数组是用来存储固定大小的同类型元素。
方式一:
数据类型[] 数组变量名字 = {值1, 值2, 值3,......}; 或者 数据类型 数组变量名字 []= {值1, 值2, 值3,......}; 实例: int[] arr = {1, 2, 3, 5};
方式二:
数据类型[] 数组变量名字 = new 数据类型[容量]; 只是确定了数组的容量,但是没有赋值 实例: int[] arr = new int[4];
方式三:
数据类型[] 数组变量名字 = new 数据类型[]{值1, 值2, 值3,.....}; 是第一种的简写情况 实例: int[] arr = new int[]{1, 2, 3, 5};
案例:
public class Demo1 { public static void main(String[] args) { //使用第一种方式声明数组 //声明数组并赋值,这个数组里面存了三个值 int[] arr = {12, 56, 89}; float f1[] = {34.2f, 89.78f, 76.345f}; char[] ch1 = {'中', 'a', '2'}; boolean[] b1 = {false, true, false}; String[] strs = {"学虎", "腾飞", "狗蛋"}; //使用第二种声明方式 //声明的这个数组的容量是3,就意味着可以存放3个数据 //仅仅是声明了一个容器而已。里面还没有放值,但是会存放默认的值 //如果是int 默认值就是0 [0, 0, 0] int[] arr1 = new int[3]; boolean[] b2 = new boolean[2];//[false,false] String[] strs1 = new String[3]; //[null, null, null] //第三种写法 int[] arr2 = new int[] {34, 56, 7,8}; } }
1.2 对第二种声明方式进行赋值
import java.util.Arrays; public class Demo2 { public static void main(String[] args) { int[] arr = new int[3];//只能存3个元素 //[0, 0, 0] //对空的容器进行赋值 arr[0] = 12;//[12, 0,0] 将12赋值给下标为0的位置 arr[1] = 13;//[12, 13, 0] //arr[2] = 14;//[12, 13, 14] //数组下标越界的 //arr[3] = 78; //打印一下看看结果 System.out.println(arr);//打印的是一个内存地址 //内存地址对程序友好不?不优化,看不出来你的数据是个啥 //咋办?有一个超纲的东西可以将内存地址转为字符串 System.out.println(Arrays.toString(arr)); //对一个String类型的数组进行赋值 String[] strs1 = new String[4]; strs1[0] = "老邢"; strs1[1] = "骚磊"; strs1[3] = "老万"; System.out.println(strs1); System.out.println(Arrays.toString(strs1)); //对一个char 类型数组进行赋值 //但是唯独char不需要toString char[] ch1 = new char[4]; ch1[0] = 97; ch1[1] = 'z'; ch1[3] = 'x'; System.out.println(ch1); } }
1.3 对数组进行取值(利用for循环)
public class Demo3 { public static void main(String[] args) { int[] arr = {12, 78, 13, 89, 100,200}; System.out.println(arr[0]);//下标为0的位置上的值 System.out.println(arr[1]); System.out.println(arr[2]); System.out.println(arr[3]); System.out.println("========="); //发现一个特点,下标是有规律的,循环是专门出来重复或者有规律的 for (int i = 0; i < 4; i++) { System.out.println(arr[i]); } System.out.println("-----------"); //arr.length arr的长度 【重点】 System.out.println(arr.length);//6 for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }
1.4 二维数组【了解】
import java.util.Arrays; public class Demo5 { public static void main(String[] args) { //[1,2,3,4] //二维数组 行 列 //[[1 , 2, 3], // [2, 4 , 5]] //int[] arr = new int[3]; int[][] arr = new int[2][3];//总共6个 arr[0][0] = 1; arr[0][1] = 2; arr[0][2] = 3; arr[1][0] = 2; arr[1][1] = 4; arr[1][2] = 5; System.out.println(arr); System.out.println(Arrays.toString(arr)); //取值 使用循环 for (int i = 0; i < 2; i++) {//行 for (int j = 0; j < 3; j++) { System.out.println(arr[i][j]); } } } }
ps:想挑战一下的话可以做一下杨辉三角
方法的参数可以是八大基本数据类型和String,数据也可以作为方法的参数
语法格式
public static void 方法名字(数据类型[] 形参) { }
import java.util.Arrays; import java.util.Scanner; public class Demo6 { public static void main(String[] args) { // int[] arr = {1,2,3,4}; // printArr(arr); //声明空的数组,然后向里面存值 int[] arr = new int[5];//1.声明了一个空的数组 add(arr);//2.对这个空的数组赋值 //代码走到这一步,arr这个数组有值了没? System.out.println(Arrays.toString(arr));//3.打印这数组有哪些数据 } //遍历一个数组 打印数据 public static void printArr (int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } //使用方法对一个空的数组进行赋值 /** * * @param arr 是一个空的数组, 对空的数组进行赋值 */ public static void add (int[] arr) { Scanner scanner = new Scanner(System.in); for (int i = 0; i < arr.length; i++) { System.out.println("请输入第" + (i + 1) + "数"); int i1 = scanner.nextInt(); arr[i] = i1; } } }
public static 数据类型 方法名字 () { }
八大基本数据类型和String都可以当成一个方法的返回值,数组也可以
import java.util.Arrays; public class Demo7 { public static void main(String[] args) { int[] arr = reverse(); System.out.println(Arrays.toString(arr)); } //需求:将一个数组[1,2,3,4]转为[4,3,2,1] /** * * * @return */ public static int[] reverse () { int[] arr = {1,2,3,4};//原数组 //定义一个空的数组 用来接收反转以后的数据 int[] arr1 = new int[arr.length]; //表达式1 :int i = 0, j = 3 //初始话条件 有两个 //表达式2: i < arr1.length //表达式3:i++, j-- 循环条件 for (int i = 0, j = arr.length - 1; i < arr1.length; i++, j--) { arr1[j] = arr[i]; //arr=[1,2,3,4] //arr1=[0,0,0,0] // arr1[3] = arr[0];//arr1[0,0,0,1] // arr1[2] = arr[1];//arr1[0,0,2,1] // arr1[1] = arr[2];//arr1[0,3,2,1] // arr1[0] = arr[3];//arr1[4,3,2,1] } return arr1; } }
数组存储的两个内存:堆内存 和 栈内存
内存区域的名字 | 作用 |
---|---|
寄存器 | 给CPU使用的,和开发没有关系 |
本地方法栈 | JVM虚拟机操作咱们的电脑的系统的时候,才会使用 |
方法区 | 存储和运行的class文件 |
堆区 | 存储的是对象或者数组, 凡是new出来的都存在堆区 |
方法栈 | 方法运行的时候使用的内存,比如main方法会进入到方法栈区 |
栈:存储的是八大基本数据类型的数据
int a = 20; 这个存在了栈区
存储的是对象的引用 scanner 就是一个对象的等号的左边的
Scanner scanner = new Scanner(System.in);
堆区:
凡是new的 都存在堆区
int[] arr = new int[5];
arr存在了栈区 new int[5];存在了堆区
Scanner scanner = new Scanner(System.in);
scanner 存在了栈区, new Scanner(System.in); 在堆区
1.需求:定义一个方法,找出一个int数组中的最大值的索引下标
[3,1,2,7,6]=> 最大值的索引下标是3
public class Demo8 { public static void main(String[] args) { int[] arr = {3, 2, 6, 1, 7}; //找出一个int数组中最大值的索引下标 int maxIndex = 0;//用来接收最大值的下标的 /** * i=0 0<4 true arr[0]
for (int i = 0; i < arr.length; i++) { if (arr[maxIndex] < arr[i]) { maxIndex = i; } } System.out.println(maxIndex); } } 2.需求:定义一个方法,找出int数组中,最小值的索引下标
public class Demo2 { public static void main(String[] args) { minIndexOfArrays(); } public static void minIndexOfArrays() { int[] arr = {1,2,23,5,6,7,8}; int minIndex = 0; for(int i = 0; i < arr.length; i++) { if(arr[minIndex] > arr[i]) { minIndex = i; } } System.out.println(minIndex); } }
3.需求:定义一个方法,在指定的int数组中找出指定的数据第一个的下标
例如:[1,2,8,4,5,78,7,8,9] 8的下标import java.util.Arrays; import java.util.Scanner; public class Demo3 { public static void main(String[] args) { //从数组中查找一个数 findNum(); //findNumToNewArrays(); } public static void findNum() { int[] arr = {1,2,8,4,5,7,8,7,8,9}; int index = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入你想查找的数:"); int b = scanner.nextInt(); for(int i = 0; i < arr.length; i++) { if(arr[i]==b) { index=i; break; } } System.out.println("该数的下标为"+index); } public static void findNumToNewArrays() { int[] arr = {1,2,8,4,5,7,8,7,8,9}; Scanner scanner = new Scanner(System.in); System.out.print("请输入你想查找的数:"); int b = scanner.nextInt(); int j = 0; for(int i = 0; i < arr.length; i++) { if(arr[i] == b) { j++; } } int[] arr2 = new int[j]; for(int i = 0,k = 0 ; i < arr.length;i++) { if(arr[i] == b) { arr2[k] = i; k++; } } System.out.println(Arrays.toString(arr2)); } }
4.在一个数组中,找出所有的指定数据的下标位置 【难】
找出所有的下标存到新数组中
例如:[1,2,8,4,5,7,8,7,8,9] 8的下标为 [2,6]import java.util.Arrays; import java.util.Scanner; public class Demo3 { public static void main(String[] args) { //从数组中查找一个数 //findNum(); findNumToNewArrays(); } public static void findNum() { int[] arr = {1,2,8,4,5,7,8,7,8,9}; int index = 0; Scanner scanner = new Scanner(System.in); System.out.print("请输入你想查找的数:"); int b = scanner.nextInt(); for(int i = 0; i < arr.length; i++) { if(arr[i]==b) { index=i; break; } } System.out.println("该数的下标为"+index); } public static void findNumToNewArrays() { int[] arr = {1,2,8,4,5,7,8,7,8,9}; Scanner scanner = new Scanner(System.in); System.out.print("请输入你想查找的数:"); int b = scanner.nextInt(); int j = 0; for(int i = 0; i < arr.length; i++) { if(arr[i] == b) { j++; } } int[] arr2 = new int[j]; for(int i = 0,k = 0 ; i < arr.length;i++) { if(arr[i] == b) { arr2[k] = i; k++; } } System.out.println(Arrays.toString(arr2)); } }
- 完成一个方法,替换掉数组中所有元素为0的元素,替换为指定元素 [1,2,3,0,0,0]
import java.util.Arrays; import java.util.Scanner; public class Demo4 { public static void main(String[] args) { replace0(); } public static void replace0() { int[] arr1 = {1,2,3,0,0,0}; Scanner scanner = new Scanner(System.in); for(int i = 0; i < arr1.length; i++) { if(arr1[i] == 0) { System.out.print("请输入你要更改的数据:"); arr1[i] = scanner.nextInt(); } } System.out.println("替换后的数组为:"+Arrays.toString(arr1)); } }
6.完成一个方法,删除指定下标的元素,要求从删除位置开始,之后的元素整体前移。【难】
例如:[1,2,3,4,5,6,7]=>[1,2,4,5,6,7,0]
import java.util.Arrays; import java.util.Scanner; public class Demo5 { /** * 完成一个方法,删除指定下标的元素,要求从删除位置开始,之后的元素整体前移。【难】 * [1,2,3,4,5,6,7]=>[1,2,4,5,6,7,0] * * */ public static void main(String[] args) { delIndex(); } public static void delIndex() { int [] arr1 = {1,2,3,4,5,6,7}; Scanner scanner = new Scanner (System.in); System.out.print("请输入你要删除的下标:"); int index = scanner.nextInt(); int temp = 0; for(int i = 0; i < arr1.length; i++ ) { if(i>=index && i< arr1.length-1) { temp = arr1[i+1]; arr1[i] = temp; } } arr1[arr1.length-1] =0; System.out.println(Arrays.toString(arr1)); } }
- 完成一个方法,添加指定元素到指定下标位置,要求从指定下标位置之后的元素,整体向后移动。【难】
[1,2,3,4,5,0]=>[1,2,250,3,4,5]import java.util.Arrays; import java.util.Scanner; /** * 完成一个方法,添加指定元素到指定下标位置,要求从指定下标位置之后的元素,整体向后移动。【难】 * [1,2,3,4,5,0]=>[1,2,250,3,4,5] * * */ public class Demo6 { public static void main(String[] args) { addNum (); } public static void addNum () { int[] arr = {1,2,3,4,5,0}; Scanner scanner = new Scanner(System.in); System.out.print("请输入你要添加的元素:"); int num = scanner.nextInt(); System.out.print("请输入你要添加的下标:"); int index = scanner.nextInt(); for (int i = arr.length-1; i > index; i-- ) { arr[i] = arr[i-1]; } arr[index] = num; System.out.println(Arrays.toString(arr)); } }
8.找出数组中最大的元素,放到下标为0的位置
import java.util.Arrays; public class Demo7 { public static void main(String[] args) { findMax(); } public static void findMax() { int[] arr = {1,2,3,4,8,0,6,7}; int max = 0; int j = 0; for(int i = 0; i < arr.length; i++) { if(arr[i] > max) { max = arr[i]; j = i; } } arr[j] = arr[0]; arr[0] = max; System.out.println(Arrays.toString(arr)); } }
9.在上一道题的基础上,不考虑下标为0的元素。
找出数组中最大的元素,放到下标为1的位置import java.util.Arrays; public class Demo8 { public static void main(String[] args) { int[] arr = {1,2,3,4,8,0,6,7}; int max = 0; int j = 0; for(int i = 0; i < arr.length; i++) { if(arr[i] > max) { max = arr[i]; j = i; } } arr[j] = arr[0]; arr[0] = max; int second = 0 ; int m = 0; for(int i = 1; i<arr.length; i++) { if(arr[i] > second) { second = arr[i]; m = i; } arr[m] = arr[1]; arr[1] = second ; } System.out.println(Arrays.toString(arr)); } }
> import java.util.Arrays;
> public class Demo8 {
> public static void main(String[] args) {
> int[] arr = {1,2,3,4,8,0,6,7};
> int max = 0;
> int j = 0;
> for(int i = 0; i < arr.length; i++) {
> if(arr[i] > max) {
> max = arr[i];
> j = i;
> }
> }
> arr[j] = arr[0];
> arr[0] = max;
> int second = 0 ;
> int m = 0;
> for(int i = 1; i<arr.length; i++) {
> if(arr[i] > second) {
> second = arr[i];
> m = i;
> }
> arr[m] = arr[1];
> arr[1] = second ;
> }
> System.out.println(Arrays.toString(arr));
> }
> }
> ```
>
>