综合练习和二维数组

目录

  • 一、综合练习
    • 1.1 飞机票
    • 1.2 找素数
    • 1.3 随机产生5位验证码
    • 1.4 评委打分
    • 1.5 数字加密和解密
      • 1.5.1 数字加密
      • 1.5.2 数字解密
    • 1.6 抽奖系统
    • 1.7 双色球彩票
  • 二、二维数组
    • 2.1 二维数组的静态初始化和动态初始化
    • 2.2二维数组的内存
    • 2.3 两种特殊情况
    • 2.4 练习

一、综合练习

1.1 飞机票

package Comprehensive_Exericse;

import java.util.Scanner;

public class test1 {
    //需求:机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
    //按照如下规则计算机票价格︰
    //旺季(5-10月)头等舱9折,经济舱8.5折
    //淡季(11月到来年4月)头等舱7折,经济舱6.5折
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入机票原价:");
        int price = sc.nextInt();
        System.out.println("请输入当前月份:");
        int month = sc.nextInt();
        System.out.println("请输入对应舱位(0 头等舱, 1 经济舱):");
        int seat = sc.nextInt();

        if (month >= 5 && month <= 10){
            int ticket = getPrice(price,seat,0.9,0.85);
            System.out.println("机票价格为:"+ ticket + "元");
        }else if ((month >= 1  && month <= 4) ||(month >= 11 & month <= 12)){
            int ticket = getPrice(price,seat,0.7,0.65);
            System.out.println("机票价格为:"+ ticket + "元");
        }else {
            System.out.println("月份错误");
        }

    }

    public static int getPrice(int price,int seat,double sale0,double sale1){
        if (seat == 0){
            price = (int) (price *sale0);
        }else if (seat == 1){
            price = (int) (price*sale1);
        }else {
            System.out.println("舱位错误");
        }
        return price;
    }
}

1.2 找素数

package Comprehensive_Exericse;

public class test2 {
    //判断101-200之间有多少个素数。并输出所有素数。
    public static void main(String[] args) {
        int count = 0;
        for(int i = 101;i <= 200; i++){
            boolean flag = true;
            for (int j = 2; j < i; j++) {
                if (i % j == 0){
                    flag = false;
                    break;
                }
            }
            if (flag){
                System.out.println("当前的数字" + i +"是素数");
                count++;
            }

        }
        System.out.println("共有素数" + count + "个");
    }
}

1.3 随机产生5位验证码

package Comprehensive_Exericse;

import java.util.Random;

public class test3 {
    //定义方法实现随机产生一个5位的验证码
    //验证码长度为5,前四位是大写字母或者小写字母,最后一位是数字
    //在以后如果我们要在一堆没有什么规律的数据中随机抽取可以先把这些数据放到数组当中,再随机抽取一个索引
    public static void main(String[] args) {
        char[] chars = new char[52];
        for (int i = 0; i < chars.length; i++) {
            if(i <= 25){
                chars[i] = (char) (97 + i);  //ASCLL码强转成char,小写字母
            }else {
                chars[i] = (char) (65 + i - 26);  //大写字母
            }
        }

        Random r = new Random();
        String result = "";
        for(int i = 0; i < 4; i++){
            int index = r.nextInt(chars.length);
            result = result + chars[index];
        }
        int num = r.nextInt(10);
        result = result + num;
        System.out.println(result);



    }
}

1.4 评委打分

package Comprehensive_Exericse;

import java.util.Scanner;

public class test5 {
    //在唱歌比赛中,有6名评委给选手打分,分数范围是[O-100]之间的整数。
    // 选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。
    public static void main(String[] args) {
        int[] scoreList = getScore();
        for (int i = 0; i < scoreList.length; i++) {
            System.out.print(scoreList[i] + " ");
        }
        System.out.println(" ");
        System.out.println("去掉最高分:" + getMax(scoreList));
        System.out.println("去掉最低分:" + getMin(scoreList));
        System.out.println("最终平均得分:"+ getAvarage(scoreList, getMax(scoreList),getMin(scoreList)));
    }

