一、数组
数组就是一种可以存储大量数据类型相同变量的数据结构,数组就是一个具有相同数据类型的数据集合,数组中的数据必须是同一种数据类型的。
- 基本要素:数组名称、数组元素、元素下标、数据类型
数组本身就是一个变量,数组本身就是变量名,数组中保存的每一个数据都有一个下标(从0开始) - 先创建再复制
// 声明数组
int[] arr; // 也可 int arr[]
String arr2[];
// 分配内存空间
arr = new int[10]; // int[] arr = new int[10]
// 给数组赋值
arr[2] = 6;
System.out.println(arr); // [I@28d93b30 arr对应的内存地址
System.out.println(Arrays.toString(arr)); //[0, 0, 6, 0, 0, 0, 0, 0, 0, 0]
int arr[] = new int[4];
arr[0] = 179;
arr[1] = 182;
arr[2] = 167;
arr[3] = 155;
int sum = 0;
for (int i = 0; i < arr.length ; i++) {
sum = sum + arr[i];
}
System.out.println(sum/arr.length);
- 边创建边赋值
int arr[] = {1,2,3,4,5,6};
int arr2[] = new int[]{1,2,3,4,5,6};
int arr[] = new int[100];
for (int i = 0; i <= arr.length; i++) {
arr[i] = i;
}
System.out.println(Arrays.toString(arr));
- 数组常见错误
数据类型不匹配
边声明边赋值的方式,代码必须写在同一行
数组下标越界
- 数组常用操作及方法
求数组中的最大值
int arr[] = new int[]{1,2,3,4};
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if(arr[i] > max){
max = arr[i];
}
}
System.out.println("数组中最大值是:"+max);
求数组中的最小值
int arr[] = new int[]{1,2,3,4};
int min = arr[0];
for (int i = 1; i < arr.length; i++) {
if(arr[i] < min){
min = arr[i];
}
}
System.out.println("数组中最大值是:"+min);
在数组中指定位置插入数组
int arr[] = new int[]{2,5,8,6};
int arr2[] = new int[arr.length+1];
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要插入的位置:");
int index = scanner.nextInt();
System.out.print("请输入要插入的值:");
int value =scanner.nextInt();
arr2[index-1] = value;
for (int i = 0; i < index-1; i++) {
arr2[i] = arr[i];
}
for (int i = index; i < arr2.length ; i++) {
arr2[i] = arr[i-1];
}
System.out.println(Arrays.toString(arr2));
对数组进行排序
int arr[] = new int[]{73,80,32,58,99,12};
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-i-1; j++) {
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
- 常用方法
int arr[] = new int[]{1,2,3,4};
int arr2[] = new int[]{1,2,3,4};
int arr3[] = new int[]{1,2};
// 判断两个数组是否相等
boolean equals = Arrays.equals(arr, arr2);
// 排序
Arrays.sort(arr); // 升序
// 填充数值
Arrays.fill(arr,66);// 覆盖所有元素
// 复制
int[] copyOf = Arrays.copyOf(arr, 10);
System.out.println(Arrays.toString(copyOf)); // [66, 66, 66, 66, 0, 0, 0, 0, 0, 0]
// 返回1的值在数组arr中的下标 binarySearch(二分查找法 数组必须有序)
int index = Arrays.binarySearch(arr, 1);
二、二维数组
即一维数组中保存的值是另外一个一维数组
// 声明
int array[][];
// 开辟内存空间
array = new int[3][3];
// 赋值
array[0][0] = 50;
array[0][1] = 60;
array[0][2] = 70;
array[1][0] = 80;
array[1][1] = 90;
array[1][2] = 100;
// int item[] = {50,60,70};
// int item2[] = {80,90,100};
// array[0] = item;
// array[2] = item2;
//int array2[][] = {{50,60,70},{80,90,100}};
String str = "";
// for (int i = 0; i < array.length; i++) {
// str += Arrays.toString((array[i]));
// }
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.println(array[i][j]);
}
}
//System.out.println(str);
int array[][] = new int[3][6];
int sum = 0;
for (int i = 0; i < array.length; i++) {
System.out.println("----第"+(i+1)+"层货架----");
for (int j = 0; j < array[i].length; j++) {
int num = (i+1)*(j+1);
sum += num;
System.out.println("第"+(j+1)+"隔档的鸡蛋个数"+num);
}
}
System.out.println("鸡蛋的总数是"+sum);
用户管理系统
查询用户:将系统中保存的全部用户信息在控制台打印输出
添加用户:向系统中添加新的用户信息,如果添加的用户已存在,给出提示信息
删除用户:输入用户名,进行删除操作,若输入的用户名不存在,给出提示信息
账户冻结:输入用户名,进行冻结操作,若输入的用户名不存在或者该用户已经被冻结,给出相应的提示
账户解冻:输入用户名,进行解封操作,若输入的用户名不存在或者该用户状态正常,给出相应的提示
退出系统:跳出循环,给出提示信息
import java.util.Arrays;
import java.util.Scanner;
/**
* @author:liudongdong
* @date 2022/5/9 8:52 下午
*/
public class Test24 {
static String names[] = {"张三","李四","王五"};
static int ages[] = {22,23,24};
static String states[] = {"正常","正常","正常"};
public static void main(String[] args) {
// 初始化用户数据(用户名、年龄、状态)
//Object data[] = {"张三",22,"正常"};
Scanner scanner = new Scanner(System.in);
int num = 0;
// String names[] = {"张三","李四","王五"};
// int ages[] = {22,23,24};
// String states[] = {"正常","正常","正常"};
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.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("------添加用户------");
// 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("请输入用户年龄:");
// int age = scanner.nextInt();
// ages[ages.length-1] = age;
// states[states.length-1] = "正常";
// System.out.println("用户添加成功");
// }
// }
System.out.print("请输入用户姓名:");
String name = scanner.next();
if(names[names.length - 1] != null){
// 创建新的数组,并且将老数组的值存入新的数组
names = Arrays.copyOf(names, names.length + 1);
names[names.length-1] = name;
System.out.print("请输入用户年龄:");
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("用户添加成功");
}else{
int firstNull = getFirstNull();
names[firstNull] = name;
System.out.print("请输入用户年龄:");
int age = scanner.nextInt();
ages[firstNull] = age;
states[firstNull] = "正常";
System.out.println("用户添加成功");
}
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);
if (states[index].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);
if (states[index].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 6:
System.out.println("退出系统");
break;
// default:
// 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;
}
}