【9】综合案例:数组移位与统计

1、综合案例的需求:定义一个类,对数组中的数据进行管理
 
2、方法:
1)在数组中插入数据:public int[] insertData(){}
2)显示所有数据:public void showData(int[] a,int length){} 3)查询能被3整除的数据:public void divThree(int[] a){} 4)在指定位置出插入数据:public void insert AtArray(int[] a,int n,int k){}
ps:括号里的三个意思是:插入数据的数组,数据,位置
5)查询能被3整除的数据:public void divThree(int[] a){}
 
3、提示:异常处理
 
				try {
					a[i] = sc.nextInt();
				} catch (java.util.InputMismatchException e) {
					System.out.println("数据输入错误,不能有非数字!");
					sc.next();//用来接收字符串
					i--;//因为第一个数据错了,要重新输入
				}

 4、  代码:

package com.fiona.javaBasis.day09case;

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

/**
 * 从键盘接收整型数据存放到数组中,并对数组中的数据进行管理
 * 
 * @author fiona
 *
 */
public class DataManage {
    /**
     * 从键盘接收数据
     * 
     * @return 接收数据的数据
     */
    public int[] insertData() {
        int[] a = new int[10];//创建有10个位置的数组
        Scanner sc = new Scanner(System.in);
        // 少接收一个数据,为在指定位置处插入数据做准备
        for (int i = 0; i < a.length - 1; i++) {
            System.out.println("请输入第" + (i + 1) + "个数据:");
            try {
                a[i] = sc.nextInt();
            } catch (InputMismatchException e) {
                System.out.println("输入的数据格式有误,不能有非数字!");
                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开始
     */
    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) {
        String str = "";
        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("********************************************");
    }

    public static void main(String[] args) {
        DataManage dm = new DataManage();
        Scanner sc = new Scanner(System.in);
        int input = 0;
        int[] a=null;
        int n=0,k=0;//n表示要插入的数据,k表示插入位置
        while (true) {
            dm.notice();
            System.out.println("请输入对应的数字进行操作:");
            try{
            input = sc.nextInt();
            }catch(InputMismatchException e){
                System.out.println("输入的数据格式有误,不能有非数字!");
                sc.next();
                continue;
            }
            if (input == 0) {
                System.out.println("退出程序!");
                break;
            }
            switch (input) {
            case 1:
                //插入数据
                a=dm.insertData();
                //显示数据
                System.out.println("数组元素为:");
                dm.showData(a, a.length-1);
                break;
            case 2:
                if(a!=null){
                    System.out.println("数组元素为:");
                    if(a[a.length-1]==0){
                        //如果数组的最后一个元素为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{
                    n=sc.nextInt();
                    System.out.println("请输入要插入数据的位置:");
                    k=sc.nextInt();
                    }catch(InputMismatchException e){
                        System.out.println("输入的数据格式有误,不能有非数字!");
                        sc.next();
                        break;
                    }
                    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;
            }
        }
    }

}
View Code

 

posted @ 2020-04-10 14:21  柠檬不萌!  阅读(242)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end