    public static int[] getScore(){
        int[] scoreList = new int[6];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < scoreList.length;) {
            System.out.println("请输入第" + (i+1) +"位评委打分:");
            int score = sc.nextInt();
            if (score > 100|score < 0){
                System.out.println("分数无效,请重新输入。");
            }else {
                scoreList[i] = score;
                i++;
            }
        }
        return scoreList;
    }
    public static int getMax(int[] arr){
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max){
                max = arr[i];
            }
        }
        return max;
    }
    public static int getMin(int[] arr){
        int min = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] < min){
                min = arr[i];
            }
        }
        return min;
    }
    public static float getAvarage(int[] arr,int max,int min){
        int totalScore = 0;
        for (int i = 0; i < arr.length; i++) {
            totalScore += arr[i];
        }
        float avarage = (totalScore - max - min) / 4;
        return avarage;
    }
}

1.5 数字加密和解密

1.5.1 数字加密

package Comprehensive_Exericse;

public class test6 {
    //某系统的数字密码(大于0),比如1983,采用加密方式进行传输。
    //先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数。
    public static void main(String[] args) {
        int[] arr = {1,9,8,3};
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] + 5;
            arr[i] = arr[i] % 10;
        }
        for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;

        }
        int number = 0;
        for (int i = 0; i < arr.length; i++) {
            number = number * 10 + arr[i];
        }
    }
}

1.5.2 数字解密

package Comprehensive_Exericse;

public class test8 {
    //8346进行解密
    public static void main(String[] args) {
        int[] arr = {8,3,4,6};
        for (int i = 0,j = arr.length-1; i < j; i++,j--) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] >= 0 && arr[i] <= 4){
                arr[i] = arr[i] +10 ;
            }
        }
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] - 5;
        }
        int number = 0;
        for (int i = 0; i < arr.length; i++) {
            number = number * 10 + arr[i];
        }
        System.out.println(number);
    }
}

1.6 抽奖系统

package Comprehensive_Exericse;

import java.util.Random;

public class test10choujiang {
    //抽奖优化思路:直接把奖池打乱,然后挨个输出就行
    public static void main(String[] args) {
        int[] arr = {2, 588, 888, 1000,10000};
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            int randomIndex = r.nextInt(arr.length);
            int temp = arr[i];
            arr[i] = arr[randomIndex];
            arr[randomIndex] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i] + "元的奖金被抽出");
        }
    }
}

1.7 双色球彩票

package Comprehensive_Exericse;

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

public class test11 {
    //投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1—33中选择;蓝色球号码从1—16中选择。
    public static void main(String[] args) {
        int[] prizeArr = creatNum();
        System.out.println("===================");
        for (int i = 0; i < prizeArr.length; i++) {
            System.out.print(prizeArr[i]+" ");
        }
        System.out.println("===================");
        int[] userInputArr = userInputNum();
        int redCount = 0;
        int blueCount = 0;
        //对比自己的每个号码是否存在于中奖号码中
        for (int i = 0; i < userInputArr.length - 1; i++) {
            int currentRed = userInputArr[i];
            for (int j = 0; j < prizeArr.length - 1; j++) {
                if (currentRed == prizeArr[j]){
                    redCount++;
                    break;
                }
            }
        }
        if (userInputArr[userInputArr.length-1] == prizeArr[prizeArr.length-1]){
            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("恭喜你中了三等奖!1000元!");
        }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 == 2 && blueCount == 1)||(redCount == 1 && blueCount == 1)||(redCount == 0 && blueCount == 1)){
            System.out.println("恭喜你中了六等奖!5元!");
        }else {
            System.out.println("感谢参与!");
        }
    }
    public static int[] creatNum(){
        int[] arr = new int[7];
        Random r = new Random();
        for (int i = 0; i < 6;) {
            int redNum = r.nextInt(33) + 1;
            if (!contains(arr,redNum)){
                arr[i] = redNum;
                i++;
            }
        }
        int blueNum = r.nextInt(16) + 1;
        arr[arr.length-1] = blueNum;
        return arr;
    }
    public static boolean contains(int[] arr, int num){
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == num){
                return true;
            }
        }
        return false;
    }
    public static int[] userInputNum(){
        int[] arr = new int[7];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 6; ) {
            System.out.println("请输入1-33的整数作为第"+ (i+1) +"个红球号码:");
            int rednum = sc.nextInt();
            if (rednum >= 1 && rednum <=33){
                if (!contains(arr, rednum)){
                    arr[i] = rednum;
                    i++;
                }else {
                    System.out.println("当前数字已存在,请重新输入");
                }
            }else {
                System.out.println("d当前数字超过范围,请重新输入");
            }
        }
        System.out.println("请输入1-16的整数作为蓝球号码");
        int bluenum = sc.nextInt();
        arr[arr.length - 1] = bluenum;
        return arr;
    }
}

