01 Java基础语法—第 6 节 综合案例——快递E栈

一、快递 E 栈

问题描述

功能介绍:

  1. 角色切换(快递员和普通用户)
    在这里插入图片描述
    快递员功能:存快递,删除快递,修改快递,查看所有快递
    普通用户功能:取快递
  2. 存快递
    在这里插入图片描述
  3. 删除快递
    在这里插入图片描述
  4. 修改快递
    在这里插入图片描述
  5. 查看所有快递
    在这里插入图片描述
  6. 取快递
    在这里插入图片描述

解题思路

在这里插入图片描述

代码

错误代码

import java.util.Scanner;

public class Test11 {
    
    

	static Scanner input = new Scanner(System.in);
	static int length = 100;
	static String[] numbers = new String[length];
	static String[] companies = new String[length];
	static int[] codes = new int [length];
	static int index = -1;///查找空位置,进行添加
	
	public static void main(String[] args) {
    
    
		while(true) {
    
    
			System.out.println("=====欢迎使用新职课快递柜=====");
			System.out.println("请输入您的身份:1-快递员,2-用户");
			int n = input.nextInt();
			switch(n) {
    
    
			case 1:
				deliverChoose();
				break;
			case 2:
				userChoose();
				break;
				default:System.out.println("输入错误,请重新正确输入您的身份。");
			}
		}
	}
	
	private static void deliverChoose() {
    
    
		System.out.println("请选择操作:1-存快递 2-删除快递 3-修改快递信息 4-查看所有快递");
		int n = input.nextInt();
		switch(n) {
    
    
		case 1:
			saveDelivery();
			break;
		case 2:
			deleteDelivery();
			break;
		case 3:
			modifyDelivery();
			break;
		case 4:
			checkDelivery();
			break;
			default:System.out.println("输入有误,请重新开始");
		}
	}
	
	private static void userChoose() {
    
    
		System.out.println("请输入取件码:");
		int code = input.nextInt();
		for(int i = 0; i < codes.length; i ++) {
    
    
			if(codes[i] != 0 && codes[i] == code) {
    
    
				index = i;
				break;
			}
		}
		if(index == -1) {
    
    
			System.out.println("未找到该快递");
		}else {
    
    
			//取快递
			numbers[index] = null;
			companies[index] = null;
			codes[index] = 0;
			System.out.println("取件成功");
		}
	}
	
	private static void saveDelivery() {
    
    
		System.out.println("请输入快递单号");
		String num = input.next();
		System.out.println("请输入快递公司");
		String company = input.next();
		int code =(int)(Math.random()*1000)+1;//生成随机数
		for(int i = 0; i < numbers.length; i ++) {
    
    
			if(numbers[i] == null) {
    
    
				index = i;
				break;
			}
		}
		if(index == -1) {
    
    
			System.out.println("快递柜已满,无法存入");
		}else {
    
    
			numbers[index] = num;
			companies[index] = company;
			codes[index] = code;
			System.out.println("快递已存入,取件码是:" + code);
		}
	}
	
	private static void deleteDelivery() {
    
    
		System.out.println("请输入要删除的快递单号:");
		String num = input.next();
		//判断是否有该快递单号
		for(int i = 0; i < numbers.length; i ++) {
    
    
			if(numbers[i] != null && numbers[i].equals(num)) {
    
    
				index = i;
				//break;
			}
		}
		if(index == -1) {
    
    
			System.out.println("未查到快递。");
		}else {
    
    
			numbers[index] = null;
			companies[index] = null;
			codes[index] = 0;
			System.out.println("删除成功。");
		}
	}
	
	private static void modifyDelivery() {
    
    
		 System.out.println("请输入要修改的快递单号:");
		 String num = input.next();
		//查找快递号是否存在
		 for(int i = 0; i < numbers.length; i ++) {
    
    
				if(numbers[i] != null && numbers[i].equals(num)) {
    
    
					index = i;
					break;
				}
		}
		 if(index == -1) {
    
    
			 System.out.println("未找到快递。");
		 }else {
    
    
			 //判断新的号码是否跟以前已有的相同
			 for(int i = 0; i < numbers.length; i ++) {
    
    
				 System.out.println("请输入新的快递单号:");
				 String newNum = input.next();
				 if(numbers[i].equals(newNum)) {
    
    
					 break;
				 }else {
    
    
					 System.out.println("请输入新的公司名称");
                     String company1 = input.next();
                     //取件码不修改
                     numbers[index] = newNum;
                     companies[index] = company1;
                     System.out.println("修改成功");
                     break;
				 }
			 }
		 }
	}
	
	private static void checkDelivery() {
    
    
		if(numbers[0] == null) {
    
    
			System.out.println("快递柜为空,暂无数据");
		}else {
    
    
			 System.out.println("所有快递信息如下:");
             System.out.println("快递单号\t公司名称\t取件码");
             for(int i = 0; i < numbers.length; i ++) {
    
    
            	 if(numbers[i] != null) {
    
    
            		 System.out.println(numbers[i] + "\t" + companies[i] + "\t" + codes[i]); 
            	 }
             }
		}
	}
}

运行结果(错误):

输入多次相同的取件码,显示还是取件成功!?
在这里插入图片描述

错误源

主要是static关键字未能很好运用,代码中用index查找空位置且被static修饰,此时index一开始就被赋值-1,然后在代码中其他方法执行时,会改变其值,但是这个值是被改变之后的值,而不是-1了,接下来如果运用到index则会使用改变后的值。故出现上面的错误。

