Java方法小练习

最近写的Java方法小练习
代码量不是太多
但是模拟分页和排序方法记得还不是太牢固

import java.util.Random;
import java.util.Scanner;

/**
 * @version 1.0
 * @desc 动物园管理系统
 *  动物园里有狮子、老虎、猴子、大象和熊猫
 *  要求:
 *  使用方法实现增删改查、排序和分页功能
 *  动物增加最多不超过10种
 *  动物有饥饿度,最高100,低于50动物逃跑
 *  饥饿度通过训练动物和喂养动物改变
 * @date2020/4/27
 */
public class ZooManager {
    //定义要使用的变量
    static Scanner in = new Scanner(System.in);
    static Random rand = new Random();
    //数组总长度
    final static int SIZE = 10;     //总长度
    //目前长度
    static int dataCount = 7;       //初始数据有6条
    //动物属性
    static String[] animalName = new String[SIZE];      //动物名
    static String[] animalSex = new String[SIZE];       //动物性别   公/母
    static int[] animalHug = new int[SIZE];             //动物饥饿度 最高100最低0
    //动物姓名数组
    static String[] animalNames = {"狮子","老虎","大象","猴子","熊猫","斑马","鳄鱼","麻雀","鲨鱼","松鼠","乌龟","鸵鸟","考拉"};
    //动物性别数组
    static String[] animalSexs = {"公","母"};
    //主菜单
    public static void menu(){
        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、退出");
    }
    //逻辑控制
    public static void logic(){
        //是否一直显示
        boolean isRun = true;
        //调用数据填充
        addData();
        while(isRun){
            menu();
            int choice = inputInt("请输入你的选择:");
            switch(choice){
                case 1:
                    //列表查看
                    showList();
                    break;
                case 2:
                    //增加动物
                    addAnmialMsg();
                    break;
                case 3:
                    deleAnimal();
                    //删除动物
                    break;
                case 4:
                    //训练动物
                    trainAnimals();
                    break;
                case 5:
                    //饥饿度排序
                    animalSort();
                    break;
                case 6:
                    isRun = !signOut();
                    //退出
                    break;
                default:
                    System.out.println("输入错误请重新输入:");
            }
        }
    }
    /**
     *  数组排序
     */
    public static void animalSort(){
        //先定义一个临时数组存储没有排序之前的
        int[] tempIdx = new int[dataCount];
        //添加数据
        for (int i = 0; i < dataCount; i++) {
            tempIdx[i] = i;
        }
        //然后开始交换
        for(int i = 0;i < dataCount - 1;i++){
            for(int j = 0;j < dataCount - i -1;j++){
                if(animalHug[tempIdx[j]] < animalHug[tempIdx[j + 1]] ){
                    int temp = tempIdx[j];
                    tempIdx[j] = tempIdx[j + 1];
                    tempIdx[j + 1] = temp;
                }
            }
        }
        System.out.println("动物名\t动物性别\t动物饥饿度");
        for(int i : tempIdx){
            System.out.printf("%s \t %s \t %d\n",animalName[i],animalSex[i],animalHug[i]);
        }
    }
    //喂养动物
    /**
     * 喂养动物 增加饥饿度
     */
    public static void feedAnmial(){
        int index = findIdx();
        if(index != -1 && animalHug[index] + 10 <= 100){
            animalHug[index] += 10;
        }else if(index != -1 && animalHug[index] + 10 >= 100){
            animalHug[index] += (100-animalHug[index]);
            System.out.println("动物已经喂饱了~~~");
        }
    }
    //训练动物
    /**
     * 训练动物 减少饥饿度
     */
    public static void tranAnim(){
        int index = findIdx();
        if(index != -1 && animalHug[index] > 50){
            animalHug[index] -= 10;
            System.out.println("训练成功当前"+animalName[index]+"饥饿度为"+animalHug[index]);
            if(animalHug[index] < 50){
                System.out.println("动物已经被饿地逃走了~~~");
                deleAnimal(index);
            }
        }
    }
    /**
     * 喂养和训练动物
     */
    public static void trainAnimals(){
        boolean isContinue = true;
        while (isContinue) {
            int choice = inputInt("1、训练 | 2 、喂养 | 3、 退出\n请输入选择");
            switch (choice) {
                case 1:
                    //训练动物
                    tranAnim();
                    break;
                case 2:
                    //喂养动物
                    feedAnmial();
                    break;
                case 3:
                    //退出
                    isContinue = !signOut();
                    break;
                default:
                    System.out.println("输入错误请重新输入");
                    break;
            }
        }
    }
    /**
     *  寻找下标
     * @return          动物名称对应的下标
     */
    public static int findIdx(){
        int index=  -1;
        String animName = inputString("请输入要删除动物的名称");
            for (int i = 0; i < dataCount; i++) {
                if (animName.equals(animalName[i])) {
                    index = i;
                }
        }
        return index;
    }
    //重写删除动物
    //删除动物
    public static void deleAnimal(int indexs){
        int index = indexs;
        if(index != -1){

                for (int i = index; i < dataCount; i++) {
                    animalName[i] = animalName[i + 1];
                    animalSex[i] = animalSex[i + 1];
                    animalHug[i] = animalHug[i + 1];
                }
                dataCount--;
            }
    }
    //删除动物
    public static void deleAnimal(){
        int index = findIdx();
        if(index != -1){
            boolean confDele = confirm("是否确认删除y/n?");
            if(confDele) {
                for (int i = index; i < dataCount; i++) {
                    animalName[i] = animalName[i + 1];
                    animalSex[i] = animalSex[i + 1];
                    animalHug[i] = animalHug[i + 1];
                }
                dataCount--;
                System.out.println("删除成功请返回主菜单查看");
            }else{
                System.out.println("啥也没做回主菜单了哦");
            }
        }else{
            System.out.println("没有找到该动物");
        }
    }
    //增加动物
    public static void addAnmialMsg(){
        boolean isTrue = true;
        animalName[dataCount] = inputString("请输入要添加的动物名称");
        animalSex[dataCount] = inputString("请输入要添加的动物性别 公/母");
        if(!"公".equals(animalSex[dataCount])||"母".equals(animalSex[dataCount])){
            //如果输入错误则随机给动物赋值
            System.out.println("你输入的性别错误已为你随机予了动物性别");
            animalSex[dataCount] = animalSexs[rand.nextInt(3)];
        }
        animalHug[dataCount] = inputInt("请输入要添加的动物饥饿度");
//        对动物输入的饥饿度进行判断
//        while(!isTrue) {
//            if (animalHug[dataCount] > 100) {
//                System.out.println("输入错误 不能大于100");
//                animalHug[dataCount] = inputInt("请输入要添加的动物饥饿度");
//            }
//        }
        dataCount++;
        System.out.println("添加成功");
    }
    //查看数据
    /**
     * 动物列表查看
     * 修改为分页查看
     */
    public static void showList(){
//        System.out.println("动物名\t动物性别\t动物饥饿度");
//        for (int i = 0; i <dataCount ; i++) {
//            System.out.printf("%s \t %s \t %d\n",animalName[i],animalSex[i],animalHug[i]);
//        }
        //分页思路
        //首先定义一页显示多少数据
        int pageSize = 2;
        //然后统计一共多少页 判断是否多一页
        int pageCount = dataCount % pageSize == 0 ? dataCount / pageSize : (dataCount / pageSize) + 1;
        //然后定义初始页
        int currPage = 1;
        //开始进行分页展示
        boolean startShow = true;
        showPage(currPage,pageCount,pageSize);
        while(startShow){
            //等待用户输入选择
            int choice = inputInt("1、首页 | 2、上一页 | 3、下一页 | 4、尾页 | 5、退出");
            switch (choice){
                case 1:
                    //首页
                    currPage = 1;
                    break;
                case 2:
                    //上一页 对界值进行判断
                    currPage = currPage > 1 ? currPage + 1 : 1;
                    break;
                case 3:
                    //下一页 界值判定
                    currPage = currPage < pageCount ? currPage + 1 : pageCount;
                    break;
                case 4:
                    currPage = pageCount;
                    break;
                case 5:
                    startShow = !signOut();
                    break;
                default:
                    System.out.println("输入错误请重新输入");
                    break;
            }
            //做判断是否退出后不再显示
            if(startShow){
                showPage(currPage,pageCount,pageSize);
            }
        }
    }
    //分页显示第二步
    public static void showPage(int currPage,int pageCount,int pageSize){
        //一次显示多少条数据 每次成倍向上叠加
        //首先定义最小长度 1 - 1 * 2 = 0  | 2 - 1 * 2 = 2
        int minIdx = (currPage - 1) * pageSize;
        //然后定义重点长度 1 * 2 = 2     | 2 * 2 = 4
        int maxIdex = currPage * pageSize;
        //对数组越界进行处理  如果最大值小于等于总数据则使用当前最大下标,如果大于则使用数据最大长度作为最大下标
        maxIdex = maxIdex <= dataCount ? maxIdex : dataCount;
        //然后进行输出
        System.out.println("动物名\t动物性别\t动物饥饿度");
        for(int i = minIdx;i < maxIdex;i++){
            System.out.printf("%s \t %s \t %d\n",animalName[i],animalSex[i],animalHug[i]);
        }
        System.out.printf("当前为 %d 页 | 共 %d 页 | 共 %d 条数据\n",currPage,pageCount,dataCount);
    }
    //随机添加动物数据
    public static void addData(){
        for (int i = 0; i < dataCount; i++) {
            animalName[i] = animalNames[rand.nextInt(SIZE)];
        }
        for (int i = 0; i < dataCount; i++) {
            animalSex[i] = animalSexs[rand.nextInt(2)];
        }
        for (int i = 0; i < dataCount; i++) {
            animalHug[i] = rand.nextInt(50)+50;
        }
    }
    //退出
    public static boolean signOut(){
        return  confirm("是否确认退出y/n");
    }
    //字符串输入
    /**
     *
     * @param msg     传入消息
     * @return        用户输入值
     */
    public static String inputString(String msg){
        System.out.println(msg);
        return in.next();
    }
    //整形输入
    /**
     *
     * @param msg
     * @return 用户输入的整型值
     */
    public static int inputInt(String msg){
        System.out.println(msg);
        return in.nextInt();
    }
    /**
     * 判断用户输入是否符合条件
     * @param msg   消息
     * @return  用户是否确认
     */
    //判断
    public static boolean confirm(String msg){
        String result = inputString(msg);
        return "y".equals(result);
    }

    public static void main(String[] args) {
        logic();
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值