第一阶段案例和复习

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类型数字化为其他基本数据类型的方式类似

变量作用域 之后详细讲解