Java开发基础_02

三. 选择结构

1. 位运算

(了解)位运算和二进制有关

  • 左移 <<

    • 左移就相当于乘以2的几次方
  • 右移 >>

    • 右移就相当于除以2的几次方
    package com.kgc;
    //左右移
    public class Demo01 {
        public static void main(String[] args) {
            int a=10;
            System.out.println(a<<3);
            /*
            10的二进制左移三位
            00001010
            01010000  64+16=80
            */
            System.out.println(a>>3);
            /*
            10的二进制右移三位
            00001010
            00000001 0100  1    后面溢出
            */
        }
    }
    

2. 顺序结构

程序是按照顺序执行 , 从上往下

输出 , 从上往下

输入(实际工作中没用 , 为了练习使用在命令窗口输入一些数据,被程序获取)

  • 步骤

    • 先准备一个输入的工具

      • (java.util.Scanner) input=new java.util.Scanner(System.in)
    • 输入一个输入的入口

      • nextInt() 整数数据的输入入口
      • nextDouble() 浮点型数据的输入入口
      • next() 字符串数据的输入入口
      • 只能取空格前面的内容
      • nextLine()字符串的输入入口
      • 读取一行,空格也算
      package com.kgc;
      
      public class Demo02 {
          public static void main(String[] args) {
              //准备一个输入的工具
              java.util.Scanner input=new java.util.Scanner(System.in);
              //准备输入入口
              System.out.print("请输入年龄:");
              int age=input.nextInt();
              System.out.println("您输入的年龄是:"+age);
      
          }
      }
      

3. 分支结构

  • 单分支

    • 语法 : if(条件){代码块}

    • 原理 : 如果条件成立,则执行代码块; 如果条件不成立,则不执行代码块

    • 特点 :

      • 当if后大括号只有一行代码时,大括号可以省略,但是这行代码不能是变量的声明
      • if是可以的嵌套的,if大括号里边可以写任意代码
      • 变量的作用域,只能是当前大括号
      package com.kgc;
      import java.util.Scanner;
      public class Demo03 {
          public static void main(String[] args) {
              //输入工具
              Scanner sc = new Scanner(System.in);
              //输入入口
              System.out.print("输入分数:");
              double score = sc.nextDouble();
              if (score>700){
                  System.out.println("奖励");
              }
          }
      }
      
  • 双分支

    • 语法 : if(条件){代码块1}else{代码块2}

    • 原理 : 条件成立执行代码块1,条件不成立执行代码块2

    • 特点 :

      • 如果代码中只有一行代码大括号可以省略
      • 不能做变量的声明
      • 大括号可以嵌套
      //键盘输入一个数,判断是奇数还是偶数
      package com.kgc;
      import java.util.Scanner;
      public class Demo04 {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              System.out.print("输入一个整数:");
              int number = sc.nextInt();
              if (number%2==0){
                  System.out.println("偶数");
              }else{
                  System.out.println("奇数");
              }
          }
      }
      
  • 多分支

    • 语法 : if(条件1){代码块1}else if(条件2){代码块2}…else{代码块n}

    • 原理 : 如果条件1成立执行代码块1,结束整个if ; 如果条件1不成立,判断条件2是否成立,如果不成立判断条件3 ; 如果都不成立执行else代码块n

      /*输入成绩
      如果满分奖励一次
      高于90假发
      高于80洗发水
      高于60洗面奶
      否则无奖励
      */
      package com.kgc;
      import java.util.Scanner;
      public class Demo05 {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              int score = sc.nextInt();
              System.out.println("请输入成绩:");
              if (score==100){
                  System.out.println("一次");
              }else if (score>90){
                  System.out.println("假发");
              }else if (score>80){
                  System.out.println("洗发水");
              }else if (score>60){
                  System.out.println("洗面奶");
              }else{
                  System.out.println("无奖励");
              }
          }
      } 
      

