详析一维数组
一维数组初始化
动态初始化:int[] arrays = new int[数组长度];静态初始化:int[] arrays = {元素1,元素2,元素3,......};动静结合初始化int[] arrays = new int[] {元素1,元素2,元素3,......}
获取数组长度
//定义一个数组int[] arrays = {1,3,4,1,4,6,8,8,9,10,22};//获取数组长度int t = arrays.length;
一维数组遍历打印
//定义一个数组int[] arrays = {1,2,3,4,5,45,22,10}//第一种:用数组下标来进行循环打印for(int i = 0; i < arrays.length; i++){ System.out.println(arrays[i]);}//第二种:foreach遍历打印for(int t : arrays){ System.out.println(t);}
一位数组特点
1.数组中只能存储一组相同类型的数据
2.数组的长度(数据个数)是固定的,不能多也不能少,少的系统会给默认值补充
数组元素的默认值: 只要是数字类型(整数型、浮点型):0或者0.0 字符:空白字符'' (对应的数字0)--null 布尔:false
3.数组在内存中是一组连续的内存空间
4.数组是有序的(内存地址有序0,1,2,3......)
5.数组中可以存储重复的元素
注意:
/* * 1. 当多个引用类型的变量,公用同一块内存空间, * 某个变量,更改了该内存中的数据,其他正在引用的变量 * 再次使用该数据时,也是使用的改变之后的数据 */ int[] a = new int[] {1,2,3};//a引用了一块内存 int[] b = a;//a,b公用一块内存空间 a[0] = 100; System.out.print(b[0]);//b[0] == 100 /* * 2. 多个引用类型的变量,公用同一块内存空间, * 某个变量去引用其他内存空间,其他的不受影响,还用原来的 */ int[] a = new int[] {1,2,3};//a引用了一块内存 int[] b = a;//a,b公用一块内存空间 a = null; System.out.print(b[0]);//b[0] == 1 /* * 3. *null : 空 没有指定内存空间*如果数组的值为null,除了打印以外,无法使用 *null 不能赋值给基本数据类型 */ int[] array = null
一维数组插入一个元素值
import java.util.Scanner;/** * 给数组中插入元素 * @author Amid * */public class ArraysInsertNum{ static Scanner scanner = new Scanner(System.in);//从控制台获取数据的工具 public static void main(String[] args){ //定义一个长度为10的数组,这时还未给数组内元素进行赋值,所以这时候数组内元素的值都是默认值0 int[] arrays = new int[10]; giveNum(arrays);//调用giveNum方法,从控制台给数组内元素赋值 System.out.println("请输入你要插入位置的元素值"); //调用findIndex方法,获得arrays数组内某个值的下标 int index = findIndex(arrays,scanner.nextInt()); System.out.println("请输入你要插入的元素值"); //调用arraysInsertNum方法,获得插入元素后的新数组 //调用ergodicPrintArray方法遍历打印新数组 ergodicPrintArray( arraysInsertNum(arrays, index, scanner.nextInt())); }/** * 从控制台给数组内元素赋值 * @param arrays * @return */ static int[] giveNum(int[] arrays){//把定义的数组传进来 for(int i = 0; i < arrays.length; i++){//遍历传进来的这个数组 System.out.println("请输入arrays[" + i +"]=?");//提示语句 arrays[i] = scanner.nextInt();//给数组内元素依次赋值 } return arrays;//返回赋值完成的数组 }/** * 遍历打印数组 * @param arrays */ static void ergodicPrintArray(int[] arrays){//传进来一个数组 for(int i = 0; i < arrays.length; i++){//遍历传进来的这个数组 System.out.println(arrays[i] + " ");//输出数组的每个元素的值 } }/** * 找到数组arrays中元素值为num的下标,如果能找到就返回下标值,没找到就返回-1 * @param arrays * @param num * @return */ static int findIndex(int[] arrays,int num){//传进来一个数组,和一个整型值 for(int i = 0; i arrays.length){//如果下标值等于-1或者大于数组长度就指针越界 System.out.println("你输入的元素值有误"); } /* * 往数组添加元素 */ int[] arraysNew = new int[arrays.length + 1];//定义一个新数组,用来存放插入元素后的数组 for(int i = 0; i < arrays.length; i++){//遍历数组 if(i < index){ arraysNew[i] = arrays[i];//插入位置之前的元素,原封不动挪到新数组里 }else { arraysNew[i + 1] = arrays[i]; } } arraysNew[index] = num; return arraysNew; }}
删除一个元素
public class ArraysDeleteNum{ static Scanner scanner = new Scanner(System.in);//从控制台获取数据的工具 public static void main(String[] args){ //定义一个长度为10的数组,这时还未给数组内元素进行赋值,所以这时候数组内元素的值都是默认值0 int[] arrays = new int[10]; giveNum(arrays);//调用giveNum方法,从控制台给数组内元素赋值 System.out.println("请输入你要删除的元素值"); //调用findIndex方法,获得arrays数组内某个值的下标 int index = findIndex(arrays,scanner.nextInt()); //调用arraysDeleteNum方法删除某个元素,生成新的数组 //调用ergodicPrintArray方法遍历新数组 ergodicPrintArray(arraysDeleteNum(arrays,index)); }/* * 从控制台给数组内元素赋值 */ static int[] giveNum(int[] arrays){ for(int i = 0; i < arrays.length; i++){ System.out.println("请输入arrays[" + i +"]=?"); arrays[i] = scanner.nextInt(); } return arrays; }/* * 遍历打印数组 */ static void ergodicPrintArray(int[] arrays){ for(int i = 0; i < arrays.length; i++){ System.out.println(arrays[i] + " "); } }/* *找到数组arrays中元素值为num的下标,如果能找到就返回下标值,没找到就返回-1 */ static int findIndex(int[] arrays,int num){ for(int i = 0; i arrays.length){ System.out.println("你输入的元素值有误"); } //删除元素 //定义一个新数组,存放删除某个元素后的新序列 int[] arraysNew = new int[arrays.length -1]; for(int i = 0; i < arraysNew.length; i++){ if(i < index){ arraysNew[i] = arrays[i]; }else { arraysNew[i] = arrays[i + 1]; } } return arraysNew; }}