JAVA基础知识巩固训练

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

1. 案例一逢 7 跳过 

2. 案例二数组元素求和

3. 案例三判断两个数组是否相同⭐

4. 案例四查找元素在数组中的索引

5. 案例五数组元素反转

6. 案例六评委打分

7. 案例七随机产生验证码

8. 面试题⭐ 


1. 案例一逢 7 跳过 

需求:

朋友聚会的时候可能会玩一个游戏逢七过。​       

规则是从任意一个数字开始报数当你要报的数字包含7或者是7的倍数时都要说过。​       

为了帮助大家更好的玩这个游戏这里我们直接在控制台打印出1-100之间的满足逢七必过规则的数据。​

public class Test1 {

    public static void main(String[] args) {
        knockSeven();
    }

    /*
        需求: 在控制台打印出 1~100 之间满足逢七过规则的数据

        分析:
                1. 通过循环获取到1~100之间的每一个数字
                2. 数值拆分, 拆分出个位和十位
                3. 根据规则加入if判断
                        if(ge == 7 || shi == 7 || i % 7 == 0)
                4. 打印出满足规则的数据
     */

    public static void knockSeven() {
        // 1. 通过循环获取到1~100之间的每一个数字
        for(int i = 1; i <= 100; i++){
            // 2. 数值拆分, 拆分出个位和十位
            int ge = i % 10;
            int shi = i / 10 % 10;
            // 3. 根据规则加入if判断
            if(ge == 7 || shi == 7 || i % 7 == 0){
                // 4. 打印出满足规则的数据
                System.out.println(i);
            }
        }
    }
}

 

2. 案例二数组元素求和

需求:

有这样的一个数组元素是 {68,27,95,88,171,996,51,210}

求出该数组中满足要求的元素和

要求是求和的元素个位和十位都不能是7并且只能是偶数

public class Test2 {
    public static void main(String[] args) {

        int[] arr = {68, 27, 95, 88, 171, 996, 51, 210};

        int evenNumberSum = getEvenNumberSum(arr);

        System.out.println(evenNumberSum);
    }

    /*
        需求 :
                有这样的一个数组元素是 {68,27,95,88,171,996,51,210}
                求出该数组中满足要求的元素和
                要求是求和的元素个位和十位都不能是7并且只能是偶数
     */
    public static int getEvenNumberSum(int[] arr) {

        // 1. 定义求和变量
        int sum = 0;

        // 2. 遍历数组, 获取到内部的每一个元素
        for (int i = 0; i < arr.length; i++) {
            // arr[i] : 数组中的每一个元素
            // 3. 将每一个元素, 拆分出个位, 十位
            int ge = arr[i] % 10;
            int shi = arr[i] / 10 % 10;
            // 4. 判断
            if(ge != 7 && shi != 7 && arr[i] % 2 == 0){
                // 5. 求和
                sum += arr[i];
            }
        }

        return sum;
    }
}

 

3. 案例三判断两个数组是否相同

  1. 基本数据类型 : 比较数据值
  2. 引用数据类型 : 比较地址值

需求:

定义一个方法用于比较两个数组的内容是否相同

要求 :  长度, 内容, 顺序完全相同

package com.itheima.test;

public class Test3 {
    /*
        == :
                1. 基本数据类型 : 比较数据值
                2. 引用数据类型 : 比较地址值
     */
    public static void main(String[] args) {
        int[] arr1 = {11, 22, 33};
        int[] arr2 = {11, 22, 33, 44};

        boolean result = checkArrayContent(arr1, arr2);

        System.out.println(result);
    }

    /*
        需求: 定义一个方法, 比较两个数组的内容是否相同
        要求: 长度, 内容, 顺序完全相同
     */
    public static boolean checkArrayContent(int[] arr1, int[] arr2) {
        // 1. 比较两个数组的长度
        if (arr1.length != arr2.length) {
            return false;
        }

        // 2. 比较两个数组的元素内容
        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i] != arr2[i]) {
                return false;
            }
        }

        // 3. 如果代码能够走到这里, 代表两个数组长度, 内容, 顺序完全相同
        return true;
    }
}

 

