# 买飞机票

需求:用户购买机票时,机票原价会按照淡季、旺季,头等舱还是经济舱的情况进行相应的优惠,优惠方案如下:5-10 月为旺季,头等舱 9 折,经济舱 8.5 折;11 月到来年 4 月为淡季,头等舱 7 折,经济舱 6.5 折,请开发程序计算出用户当前机票的优惠价

public class Demo1 {
  public static void main(String[] args) {
    double price = planePrice(1000, 8, "经济舱");
    System.out.println("优惠价是" + price);
  }
  // 买飞机票
  public static double planePrice(double price, int month, String type) {
    if (month >= 5 && month <= 10) {
      switch (type) {
        case "头等舱":
          price *= 0.9;
          break;
        case "经济舱":
          price *= 0.85;
          break;
      }
    } else {
      switch (type) {
        case "头等舱":
          price *= 0.7;
          break;
        case "经济舱":
          price *= 0.65;
          break;
      }
    }
    return price;
  }
}

# 开发验证码

需求:开发一个程序,可以生成指定位数的验证码,每位可以是数字、大小写字母

import java.util.Random;
public class Demo2 {
  public static void main(String[] args) {
    System.out.println(createCode(4));
  }
  // 开发验证码
  public static String createCode(int num) {
    Random r = new Random();
    String code = "";
    for (int i = 0; i < num; i++) {
      int type = r.nextInt(3);
      switch (type) {
        case 0:
          // 随机数字
          code += r.nextInt(10);
          break;
        case 1:
          // 随机大写字母:A (65) Z (65+25)
          //alt + 回车键:转换
          char ch1 = (char) (r.nextInt(26) + 65);
          code += ch1;
          break;
        case 2:
          // 随机小写字母:a (97) z (65+25)
          char ch2 = (char) (r.nextInt(26) + 97);
          code += ch2;
          break;
      }
    }
    return code;
  }
}

# 评委打分

需求:在唱歌比赛中,可能有多名评委要给选手打分,分数是 [0 - 100] 之间的整数。选手最后得分为:去掉最高分、最低分后剩余分数的平均分,请编写程序能够录入多名评委的分数,并算出选手的最终得分

import java.util.Scanner;
public class Demo3 {
  public static void main(String[] args) {
    System.out.println("当前选手的得分是:" + getAverageCode(6));
  }
  // 评委打分
  public static double getAverageCode(int number) {
    int[] scores = new int[number];
    Scanner sc = new Scanner(System.in);
    for (int i = 0; i < scores.length; i++) {
      System.out.println("请输入第" + (i + 1) + "个评委的分数:");
      int score = sc.nextInt();
      scores[i] = score;
    }
    int sum = 0;
    int max = scores[0];
    int min = scores[0];
    for (int i = 0; i < scores.length; i++) {
      int score = scores[i];
      sum += score;
      if (score > max) {
        max = score;
      }
      if (score < min) {
        min = score;
      }
    }
    return 1.0 * (sum - max - min) / (number - 2);
  }
}

# 数字加密

需求:某系统的数字密码是一个四位数,如 1983,为了安全,需要加密后再传输,加密规则是:对密码中的每位数,都加 5,再对 10 求余,最后将所有数字顺序反转,得到一串加密后的新数

public class Demo4 {
  public static void main(String[] args) {
    System.out.println("加密后的数字为:" + encrypt(1983));
  }
  // 数字加密
  public static String encrypt(int number) {
    int[] numbers = split(number);
    for (int i = 0; i < numbers.length; i++) {
      numbers[i] = (numbers[i] + 5) % 10;
    }
    reverse(numbers);
    String data = "";
    for (int i = 0; i < numbers.length; i++) {
      data += numbers[i];
    }
    return data;
  }
  public static int[] split(int number) {
    int[] numbers = new int[4];
    numbers[0] = number / 1000;
    numbers[1] = (number / 100) % 10;
    numbers[2] = (number / 10) % 10;
    numbers[3] = number % 10;
    return numbers;
  }
  public static void reverse(int[] numbers) {
    for (int i = 0, j = numbers.length - 1; i < j; i++, j--) {
      int temp = numbers[j];
      numbers[j] = numbers[i];
      numbers[i] = temp;
    }
  }
}

