Java基础练习题

开始前先讲解一个小的知识点
//Scanner 可以跟键盘交互引用你输入的数字,在赋值给你所定义的变量,格式大概就是这样,假如我输入了一个1000那么这个1000就赋值给了 int类型的 ticket ,再次之前一定要先new一个这个方法。格式自行理解
Scanner sc =new Scanner(System.in);
System.out.println("请输入机票的原价");
int ticket =sc.nextInt();
下面写一个机票的代码
import java.util.Scanner;
//要求旺季是 5 -10月份,淡季是 11月份到来年4月份
//淡季头等舱7折,经济仓 6.5 折 ,旺季头等舱9折经济舱8.5
public class top14 {
    public static void main(String[] args) {
        //下面就是利用键盘交互来自行输入用户所输入的值,在赋值给以下确定好的变量
        Scanner sc =new Scanner(System.in);
        System.out.println("请输入机票的原价");
        int ticket =sc.nextInt();
        System.out.println("请输入机票的月份");
        int mouth =sc.nextInt();
        System.out.println("请输入机票是头等舱0还是经济舱1");
        int seat =sc.nextInt();
        //下面首先先判断是淡季还是旺季
        if(mouth<=10&&mouth>=5){
            //再来判断是经济舱还是头等舱
            if(seat == 0 ){
                //请注意这里,由于他是*0.9的所以结果必然是小数了,但是咱们的ticket也就是价格,他是整数类型的,所以在这里必须做一个类型强转,记住类型名称和后面整个的运算都要单独括起来,整个是固定格式,可以去了解以下强转的
                ticket=(int)(ticket * 0.9);
            } else if (seat == 1) {
                ticket=(int)(ticket*0.85);
            }else {
                System.out.println("您输入的有点小失误哦QaQ");
            }
            /*注意这个地方的&& and || 用到了很多的连接符号
            这里呢就是由于这个11月份一直到来年的4月份设计到了跨年的操作,这个地方给分割成了两部分来解决这个问题
            首先第一个就是满足 11 到 12 月份这个中间用&&符号来代表满足两个条件都需要满足
            两边一样自行理解,要解释以下中的||就是两边满足任何其中一个都可以满足淡季的操作
            */
        }else if ((mouth >=11&&mouth<=12)||(mouth>=1&&mouth<=4)){
            //接着判断经济仓和头等舱
            if(seat == 0 ){
                //请注意这里,由于他是*0.9的所以结果必然是小数了,但是咱们的ticket也就是价格,他是整数类型的,所以在这里必须做一个类型强转,记住类型名称和后面整个的运算都要单独括起来,整个是固定格式,可以去了解以下强转的
                ticket=(int)(ticket * 0.7);
            } else if (seat == 1) {
                ticket=(int)(ticket*0.65);
            }else {
                System.out.println("您输入的有点小失误哦QaQ");
            }



        }
        else {
            System.out.println("您输入的有误哦aaa");
        }
        System.out.println("您的最终价格是"+ticket);

    }


}

验证码
import java.util.Random;

public class top15 {
    //做一个验证码前四位是随机大小写英文字母,后一位是数字
    //首先先搞定随机字母这个难题
    public static void main(String[] args) {
        //将大小写字母都放入到数组当中去
        char[] chs = new char[52];
        for (int i = 0; i < chs.length; i++) {
            //做if判断遍历前25个
            if (i <= 25) {
                //遍历这个数组
                //利用AscII马表开头的是字母a代表的是97,b就是+1以此类推
                //小写的字母
                chs[i] = (char) (97 + i);//就是将97做强转他转成字符char类型就是a,然后在+i,i在循环的时候会递增

            } else {
                //判断大写的字母,大写A是从65开始的
                //解释为什么最后要在减去一个26,是因为上方遍历完了之后,数组i已经是到了26了,所以在赋值的时候i就是从26开始赋值的
                //然后这不由于此时的i等于26,让他在减去个26这不又回到了原处就是等于65以此类推
                chs[i] = (char) (65 + i - 26);
            }


        }
        //抽取随机数字用Random的方法
        Random r = new Random();
        //int RandomIndex=r.nextInt(chs.length);//这个地方就是定义r的范围,他跟数组的长度是一样的,将这个随机数字赋值给了RandomIndex
        //System.out.println(chs[RandomIndex]);//c此时已经能随机获取一个字母
        //现在的要求是获取四个随机的字母所以我们把上面的那些给他循环四次并输出就可以了


        //现在循环四个随机的字母,但是还有一个要求就是得拼接起来这几个字母
        //现在定义个字符串用来拼接,先定义一个初始值
        String result = "";
        for (int i = 0; i < 4; i++) {
           //Random r = new Random();
            int RandomIndex=r.nextInt(chs.length);
            //System.out.println(chs[RandomIndex]);
            //将chs第一次获取到的字母加上result初始的空的值赋值给result,一次类推得到一个随机的4位数的字符串
            result= result + chs[RandomIndex];

        }
        //此时已经能获取到一个随机四个字母了
        //System.out.println(result);


        //再来抽取随机9个数字
        //还是用上面的random随机数,里面上面创建的r重新给定一个一个长度为0-9也是就是10个的随机数
        int num=r.nextInt(10);//并赋值给num

        //最后输出结果
        System.out.println(result+num);

    }


}

计算去掉最大值和最小值的平均数
import java.util.Scanner;