4. 选择结构

  • 选择结构

    • 语法

      语法格式:
      switch(){
          case1:
              代码块1;
              break;
          case2:
              代码块2;
              break;
          ...
          default :
              代码块n;
              break;
      }
      
    • 原理

      • 判断变量的值和值1是不是相等,如果相等执行代码块1,执行完后找break结束 ; 如果不相等,判断值和值2是否相等,如果相等执行代码块2,执行完找break结束整个switch… ; 如果都不符合,再有default的情况下执行代码块n
    • 注意

      • case后的值不能相同
      • case有穿透效果,如果没有break向下执行
      • switch结束,要么执行完代码,要么遇到break
      • switch支持的数据类型
        • byte , short , int , char , String , 枚举
      //练习
      package com.kgc;
      import java.util.Scanner;
      public class Demo09_Month {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              System.out.print("输入月份:");
              int month = sc.nextInt();
              switch (month){
                  case 1:
                  case 2:
                      System.out.println("冬季");
                  case 3:
                  case 4:
                  case 5:
                      System.out.println("春季");
                  case 6:
                  case 7:
                  case 8:
                      System.out.println("夏季");
                  case 9:
                  case 10:
                  case 11:
                      System.out.println("秋季");
                  case 12:
                      System.out.println("冬季");
              }
          }
      }
      

5. 循环结构

为了提高复用性,提高扩展性和可维护性

  • while循环

    • 语法 : while(循环条件){代码块}

    • 原理 : 循环条件成立时,则执行代码块,执行完代码块会再次回来循环条件判断的位置,如果依然成立,则再次执行代码,知道循环条件不成立为止(循环结构结束)

    • 控制循环次数

      • 循环变量
      • 循环条件
      • 循环变量的值改变
      //打印五次helloworld
      package com.kgc;
      public class Demo10_Print5 {
          public static void main(String[] args) {
              int i=0;
              while (i<5){
                  System.out.println("HelloWorld");
                  i++;
              }
          }
      }
      
      //打印1-5,在打印5-1
      package com.kgc02;
      public class Demo01_Xunhuan {
          public static void main(String[] args) {
              int i=1;
              while(i<6){
                  System.out.println(i);
                  i++;
              }
              while(i>1){
                  i--;
                  System.out.println(i);
              }
          }
      }
      
      //输出1-100之间的和
      package com.kgc02;
      public class Demo02_Xunhuan {
          public static void main(String[] args) {
              int i=1,sum=0;
              while (i<101){
                  sum+=i;
                  i++;
              }
              System.out.println(sum);
          }
      }
      
      //输出1-100之间的偶数和
      package com.kgc02;
      public class Demo03_Xunhuan {
          public static void main(String[] args) {
              int i=1,sum=0;
              while (i<101){
                  if(i%2==0){
                      sum+=i;
                  }
                  i++;
              }
              System.out.println(sum);
          }
      }
      
      //不断输入正数,输出啥打印啥,知道输入-1为止
      package com.kgc02;
      import java.util.Scanner;
      public class Demo04_Xunhuan {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              while(true){
                  System.out.print("输入一个数:");
                  int i = sc.nextInt();
                  if(i==-1){
                      break;
                  }else System.out.println(i);
              }
          }
      }
      
      //班级有五位同学,依次输入每位同学的java成绩,求出总成绩的最高分,平均分,最低分
      package com.kgc02;
      import java.util.Scanner;
      public class Demo05_Xunhuan {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              float i=1,sum=0,max=0,min=100;
              float avg=0;
              while (i<=5){
                  System.out.print("请输入第"+i+"个同学的成绩:");
                  float score = sc.nextInt();
                  sum+=score;
                  if (score>max){
                      max=score;
                  }
                  if (score<min){
                      min=score;
                  }
                  avg=(float)(sum/i);
                  ++i;
              }
              System.out.println("总成绩:" + sum);
              System.out.println("最大:" + max);
              System.out.println("最小:" + min);
              System.out.println("平均分:" + avg);
          }
      }
      
    • 循环嵌套(循环内有完整的循环)

      //打印图形
      package com.kgc02;
      public class Demo06_Rectangle {
          public static void main(String[] args) {
              int i=1;
              while (i<=3){
                  int j=1;
                  //while(j<=i) 打印直角三角形
                  while (j<=4) {
                      System.out.print("*");
                      j++;
                  }
                  System.out.println();//换行功能
                  i++;
              }
          }
      }
      
      //九九乘法表
      package com.kgc02;
      public class Demo_MultiplicationTable {
          public static void main(String[] args) {
              int i = 1;
              while (i <= 9) {
                  int j = 1;
                  while (j <= i) {
                      System.out.print(j + "×" + i + "=" + i*j + "\t");
                      j++;
                  }
                  System.out.println();
                  i++;
              }
          }
      }
      
  • for循环

    • 语法 : for(循环变量的声明;循环条件;循环变量的改变){代码块}

    • 把循环的三要素,总结到了一行(小括号内)

    • 确定循环次数的情况下,使用for循环

    • 不确定循环次数的情况下,使用while循环

      //for循环实现九九乘法表
      package com.kgc02;
      public class Demo09_Forloop {
          public static void main(String[] args) {
              for(int i=1;i<=9;i++){
                  for (int j=1;j<=i;j++){
                      System.out.print(j + "×" + i + "=" + i*j + "\t");
                  }
                  System.out.println();
              }
          }
      }
      
  • do…while

    • 语法 : do{代码块}while(循环条件);

    • 原理 : 执行代码块,然后再判断循环条件,如果成立则继续执行代码块,如果不成立则循环结束

    • 特点 : do…while至少无条件循环一次

    • 场景 : 不确定循环次数时使用

      //登录,输入用户名和密码(username=root,password=123)
      package com.kgc02;
      import java.util.Scanner;
      public class Demo10_Sign {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              String userName;
              String passWord;
              boolean flag=true;
              do {
                  System.out.print("请输入用户名:");
                  userName = sc.next();
                  System.out.print("请输入密码:");
                  passWord = sc.next();
                  if (userName.equals("root")&&passWord.equals("123")){
                      System.out.println("欢迎登录!");
                      flag=false;
                  }else if (userName.equals("quit")||passWord.equals("quit")){
                      System.out.println("欢迎再来!");
                      flag=false;
                  }else{
                      System.out.println("用户名或密码错误,请重新输入");
                  }
              }while (flag);
          }
      }
      
  • break

    • 用于结束当前循环(离他最近的那个循环,它属于这个循环里边的代码)
  • continue

    • 用于结束本次循环,直接进入下一次循环

      //数7游戏(数字中带7的或7的倍数不行,不打印)
      package com.kgc02;
      import java.util.Scanner;
      public class Demo11_Count7 {
          public static void main(String[] args) {
              int number=0;
              Scanner sc = new Scanner(System.in);
              while (true){
                  number++;
                  if (number>30){
                      System.out.println("再见!");
                      break;
                  }else if (number%7==0 || number%10==7){
                      System.out.println("过");
                      continue;
                  }else {
                      System.out.println(number);
                  }
              }
          }
      }
      