# 数组拷贝

需求:请把一个整型数组,例如存了数据:11,22,33,拷贝成一个一模一样的新数组出来

public class Demo5 {
  public static void main(String[] args) {
    int[] arr = {11, 22, 33, 44};
    int[] newArr = copy(arr);
    printArray(newArr);
  }
  // 数组拷贝
  public static int[] copy(int[] arr) {
    int[] newArr = new int[arr.length];
    for (int i = 0; i < arr.length; i++) {
      newArr[i] = arr[i];
    }
    return newArr;
  }
  // 打印数组
  public static void printArray(int[] arr) {
    System.out.print("[");
    for (int i = 0; i < arr.length; i++) {
      System.out.print(i == arr.length - 1 ? arr[i] + "]" : arr[i] + ",");
    }
  }
}

# 抢红包

需求:一个大 V 直播时发起了抢红包活动,分别有:9、666、188、520、99999 五个红包。 请模拟粉丝来抽奖,按照先来先得,随机抽取,抽完即止,注意:一个红包只能被抽一次,先抽或后抽哪一个红包是随机的

import java.util.Random;
import java.util.Scanner;
public class Demo6 {
  public static void main(String[] args) {
    int[] moneys = {11, 88, 666, 999, 9999};
    start(moneys);
  }
  // 抢红包
  public static void start(int[] moneys) {
    Scanner sc = new Scanner(System.in);
    Random r = new Random();
    for (int i = 1; i <= 5; i++) {
      System.out.println("请输入任意内容进行抽奖:");
      sc.next();
      while (true) {
        int index = r.nextInt(moneys.length);
        int money = moneys[index];
        if (money != 0) {
          System.out.println("恭喜你,抽中了" + money + "元");
          moneys[index] = 0;
          break;
        }
      }
    }
    System.out.println("活动结束~~~");
  }
}

# 找素数

需求:找出 101-200 的素数,并打印出素数的个数

除了 1 和它本身以外,不能被其他正整数整除,就叫素数

public class Demo7 {
  public static void main(String[] args) {
    // 方法一
    search(101, 200);
    // 方法二
    search2(101, 200);
    // 方法三
    for (int i = 101; i <= 200; i++) {
      if (check(i)) {
        System.out.println(i);
      }
    }
  }
  // 找素数
  public static void search(int start, int end) {
    int count = 0;
    for (int i = start; i <= end; i++) {
      boolean flag = true;
      for (int j = 2; j <= i / 2; j++) {
        if (i % j == 0) {
          flag = false;
          break;
        }
      }
      if (flag) {
        count++;
        System.out.println(i);
      }
    }
    System.out.println("当前素数的个数是:" + count);
  }
  public static void search2(int start, int end) {
    int count = 0;
    OUT:
    // 为外部循环指定标签
    for (int i = start; i <= end; i++) {
      for (int j = 2; j <= i / 2; j++) {
        if (i % j == 0) {
          continue OUT;
        }
      }
      count++;
      System.out.println(i);
    }
    System.out.println("当前素数的个数是:" + count);
  }
  public static boolean check(int data) {
    for (int i = 2; i < data / 2; i++) {
      if (data % i == 0) {
        return false;
      }
    }
    return true;
  }
}

# 打印乘法表

public class Demo8 {
  public static void main(String[] args) {
    for (int i = 1; i <= 9; i++) {
      for (int j = 1; j <= i; j++) {
        System.out.print(j + "x" + i + "=" + (j * i) + "\t");
      }
      System.out.println(); // 换行
    }
  }
}

# 打印三角形

