【Java零基础视频教程】综合练习题(一)——基础练习

基础练习

飞机票

机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
​ 按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。

可以设置一个获取价格的函数getPrice,传入机票原价、月份和头等舱或经济舱,得出折后价
在主函数中,根据月份和舱型改变参数

package com.itheima;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc  = new Scanner(System.in);
        System.out.println("请输入票价");
        double price = sc.nextInt();
        System.out.println("请输入月份");
        int month = sc.nextInt();
        System.out.println("请输入座位");
        String seat = sc.next();

        if(month>=5 && month<=10){
            price=getPrice(price,seat,0.9,0.85);
        }else if ((month >= 1 && month <= 4) || (month >= 11 && month <= 12)){
            price=getPrice(price,seat,0.7,0.65);
        }else{
            System.out.println("输入月份有误");
        }

        System.out.println(price);
    }

    public static int getPrice(double price,String seat,double v0,double v1){
        if(seat.equals("头等舱")){
            return (int)(price*v0);
        }else{
            return (int)(price*v1);
        }     
    }
}

打印素数

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

package com.itheima.test;

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

生成验证码

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

    //方法:
    //在以后如果我们要在一堆没有什么规律的数据中随机抽取
    //可以先把这些数据放到数组当中
    //再随机抽取一个索引

先把所有的验证码组成成分放入一个数组中,然后在这个数组中随机数抽取。
在String类的字符串时,要写空字符串,String result = "";

package com.itheima;

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

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

        //1.大写字母和小写字母都放到数组当中
        char [] arr = new char[52];
        for(int i=0;i<arr.length;i++){
            if(i<=25){
                arr[i]=(char)(97+i);//添加小写字母        a--97
            }else{
                arr[i]=(char)(65+i-26);//添加大写字母     A--65
            }
        }
		//定义一个字符串类型的变量,用来记录最终的结果
        String result = "";
	
		//2.随机抽取4次
        Random random = new Random();
        for(int i=0;i<4;i++){
            int index = random.nextInt(arr.length);
            result+=arr[index];
        }
        
        //3.随机抽取一个数字0~9
        result+=(int)(random.nextInt(10));
        System.out.println(result);
    }
}

复制数组

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

package com.itheima.test;

public class Test4 {
    public static void main(String[] args) {
        //1.定义一个老数组并存储一些元素
        int[] arr = {1,2,3,4,5};
        //2.定义一个新数组的长度跟老数组一致
        int[] newArr = new int[arr.length];
        //3.遍历老数组,得到老数组中的每一个元素,依次存入到新数组当中
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }
        //4.新数组中已经存满元素了
        for (int i = 0; i < newArr.length; i++) {
            System.out.println(newArr[i]);
        }

    }
}

评委打分

在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。

可设置4个函数,获取打分、计算最高分、计算最低分、计算平均分。
使用数组来存取分数。

package com.itheima;

import java.util.Scanner;

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

        int[] scoreArr = getScores();
        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);
    }

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

    private static int getMin(int[] scoreArr) {
        int min = scoreArr[0];
        for(int i = 1; i < scoreArr.length; i++){
            if(scoreArr[i] < min){
                min = scoreArr[i];
            }
        }
        return min;
    }

    private static int getMax(int[] scoreArr) {
        int max = scoreArr[0];
        for(int i = 1; i < scoreArr.length; i++){
            if(scoreArr[i] > max){
                max = scoreArr[i];
            }
        }
        return max;
    }

    private static int[] getScores() {
        int[] scores = new int[5];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < scores.length; ) {
            System.out.println("请输入第" + (i + 1) + "个分数");
            int score = sc.nextInt();
            if(score>=0 && score<=100){
                scores[i] = score;
                i++;
            }else{
                System.out.println("输入有误,请重新输入");
            }
        }
        return scores;
    }
}

数字加密

某系统的数字密码(大于0),比如1983,采用加密方式进行传输。

规则如下:
​ 先得到每位数,然后每位数都加上5 , 再对10求余,最后将所有数字反转,得到一串新数。

举例:

		1	9	8	3
+5		6   14  13  8
%10		6   4   3   8
反转	   8   3   4   6
加密后的结果就是:8346

把一个数字上的各位数字拆出来分入数组中。为了在数组中能顺序存储位数上的数字,可以起始索引index设为length-1,然后倒着填入数据,具体看代码getNum()函数