四. 数组

  • 容器 : 将多个数据存储在一起,每个数据都称为该容器的元素

  • 数组 : 数组就是用于存储数据的长度固定的容器,保证多个数据的数据类型要一致

  • 数组的特点

    • 数字的长度一旦确定不能修改
    • 创建数组时,会在内存中开辟一块连续的空间
    • 存取元素的速度快,因为可以通过下标直接定位到任意一个元素

1. 一维数组

  • 数组的定义

    • 方式一 :静态初始化

      • 数据类型[] 数组名 = {元素1,元素2,元素3…}
    • 方式二 :静态初始化

      • 数据类型[] 数组名 = new 数据类型[] {元素1,元素2,元素3…}
    • 方式三 :动态初始化

      • 数据类型[] 数组名
      • 数组名 = new 数据类型[长度]
      • 数组名 = new 数据类型[] {元素1,元素2,元素3…}
      //定义一个数组,保存五个人的名字
      package com.kgc01;
      public class Demo01 {
          public static void main(String[] args) {
              //方式一
              String[] names1 = {"张三", "李四"};
              //方式二
              String[] names2 = {"王五","赵六"};
              //方式三
              String[] names3;
              names3 = new String[]{"张三", "李四"};
      
              String[] names4 = new String[5];
              names4[0]="zhang";
              System.out.println(names4[0]);
          }
      }
      
      //保存五个人的java成绩
      package com.kgc01;
      import java.util.Scanner;
      public class Demo02 {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              int[] score = new int[5];
              for(int i=0;i<5;i++){
                  System.out.print("请输入第"+(i+1)+"个人的成绩:");
                  score[i]=sc.nextInt();
              }
              System.out.println(score[2]);
      
          }
      }
      
    • [] 表示的是一个数组

    • 数组名 : 起一个变量名,满足标识符的规范,后边可以用这个名字操作数组

    • new : 关键字,创建数组时使用的,数组本身是一个引用数据类型,所以需要用new创建一个数组对象

    • [长度] : 数组的长度,表示数组容器中可以存放多少个元素(一旦制定不能修改)

    • 索引 : 每个存储的数组中的元素,都会自动拥有一个编号,从0开始称为数组索引(index)

    • 索引范围 : [o,数组的长度-1]

    • 数组的长度 : 每个数组都有一个长度,是固定的,Java给了数组的一个属性,可以获取数组的长度(数组名.length),执行后可以得到数组的长度(int类型的结果)

      • 数组的最大索引 数组名.length-1
    • 数组的遍历 : 把数组中的每一个元素都获取出来,这就是遍历

              //遍历数组
              int Max=0,Min=100,Sum=0;
              for(int i=0;i<score.length;i++){
                  if(score[i]>Max){
                      Max=score[i]; }
                  if (score[i]<Min){
                      Min=score[i]; }
                  Sum+=score[i];
              }
              System.out.println("最高的成绩是:"+Max);
              System.out.println("最低的成绩是:"+Min);
              System.out.println("总成绩是:"+Sum);
      
  • 内存相关

    • 方法区

      • 保存一些类信息,常量,静态变量
      • 保存的都是对象,如数组对象是new来创建的,都保存在堆内存
      • java执行过程中执行过程中,局部变量都会在里边,对象的引用,方法的执行,执行完会自动释放(先进后出,后进先出),压栈出栈
    • 两个数组指向同一个地址

      package com.kgc01;
      public class Demo03 {
          public static void main(String[] args) {
              int[] num = new int[]{1,2,3,4,5};
              System.out.println(num);// [I@1540e19d 堆内存的地址
              int[] num2 = num;
              num2[0]=99;
              System.out.println(num[0]);     // 99
              System.out.println(num2[0]);    // 99
          }
      }
      
    • 注意事项

      • ArrayIndexOutOfBoundsException 数组索引越界异常
      • NullPointerException 空指针异常
      • 新定义的数组都是有默认值的
        • 字符串类型 默认值是null
        • 整数类型 默认值是0
        • 小数类型 默认值是0.0

