来黑马有一段日子了,下面将我学习过程中遇到的难点与大家分享
/*
需求:键盘输入两个数。定义方法求出这两个数的最小公倍数和最大公约数。
*/
public class MaxAndMin {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数:");
int a = sc.nextInt();
System.out.println("请输入第二个数:");
int b = sc.nextInt();
int gongBeiShu = minGongBeiShu(a, b);
System.out.println("最小公倍数是:" + gongBeiShu);
int gongYueShu = maxGongYueShu(a, b);
System.out.println("最大公约数是:" + gongYueShu);
}
public static int minGongBeiShu(int a, int b) {
int max = a > b ? a : b;
int min = a < b ? a : b;
for (int i = max; i <= min * max; i++) {
if (i % a == 0 && i % b == 0) {
return i;
}
}
return -1;
}
public static int maxGongYueShu(int a, int b) {
int max = a > b ? a : b;
int min = a < b ? a : b;
for (int i = min; i > 1; i--) {
if (max % i == 0 && min % i == 0) {
return i;
}
}
return -1;
}
}
求两个数的最大公约数和最小公倍数有异曲同工之处,主要是讲循环的起点和终点分析清楚,这样才能提高效率。
/*
需求:给定一个整数数组array和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
*/
public class GetSum {
public static void main(String[] args) {
int[] array = {15, 25, 37, 48, 55, 73, 837, 82, 21};//定义一个数组
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数");
int target = sc.nextInt();//自己手动输入一个目标
boolean flag = false;// 定义一个布尔类型标记,用来标记数据不存在情况
for (int i = 0; i < array.length; i++) {//第一层循环,用来控制数组中的所有元素
for (int j = i + 1; j < array.length; j++) {// 第二层循环,因为不能重复使用数组中的元素,所以j从i+1开始
if ((array[i] + array[j]) == target) {// 如果发现
System.out.println("数组下标是:" + i + "和" + j);
flag = true;
break;
}
}
}
if (!flag)
System.out.println("不存在");
}
}
这道题的重点就是嵌套循环,第一个循环用来遍历数组中的所有元素,第二层循环因为题干要求不能重复利用数组中同样的元素,所以第二层循环的起点是i+1;
/*
需求:一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
*/
public class Demo8 {
public static void main(String[] args) {
//1.定义存放奖金的数组
int[] arr = {10000,1000,588,888,2};
//2.定义数组存放已经被取过的奖金
int[] brr = new int[5];
//3.定义变量表示brr的索引
int index = 0;
//4.创建随机数对象
Random r = new Random();
//5.定义循环反复获取随机数,如果index小于arr的长度则继续循环
while(index < arr.length){
//5.1每次生成一个随机索引对应一个奖金
int i = r.nextInt(arr.length);
//5.2调用方法判断这个奖金是否被获取过
boolean b = exist(brr, arr[i]);
//5.3b是false代表这个奖金没有被抽取过
if(!b) {
//5.4把获取之后的奖金存放到brr中
brr[index] = arr[i];
//5.5index索引向后移动一次
index++;
//5.6打印本次被抽出的奖项
System.out.println( arr[i] + "元的奖金被抽出");
}
}
}
//6.定义方法:判断brr数组中是否存在num这个数字
public static boolean exist(int[] brr,int num){
//6.1对数组进行遍历
for (int i = 0; i < brr.length; i++) {
//6.2判断如果找到数字,则返回true
if(brr[i] == num){
return true;
}
}
//6.3如果最终没有找到则返回false
return false;
}
}
这一道题的难点是抽奖的时候要随机而且不能重复,这就需要我们重新定义一个数组,将已经抽过的奖项放入新数组中,这样当随机出一个奖项时,做出判断,遍历新数组,看奖项是否被抽过, |
|