java方法综合练习

package all;

import java.util.InputMismatchException;
import java.util.Scanner;

/**
 * 针对数组内容进行增删改查操作
 * @author Administrator
 * 需要注意的是不能将用户当做聪明人,不能过分相信用户,需要对用户这个群体多做提示,需要充足的限制用户的输入
 */
public class DataManger {
	/**
	 * 从键盘接收数据,将接收的数据进行审核,并新增到数组中
	 * @return
	 */
	public int[] insertData() {
		//首先定义好一个长度为10的数组
		int[] a = new int[10];
		//因为Scanner类,不是我们在同一个包中创建的类,是在Java JDK的类库中保存的类,所以使用的时候需要进行导入。
		//暂时记住这个写法,Scanner用于监听跟键盘操作相关的内容
		Scanner sc = new Scanner(System.in);
		//为插入数据提前做准备,长度为10的数组,只能暂时先接收9个数据。
		for(int i = 0; i < a.length - 1; i++) {
			System.out.println("请输入第" + (i + 1) + "个数据");
			//nextInt方法用于从键盘接收整型数据
			try {
				//将可能会发生异常的语句放置到try代码块中
				a[i] = sc.nextInt();
			} catch(InputMismatchException e) { //通过catch语句捕获可能会发生的异常,即输入非数字的时候,执行catch代码块中的内容
				System.out.println("输入的数据类型有误,不能是非数字");
				//将有问题的键盘监听重新连接起来,使用next()继续接受数据
				sc.next();
				//为了重新输入数据,所以针对循环做一次重新开始
				i--;
			}
		}
		return a;
	}
	
	/**
	 * 用于显示数组中直到要求长度的数组元素内容
	 * @param a 数组
	 * @param length 要显示的数组元素的个数
	 */
	public void showData(int[] a, int length) {
		for(int i = 0; i < length; i++) {
			System.out.print(a[i] + " ");
		}
		System.out.println();
	}
	
	/**
	 * 从键盘接收一个数据,插入到数组 指定位置处
	 * @param a 要插入数据的数组
	 * @param n 要插入的数据
	 * @param k 要插入的位置,从0开始
	 * 数组是定长的
	 *   1    2    3    10   4    5    6    7    8    9    
	 *  a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
	 *  在数组中插入元素,因为数组是定长的,所以数组需要其中的元素向后移动覆盖
	 */
	public void insertAtArray(int[] a, int n, int k) {
		//首先将要插入位置处的数组元素都向后移动一位
		//值得注意的是,是从最后一位的数据开始移动,避免数据被覆盖掉
		for(int i = a.length - 1; i > k; i--) {
			//使前一位的元素覆盖后一位的元素
			a[i] = a[i - 1];
		}
		//将要插入的数据赋值给指定位置处的数据
		a[k] = n;
	}
	
	/**
	 * 输出数组中能被3整除的数据
	 * @param a
	 */
	public void divThree(int[] a) {
		//该字符串用于保存能够被3整除的数据
		String str = "";
		//能够被3整除的元素的个数
		int count = 0;
		for(int n : a) {
			if(n % 3 == 0) {
				str = str + n + " ";
				count++;
			}
		}
		if(count == 0) {
			System.out.println("数组中没有能够被3整除的数据");
		} else {
			System.out.println("数组中能够被3整除的数据为:" + str);
		}
		
	}
	
	/**
	 * 用于输出提示信息
	 * 该方法描述每种操作的选择代码,使我们可以根据这个选择代码,控制程序服务的提供
	 */
	public void notice() {
		System.out.println("*************************************************");
		System.out.println("			1 --插入数据");
		System.out.println("			2 --显示所有数据");
		System.out.println("			3 --在指定位置插入数据");
		System.out.println("			4 --查询能够被3整除的数据");
		System.out.println("			0 --退出");
		System.out.println("*************************************************");
	}
	
