Java学习笔记4

练习题

练习1:机票

机票价格按照淡旺季,头等舱和经济舱收费,输入机票原价,月份和头等舱或经济舱。

按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。

import java.util.Scanner;

public class Hello{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入购票月份:");
        int month = sc.nextInt();
        System.out.println("请输入机票原价:");
        int ticket = sc.nextInt();
        System.out.println("请输入购票舱位0头等舱,1经济舱:");
        int seat = sc.nextInt();
        if(month>=5 && month<=10){
            ticket = Grtticket(month,ticket,seat,0.9,0.85);
        } else if ((month>=1 && month<=4) || (month>=11 && month<=12)) {
            ticket = Grtticket(month,ticket,seat,0.7,0.65);
        }else{
            System.out.println("请正确输入");}
        System.out.println(ticket);
    }
    public static int Grtticket(int month,int ticket,int seat,double v1,double v2){
        if(seat == 0){
            ticket = (int)(ticket*v1);
        } else if (seat == 1) {
            ticket = (int)(ticket*v2);
        }else{
            System.out.println("请正确输入");
        }return ticket;
    }
}

注意:Ctrl + Alt + M 自动抽取方法

练习2:找质数

判断101-200之间有多少个素数,并输出所有的素数。

public class Hello {
    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 + "个质数");
    }
}

练习3:开发验证码

定义方法实现随机产生一个5位的验证码,长度为5,前面四位为大写或小写字母,最后一个数字

import java.util.Random;

public class Hello {
    public static void main(String[] args) {
        char[]arr = new char[52];
        for (int i = 0; i < arr.length; i++) {

            if(i<=25) {
                arr[i] =(char)(97+i);}
            else{arr[i] =(char)(65+i-26);}
        }
        String result ="";
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            int randomIedx = r.nextInt(arr.length);
            result = arr[randomIedx]+result;
        }
        int number =r.nextInt(10);
        result =result+number;
        System.out.println(result);
    }
}

练习4:数组元素的复制

把一个数组中的元素复制到另一个新数组中去

public class Hello {
    public static void main(String[] args) {
        int[]arr1 = {11,22,33,44,55};
        int[]arr2 = new int[arr1.length];
        for (int i = 0; i < arr2.length; i++) {
             arr2[i] =arr1[i];
        }
        for (int i = 0; i < arr2.length; i++) {
            System.out.print(arr2[i]+" ");
        }
    }
}

数组遍历:将数组中所有的内容取出来,取出来之后可以(打印,求和,判断…)

注意:遍历指的是取出数据的过程,不要局限的理解为,遍历就是打印。

在 Java 当中,关于数组的一个长度属性:length

调用方式:数组名.length

扩展:自动快速生成数组的遍历方式,idea 提供的

格式:数组名.fori

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

方法调用格式三种

直接调用:方法名(实参);   //对于有返回值的方法无法打印出来,针对于无返回值(void)的类型
赋值调用:返回值类型 变量名 = 方法名(实参);       //有返回值的类型
输出调用:System.out.println(方法名(实参));    //有返回值的类型

例如
public class Hello {
    public static void main(String[] args) {
        //直接调用,没有打印出来
    C(1,2);
         //赋值调用
    int sum =C(1,2);
        System.out.println(sum);
        //输出调用
    System.out.println(C(2,2));
    }
    public static int C(int a, int b){
        int c = a+b;
        return c;
    }
}

练习5:评委打分

在唱歌比赛中,有6位评委给选手打分,分数范围是【0-100】之间的整数,选手的最终得分为:去掉最低分和最高分,然后取平均分。

import java.util.Scanner;

public class Hello {
    public static void main(String[] args) {
        //键盘录入评委分数
        int[] scoreArr = getScore();
        for (int i = 0; i < scoreArr.length; i++) {
            System.out.println(scoreArr[i]);
        }
        //求最大值
        int max = getMax(scoreArr);
        //求最小值
        int min = getMin(scoreArr);
        //求和
        int sum = getSum(scoreArr);
        //求平均分
        int avg = (sum-max-min)/(scoreArr.length-2);
        System.out.println("该选手最终得分:" + avg);
    }

    //键盘录入
    public static int[] getScore() {
        int[] score = new int[6];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < score.length; ) {
            System.out.println("输入该选手得分:");
            int scores = sc.nextInt();
            if (scores >= 0 && scores <= 100) {
                score[i] = scores;
                i++;
            } else {
                System.out.println("请继续录入:");
            }
        }
        return score;
    }

    //求最大值
    public static int getMax(int[] scoreArr) {
        int max = scoreArr[0];
        for (int i = 0; i < scoreArr.length; i++) {
            if (scoreArr[i] > max) {
                max = scoreArr[i];
            }
        }
        return max;
    }

    //求最小值
    public static int getMin(int[] scoreArr) {
        int min = scoreArr[0];
        for (int i = 0; i < scoreArr.length; i++) {
            if (scoreArr[i] < min) {
                min = scoreArr[i];
            }
        }
        return min;
    }

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