4. 案例四查找元素在数组中的索引

需求:

设计一个方法, 查找元素在数组中的索引位置

已知一个数组 arr = {19, 28, 37, 46, 50};  

键盘录入一个数据查找该数据在数组中的索引。

并在控制台输出找到的索引值。

如果没有查找到则输出-1

public class Test4_1 {
    public static void main(String[] args) {
        int[] arr = {19, 28, 37, 46, 50};

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要查找的元素:");
        int num = sc.nextInt();

        int index = getIndex(num, arr);

        System.out.println(index);
    }

    /*
        需求:
            设计一个方法, 查找元素在数组中的索引位置

            查找元素, 在数组中第一次出现的索引位置.

            已知一个数组 arr = {19, 28, 37, 46, 50};
            键盘录入一个数据查找该数据在数组中的索引。
            并在控制台输出找到的索引值。
            如果没有查找到则输出-1
     */
    public static int getIndex(int num, int[] arr) {
        // 1. 假设要查找的元素, 在数组中就是不存在的
        int index = -1;
        // 2. 遍历数组, 获取内部的每一个元素
        for (int i = 0; i < arr.length; i++) {
            // 3. 比较
            if (arr[i] == num) {
                // 4. 找到了, 让index变量记录正确的索引位置
                index = i;
                break;
            }
        }

        return index;
    }
}

 

5. 案例五数组元素反转

需求

已知一个数组 arr = {11, 22, 33, 44, 55}; 用程序实现把数组中的元素值交换

交换后的数组 arr = {55, 44, 33, 22, 11}; 并在控制台输出交换后的数组元素。

public class Test5 {
    /*
        已知一个数组 arr = {11, 22, 33, 44, 55}; 用程序实现把数组中的元素值交换
        交换后的数组 arr = {55, 44, 33, 22, 11}; 并在控制台输出交换后的数组元素。

        1. 确定好谁跟谁换

                第一个和倒数第一个 :  arr[0]  arr[arr.length-1-0]
                第二个和倒数第二个 :  arr[1]  arr[arr.length-1-1]
                第三个和倒数第三个 :  arr[2]  arr[arr.length-1-2]
                ...

                arr[i]  arr[arr.length-1-i]

        2. 定义三方变量, 套入公式
     */
    public static void main(String[] args) {

        int[] arr = {11, 22, 33, 44, 55};

        reverseArray2(arr);


        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    private static void reverseArray2(int[] arr) {
        for(int start = 0, end = arr.length - 1; start < end; start++, end--){
            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
        }
    }

    private static void reverseArray1(int[] arr) {
        for (int i = 0; i < arr.length / 2; i++) {
            int temp = arr[i];
            arr[i] = arr[arr.length-1-i];
            arr[arr.length-1-i] = temp;
        }
    }
}

6. 案例六评委打分

需求

在编程竞赛中有6个评委为参赛的选手打分分数为0-100的整数分。​       

选手的最后得分为去掉一个最高分和一个最低分后

import java.util.Scanner;

public class Test6 {
    /*
        需求:
              在编程竞赛中有6个评委为参赛的选手打分分数为0-100的整数分。
              选手的最后得分为去掉一个最高分和一个最低分后 的4个评委平均值

              1. 基本实现 (不考虑分数校验)
              2. 校验键盘录入的分数是否是0~100之间
              3. 抽取方法
     */
    public static void main(String[] args) {

        int[] arr = initData();

        int sum = getSum(arr);

        int max = getMax(arr);

        int min = getMin(arr);

        // 5. 求平均分 (总合 - 最大值 - 最小值) / 4
        double avg = ((sum - max - min) * 1.0) / (arr.length - 2);

        System.out.println("选手的最后得分为:" + avg);

    }