package com.itheima;


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.println("请输入密码:");
        Scanner sc = new Scanner(System.in);
        int start = sc.nextInt();
        int[] startArr = getNum(start);



        for (int i = 0; i < startArr.length; i++) {
            startArr[i] = startArr[i] + 5;
            startArr[i] = startArr[i] % 10;
        }

        for (int i = startArr.length-1; i >= 0 ; i--) {
            System.out.print(startArr[i]);
        }

    }

    private static int[] getNum(int start) {
        int temp = start;
        int count = 0;
        while(start !=0){
            start /=10;
            count++;
        }

        int[] arr = new int[count];
        int index = arr.length-1;
        while(temp!=0){
            int ge = temp % 10;
            arr[index] = ge;
            temp /= 10;
            index--;
        }
        return arr;
    }
}

抽奖

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

888元的奖金被抽出
588元的奖金被抽出
10000元的奖金被抽出
1000元的奖金被抽出
2元的奖金被抽出

常规解法是把在奖金池数组中,用一个随机数模拟抽取第x个奖金,然后放入新数组中。之后再奖金池中抽取后需要在新数组确认是否抽取过,如果是则重新抽取。

下面的解法是把奖金池打乱,打乱后顺序输出。

package com.itheima.test;

import java.util.Random;

public class Test10 {
    public static void main(String[] args) {
        //1.把奖池里面的所有奖项打乱顺序
        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;
        }
        //2.遍历奖池,从0索引开始获取每一个奖项
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

    }
}

双色球

在这里插入图片描述

package com.itheima;

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

public class Main {
    public static void main(String[] args) {
        //1.随机生成双色球中奖号
        int[] winNums = getNumber();

        //2.键盘录入用户投注号码
        int [] userNums = new int[6];
        //输入红球
        for (int i = 0; i < userNums.length; i++) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入第" + (i+1) + "个红球号码");
            userNums[i] = sc.nextInt();
        }
        //输入蓝球
        System.out.println("请输入蓝球号码");
        Scanner sc = new Scanner(System.in);
        userNums[userNums.length-1] = sc.nextInt();


        //3.判断中奖情况

        int redCount = 0;
        int blueCount = 0;

        for (int i = 0; i < userNums.length-1; i++) {
            for (int j = 0; j < winNums.length-1; j++) {
                if(userNums[i] == winNums[j]){
                    redCount++;
                }
            }
        }
        for (int i = userNums.length-1; i < userNums.length; i++) {
            if(userNums[i] == winNums[i]){
                blueCount++;
            }
        }

        if(redCount==6&&blueCount==1){
            System.out.println("恭喜你,中奖了1000万!");
        }else if(redCount==6){
            System.out.println("恭喜你,中奖了500万!");
        }else if (redCount==5&&blueCount==1){
            System.out.println("恭喜你,中奖了3000元!");
        }else if (redCount==5){
            System.out.println("恭喜你,中奖了200元!");
        }else if (redCount==4&&blueCount==1){
            System.out.println("恭喜你,中奖了200元!");
        }else if (redCount==4){
            System.out.println("恭喜你,中奖了10元!");
        }else if (redCount==3&&blueCount==1){
            System.out.println("恭喜你,中奖了10元!");
        }else{
            System.out.println("恭喜你,中奖了5元!");
        }
    }

    private static int[] getNumber() {
        int[] winNums = new int[7];
        //红色球中奖号码
        for (int i = 0; i < winNums.length; i++) {
            Random random = new Random();
            int redNum = random.nextInt(33) + 1;
            if(isaBoolean(winNums, redNum)){
                winNums[i] = redNum;
            }else{
                i--;
            }
        }
        //蓝色球中奖号码
        for (int i = winNums.length-1; i < winNums.length; i++) {
            Random random = new Random();
            winNums[i] = random.nextInt(16) + 1;
        }

        System.out.println("双色球中奖号码为:");
        for (int i = 0; i < winNums.length; i++) {
            System.out.print(winNums[i] + " ");
        }
        System.out.println();
        return winNums;
    }

    private static boolean isaBoolean(int[] winNums, int redNum) {
        for (int i = 0; i < winNums.length; i++) {
            if(winNums[i] == redNum){
                return false;
            }
        }
        return true;
    }
}
  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值