Практический небольшой проект по Java (второй день)

1.Цифровое шифрование

需求:
	某系统的数字密码,比如1983,采用加密方式进行传输,规则如下:先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数。
	分析:
	1.将每位数据存入到数组中去,遍历数组每位数据按照规则进行更改,把更改后的数据从新存入到数组中。
	2. 将数组的前后元素进行交换,数组中的最终元素就是加密后的结果。
public class Test1 {
    
    
    public static void main(String[] args) {
    
    
         // 定义一个数组存储需要加密的数据
        int[] arr = new int[]{
    
    1, 9, 8, 3};
        // 2.遍历数组中的每个数据,按照规则进行修改
        for (int i = 0; i < arr.length; i++) {
    
    
            arr[i] = (arr[i] + 5 )% 10;
        }
        // 3. 然后将数组中的元素进行反转
        for (int i = 0, j = arr.length -1; i < j; i++, j--) {
    
    
            // 交换i和j位置处的值,即可反转
            int temp = arr[j];
            arr[j] = arr[i];
            arr[i] = temp;
        }
        // 4.遍历数组红的每个元素输出即可
        for (int i = 0; i < arr.length; i++) {
    
    
            System.out.print(arr[i]);
        }
    }
}

前面我们输入的数组是:1983,经过加密后:
E:\java\jdk-11.0.9\bin\java.exe "-javaagent:E:\soft\IntelliJ IDEA 2019.1.4\lib\idea_rt.jar=52213:E:\soft\IntelliJ IDEA 2019.1.4\bin" -Dfile.encoding=UTF-8 -classpath E:\java\example\out\production\Array3 Case.Test1
8346
Process finished with exit code 0

Как в этом случае происходит инверсия элементов массива?
1. Определите две переменные, занимающие первую и последнюю позиции массива.
2. Одна переменная идет вперед, одна переменная назад, и значения в обоих местах меняются синхронно.
Как расшифровать зашифрованные данные?

2. Имитировать двухцветные шары в благотворительной лотерее.

(1) Бизнес-анализ, случайным образом генерирующий набор выигрышных номеров.

随机生成一组中奖号码的分析:
1.中奖号码由6个红球和1个篮球组成(注意:6个红球要求不同重复)
2.可以定义方法用于返回一组中奖号码(7个数据),返回的形式是一个整型数组。
    public static int[] createLuckNumber(){
    
    
        // a、定义一个动态初始化的数组,存储7个数字
        int[] numbers = new int[7];
        // b、遍历数组,为每个位置生成对应的号码。(注意,遍历前6个位置,生成6个不重复的红球号码
        // 范围是1-33)
        Random r = new Random();
        for (int i = 0; i < numbers.length - 1 ; i++) {
    
    
            while (true){
    
    
                int data = r.nextInt(33) +1;
                // 然后需要判断当前随机的这个号码之前是否出现过,出现过就需要重新随机,直到不重复为止
                // 定义一个flag变量,默认认为data是没有重复的
                boolean flag = true;
                for (int j = 0; j < i; j++) {
    
    
                    if (numbers[j] == data){
    
    
                        // data当前这个数据之前出现过,不能用
                        flag = false;
                        break;
                    }
                }
                if (flag){
    
    
                    // data 这个数据之前没有出现过,可以使用了
                    numbers[i] = data;
                    break;
                }
            }
        }
        // d、为第7个位置生成一个1-16的号码作为篮球号码
        numbers[numbers.length - 1] = r.nextInt(16) + 1;
        return numbers;
    }

В этом случае, как гарантировать, что 6 случайных выигрышных номеров красного шара не повторяются?
1. После каждого случайного номера красного шара перейдите к массиву red, чтобы определить, существует ли он.
2. Если есть номер красного шара, вы необходимо повторно рандомизировать число до тех пор, пока позиция больше не будет повторяться.

(2) Пользователь вводит набор чисел из двухцветных шаров.

    public static int[] userInputNumber(){
    
    
        // a.定义一个数组存储7个号码
        int[] numbers = new int[7];
        // b.让用户录入6个红球号码
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < numbers.length -1 ; i++) {
    
    
            System.out.println("请你输入第" + (i + 1)+"个红球号码(1-33)不重复:");
            int data = sc.nextInt();
            // c.将当前录入的i个数据存储到数组中
            numbers[i] = data;

        }
        // d. 然后录入一个蓝球的号码
        System.out.println("请你输入蓝球号码(1-16):");
        numbers[numbers.length] = sc.nextInt();
    }