练习6数字加密

某系统的数字密码(大于0)比如1983,采用加密方式进行传输。规则如下,先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数字。

import java.util.Scanner;

public class Hello {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个密码:");
        int number = sc.nextInt();
        //判断用户输入的密码位数
        int count = 0;
        int temp = number;
        while(number != 0 ){
            number = number/10;
            count++;
       }
        //定义一个动态数组,数组个数为输入密码位数
        int []arr = new int[count];
        int dex = arr.length-1;
        while(temp!=0){
             int ge = temp%10;
             temp = temp/10;
             arr[dex] = ge;
             dex--;
        }
        //某系统的数字密码(大于0)比如1983,采用加密方式进行传输。规则如下
        // 先得到每位数,然后每位数都加上5,
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] + 5;
        }
        // 再对10求余
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i]%10;
        }
        // 最后将所有数字反转,得到一串新数字。
        for (int i = 0,j = arr.length-1; i < j; i++,j--) {
            int tem = arr[i];
            arr[i] = arr[j];
            arr[j] = tem;
        }
        //把数字拼在一起
        int number1 =0;
        for (int i = 0; i < arr.length; i++) {
             number1 = number1*10+arr[i];
        }
        System.out.println(number1);
    }
}

练习7数字解密6

import java.util.Scanner;

public class Hello {
    public static void main(String[] args) {
        //取到用户密码
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的密码:");
        int number = sc.nextInt();
        //判断用户密码位数
        int count = 0;
        int tap = number;
        while(number!=0){
            number = number/10;
            count++;
        }
        //根据用户密码位数创建一个动态数组
        int[]arr = new int[count];
        //把密码存入数组中
        int bba = arr.length-1;
        while (tap!=0) {
            int ge = tap%10;
            tap = tap /10;
            arr[bba] = ge;
            bba--;
        }
        //把数组的每一位取反
        for (int i = 0,j = arr.length-1; i < j; i++,j--) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        //对10取余的逆运算
        //5 6 7 8 9 10 11 12 13 14 
        //5 6 7 8 9  0  1  2  3  4
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]>=5 && arr[i]<=9){
                arr[i] = arr[i];
            } else if (arr[i]>=1 && arr[i]<=4) {
                arr[i] = arr[i]+10;
            }
        }
        //数组各个数-5
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i]-5;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "");
        }
    }
}

练习8抢红包

一个大V直播,奖品是现金红包,分别有(2,588,888,1000,10000)五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机不重复。

import java.util.Random;

public class Hello {
    public static void main(String[] args) {
        // 分别有(2,588,888,1000,10000)五个奖金
        //定义一个数组表示奖池
        int[] arr = {2, 588, 888, 1000, 10000};
        //再定义一个数组表示抽到的奖项
        int[] newArr = new int[arr.length];
        Random r = new Random();
        for (int i = 0; i < 5;) {
            //再arr数组里随机获取一个索引
            int newRandom = r.nextInt(arr.length);
             int prise = arr[newRandom];
             boolean flag =result(newArr,  prise);
             //判断为不重复,则存入,索引+1
             if(!flag){
                 newArr[i] = prise;
                 i++;
             }
        }
        for (int i = 0; i < newArr.length; i++) {
            System.out.println(newArr[i]);
        }
    }
//定义一个方法用来判断是否重复
    public static boolean result(int[] arr, int prise) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == prise) {
                return true;
            }
        }
        return false;
    }
}

代码简化

import java.util.Random;