二、二维数组

2.1 二维数组的静态初始化和动态初始化

综合练习和二维数组_第1张图片

package TwoDimArr;

public class TwoDimArr {
    public static void main(String[] args) {
        //1.静态初始化
        // 静态初始化完整格式
        int[][] arr1 = new int[][]{{1,2,3},{4,5,6,7}}; 
        // 静态初始化简略格式 
        int[][] arr2 = {{1,2,3},{4,5,6,7}};            
        //方便阅读格式
        int[][] arr3 = {      
                {1,2,3},
                {4,5,6,7}
        };
        //以后建议这样定义,把每一个一维数组,单独写成一行
        // 注意:每一个一维数组其实是二维数组中的元素
        // 所以每一个一维数组之间需要用逗号隔开。
        // 最后一个一维数组后面不需要加逗号

        //2.获取元素
        // system.out.println(arr3[0]);
        //表示获取二维数组中的第一个一维数组(得到的是地址)
        
        // arr3[0]:二维数组中的第一个一维数组
        //arr3[0][0]:获取第一个一维数组中0索引的元素
        System.out.println(arr3[0][0]);
        // arr[i][j]
        // arr:二维数组
        // i:二维数组的索引,获取出来的是里面的一维数组i
        // j:表示一维数组中的索引,获取出来的就是真正的元素

        //3.遍历数组
        //思想:先获取数组,再获取元素
        for (int i = 0; i < arr3.length; i++) {   
        // 获取每个一维数组
            for (int j = 0; j < arr3[i].length; j++) {
                System.out.print(arr3[i][j] + " "); 
                // 当前一维数组获取每个元素,空一格打印
            }
            System.out.println();  // 每个一维数组获取完后换行
            
        }


    }

}

综合练习和二维数组_第2张图片

package TwoDimArr;

public class TwoDimArrDemo2 {
    // 动态初始化
    public static void main(String[] args) {
        //动态初始化
        int[][] arr1 = new int[3][5];

        //赋值
        arr1[0][0] = 10;

        //遍历
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[i].length; j++) {
                System.out.print(arr1[i][j] + " ");
            }
            System.out.println();
        }
    }
}

2.2二维数组的内存

综合练习和二维数组_第3张图片

2.3 两种特殊情况

  • 特殊情况一:
    后面的括号不写内容,自己创建一维数组,再把其地址值赋过去。虽然有点麻烦,但好处是可以输入不一样长度的、自定义的一维数组。
    综合练习和二维数组_第4张图片
  • 特殊情况二:
    虽然已经定义了一维数组的长度将其初始化了,但是后面又再赋值,就相当于把新的一维数组的地址存到二维数组的值的部分了,因此以前初始化的一维数组就没用了,就会被当垃圾清除掉。
    综合练习和二维数组_第5张图片

2.4 练习

package TwoDimArr;

public class test {
    //某商城每个季度的营业额如下:单位(万元)
    // 第一季度:22,66,44    第二季度:77,33,88
    // 第三季度:25,45,65    第四季度:11,66,99
    //要求计算出每个季度的总营业额和全年的总营业额
    public static void main(String[] args) {
        int[][] allYear = {
                {22, 66, 44},
                {77, 33, 88},
                {25, 45, 65},
                {11, 66, 99}
        };
        int yearSum = 0;
        for (int i = 0; i < allYear.length; i++) {
            int[] quarterArr = allYear[i];
            int quarterSum = getSum(quarterArr);
            System.out.println("第" + (i + 1) + "个季度的总营业额为:" + quarterSum);
            yearSum += quarterSum;
        }
        System.out.println("本年度营业额为:" + yearSum);

    }

    public static int getSum(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum;
    }
}

你可能感兴趣的:(JAVA学习记录,java)