public class Demo9 {
  public static void main(String[] args) {
    int n = 4;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= (n - i); j++) {
        System.out.print(" ");
      }
      for (int j = 1; j <= (2 * i - 1); j++) {
        // System.out.print("*");
        System.out.print(j % 2 == 0 ? " " : "*");
      }
      System.out.println();
    }
  }
}

# 模拟双色球

需求

双色球

import java.util.Random;
import java.util.Scanner;
public class Demo10 {
  public static void main(String[] args) {
    int[] userNumbers = userSelectNumbers();
    System.out.println("用户号码为:");
    printArray(userNumbers);
    int[] luckNumbers = createLuckNumbers();
    System.out.println("幸运号码为:");
    printArray(luckNumbers);
    judge(userNumbers, luckNumbers);
  }
  public static int[] userSelectNumbers() {
    int[] numbers = new int[7];
    Scanner sc = new Scanner(System.in);
    for (int i = 0; i < numbers.length - 1; i++) {
      while (true) {
        System.out.println("请输入第" + (i + 1) + "红球号码(1-33之间,不能重复):");
        int number = sc.nextInt();
        if (number < 1 || number > 33) {
          System.out.println("输入的号码不在1~33之间,请重新输入!");
        } else {
          if (check(numbers, number)) {
            System.out.println("输入的号码重复,请重新输入!");
          } else {
            numbers[i] = number;
            break;
          }
        }
      }
    }
    while (true) {
      System.out.println("请输入最后1个蓝球号码(1-16):");
      int number = sc.nextInt();
      if (number < 1 || number > 16) {
        System.out.println("输入的号码不在1~16之间,请重新输入!");
      } else {
        numbers[6] = number;
        break;
      }
    }
    return numbers;
  }
  public static int[] createLuckNumbers() {
    int[] numbers = new int[7];
    Random r = new Random();
    for (int i = 0; i < numbers.length - 1; i++) {
      while (true) {
        int number = r.nextInt(33) + 1;
        if (!check(numbers, number)) {
          numbers[i] = number;
          break;
        }
      }
    }
    numbers[6] = r.nextInt(16) + 1;
    return numbers;
  }
  public static void judge(int[] userNumbers, int[] luckNumbers) {
    int redCount = 0;
    int blueCount = 0;
    for (int i = 0; i < userNumbers.length - 1; i++) {
      for (int j = 0; j < luckNumbers.length - 1; j++) {
        if (userNumbers[i] == luckNumbers[j]) {
          redCount++;
          break;
        }
      }
    }
    blueCount = userNumbers[6] == luckNumbers[6] ? 1 : 0;
    System.out.println("命中的红球数量是:" + redCount);
    System.out.println("命中的蓝球数量是:" + blueCount);
    if (redCount == 6 && blueCount == 1) {
      System.out.println("恭喜你,中奖1000万~~~");
    } else if (redCount == 6 && blueCount == 0) {
      System.out.println("恭喜你,中奖500万~~~");
    } else if (redCount == 5 && blueCount == 1) {
      System.out.println("恭喜你,中奖3000元~");
    } else if (redCount == 5 && blueCount == 0 || redCount == 4 && blueCount == 1) {
      System.out.println("恭喜你,中奖200元~~~");
    } else if (redCount == 4 && blueCount == 0 || redCount == 3 && blueCount == 1) {
      System.out.println("恭喜你,中奖10元~~~");
    } else if (redCount < 3 && blueCount == 1) {
      System.out.println("恭喜你,中奖5元~~~");
    } else {
      System.out.println("感谢参与~~~");
    }
  }
  public static boolean check(int[] numbers, int number) {
    for (int i = 0; i < numbers.length; i++) {
      if (numbers[i] == 0) {
        break;
      }
      if (numbers[i] == number) {
        return true;
      }
    }
    return false;
  }
  public static void printArray(int[] arr) {
    System.out.print("[");
    for (int i = 0; i < arr.length; i++) {
      System.out.print(i == arr.length - 1 ? arr[i] + "]" : arr[i] + ",");
    }
    System.out.println();
  }
}