数组
静态初始化:数组确定后长度不能发生变化
一般用简化格式,直接跟大括号
直接sout输出的是地址值,表示数组在内存中的位置
扩展:
解释一下地址值的格式含义 [D@776ec8df
[:表示当前是一个数组
D:表示当前数组里面的元素都是double类型的
@:表示一个间隔符号。(固定格式)
776ec8df:才是数组真正的地址值,(十六进制)
平时我们习惯性的会把这个整体叫做数组的地址值。
练习
package demo1;
public class test5 {
public static void main(String[] args) {
int[] arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int j : arr1) {
if (j % 2 == 1) {
j *= 2;
}else j /= 2;
System.out.println(j);
}
}
}
尽量一个循环只做一件事
数组动态初始化
数组默认初始化值的规律
整数类型:默认初始化值0
小数类型:默认初始化值0.0
字符类型:默认初始化值'/u0000' ,即空格
布尔类型:默认初始化值 false
引用数据类型:默认初始化值 null
动静区别
练习
package demo1;
import java.util.Random;
public class test7 {
public static void main(String[] args) {
int[] arr = new int[10];
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
int number = r.nextInt(100) + 1;
arr[i] = number;
}
int sum = 0;
for (int i : arr) {
sum += i;
}
System.out.println("sum:" + sum);
int aver = sum / arr.length;
System.out.println("aver:" + aver);
int count = 0;
for (int i : arr) {
if (i < aver) count++;
}
System.out.println("smaller:" + count);
for (int i : arr) {
System.out.print(i + " ");
}
}
}
package demo1;
public class test8 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
int temp = arr[0];
arr[0] = arr[arr.length - 1];
arr[arr.length - 1] = temp;
for (int i : arr) {
System.out.print(i + " ");
}
}
}
交换头尾所有的元素:
package demo1;
public class test9 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
for (int i : arr) {
System.out.print(i + " ");
}
}
}
package demo1;
import java.util.Random;
public class test10 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
int randomIndex = r.nextInt(arr.length);
int temp = arr[i];
arr[i] = arr[randomIndex];
arr[randomIndex] = temp;
}
for (int i : arr) {
System.out.print(i + " ");
}
}
}
Java内存分配
开辟空间肯定有各自的地址值
两个数组指向同一个空间
arr1和arr2指向同样的地址
有一个数组,其中有十个元素从小到大依次排列 {12,14,23,45,66,68,70,77,90,91}。再通过键盘录入一个整数数字。要求:把数字放入数组序列中,生成一个新的数组,并且数组的元素依旧是从小到大排列的。执行效果如下:
```java
请输入一个整数数字:
50
生成的新数组是:12 14 23 45 50 66 68 70 77 90 91
```
package demo1;
import java.util.Scanner;
public class test11 {
public static void main(String[] args) {
int[] arr1 = {12, 14, 23, 45, 66, 68, 70, 77, 90, 91};
Scanner sc = new Scanner(System.in);
System.out.println("input=");
int number = sc.nextInt();
int index = 0;
int[] arr2 = new int[arr1.length + 1];
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] <= number) {
arr2[i] = arr1[i];
index = i + 1;
} else {
arr2[i + 1] = arr1[i];
}
}
arr2[index] = number;
for (int i : arr2) {
System.out.print(i + " ");
}
}
}
定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边。(可以创建其他数组,不必须在原数组中改变)
package demo1;
public class test12 {
public static void main(String[] args) {
int[] arr1 = {12, 14, 23, 45, 66, 33, 4, 21, 3125, 68, 70, 77, 90, 91};
//1.设置新数组
int left = 0, right = arr1.length - 1;
int[] arr2 = new int[arr1.length];
for (int j : arr1) {
if (j % 2 != 0) {
arr2[left] = j;
left++;
} else {
arr2[right] = j;
right--;
}
}
for (int i : arr2) {
System.out.print(i + " ");
}
System.out.println();
//2.不设置新数组
int right2 = arr1.length - 1;
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] % 2 == 1) {
continue;
} else {
while (right2 > i) {
if (arr1[right2] % 2 == 1) {
int temp = arr1[i];
arr1[i] = arr1[right2];
arr1[right2] = temp;
break;
} else {
right2--;
}
}
}
if (right2 <= i) break;
}
for (int i : arr1) {
System.out.print(i + " ");
}
}
}