    /**
     * 数组中找最小值
     */
    private static int getMin(int[] arr) {
        // 4. 求最小值
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
            }
        }
        return min;
    }

    /**
     * 数组中找最大值
     */
    private static int getMax(int[] arr) {
        // 3. 求最大值
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        return max;
    }

    /**
     * 数组求和
     */
    private static int getSum(int[] arr) {
        // 2. 求和
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum;
    }

    /**
     * 此方法用于键盘录入6个评委的分数
     */
    private static int[] initData() {
        int[] arr = new int[6];

        // 1. 键盘录入6个评委的打分
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入6个评委的打分:");

        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入第" + (i + 1) + "位评委的打分:");
            int score = sc.nextInt();
            // 判断成绩是否正确
            if (score >= 0 && score <= 100) {
                arr[i] = score;
            } else {
                System.out.println("您的分数输入有误, 请检查是否是0~100之间的");
                i--;
            }
        }
        return arr;
    }
}

 

7. 案例七随机产生验证码

 

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

public class Test7 {
    /*
        需求: 请从26个英文字母大小写都包含以及数字0-9中随机产生一个5位的字符串验证码并打印在控制台
        效果: uYq8I3r4Zj

        注意事项: 打印字符类型数组名, 不会看到地址值, 而是元素的内容
     */
    public static void main(String[] args) {

        char[] chs = getContents();

        String checkCode = getCheckCode(chs);

        System.out.println("产生的验证码为:" + checkCode);

    }

    private static String getCheckCode(char[] chs) {
        Random r = new Random();

        String checkCode = "";

        for(int i = 1; i <= 5; i++){
            int randomIndex = r.nextInt(chs.length);
            checkCode += chs[randomIndex];
        }
        return checkCode;
    }

    private static char[] getContents() {
        char[] chs = new char[26 + 26 + 10];

        int index = 0;

        for(char c = 'a'; c <= 'z'; c++){
            chs[index] = c;
            index++;
        }

        for(char c = 'A'; c <= 'Z'; c++){
            chs[index] = c;
            index++;
        }

        for(char c = '0'; c <= '9'; c++){
            chs[index] = c;
            index++;
        }
        return chs;
    }
}

 

8. 面试题⭐ 

 面试题: 实现两个变量的数据交换, 不允许定义第三方变量

 

 使用异或实现

 /*
        ^ 异或 :

                特点:
                        1. 相同为false, 不同为true
                        2. 一个数字, 被另外一个数字异或两次, 该数本身不变

        异或操作数值的运算过程 :

            1. 将需要运算的数据, 转换为二进制数据

                    0000 1010       10
                    0000 0101       5

            2. 将二进制数据的0当做为false, 1当做为true, 运算

                    0000 1010
                ^   0000 0101
            --------------------
                    0000 1111

            3. 将运算后的二进制数据, 转换为十进制
     */
public class SwapDemo1 {

    /*
        思路: 今后只要涉及到数据交换, 联想到第三方的变量

                int a = 10;
                int b = 20;

                int c = a;
                a = b;
                b = c;

                System.out.println("a=" + a);   // 20
                System.out.println("b=" + b);   // 10

       
     */

 
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        a = a ^ b;  // a = 10 ^ 20;
        b = a ^ b;  // b = 10 ^ 20 ^ 20;            b = 10
        a = a ^ b;  // a = 10 ^ 20 ^ 10;            a = 20

        System.out.println("a=" + a);   // 20
        System.out.println("b=" + b);   // 10
    }
}

import java.util.Random;

public class RandomDemo {
    /*
        从数组中随机取出一个元素

            根据数组的长度, 产生一个随机数, 拿着这个随机数, 当做索引去数组中获取元素
     */
    public static void main(String[] args) {

        String[] sArr = {"米饭", "馒头", "包子", "麻花", "面条"};
                       //  0      1      2       3       4

        Random r = new Random();

        int i = r.nextInt(sArr.length);           //  0  1  2  3  4

        System.out.println(i);

        System.out.println(sArr[i]);


    }
}

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java