Java学习第六天--综合案例

目录

1.逢7跳过

2.判断两个数组是否相同

3.数组元素求和

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

4.1不考虑重复

4.2考虑重复

5.数组元素反转 

6.评委打分

7.随机产生验证码

1.逢7跳过

需求:在控制台打印出1~100之间满足逢7过规则的数据,不满足的打印"过"
public class Test1 {
    public static void main(String[] args) {
        knockSeven();
    }
    public static void knockSeven(){
        for (int i =1;i<100;i++){
            if (i%7==0||i%10==7||i/10==7){
                System.out.println("过");
            }else {
                System.out.println(i);
            }
        }
    }
}

2.判断两个数组是否相同

  •  需求: 定义一个方法, 比较两个数组的内容是否相同
  •  要求: 长度, 内容, 顺序完全相同
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;
    }
}

3.数组元素求和

需求 :
                有这样的一个数组,元素是 {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);
    }
    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;
    }
}

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

4.1不考虑重复

需求:
            设计一个方法, 查找元素在数组中的索引位置
            查找元素, 在数组中第一次出现的索引位置.
            已知一个数组 arr = {19, 28, 37, 46, 50};
            键盘录入一个数据,查找该数据在数组中的索引。
            并在控制台输出找到的索引值。
            如果没有查找到,则输出-1

import java.util.Scanner;
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);
    }
    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;
    }
}

4.2考虑重复

 需求: 设计一个方法, 查找元素在数组中的索引位置 (考虑重复元素问题)
        注意: return只能返回一个结果
        问题: 当一个方法运行结束后, 有多个结果需要返回, 怎么处理?
        回答: 可以将多个结果, 存入一个数组容器, 将数组返回.

public class Test4_2 {
    public static void main(String[] args) {
        int[] arr = {19, 28, 37, 46, 50, 19, 19};
                  // 0    1   2   3   4   5   6
        int[] results = getIndex(28, arr);
        if(results.length == 0){
            System.out.println("您要查找的元素, 在数组中不存在");
        } else {
            for (int i = 0; i < results.length; i++) {
                System.out.println(results[i]);
            }
        }
    }
    public static int[] getIndex(int num, int[] arr) {
        // 1. 统计要查找的元素, 在数组中出现的个数
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == num){
                count++;
            }
        }
        // 2. 根据统计出来的个数, 创建数组容器
        int[] results = new int[count];
        int index = 0;
        // 3. 查找元素在数组中的索引, 将找到的索引, 存入数组容器
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == num){
                // results[0] = 0;
                // results[1] = 5;
                // results[2] = 6;
                results[index] = i;
                index++;
            }
        }
        // 4. 将装满了索引的数组, 返回
        return results;
    }
}

5.数组元素反转 

已知一个数组 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 class Test5 {
    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的整数分。

   选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值

   1. 基本实现 (不考虑分数校验)

   2. 校验键盘录入的分数是否是0~100之间

   3. 抽取方法

import java.util.Scanner;
public class Test6 {
    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.随机产生验证码

        需求: 请从26个英文字母(大小写都包含),以及数字0-9中,随机产生一个5位的字符串验证码并打印在控制台
        效果: uYq8I,3r4Zj
        注意事项: 打印字符类型数组名, 不会看到地址值, 而是元素的内容

import java.util.Random;
import java.util.Scanner;
public class Test7 {
    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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值