知识补充

涉及到static关键字,这个关键字是在该类被第一次加载的时候,就会去加载被static修饰的部分,而且只在类第一次使用时加载并进行初始化,注意这是第一次用就要初始化,后面根据需要是可以再次赋值的。

想了解更更多关于static关键字,那就可以阅读这篇博客Java 关键字static 还搞不懂?看这一篇文章就足够了!详细解释!

正确代码

import java.util.Scanner;

public class Test11 {
    
    

	static Scanner input = new Scanner(System.in);
	static int length = 100;
	static String[] numbers = new String[length];
	static String[] companies = new String[length];
	static int[] codes = new int [length];
	//static int index = -1;///查找空位置
	 
	
	public static void main(String[] args) {
    
    
		while(true) {
    
    
			System.out.println("=====欢迎使用新职课快递柜=====");
			System.out.println("请输入您的身份:1-快递员,2-用户");
			int n = input.nextInt();
			switch(n) {
    
    
			case 1:
				deliverChoose();
				break;
			case 2:
				userChoose();
				break;
				default:System.out.println("输入错误,请重新正确输入您的身份。");
			}
		}
	}
	
	private static void deliverChoose() {
    
    
		System.out.println("请选择操作:1-存快递 2-删除快递 3-修改快递信息 4-查看所有快递");
		int n = input.nextInt();
		switch(n) {
    
    
		case 1:
			saveDelivery();
			break;
		case 2:
			deleteDelivery();
			break;
		case 3:
			modifyDelivery();
			break;
		case 4:
			checkDelivery();
			break;
			default:System.out.println("输入有误,请重新开始");
		}
	}
	
	private static void userChoose() {
    
    
		int index1 = -1;
		System.out.println("请输入取件码:");
		int code = input.nextInt();
		for(int i = 0; i < codes.length; i ++) {
    
    
			if(codes[i] != 0 && codes[i] == code) {
    
    
				index1 = i;
				break;
			}
		}
		if(index1 == -1) {
    
    
			System.out.println("未找到该快递");
		}else {
    
    
			//取快递
			numbers[index1] = null;
			companies[index1] = null;
			codes[index1] = 0;
			System.out.println("取件成功");
		}
	}
	
	private static void saveDelivery() {
    
    
		int index = -1;
		System.out.println("请输入快递单号");
		String num = input.next();
		System.out.println("请输入快递公司");
		String company = input.next();
		int code =(int)(Math.random()*1000)+1;//生成随机数
		for(int i = 0; i < numbers.length; i ++) {
    
    
			if(numbers[i] == null) {
    
    
				index = i;
				break;
			}
		}
		if(index == -1) {
    
    
			System.out.println("快递柜已满,无法存入");
		}else {
    
    
			numbers[index] = num;
			companies[index] = company;
			codes[index] = code;
			System.out.println("快递已存入,取件码是:" + code);
		}
	}
	
	private static void deleteDelivery() {
    
    
		int index = -1;
		System.out.println("请输入要删除的快递单号:");
		String num = input.next();
		//判断是否有该快递单号
		for(int i = 0; i < numbers.length; i ++) {
    
    
			if(numbers[i] != null && numbers[i].equals(num)) {
    
    
				index = i;
				//break;
			}
		}
		if(index == -1) {
    
    
			System.out.println("未查到快递。");
		}else {
    
    
			numbers[index] = null;
			companies[index] = null;
			codes[index] = 0;
			System.out.println("删除成功。");
		}
	}
	
	private static void modifyDelivery() {
    
    
		int index = -1;
		 System.out.println("请输入要修改的快递单号:");
		 String num = input.next();
		//查找快递号是否存在
		 for(int i = 0; i < numbers.length; i ++) {
    
    
				if(numbers[i] != null && numbers[i].equals(num)) {
    
    
					index = i;
					break;
				}
		}
		 if(index == -1) {
    
    
			 System.out.println("未找到快递。");
		 }else {
    
    
			 //判断新的号码是否跟以前已有的相同
			 for(int i = 0; i < numbers.length; i ++) {
    
    
				 System.out.println("请输入新的快递单号:");
				 String newNum = input.next();
				 if(numbers[i].equals(newNum)) {
    
    
					 break;
				 }else {
    
    
					 System.out.println("请输入新的公司名称");
                     String company1 = input.next();
                     //取件码不修改
                     numbers[index] = newNum;
                     companies[index] = company1;
                     System.out.println("修改成功");
                     break;
				 }
			 }
		 }
	}
	
	private static void checkDelivery() {
    
    
		boolean flag = false;//判断快递柜是否全为空
        for(int i = 0; i < numbers.length; i ++) {
    
    
            if(numbers[i] != null) {
    
    
            	flag = true;
            }
        }
        
        if(flag == false) {
    
    
            System.out.println("快递柜为空,暂无数据");
        }else {
    
    
        	System.out.println("所有快递信息如下:");
            System.out.println("快递单号\t公司名称\t取件码");
            for(int i = 0; i < numbers.length; i ++) {
    
    
                if(numbers[i] != null) {
    
    
                	System.out.println(numbers[i] + "\t" + companies[i] + "\t" + codes[i]); 
                	flag = true;
                }
            }
        }
	}
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46312449/article/details/112442493