public class top16 {
    public static void main(String[] args) {
        // 定义一个数组来存储六个学生的成绩
        int scoreArr[] = getscores();

        // 输出输入的成绩
        for (int i = 0; i < scoreArr.length; i++) {
            System.out.println("成绩 " + (i + 1) + ": " + scoreArr[i]);
        }

        // 调用最大值
        int max = getMax(scoreArr);
        // 调用最小值
        int min = getMin(scoreArr);

        // 输出最大值和最小值
        System.out.println("最大值: " + max);
        System.out.println("最小值: " + min);

        // 计算去掉最大值和最小值后的平均成绩
        double average = calculateAverage(scoreArr, max, min);
        System.out.println("去掉最高分和最低分后的平均成绩: " + average);
    }

    // 再来做判断最大值
    public 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;
    }

    // 判断最小值
    public 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;
    }

    // 计算去掉最大值和最小值后的平均成绩
    public static double calculateAverage(int[] scoreArr, int max, int min) {
        int sum = 0;
        for (int score : scoreArr) {
            sum += score;
        }
        sum -= (max + min); // 去掉最大值和最小值
        return sum / 4.0; // 剩下的四个成绩求平均值
    }

    // 定义六个成绩
    public static int[] getscores() {
        int scores[] = new int[6]; // 定义一个长度为6的数组用来记录六个人的成绩
        Scanner sc = new Scanner(System.in);

        for (int i = 0; i < scores.length; ) {
            System.out.println("请输入成绩 (0-100): ");
            int score = sc.nextInt();
            // 判断成绩的范围防止输入错误
            if (score >= 0 && score <= 100) {
                scores[i] = score; // 判断用户所输入的数字符合不符合要求,如果符合的话在传入数组里面
                i++; // 只有输入正常的时候i的值才会增加
            } else {
                System.out.println("您当前输入有误请重新输入: " + i);
            }
        }
        return scores;
    }
}

数字加密
public class top17 {
    public static void main(String[] args) {
        //对数字进行加密
        //加密就是对这几个数字都加五,对10求余数 再反转 ,在拼接到一块


        //首先开始先定义一个数组
        int arr []={1,9,8,3};


        //先做循环操作并在循环的时候每次都加上5在赋值给这个数组
        for (int i = 0; i < arr.length; i++) {
            arr[i]=arr[i]+5;
           // System.out.println(arr[i]);
        }
        //在对加完5的数组进行%5
        for (int i = 0; i < arr.length; i++) {
            arr[i]=arr[i]%10;
            // System.out.println(arr[i]);
        }
        //在对数组进行反转
        //定义一个新的变量j来表述数字的最大长度,循环的时候每次最小长度+1,最大长度就-1
        for (int i = 0, j=arr.length-1; i < j; i++,j--) {
            int temp =arr[i];//定义一个变量temp把arr[i]循环的值赋值给temp
             arr[i]=arr[j];//在把每次循环arr[j]里面的值赋值给arr[i]
             arr[j]=temp;//最后再把最一开始arr[i]赋值给temp的值赋值给arr[j]

        }

        //最后在拼接到一块
        int num=0;
        for (int i = 0; i < arr.length; i++) {
            //代码解释,就是首先先定义一个新的变量num用来接受最后的数字
            //将num * 10 之后 再去加上数组的每一次循环的结果
            //假如第一次循环num =0 0*10 还是0 + arr[0] 最后等于8
            //此时num就等于8 8再去乘10 就是 80 +arr[1]=83
            //以此类推你就会发现规律了
            num = num *10+ arr[i];
        }

        System.out.println(num);

    }

}

将一个整数放到数组当中去
public class top18 {
    public static void main(String[] args) {
        // 将一个整数放入到一个数组当中去
        // 定义一个变量来记录这个整数
        int number = 123;
        // 定义一个变量来记录数组的长度
        int count = 0;

        // 临时变量
        int temp = number;

        // 代码解释:将number除以10,每次除以10它都会变小,
        // 当它变成小数的时候也就是0.几的时候就停止
        // 每次除的时候count都会+1,最后count是多少那也就代表数字的长度是多少
        while (temp != 0) {
            temp = temp / 10;
            count++;
        }

        // 定义一个数组,其长度就是count
        int[] arr = new int[count];

        // 把整数的每一位都添加到数组当中去
        // 设置临时变量来接受数组在循环中每一次的值再赋值给数组
        temp = number;
        int index = arr.length - 1;

        while (temp != 0) {  //123
            int digit = temp % 10; // 获取当前的个位数  //3
            arr[index] = digit; // 将个位数添加到数组中 arr[2]=3
            temp = temp / 10; // 去掉个位数 //12
            index--;
        }

        // 输出数组内容
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
    }
}



解密过程
public class top19 {
    //解密数组


    public static void main(String[] args) {
        int arr[]={8,3,4,6};
        //0,1,2,3,4,5,6,7,8,9,10,11,12,13,14


        //首先先反转过来数组

        int temp ;
        for (int i = 0,j=arr.length-1; i < j; i++,j--) {
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }

        for (int i = 0; i < arr.length; i++) {
            //可以对加密过程 0到9这几个数字就是假如这个数字是1 ,+5  %10所以他就是相当于就是6
            //但是假如这个数字是6他在+5之后等于11 在%10之后就是等于1 1+5之后还是他自己
            //至于为什么0到4 要加10 可以做一下推算加密之前 假如这个数字是9  9+5之后等于14,%10 就剩4了
            //现在就是将这个4给个重新加上这个10  就恢复到了之前的14,方便下面在减去5
            //以此类推超过10以上的都得重新去 +10 分别都 0,1,2,3,4最大也就是14了

            // 0到4之间就得+10 ,如果是 5到9之间就是不变
            if (arr [i]>=0&&arr[i]<=4){
               arr[i]=  arr[i]+10;
            }else {
                arr[i]=arr[i];
            }
        }


        //在加密之前是+5的,所以在减去一个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]);
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值