第一阶段案例和复习
do...while
while
foreach
fori
switch case break default
if嵌套
多重if
if...else
parseDouble()
parseInt()
sort
binarySearch
fill
copyOfRange
copyOf
ciel
abs
random
nextLine
nextInt nextDouble 等
next
System.arraycopy
System.in
System.out.println
while
for
switch
if
注解
枚举
接口
数组 (已学)
类
double
long
float
int
char
short
byte
boolean
idea
vscode
maven环境变量设置
JDK环境变量设置
DoubLe
Integer
Arrays
Math
Scanner
System
循环
选择
位运算 ^ ~ << >> >>>
逻辑运算 (&& || )登录与或 !(非)
比较运算 > < >= <= == !=
算数 + - * / % ++ -- += -= *= /=
赋值 =
引用数据类型
基本数据类型
变量的读写
变量与常量的区别
变量命名规范
变量定义语法
安装开发工具
安装maven
安装JDK
实用类
流程控制 所有流程控制语句都是可以合理嵌套
运算符
数据类型
变量
环境搭建
java第一阶段知识结构
吃货联盟 运行需求分析
- 菜单输出 System.out.println
- 可与使用者在控制台交互 Scanner
- 交互过程中提示信息 System.out.println 交换过程中收集使用者信息 Scanner 判断用户选择信息用到流程控制分支选择结构(if switch)
- 收集使用者信息是的简单数据验证 运算符加流程控制
- 信息汇总输出中 使用字符串拼接 算数运算
- 重复使用 流程控制 循环 break
- 数据的管理 使用数组
public class ChiHuo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 初始化菜单
String[][] caidan = {
{"1", "红烧带鱼", "38.0"},
{"2", "鱼香肉丝", "20.0"},
{"3", "时令蔬菜", "10.0"}
};
// 初始化餐袋信息
String[][] candai = {
{"1", "张晴", "红烧带鱼2份", " 3日", "天成路207号", "76.0元", "已完成"},
{"2", "张晴", "鱼香肉丝2份", "10日", "天成路207号", "20.0元", "已预定"},
};
boolean aa = false;
String[] good = new String[caidan.length];
// 循环执行订餐流程
while (true) {
System.out.println("欢迎使用“吃货联盟订餐系统”");
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、退出系统");
System.out.println("****************************");
System.out.print("请选择:");
// 约束在控制台的数据统一使用nextline 避免scanner 输入时出现跳过的现象
String choose = scanner.nextLine();
// 利用用户在控制台输入的信息做流程判断
// 1.我要订餐
if (choose.equals("1")) {
System.out.println("***我要订餐***");
System.out.print("请输入订餐人姓名:");
String name = scanner.nextLine();
System.out.println("序号\t菜名\t单价");
for (String[] oneXinxi :
caidan) {
System.out.println(oneXinxi[0] + "\t" + oneXinxi[1] + "\t" + oneXinxi[2] + "元");
}
System.out.print("请选择您要点的菜品编号:");
String caipingId = scanner.nextLine();
System.out.print("请选择您需要的份数:");
String fengshu = scanner.nextLine();
String time;
while (true) {
System.out.println("请输入送餐时间(送餐时间是10点至20点间整点送餐):");
time = scanner.nextLine();
int time2 = Integer.parseInt(time);
if (time2 >= 10 && time2 <= 20) {
break;
}
System.out.println("您输入的时间不在订餐时间范围之内!");
}
System.out.print("请输入送餐地址:");
String address = scanner.nextLine();
System.out.println("订餐成功!");
// 新增代码
String canXinxi = caidan[Integer.parseInt(caipingId) - 1][1] + " " + fengshu + "份";
System.out.println("您订的是:" + caidan[Integer.parseInt(caipingId) - 1][1] + "\t" + fengshu + "份");
System.out.println("送餐时间:" + time + "点");
double danjia = Double.parseDouble(caidan[Integer.parseInt(caipingId) - 1][2]);
double canfei = danjia * Integer.parseInt(fengshu);
double songcanfei = 0;
if (canfei < 30) {
songcanfei = 6;
}
double sum = canfei + songcanfei;
System.out.println("餐费:" + canfei + "元,送餐费" + songcanfei + "元,总计:" + sum + "元。");
// ------- 新增订餐信息start-------------
// 新定义一个比原来老餐袋长1的新餐袋
String[][] temp = new String[candai.length + 1][7];
// 先把老餐袋中的信息拷贝到新餐袋中
//System.arraycopy(temp,0,candai,0,candai.length); // 不能成功拷贝二维数组
for (int i = 0; i < candai.length; i++) {
temp[i] = candai[i];
}
// 将新成功订餐信息写入到新餐袋的最后
//temp[candai.length] = new String[]{candai.length+1+"","?","?","?","?","?","?"};
temp[candai.length] = new String[]{candai.length + 1 + "", name, canXinxi, "?", address, +sum + "元", "\t已预定"};
// 将零时的新餐袋所有信息赋值给餐袋(新餐袋替换老餐袋)
candai = temp;
// -----新增订餐信息end-----------------
System.out.println("输入0返回:");
String fanhui = scanner.nextLine();
if (!fanhui.equals("0")) {
break;
}
}
// 2.查看餐袋
if (choose.equals("2")) {
//TODO 周四要完成
System.out.println("***查看餐袋***");
System.out.println("序号\t订餐人\t餐品信息\t\t送餐日期\t送餐地址\t总金额\t订单状态");
for (String[] oneCandai : candai) {
System.out.println(oneCandai[0] + "\t\t" + oneCandai[1] + "\t" + oneCandai[2] + "\t" + oneCandai[3] + "\t" + oneCandai[4] + "\t" + oneCandai[5] + "\t" + oneCandai[6]);
}
System.out.println("是否重新订餐,重新订餐请输入0返回:");
String fanhui = scanner.nextLine();
if (!fanhui.equals("0")) {
break;
}
}
// 3.签收订单
if (choose.equals("3")) {
//TODO 周五要完成
System.out.println("****签收订单*****");
System.out.print("请选择要签收的订单序号:");
String num = scanner.nextLine();
// 用户输入的订单号在处理时可能出现三种情况 1.签收已签收的订单 2.签收不存在的订单 3.签收可以签收的订单
boolean flag = true; // 假设修正法
for (String[] a : candai) {
if (num.equals(a[0])) {
// num 存在 判断是不是被签收了
flag = false;
if (candai[Integer.parseInt(num) - 1][6].equals("已完成")) {
System.out.println("你选择的订单已完成签收,不能再次签收!");
break;
} else {
candai[Integer.parseInt(num) - 1][6] = "已完成";
System.out.println("订单签收成功!");
break;
}
}
}
if (flag) {
System.out.println("您选择的订单不存在!");
}
}
// 4.删除订单
if (choose.equals("4")) {
//TODO 周五要完成
System.out.println("****删除订单*****");
System.out.print("请选择要删除的订单序号:");
String num = scanner.nextLine();
// 用户输入的订单号在处理时可能出现三种情况 1.签收已签收的订单 2.签收不存在的订单 3.签收可以签收的订单
boolean flag = true; // 假设修正法
for (String[] a : candai) {
if (num.equals(a[0])) {
// num 存在 判断是不是被签收了
flag = false;
if (candai[Integer.parseInt(num) - 1][6].equals("已完成")) {
System.out.println("删除订单成功!");
// 删除订单操作 ,代码怎么做?
String[][] temp = new String[candai.length - 1][7];
for (int i = 0; i < temp.length; i++) {
if (i == Integer.parseInt(num) - 1) {
for (int j = i; j < candai.length - 1; j++) {
candai[j] = candai[j + 1];
candai[j][0] = (Integer.parseInt(candai[j][0]) - 1) + "";
}
}
temp[i] = candai[i];
}
//
candai = temp;
break;
} else {
candai[Integer.parseInt(num) - 1][6] = "已完成";
System.out.println("您选择的订单未签收,不能删除!");
break;
}
}
}
if (flag) {
System.out.println("您选择的订单不存在!");
}
}
// 5.我要点赞
if (choose.equals("5")) {
//TODO 周日要完成
System.out.println("***我要点赞***");
//点赞系统
while (true) {
System.out.println("请输入你要点赞的订单:");
String dianzan = scanner.nextLine();
good[Integer.parseInt(dianzan) - 1] = "已点赞";
if (aa == true) {
System.out.println("该订单已经点过赞啦,谢谢你的好意!");
}
if (good[Integer.parseInt(dianzan) - 1].equals("已点赞")) {
aa = true;
}
System.out.println("点赞成功!");
System.out.println("输入0返回:");
String fanhui = scanner.nextLine();
if (!fanhui.equals("0")) {
break;
}
}
// 6.退出系统
if (choose.equals("6")) {
// 退出程序两种手段:自然结束 和 强制结束
break; // 结束死循环,使程序自然死亡
//System.exit(1); // 强制死亡,表示杀死jvm 从此代码开始后续的所有代码都得不到执行
}
} // 这儿是死循环
System.out.println("程序自然死亡。。。。。。。");
}// 程序执行到这个位置就是自然结束
}
}
注意点
数组的索引只能是int 类型数据
将String类型数字转化为int数据类型数据,不能强制类型转化,强制类型转化是数据必须兼容
参考代码caidan[Integer.parseInt(caipingId) -1]
将String类型数字化为其他基本数据类型的方式类似