目录
数组
数组就是一种可以存储大量数据类型相同的变量的数据结构,数组就是一个具有相同数据类型的数据集合。
数组中的数据必须是同一种数据类型的。
数组的基本要素
-
数组名称
-
数组元素
-
元素下标
-
数据类型
数组本身就是一个变量,数组名称就是变量名,数组中保存的每一个数据都会有一个下标(从 0 开始)
//声明数组
int[] array;
//分配内存空间
array = new int[6];
//给数组赋值
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
array[5] = 6;
int[] array2 = {1,2,3,4,5,6};
int[] array3 = new int[]{1,2,3,4,5,6};
数组常见的错误
-
数据类型不匹配。
-
边声明边赋值的方式,代码必须写在同一行,不能换行。
-
数组下标越界异常(ArrayIndexOutOfBoundsException)。
数组的常用操作及方法
-
求数组的最大值
public static void main(String[] args) {
int[] array = {11, 2, 35, 24, 85,3};
int max = array[0];
for (int i = 0; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
}
System.out.println("数组中的最大值是:" + max);
}
-
求数组的最小值
public static void main(String[] args) {
int[] array = {11, 2, 35, 24, 85,3};
int min = array[0];
for (int i = 0; i < array.length; i++) {
if (array[i] < min) {
min= array[i];
}
}
System.out.println("数组中的最小值是:" + min);
}
-
在数组的指定位置插入数据
public class Test2 {
public static void main(String[] args) {
int[] array = {99, 87, 85, 66, 53, 20};
int num = 83;
// 将83插入到数组下标为3的位置
int[] newArray = new int[array.length + 1];
// 将原数组中的数据移动到新数组中
for (int i = 0; i < 3; i++) {
newArray[i] = array[i];
}
for (int i = 4; i < newArray.length; i++) {
newArray[i] = array[i - 1];
}
newArray[3] = num;
System.out.println("添加新元素之前的数组: " + Arrays.toString(array));
System.out.println("添加新元素之后的数组: " + Arrays.toString(newArray));
}
}
-
对数组进行排序(冒泡排序)
public class Test3 {
public static void main(String[] args) {
int[] array = {20, 87, 53, 99, 85, 60};
for (int i = 0; i < array.length - 1; i++) {
for (int j = i; j < array.length - i - 1; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(array));
}
}
-
Arrays 常用属性:
public class Test4 {
public static void main(String[] args) {
int[] arrays = {20, 87, 53, 99, 85, 60};
int[] array1 = {20, 87, 53, 99, 85, 60};
int[] array2 = {99, 88, 77, 66, 55};
// 排序
Arrays.sort(arrays);
System.out.println(Arrays.equals(arrays,array1)); // true
System.out.println(Arrays.toString(arrays)); // [20, 53, 60, 85, 87, 99]
// 查询数字在数组中的索引
int index = Arrays.binarySearch(arrays,87);
System.out.println(index); // 4
// 复制数组
int[] copyArray = Arrays.copyOf(array2,3);
System.out.println(Arrays.toString(copyArray)); // [99, 88, 77]
// 将数组元素全部替换为65
Arrays.fill(array1,65);
System.out.println(Arrays.toString(array1)); // [65, 65, 65, 65, 65, 65]
}
}
二维数组
二维数组简单理解即一维数组中保存的值是另外一个一维数组。
public class Test5 {
public static void main(String[] args) {
// 声明
int[][] array;
// 开辟内存空间
array = new int[2][3];
// 赋值
// array[0][0] = 20;
// array[0][1] = 30;
// array[0][2] = 60;
// array[1][0] = 10;
// array[1][1] = 50;
// array[1][2] = 100;
// System.out.println(Arrays.toString(array));
// int[] item = {20, 30, 60};
// int[] item2 = {10, 50, 100};
// array[0] = item;
// array[1] = item2;
int[][] array1 ={{20, 30, 60},{10, 50, 100}};
String str = "";
for (int i = 0; i < array1.length; i++) {
str += Arrays.toString(array1[i]);
}
System.out.println(str); // [20, 30, 60][10, 50, 100]
}
}
变量、数据类型、流程控制、循环、数组。
案例:用户管理系统
-
查询用户:将系统中保存的全部用户信息在控制台打印输出。
-
添加用户:向系统中添加新的用户信息,如果添加的用户已经存在,给出提示信息。
-
删除用户:输入用户名,进行删除操作,若输入的用户名不存在,给出提示信息。
-
账号冻结:输入用户名,进行冻结操作,若输入的用户名不存在或者该用户已经被冻结,给出相应提示。
-
账号解冻:输入用户名,进行解封操作,若输入的用户名不存在或者该用户状态正常,给出相应提示。
-
退出系统:跳出循环,给出提示信息。
import java.util.Arrays;
import java.util.Scanner;
public class Test6 {
// 初始化用户数据(用户名、年龄、状态)
static String[] names = {"张三", "李四", "王五", "小明"};
static int[] ages = {19, 25, 28, 17};
static String[] states = {"正常", "正常", "正常", "正常"};
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num;
do {
System.out.println("------ 欢迎使用用户管理系统 ------");
System.out.println("------ 1.查询用户 ------");
System.out.println("------ 2.添加用户 ------");
System.out.println("------ 3.删除用户 ------");
System.out.println("------ 4.账号冻结 ------");
System.out.println("------ 5.账号解冻 ------");
System.out.println("------ 6.退出系统 ------");
System.out.print("请选择: ");
num = scanner.nextInt();
switch (num){
case 1:
System.out.println("------ 用户查询 ------");
System.out.println("编号\t\t姓名\t\t年龄\t\t状态");
for (int i = 0; i < names.length; i++) {
if (names[i] != null){
System.out.println((i + 1) + "\t\t" + names[i] + "\t\t" + ages[i] + "\t\t" + states[i]);
}
}
System.out.print("输入0返回上级菜单");
num = scanner.nextInt();
break;
case 2:
System.out.println("------ 添加用户 ------");
System.out.print("请输入用户姓名: ");
String name = scanner.next();
boolean flag = nameIsExist(name);
if (flag) {
System.out.println(name + "已存在,请勿重复添加!!!");
} else {
if (names[names.length - 1] != null){
// 创建新的数组,并且将老数组的值存入新的数组
names = Arrays.copyOf(names,names.length + 1);
names[names.length-1] = name;
System.out.print("请输入" + name + "的年龄: ");
int age = scanner.nextInt();
ages = Arrays.copyOf(ages,ages.length + 1);
ages[ages.length - 1] = age;
states = Arrays.copyOf(states,states.length + 1);
states[states.length - 1] = "正常";
System.out.println(name + "添加成功!!!");
} else {
int index = getFirstNull();
names[index] = name;
System.out.print("请输入" + name + "的年龄: ");
int age = scanner.nextInt();
ages[index] = age;
states[index] = "正常";
}
}
// if (names[names.length - 1] != null){
// System.out.println("内存已满,新用户无法添加!!!");
// } else {
// System.out.print("请输入用户姓名: ");
// String name = scanner.next();
// boolean flag = nameIsExist(name);
// if (flag) {
// System.out.println(name + "已存在,请勿重复添加!!!");
// } else {
// names[names.length - 1] = name;
// System.out.print("请输入" + name + "的年龄: ");
// int age = scanner.nextInt();
// ages[ages.length - 1] = age;
// states[states.length - 1 ] = "正常";
// System.out.println(name + "添加成功!!!");
// }
// }
System.out.print("输入0返回上级菜单");
num = scanner.nextInt();
break;
case 3:
System.out.println("------ 删除用户 ------");
if (names[0] == null) {
System.out.println("用户已全部删除!!!");
} else {
System.out.print("请输入要删除的用户名: ");
name = scanner.next();
if (nameIsExist(name)) {
int index = getIndex(name);
if (index >= 0){
for (int i = index; i < names.length - 1; i++) {
names[i] = names[i + 1];
ages[i] = ages[i + 1];
states[i] = states[i + 1];
}
names[names.length - 1] = null;
ages[ages.length - 1] = 0;
states[states.length - 1] = null;
System.out.println("删除用户成功!!!");
}
} else {
System.out.println("您输入的用户名不存在!!!");
}
}
System.out.print("输入0返回上级菜单");
num = scanner.nextInt();
break;
case 4:
System.out.println("------ 账号冻结 ------");
System.out.print("请输入用户姓名: ");
name = scanner.next();
if (nameIsExist(name)) {
int index = getIndex(name);
String state = states[index];
if (state.equals("冻结")) {
System.out.println(name + "账号已冻结,请勿重复冻结!!!");
} else {
states[index] = "冻结";
System.out.println(name + "冻结成功!!!");
}
} else {
System.out.println("您输入的用户不存在!!!");
}
System.out.print("输入0返回上级菜单");
num = scanner.nextInt();
break;
case 5:
System.out.println("------ 账号解冻 ------");
System.out.print("请输入用户姓名: ");
name = scanner.next();
if (nameIsExist(name)) {
int index = getIndex(name);
String state = states[index];
if (state.equals("正常")) {
System.out.println(name + "账号已恢复正常,请勿重复操作!!!");
} else {
states[index] = "正常";
System.out.println(name + "成功解封!!!");
}
} else {
System.out.println(name + "不存在,请重新输入!!!");
}
System.out.print("输入0返回上级菜单");
num = scanner.nextInt();
break;
case 6:
System.out.println("感谢使用本系统,再见!!!");
break;
}
}while (num == 0);
}
/**
* 判断用户输入的姓名是否已经存在
* */
public static boolean nameIsExist(String name) {
for (int i = 0; i < names.length; i++) {
if (name.equals(names[i])) {
return true;
}
}
return false;
}
/**
* 找到名字在数组中的下标
* */
public static int getIndex(String name) {
for (int i = 0; i < names.length; i++) {
if (name.equals(names[i])) {
return i;
}
}
return -1;
}
/**
* 找到数组中第一个为空的索引
*/
public static int getFirstNull() {
for (int i = 0; i < names.length; i++) {
if (names[i] == null) {
return i;
}
}
return -1;
}
}