最近写的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();
}
}