数组的创建方式:
动态初始化:数据类型[] 数组名 = new 数据类型[数组长度];
静态初始化:数据类型[] 数组名 = new 数据类型[] {元素,元素,...}
什么是元素 ?
元素就是数组中存储的数据。
什么是索引 ?
索引就是每个元素存放的位置,从0开始。
什么是索引越界异常 ?
访问了不存在的索引
什么是空指针异常 ?
数组赋值为null
内存空间栈内存放什么,堆内存放什么 ?
栈内存存放的是运行的方法和方法中的变量,堆内存存放的是new出来的东西。
补充:栈存放基本类型的变量和对象的引用
基本类型变量存的是什么 ?
byte short int long float double char boolean
基本类型变量里面存放的都是:值
引用类型变量存的是什么 ?
类,接口,数组
引用类型都可以赋值null
引用类型变量里面存放的都是地址值
习题
一:有一个数组,其中有十个元素已经从小到大依次排列 {12,14,23,45,66,68,70,77,90,91}。再通过键盘录入一个整数数字。要求:创建一个长度11的新数组,把数字放入数组序列中,并且数组的元素依旧是从小到大排列的。
解题思路:
- 定义原数组arr,和一个比原数组大1的新数组brr。
- 创建键盘输入对象num,为了确定录入整数数字的位置,定义一个索引插入位置变量j,赋值为0.
- 遍历原数组,同时与num进行对比,原数组<=num的,存入新数组相同位置,同时索引变量值+1,>num的,此时索引变量J的值即为num将要插入的位置,原数组剩下的元素存入新数组大一位的位置。
- 将num的值插入brr[j],遍历新数组
代码:
public static void main(String[] args) {
//定义原数组
int[] arr = {12,14,23,45,66,68,70,77,90,91};
//定义一个大一位的新数组
int[] brr = new int[11];
//创建键盘输入对象num
Scanner sc = new Scanner(System.in);
System.out.println("请输入任意整数");
int num = sc.nextInt();
//定义插入索引位置变量,赋值为0
int j = 0;
//遍历原数组,确定插入位置
for (int i = 0; i < arr.length; i++) {
if (arr[i]<num){
brr[i]=arr[i];
j++;
}else{
brr[i+1]=arr[i];
}
}
brr[j] = num;
System.out.println(Arrays.toString(brr));
}
补充:最开始我在else语句中使用j=i来确定数组的位置,直接导致的后果为,当输入的num大于原数组中所有的的元素时,j恒=0,新数组中索引0所指向的值为最大值。
for (int i = 0; i < arr.length; i++) {
if (arr[i]<num){
brr[i]=arr[i];
}else{
j = i;
brr[i+1]=arr[i];
}
}
定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边。(可以创建新数组,不必须在原数组中改变)
二:定义一个数组,其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边。(可以创建新数组,不必须在原数组中改变)
解题思路:
- 定义原数组和新数组
- 定义两个索引位置变量left和right,left赋值为0,代表奇数从左向右赋值给数组的索引值。right复制为arr.length-1,代表偶数从右向左赋值给数组的索引值。
- 遍历原数组,判断原数组元素的奇偶,是奇数,则将该元素赋值给arr[left],然后left值+1;为偶数,则将该元素赋值给arr[right],然后right值-1.
- 遍历新数组
public static void main(String[] args) {
//定义原数组
int[] arr = {1,2,3,4,5,6,7,8};
//定义新数组
int[] brr = new int[8];
//定义left变量并赋值为0.作为奇数从左到右赋值给新数组时的索引值,定义right变量赋值为
//arr.length-1,作为偶数从右到左赋值给新数组时的索引值。
int left = 0;
int right = brr.length-1;
//遍历原数组
for (int i = 0; i < arr.length; i++) {
//确定元素的奇偶并赋值给新数组
if (arr[i]%2==0){
//偶数赋值给右边位置
brr[right] = arr[i];
right--;
}else{
//奇数赋值给左边位置
brr[left] = arr[i];
left++;
}
}
//遍历新数组
System.out.println(Arrays.toString(brr));
}