记录学习Java基础中利用案例来训练编程思维,涉及知识点:变量、数组、运算符、程序流程控制、跳转关键字、方法声明与定义、参数值传递。
?需求:
??机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
??机票最终优惠价格的计算方案如下:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。
?分析:
??1.键盘录入机票的原价,仓位类型,月份信息,调用方法返回机票最终的优惠价格。
??2.方法内部应该先使用if分支判断月份是是旺季还是淡季,然后使用switch分支判断是头等舱还是经济舱。
??3.选择对应的折扣进行计算并返回计算的结果,如果信息录入有误返回价位为-1元代表即可。
?需求:
??除了1和它本身以外,不能被其他正整数整除,就叫素数。
??判断100-200之间有多少个素数,并输出所有素数。
?分析:
??1.101-200之间的数据可以采用循环依次拿到; 每拿到一个数,判断该数是否是素数。
??2.判断规则是:从2开始遍历到该数的一半的数据,看是否有数据可以整除它,有则不是素数,没有则是素数。
??3.如果最终判定是素数,即可输出展示。
public static void main(String[] args) {
int count = 0;
for (int i = 101; i <= 200; i++) { // 遍历101-200所有数
if (isPrime(i)) { //如果true则输出该素数
System.out.println(i);
count++;//累计个数+1
}
}
System.out.println("100-200之间有 " + count + " 个素数。");
}
public static boolean isPrime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i <= num / 2; i++) { //从2开始除一直到该数的一半为止
if (num % i == 0) {
return false;//如果这个数能被某数整除(余数为0,则不是素数
}
}
return true;
}
?需求:
??定义方法实现随机产生一个指定位数的验证码,每位可能是数字、大写、小写字母。
?分析:
??1.定义一个方法,生成验证码返回:返回值类型是String,需要形参接收位数。
??2.在方法内部使用for循环依次生成每位随机字符,并连接起来。
??3.把连接好的随机字符作为一组验证码返回。
如果你没有学过StringBuilder
,你可以直接使用字符串连接的方式生成验证码。但请注意,频繁地使用字符串连接操作在Java中会创建新的字符串对象,效率较低。尽管如此,以下是一个不使用StringBuilder
的实现:
import java.util.Random;
public class Test {
public static void main(String[] args) {
String captcha = generateCaptcha(6);
System.out.println("生成的验证码是: " + captcha);
}
public static String generateCaptcha(int length) {
Random random = new Random();//声明一个随机数对象random
String captcha = "";//声明String对象captcha(验证码)
for (int i = 1; i <= length; i++) {
int type = random.nextInt(3); //循环6次随机生成0、1、2来决定该位置验证码为数字/大写/小写字母
switch (type) {
case 0:
captcha += (char) (random.nextInt(10) + '0'); // 使用"(char)"强制转换为char类型格式数据,拼接数字
break;
case 1:
captcha += (char) (random.nextInt(26) + 'A'); // 大写字母
break;
case 2:
captcha += (char) (random.nextInt(26) + 'a'); // 小写字母
break;
}
}
return captcha;
}
}
?需求:
??把一个数组中的元素复制到另一个新数组中去。
?分析:
??1.需要动态初始化一个数组,长度与原数组一样。
??2.遍历原数组的每个元素,依次赋值给新数组。
??3.输出两个数组的内容。
public static void main(String[] args) {
// 旧数组arrs1[]
int[] arrs1 = {10, 20, 30, 40, 50};
// 新建一个与旧数组长度相同的数组arrs2[]
int[] arrs2 = new int[arrs1.length];
// 遍历旧数组,将元素复制到新数组
for (int i = 0; i < arrs1.length; i++) {
arrs2[i] = arrs1[i];
}
// 输出旧数组和新数组的内容
System.out.println("旧数组: " + Arrays.toString(arrs1));
System.out.println("新数组: " + Arrays.toString(arrs2));
}
?需求:
??在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。
?分析:
??1.把6个评委的分数录入到程序中去 ----> 使用数组
??2.遍历数组中每个数据,进行累加求和,并找出最高分、最低分。
??3.按照分数的计算规则算出平均分。
以下是一个在Java中实现该需求的示例:
public class Test {
public static void main(String[] args) {
// 评委打分数组
int[] scores = {85, 90, 78, 92, 88, 100};
// 初始化最高分、最低分和总分数为数组的第一个元素
int highestScore = scores[0];
int lowestScore = scores[0];
int totalScore = scores[0];
for (int i = 1; i < scores.length; i++) {
// 遍历全数组进行求和,顺便找出最高分和最低分
if (scores[i] > highestScore) {
highestScore = scores[i];
}
if (scores[i] < lowestScore) {
lowestScore = scores[i];
}
totalScore += scores[i];
}
// 去掉最高分和最低分后计算平均分
int Sum = totalScore - highestScore - lowestScore;
int Count = scores.length-2;
double averageScore = (double)Sum/Count;//int型整数做除法计算记得转换类型
System.out.println("选手最后得分: " + averageScore);
}
}
?需求:
??某系统的数字密码:比如1983,采用加密方式进行传输,规则如下:先得到每位数,然后每位数都加上5 , 再对10求余,最后将所有数字反转,得到一串新数8346。
?分析:
??1.将每位数据存入到数组中去,遍历数组每位数据按照规则进行更改,把更改后的数据从新存入到数组中。
??2.将数组的前后元素进行交换,数组中的最终元素就是加密后的结果