(3) Определите выигрышную ситуацию

中奖情况判断的分析:
1.定义一个方法,可以接收中奖号码的数组,用户选号的数组。
2.根据命中红球数和蓝球数判断最终的中奖情况并输出详情和中奖金额。

``    public static void judge(int[] luckNumbers, int[] userNumbers ) {
    
    
        //判断是否中奖了
        // 1.定义两个变量分别存储红球命中的个数,以及蓝球命中的个数
        int redHitNumbers = 0;
        int blueHitNumbers = 0;

        //2.判断红球命中了几个,开始统计
        for (int i = 0; i < userNumbers.length - 1; i++) {
    
    
            for (int j = 0; j < luckNumbers.length - 1; j++) {
    
    
                //每次找到了相等,表示当前号码命中了
                if (userNumbers[i] == luckNumbers[j]) {
    
    
                    redHitNumbers++;
                    break;
                }
            }

        }

        // 蓝球号码是否命中了?
        blueHitNumbers = luckNumbers[6] == userNumbers[6] ? 1 : 0;

        System.out.println("中奖号码是:");
        System.out.println(luckNumbers);
        System.out.println("你投注号码是:");
        System.out.println(userNumbers);
        System.out.println("你命中了几个红球:" + redHitNumbers);
        System.out.println("你是否命中蓝球:" + (blueHitNumbers == 1 ? "是":"否"));

        // 判断中奖情况
        if (blueHitNumbers == 1 && redHitNumbers < 3) {
    
    
            System.out.println("恭喜你,中了5元奖");
        } else if (blueHitNumbers == 1 && redHitNumbers == 3 || blueHitNumbers == 0 && redHitNumbers == 4) {
    
    
            System.out.println("恭喜你,中了10元奖");
        } else if (blueHitNumbers == 1 && redHitNumbers == 4 || blueHitNumbers == 0 && redHitNumbers == 5) {
    
    
            System.out.println("恭喜你,中了200元奖");
        } else if (blueHitNumbers == 1 && redHitNumbers == 5) {
    
    
            System.out.println("恭喜你,中了3000元奖");
        } else if (blueHitNumbers == 0 && redHitNumbers == 6) {
    
    
            System.out.println("恭喜你,中了五百万元奖");
        } else if (blueHitNumbers == 1 && redHitNumbers == 6) {
    
    
            System.out.println("恭喜你,中了一千万元奖");
        } else{
    
    
            System.out.println("你没有中奖");
        }
    }
    }

Как посчитать количество попаданий красного шара в этом случае?
1. Пройдите каждое число, выбранное пользователем, а затем просмотрите массив выигрышных чисел.
2. Проверьте, существует ли текущий выбранный номер среди выигрышных номеров. Если он существует, количество совпадений будет увеличено на 1.

3. Подробное описание кода Shuangseqiu

import java.util.Random;
import java.util.Scanner;

public class Test2 {
    
    
    public static void main(String[] args) {
    
    
   int[] luckNumbers = createLuckNumber();
   int[] userNumbers = userInputNumber();
   judge(luckNumbers,userNumbers);

    }
    public static int[] createLuckNumber(){
    
    
        // a、定义一个动态初始化的数组,存储7个数字
        int[] numbers = new int[7];
        // b、遍历数组,为每个位置生成对应的号码。(注意,遍历前6个位置,生成6个不重复的红球号码
        // 范围是1-33)
        Random r = new Random();
        for (int i = 0; i < numbers.length - 1 ; i++) {
    
    
            while (true){
    
    
                int data = r.nextInt(33) +1;
                // 然后需要判断当前随机的这个号码之前是否出现过,出现过就需要重新随机,直到不重复为止
                // 定义一个flag变量,默认认为data是没有重复的
                boolean flag = true;
                for (int j = 0; j < i; j++) {
    
    
                    if (numbers[j] == data){
    
    
                        // data当前这个数据之前出现过,不能用
                        flag = false;
                        break;
                    }
                }
                if (flag){
    
    
                    // data 这个数据之前没有出现过,可以使用了
                    numbers[i] = data;
                    break;
                }
            }
        }
        // d、为第7个位置生成一个1-16的号码作为篮球号码
        numbers[numbers.length - 1] = r.nextInt(16) + 1;
        return numbers;
    }