public class Hello {
    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 arrindex = r.nextInt(arr.length);
            int tem = arr[i];
            //拿着i和随机索引替换
            arr[i] = arr[arrindex];
            arr[arrindex] = tem;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

练习9模拟双色球

中将说明

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

public class Hello {
    public static void main(String[] args) {
        //生成中将号码
        int[]arr = creatNumber();
        //录入用户彩票号码
        int[]userInputArr = userNumber();
        //判断中将情况
        int redCount = 0;
        int blueCount = 0;
        for (int i = 0; i < userInputArr.length-1; i++) {
            int redNumber = userInputArr[i];
            for (int i1 = 0; i1 < arr.length-1; i1++) {
                if(redNumber == arr[i1]){
                    redCount++;
                    break;
                }
            }
        }
        int blueNumber = userInputArr[userInputArr.length-1];
        if(blueNumber == arr[arr.length-1]){
            blueCount++;
        }
        if(redCount == 6 && blueCount == 1){
            System.out.println("恭喜你!中将1000万");
        } else if (redCount == 6 && blueCount == 0) {
            System.out.println("恭喜你baby,中将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 == 2 && blueCount ==1) || (redCount == 1 && blueCount == 1) ||(redCount == 0 && blueCount == 1)) {
            System.out.println("恭喜你,中将5元");
        }else{
            System.out.println("谢谢参与");
        }
 }
    public static int[] userNumber(){
        int[]arr = new int[7];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 6; ) {
            System.out.println("请输入第" + (i+1) +"个红球号码:");
            int redNumber = sc.nextInt();
            if(redNumber>=1 && redNumber<=33){
                boolean flag = panNumber(arr,redNumber);
                if(!flag){
                    arr[i] = redNumber;
                    i++;
                }else{
                    System.out.println("输入的号码已重复");
                }
            }else{
                System.out.println("输入的红球号码超出范围");
            }
        }
        System.out.println("请输入蓝球号码:");
        while (true) {
            int blueNumber = sc.nextInt();
            if(blueNumber>=1 && blueNumber<=16){
                arr[arr.length-1] = blueNumber;
                break;
            }else{
                System.out.println("输入的号码超出范围");
            }
        }
        return arr;
    }

    public static int[] creatNumber() {
        int[]arr =  new int[7];
        Random r = new Random();
        for (int i = 0; i < 6; ) {
            int redNumber = r.nextInt(31) + 1;
            boolean flag =panNumber(arr,redNumber);
            if(!flag){
                arr[i] = redNumber;
                i++;
            }
        }
        int blueNumber = r.nextInt(6)+1;
        arr[arr.length-1] = blueNumber;
        return arr;
    }
    public static boolean panNumber(int[] arr, int number) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == number) {
                return true;
            }
        }
        return false;
    }
}

练习10二维数组

二维数组静态初始化

格式:数据类型[][]数组名 = new 数据类型[][]{{元素1,元素2},{元素1,元素2}};

范例:int[][]arr = new int[][]{{11,22},{33,44}};

简化格式:数据类型[][]数组名 = {{元素1,元素2},{元素1,元素2}};

范例:int[][]arr = {{11,22},{33,44}};

每一个一维数组其实是二维数组的元素,所以每一个一维数组之间需要用逗号隔开,最后一个一维数组后面不需要加逗号。

获取方法

System.out.println(arr[0]);  //表示取二维数组中的第一个一维数组
//arr[0]二维数组中的第一个一维数组
//arr[0][0]获取第一个一维数组中0索引的元素
System.out.println(arr[0]);

二维数组的遍历

//外循环:遍历二维数组,得到里面的每一个一维数组
for (int i = 0; i < arr.length; i++) {
			//i:表示二维数组中的每一个索引
			//arr[i]:表示二位数组中每一个元素(一维数组)
            //内循环:遍历一维数组,得到里面的每一个元素
            for (int j = 0; j < arr[i].length; j++) {
            //j:表示一维数组中的每一个元素
                System.out.print(arr[i][j] + " ");
            }

二维数组的动态初始化

格式:数据类型[][]数组名 = new数据类型[m][n];
m表示这个二维数组,可以存放多少个一维数组
n表示每一个一维数组,可以存放多少个元素

范例:int[][]arr = new int[2][3];
该数组可以存放2个一维数组,每一个一维数组中可以存放3个int类型元素

代码实现

public class Hello {
    public static void main(String[] args) {
        int[][]arr =new int [3][5];
        //给一维数组赋值
        arr[0][0] = 10;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
}

二维数组的内存原理图

二维数组

练习

某商城每个季度的营业额如下:单位(万元)

第一季度:226644

第二季度:777388

第三季度:252465

第四季度:116699

要求计算出每个季度的总营业额和全年的总营业额

public class Hello {
    public static void main(String[] args) {
        int[][] arr = {
                {11, 66, 99},
                {11, 66, 99},
                {25, 24, 65},
                {77, 73, 88}};
        int yearSum = 0;
        for (int i = 0; i < arr.length; i++) {
            int [] jiduArr = arr[i];
            int sum = getSuma(jiduArr);
            System.out.println("第" + (i+1) +"季度的营业额为" + sum);
            yearSum = sum + yearSum;
        }
        System.out.println("全年的总营业额为:" + yearSum);
    }
    public static int getSuma(int[]arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
             sum = sum + arr[i];
        }return sum;
    }
}
posted @ 2023-05-14 13:12  张彧520  阅读(30)  评论(0)    收藏  举报