2. 二维数组

  • 二维数组定义

    • 定义一 : int [] [] score = new int [] []{{80,90,100},{10,20,30},{40,50,60}}

    • 简写 : int [] [] score = {{80,90,100},{10,20,30},{40,50,60}}

    • 定义二 : int [] [] score = new int [3] [4]

      //从键盘输入3个组的java成绩,使用二维数组解析
      package com.kgc01;
      import java.util.Scanner;
      //从键盘输入3个组的java成绩,使用二维数组解析
      public class Demo01 {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              int[][] score = new int[3][4];
              //为每一个学生赋值
              for (int i=0;i<score.length;i++){
                  for (int j=0;j<score[i].length;j++){
                      System.out.print("请输入第"+(i+1)+"小组中第"+(j+1)+"个同学的java成绩:");
                      score[i][j]=sc.nextInt();
                  }
              }
              //遍历
              for (int i=0;i<score.length;i++){
                  for (int j=0;j<score[i].length;j++){
                      System.out.println("第"+(i+1)+"小组中第"+(j+1)+"个同学的java成绩:"+score[i][j]);
                  }
              }
          }
      }
      
  • Arrays类

    • 排序

      //输入五个同学的java成绩,进行排序
      package com.kgc01;
      import java.util.Arrays;
      import java.util.Scanner;
      public class Demo02 {
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              int[] scores = new int[5];
              for (int i=0;i<scores.length;i++){
                  System.out.print("请输入第"+(i+1)+"个同学的java成绩:");
                  scores[i]=sc.nextInt();
              }
              System.out.println("排序前--------------------");
              for (int i=0;i<scores.length;i++) {
                  System.out.println("第" + (i + 1) + "个同学的java成绩:"+scores[i]);
              }
              System.out.println("排序后---升序--------------");
              //默认升序排序
              Arrays.sort(scores);
              for (int i=0;i<scores.length;i++) {
                  System.out.println("第" + (i + 1) + "个同学的java成绩:"+scores[i]);
              }
              //降序
              System.out.println("排序后---降序--------------");
              for (int i=scores.length-1;i>=0;i--){
                  System.out.println(scores[i]);
              }
          }
      }
      
    • Arrays其他常用方法

      格式 含义
      equals(数组1,数组2) 比较两个数组是否相等
      toString(array) 将一个数组转换成一个字符串
      fill(数组,值) 把数组中的元素都赋值为一个值
      copyOf(array,length) 把数组array复制成一个长度为length的新数组
      binarySearch(array,val) 查找元素val在数组array中的下标,需要这个数组时有序的
      package com.kgc01;
      import javax.lang.model.type.ArrayType;
      import java.util.Arrays;
      //Arrays常用方法
      public class Demo03 {
          public static void main(String[] args) {
              //equals(数组1,数组2)  比较两个数组是否相等
              int[] arr1 = {10,20,30};
              int[] arr2 = {10,20,30};
              int[] arr3 = {40,50,60};
              System.out.println(Arrays.equals(arr1,arr2));
              System.out.println(Arrays.equals(arr1,arr3));
              //toString(array)  将一个数组转换成一个字符串
              System.out.println(Arrays.toString(arr1));
              //fill(数组,值)  把数组中的元素都赋值为一个值
              int[] arr4 = new int[3];
              Arrays.fill(arr4,100);
              System.out.println(Arrays.toString(arr4));
              //copyOf(array,length)  把数组array复制成一个长度为length的新数组
              int[] arr5 = {10,20,30,40};
              int[] arr6 = Arrays.copyOf(arr5,6);
              System.out.println(Arrays.toString(arr6));
              //binarySearch(array,val)  查找元素val在数组array中的下标,需要这个数组时有序的
              Arrays.sort(arr5);
              System.out.println(Arrays.toString(arr5));
              System.out.println(Arrays.binarySearch(arr5,30));
          }
      }
      
  • 算法

    • 数组顺序查找

      • 顺序查看,挨个查看,对数组元素的顺序没有要求
      • 需求 : 有一个数组,查找一个数在不在这个数组中,如果在打印下标,如果不存在打印不存在
      package com.kgc01;
      //需求 : 有一个数组,查找一个数在不在这个数组中,如果在打印下标,如果不存在打印不存在
      public class Demo04 {
          public static void main(String[] args) {
              int[] arr1 = {10,20,30,24,46,78,25};
              int value=78;   //要查的数
              int index=-1;   //下标
              for (int i=0;i<arr1.length;i++){
                  if (arr1[i]==value){
                      index=i;
                      break;
                  }
              }
              if(index==-1){
                  System.out.println(value+"不存在");
              }else {
                  System.out.println(value+"的下标是"+index);
              }
          }
      }
      
    • 冒泡排序

      • 原理 : 标胶两个相邻的元素,将较大的元素换到右边(后边/下边)
      package com.kgc01;
      import java.util.Arrays;
      //冒泡排序
      public class Demo05 {
          public static void main(String[] args) {
              int[] arr = {33,44,66,99,66,62,57,78};
              System.out.println(Arrays.toString(arr));
              for (int i=0;i<arr.length-1;i++){    //轮数
                  for (int j=0;j<arr.length-1-i;j++){  //每一轮比较几次
                      //如果前边的比后边的大就换
                      if (arr[j]>arr[j+1]){
                          int temp=arr[j];
                          arr[j]=arr[j+1];
                          arr[j+1]=temp;
                      }
                  }
              }
              System.out.println(Arrays.toString(arr));
          }
      }
      
    • 二分法

      • 原理 : 取中值来判断要查的值是在左边还是右边
      package com.kgc02;
      //二分法
      public class Demo06 {
          public static void main(String[] args) {
              //已知一个有序的数组,查某一个数是否在数组中,是的显示下标,不是的显示不存在
              int[] arr = {2,3,4,5,6,7,9,12,34,45,56,66,78,};
              int value=3;   //要查的数
              int index=-1;   //下标
              int left=0;
              int right=arr.length-1;
              int mid=(left+right)/2;
              while (left<=right){
                  if (value==arr[mid]){
                      index=mid;
                      break;
                  }else if (value>arr[mid]){  //往右继续查找
                      //移动左边界,使得mid往右移动
                      left=mid+1;
                  }else if (value<arr[mid]){  //往左继续查找
                      right=mid-1;
                  }
                  mid=(left+right)/2;
              }
              if (index==-1){
                  System.out.println(value+"不存在");
              }else {
                  System.out.println("下标是"+index);
              }
          }
      }
      