	 /**
	  * 我们更多的是希望去关注在主方法里面实现程序行为流程的控制和逻辑上的控制
	  * @param args
	  */
	public static void main(String[] args) {
		DataManger dm = new DataManger();
		//监听键盘的操作,并接受用户输入的选择代码
		Scanner sc = new Scanner(System.in);//如果放在循环里面,会重复创建监听对象,所以提取出来
		int input;
		//先定义数组为空(), 并不是指空数组,而是指数组a指向的内存地址为空
		int[] a = null;//即使初始化的时候并没有指向一个内存地址
		int n = 0;//n表示要插入数组的数据
		int k = 0;//k表示要插入数组的位置
		while(true) {
			//循环提示
			dm.notice();
			//并给出要求输入的提示
			System.out.println("请输入对应的数字进行操作");
			//接收用户选择的选择代码
			try{
				input = sc.nextInt();
			} catch(InputMismatchException e) {
				System.out.println("输入的数据格式有误,不能有非数字");
				sc.next();//需要使用next()方法去继续接受键盘输入的数据
				continue;
			}
			//根据用户的选择进行操作的判断
			//1.针对0进行单独处理,退出程序(退出循环)
			if(input == 0) {
				System.out.println("退出程序");
				break;
			}
			//2. 针对于1,2,3,4这四个选择代码进行判断,并提供对应的服务
			//通过switch语句根据选择代码进行操作的选择
			switch(input) {
				case 1: {//执行新增数据操作
					// a现在已经给它赋值了一个正在的内存地址
					a = dm.insertData();
					//显示用户新增的数据
					System.out.println("数组元素为:");
					dm.showData(a, a.length - 1);
					//-1是因为在insertData中限制了用户只能输入9个数字
					break;
				}
				case 2: {//显示所有数据
					//需要先判断数组是否赋值
					if(a != null) {
						System.out.println("数组元素为:");
						//如果数组的最后一个元素为0,可以简单的认为数组还没有插入数据,因此不显示最后一个元素
						if(a[a.length - 1] == 0) {
							dm.showData(a, a.length - 1);
						} else {
							dm.showData(a, a.length);
						}
					} else {
						System.out.println("还未在数组中插入数据");
					}
					break;
				}
				case 3: {//指定位置插入数据
					if(a != null) {
						System.out.println("请输入要插入的数据");
						try{// 可以使用try将这两个接受键盘数据的方法包裹起来
							n = sc.nextInt();
							System.out.println("请输入要插入的位置");
							k = sc.nextInt();
						} catch(InputMismatchException e) {
							System.out.println("输入的数据格式有误,不能有非数字");
							sc.next();//需要使用next()方法去继续接受键盘输入的数据
							break;//使用break去终止switch语句的执行
						}
						
						//调用插入数据的方法
						dm.insertAtArray(a, n, k);
						//插入数据后展示数据
						dm.showData(a, a.length);
					} else {
						System.out.println("还未在数组中插入数据");
					}
					break;
				}
				case 4: {//查询能够被3整除的数据
					if(a != null) {
						dm.divThree(a);
					} else {
						System.out.println("还未在数组中插入数据");
					}
					break;
				}
				default: {//放止用户输入1,2,3,4,0之外的数据
					System.out.println("请输入对应的数字进行操作");
				}
			}
		}
	}
}
*************************************************
			1 --插入数据
			2 --显示所有数据
			3 --在指定位置插入数据
			4 --查询能够被3整除的数据
			0 --退出
*************************************************
请输入对应的数字进行操作
1
请输入第1个数据
1
请输入第2个数据
2
请输入第3个数据
3
请输入第4个数据
4
请输入第5个数据
5
请输入第6个数据
6
请输入第7个数据
7
请输入第8个数据
8
请输入第9个数据
9
数组元素为:
1 2 3 4 5 6 7 8 9 
*************************************************
			1 --插入数据
			2 --显示所有数据
			3 --在指定位置插入数据
			4 --查询能够被3整除的数据
			0 --退出
*************************************************
请输入对应的数字进行操作
2
数组元素为:
1 2 3 4 5 6 7 8 9 
*************************************************
			1 --插入数据
			2 --显示所有数据
			3 --在指定位置插入数据
			4 --查询能够被3整除的数据
			0 --退出
*************************************************
请输入对应的数字进行操作
3
请输入要插入的数据
10
请输入要插入的位置
3
1 2 3 10 4 5 6 7 8 9 
*************************************************
			1 --插入数据
			2 --显示所有数据
			3 --在指定位置插入数据
			4 --查询能够被3整除的数据
			0 --退出
*************************************************
请输入对应的数字进行操作
4
数组中能够被3整除的数据为:3 6 9 
*************************************************
			1 --插入数据
			2 --显示所有数据
			3 --在指定位置插入数据
			4 --查询能够被3整除的数据
			0 --退出
*************************************************
请输入对应的数字进行操作
0
退出程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值