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面试笔试时常考的编程题,大家有什么不理解的地方欢迎在评论区留言,有其他的方法也欢迎大家分享!