3. 吃货联盟订餐系统

package com.kgc;
import java.util.Arrays;
import java.util.Scanner;
public class EatAliance {
        public static void main(String[] args) {
            // 菜单
            String[] menusname = { "鱼香肉丝", "麻婆豆腐", "香辣猪蹄" };
            double[] price = { 36.9, 19.9, 59.9 };
            int[] star = { 0, 0, 0 };
            // 订单人信息
            String[] userName = new String[4];
            String[] caiName = new String[4];
            int[] caiCount = new int[4];
            int[] time = new int[4];
            String[] address = new String[4];
            boolean[] status = new boolean[4];
            double[] allPrice = new double[4];
            // 程序开始
            Scanner sc = new Scanner(System.in);
            System.out.println("欢迎使用“吃货联盟订餐系统”");
            while (true) {
                int index = userName.length;
                for (int i = 0; i < userName.length; i++) {
                    if (userName[i] == null) {
                        index = i;
                        break;
                    }
                }
                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("请选择");
                int num = sc.nextInt();
                switch (num) {
                    // 我要订餐
                    case 1:
                        if (index == 4) {
                            System.out.println("抱歉,现在订单已满,不可再次下单");
                        } else {
                            System.out.print("请输入订单人姓名:");
                            userName[index] = sc.next();
                            System.out.println("序号\t名称\t\t单价\t点赞数");
                            for (int i = 0; i < menusname.length; i++) {
                                System.out.println((i + 1) + "\t" + menusname[i]
                                        + "\t\t" + price[i] + "\t" + star[i]);
                            }
                            System.out.print("请输入序号点菜:");
                            int flag;
                            while (true) {
                                flag = sc.nextInt();
                                if (flag >= 0 && flag <= 3) {
                                    caiName[index] = menusname[flag - 1];
                                    break;
                                } else {
                                    System.out.print("输入错误,请重新输入序号:");
                                }
                            }
                            System.out.print("请输入份数:");
                            while (true) {
                                int temp = sc.nextInt();
                                if (temp > 0) {
                                    caiCount[index] = temp;
                                    break;
                                } else {
                                    System.out.print("输入错误,请重新输入数量:");
                                }
                            }
                            System.out.print("请输入送餐时间(10点~20点):");
                            while (true) {
                                int temp = sc.nextInt();
                                if (temp >= 10 && temp <= 20) {
                                    time[index] = temp;
                                    break;
                                } else {
                                    System.out.print("输入错误,请重新输入时间(10点~2点):");
                                }
                            }
                            System.out.print("请输入送餐地址:");
                            address[index] = sc.next();
                            allPrice[index] = price[flag - 1] * caiCount[index];
                            if (allPrice[index] < 50) {
                                System.out.println("当单笔订单金额未达到50元时,需交纳6元送费");
                                allPrice[index] += 6;
                            }
                            System.out.println("订餐人信息");
                            System.out.println("姓名:    \t" + userName[index]
                                    + "\n菜名:  \t" + caiName[index] + "\n数量:  \t"
                                    + caiCount[index] + "\n送餐时间:\t" + time[index]
                                    + "\n送餐地址:\t" + address[index] + "\n总金额: \t"
                                    + allPrice[index] + "¥");

                        }
                        System.out.print("输入0返回(或者任意整数)");
                        sc.nextInt();
                        break;
                    // 查看餐袋
                    case 2:
                        System.out.println("序号\t姓名\t菜名\t\t份数\t送餐时间\t\t送餐地址\t\状态\t总金额");
                        for (int i = 0; i < index; i++) {
                            System.out.println((i + 1) + "\t" + userName[i] + "\t"
                                    + caiName[i] + "\t\t" + caiCount[i] + "\t"
                                    + time[i] + "\t\t" + address[i] + "\t\t"
                                    + (status[i] ? "已签收" : "未签收") + "\t" +allPrice[i]
                                    + "¥");
                        }
                        System.out.print("输入0返回(或者任意整数)");
                        sc.nextInt();
                        break;
                    // 签收订单
                    case 3:
                        System.out.println("序号\t姓名\t菜名\t\t份数\t送餐时间\t\t送餐地址\t\t状态\t总金额");
                        for (int i = 0; i < index; i++) {
                            System.out.println((i + 1) + "\t" + userName[i] + "\t"
                                    + caiName[i] + "\t\t" + caiCount[i] + "\t"
                                    + time[i] + "\t\t" + address[i] + "\t\t"
                                    + (status[i] ? "已签收" : "未签收") + "\t" + allPrice[i]
                                    + "¥");
                        }
                        System.out.print("请输入序号签收订单:");
                        while (true) {
                            int temp = sc.nextInt();
                            if (temp - 1 >= 0 && temp <= index) {
                                status[temp - 1] = true;
                                break;
                            } else {
                                System.out.print("输入错误,请重新输入序号:");
                            }
                        }
                        System.out.println("序号\t姓名\t菜名\t\t份数\t送餐时间\t\t送餐地址\t\t状态\t总金额");
                        for (int i = 0; i < index; i++) {
                            System.out.println((i + 1) + "\t" + userName[i] + "\t"
                                    + caiName[i] + "\t\t" + caiCount[i] + "\t"
                                    + time[i] + "\t\t" + address[i] + "\t\t"
                                    + (status[i] ? "已签收" : "未签收") + "\t" + allPrice[i]
                                    + "¥");
                        }
                        System.out.print("输入0返回(或者任意整数)");
                        sc.nextInt();
                        break;
                    // 删除订单
                    case 4:
                        System.out.println("序号\t姓名\t菜名\t\t份数\t送餐时间\t\t送餐地址\t\t状态\t总金额");
                        for (int i = 0; i < index; i++) {
                            System.out.println((i + 1) + "\t" + userName[i] + "\t"
                                    + caiName[i] + "\t\t" + caiCount[i] + "\t"
                                    + time[i] + "\t\t" + address[i] + "\t\t"
                                    + (status[i] ? "已签收" : "未签收") + "\t" + allPrice[i]
                                    + "¥");
                        }
                        System.out.print("请输入序号删除订单:");
                        while (true) {
                            int temp = sc.nextInt();
                            if (temp - 1 >= 0 && temp <= index) {
                                for (int i = temp - 1; i < index - 1; i++) {
                                    userName[i] = userName[i + 1];
                                    caiName[i] = caiName[i + 1];
                                    caiCount[i] = caiCount[i + 1];
                                    time[i] = time[i + 1];
                                    address[i] = address[i + 1];
                                    status[i] = status[i + 1];
                                    allPrice[i] = allPrice[i + 1];
                                }
                                userName[index - 1] = null;
                                caiName[index - 1] = null;
                                caiCount[index - 1] = 0;
                                time[index - 1] = 0;
                                address[index - 1] = null;
                                status[index - 1] = false;
                                allPrice[index - 1] = 0.0;
                                index--;
                                break;
                            } else {
                                System.out.print("输入错误,请重新输入序号:");
                            }
                        }
                        System.out.println("序号\t姓名\t菜名\t\t份数\t送餐时间\t\t送餐地址\t\t状态\t总金额");
                        for (int i = 0; i < index; i++) {
                            System.out.println((i + 1) + "\t" + userName[i] + "\t"
                                    + caiName[i] + "\t\t" + caiCount[i] + "\t"
                                    + time[i] + "\t\t" + address[i] + "\t\t"
                                    + (status[i] ? "已签收" : "未签收") + "\t" + allPrice[i]
                                    + "¥");
                        }
                        System.out.print("输入0返回(或者任意整数)");
                        sc.nextInt();
                        break;
                    // 我要点赞
                    case 5:
                        System.out.println("序号\t名称\t\t单价\t点赞数");
                        for (int i = 0; i < menusname.length; i++) {
                            System.out.println((i + 1) + "\t" + menusname[i] + "\t\t"
                                    + price[i] + "\t" + star[i]);
                        }
                        System.out.print("输入序号给菜品点赞");
                        while (true) {
                            int temp = sc.nextInt();
                            if (temp > 0 && temp <= 3) {
                                time[index] = temp;
                                star[temp - 1]++;
                                break;
                            } else {
                                System.out.print("输入错误,请重新输入序号:");
                            }
                        }

                        System.out.println("序号\t名称\t\t单价\t点赞数");
                        for (int i = 0; i < menusname.length; i++) {
                            System.out.println((i + 1) + "\t" + menusname[i] + "\t\t"
                                    + price[i] + "\t" + star[i]);
                        }
                        System.out.print("输入0返回(或者任意整数)");
                        sc.nextInt();
                        break;
                    // 退出系统
                    default:
                        System.out.println("谢谢使用,欢迎下次使用");
                        return;
                }
            }
        }
}

你可能感兴趣的:(Java保姆教程,java,算法,开发语言)