    public static int[] userInputNumber(){
    
    
        // a.定义一个数组存储7个号码
        int[] numbers = new int[7];
        // b.让用户录入6个红球号码
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < numbers.length -1 ; i++) {
    
    
            System.out.println("请你输入第" + (i + 1)+"个红球号码(1-33)不重复:");
            int data = sc.nextInt();
            // c.将当前录入的i个数据存储到数组中
            numbers[i] = data;

        }
        // d. 然后录入一个蓝球的号码
        System.out.println("请你输入蓝球号码(1-16):");
        numbers[6] = sc.nextInt();
        return numbers;
    }


    public static void judge(int[] luckNumbers, int[] userNumbers ) {
    
    
        //判断是否中奖了
        // 1.定义两个变量分别存储红球命中的个数,以及蓝球命中的个数
        int redHitNumbers = 0;
        int blueHitNumbers = 0;

        //2.判断红球命中了几个,开始统计
        for (int i = 0; i < userNumbers.length - 1; i++) {
    
    
            for (int j = 0; j < luckNumbers.length - 1; j++) {
    
    
                //每次找到了相等,表示当前号码命中了
                if (userNumbers[i] == luckNumbers[j]) {
    
    
                    redHitNumbers++;
                    break;
                }
            }

        }

        // 蓝球号码是否命中了?
        blueHitNumbers = luckNumbers[6] == userNumbers[6] ? 1 : 0;

        System.out.println("中奖号码是:");
        System.out.println(luckNumbers);
        System.out.println("你投注号码是:");
        System.out.println(userNumbers);
        System.out.println("你命中了几个红球:" + redHitNumbers);
        System.out.println("你是否命中蓝球:" + (blueHitNumbers == 1 ? "是":"否"));

        // 判断中奖情况
        if (blueHitNumbers == 1 && redHitNumbers < 3) {
    
    
            System.out.println("恭喜你,中了5元奖");
        } else if (blueHitNumbers == 1 && redHitNumbers == 3 || blueHitNumbers == 0 && redHitNumbers == 4) {
    
    
            System.out.println("恭喜你,中了10元奖");
        } else if (blueHitNumbers == 1 && redHitNumbers == 4 || blueHitNumbers == 0 && redHitNumbers == 5) {
    
    
            System.out.println("恭喜你,中了200元奖");
        } else if (blueHitNumbers == 1 && redHitNumbers == 5) {
    
    
            System.out.println("恭喜你,中了3000元奖");
        } else if (blueHitNumbers == 0 && redHitNumbers == 6) {
    
    
            System.out.println("恭喜你,中了五百万元奖");
        } else if (blueHitNumbers == 1 && redHitNumbers == 6) {
    
    
            System.out.println("恭喜你,中了一千万元奖");
        } else{
    
    
            System.out.println("你没有中奖");
        }
    }
    }


运行结果:
E:\java\jdk-11.0.9\bin\java.exe "-javaagent:E:\soft\IntelliJ IDEA 2019.1.4\lib\idea_rt.jar=52660:E:\soft\IntelliJ IDEA 2019.1.4\bin" -Dfile.encoding=UTF-8 -classpath E:\java\example\out\production\Array3 Case.Test2
请你输入第1个红球号码(1-33)不重复:
7
请你输入第2个红球号码(1-33)不重复:
8
请你输入第3个红球号码(1-33)不重复:
9
请你输入第4个红球号码(1-33)不重复:
10
请你输入第5个红球号码(1-33)不重复:
11
请你输入第6个红球号码(1-33)不重复:
12
请你输入蓝球号码(1-16):
13
中奖号码是:
[I@396a51ab
你投注号码是:
[I@51081592
你命中了几个红球:1
你是否命中蓝球:否
你没有中奖

Process finished with exit code 0

Вывод:
В последнем примере отсутствует метод преобразования адреса выигрышного числа в массив. Сегодня я пошел заниматься нуклеиновой кислотой, поэтому сделал только часть, и на сегодня все. Увидимся завтра.

Supongo que te gusta

Origin blog.csdn.net/tyloonulinuli/article/details/121549238
Recomendado
Clasificación