Java面试笔试编程题练习

本文介绍了Java编程中的三个实例:打印乘法表、模拟随机抽奖并保证奖项不重复,以及计算两个正整数的最大公约数和最小公倍数。通过这些练习复习了相关知识点和循环结构的应用。
摘要由CSDN通过智能技术生成

1.案例需求

  • 练习1:请定义一个方法,方法的功能是打印nn乘法表。在主方法中键盘录入取值范围为[1-9]的变量n,测试方法。执行效果如下
    在这里插入图片描述
  • 练习2:一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请编写一个方法模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)

在这里插入图片描述

  • 练习3:输入两个正整数n1和n2,求其最大公约数和最小公倍数。
    在这里插入图片描述

2.编程思路

  • 练习1

首先定义一个方法,在主函数中输入一个整数n,判断这个整数是否在1-9之间,不是则重新输入
在范围内外层循环变量i从1遍历到整数n,代表乘法表的行数。内层循环变量j从1遍历到i,代表每一行的列数。这样,当i为1时,j只循环一次;当i为2时,j循环两次,以此类推。
在每次内层循环中,我们输出乘法表达式j + “x” + i和结果i * j,并使用"\t"(制表符)来使输出更整齐。
每行结束后,我们使用System.out.println();来换行。

  • 练习2

定义一个方法 lottery,在主函数里面设置一个一维数组 prizes来放五个奖金
在方法中定义一个number来记录数组的长度,当数组长度大于0时,在数组长度里面随机取一个数组作为被抽出奖金的数组索引并输出
然后将最后一个元素与随机选中的元素交换,数组的长度减一,一直重复此过程直到数组长度为0时结束
当数组的长度为0时,输出所有的奖品都已被抽出

  • 练习3

最大公约数(GCD):
使用欧几里得算法(辗转相除法)可以高效地求出两个数的最大公约数。这种方法的基本思想是:两个正整数a和b(a > b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。步骤如下:
1.给定两个正整数a和b,其中a > b。
2.将a除以b,得到商q和余数r(0 ≤ r < b)。
3.如果r不为0,则将b的值设置为r,并将a的值设置为第2步里面的b。
4.复步骤2和3,直到余数r为0。
5.当r为0时,此时的b即为最大公约数。
最小公倍数(LCM):一旦你得到了两个数的最大公约数,你可以使用公式两数相乘/两数的最大公约数来计算它们的最小公倍数。

3.案例源码

练习1:

import java.util.Scanner;

public class practice1 {
    public static void main(String[] args) {
        System.out.println("请输入一个1-9之间的整数:");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println("乘法表:");
        table(n);
    }

    public static void table(int n) {
        int n1 = n;
        if (n1 > 9 || n1 < 1) {
            System.out.println("您输入的整数不在范围内,请重新输入");
            return;
        }
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "x" + i + "=" + (j * i) + "\t\t");
            }
            System.out.println();
        }
    }

}

练习2:

import java.util.Random;

public class practice2 {
    public static void main(String[] args) {
        int[] prizes = {2, 588, 888, 1000, 10000};
        lottery(prizes);
    }

    public static void lottery(int[] prizes) {
        int number = prizes.length;
        Random random = new Random();
        while (number > 0) {
            int index = random.nextInt(number);
            System.out.println(prizes[index] + "元的奖金被抽出");
            // 将最后一个元素与随机选中的元素交换
            int temp = prizes[index];
            prizes[index] = prizes[number - 1];
            prizes[number - 1] = temp;
            number = number - 1;
        }
        if (number == 0)
            System.out.println("所有的奖品都已被抽出!");
    }
}


练习3:

package JavaDemo.课堂练习.Demo;

import java.util.Scanner;

public class lianxi3 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入第一个正整数");
        int n1 = input.nextInt();
        System.out.println("请输入第二个正整数");
        int n2 = input.nextInt();
        System.out.print(n1+"和"+n2+"的最大公约数为:"+gcd(n1,n2)+"\n");
        System.out.print(n1+"和"+n2+"的最小公倍数为:"+lcm(n1,n2)+"\n");
    }
    public static int gcd(int a, int b) {
        if (b == 0) {
            return a;
        }
        return gcd(b, a % b);
    }

    public static int lcm(int a, int b) {
        return (a * b) / gcd(a, b);
    }
}

4.小结

  • 通过编写博客, 复习了方法、数组、最大公约数、最小公倍数、Random( )以及Scanner( )类的相关知识点,同时也巩固了对for循环的嵌套。
  • 以上分析了三个java面试笔试时常考的编程题,大家有什么不理解的地方欢迎在评论区留言,有其他的方法也欢迎大家分享!
  • 32
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值