目录
将来我们去做一些需求,都是一个一个方法来实现的,所以在这里我们采用方法来编写所有案例。
将来我们去做一些需求,都是一个一个方法来实现的,所以在这里我们采用方法来编写所有案例。
案例一:买飞机票
分析:
1.阅读需求我们会发现,不同月份、不同原价、不同舱位类型优惠方案都不一样;所以,可以将原价、月份、舱位类型写成参数
2.最终结果是求当前用户的优惠票价,所以可以将优惠票价作为方法的返回值。
3.先使用if判断月份是旺季还是淡季,然后使用if分支判断是头等舱还是经济舱,计算票价。
代码:
package cn.itcast.practices;
/*
需求:
用户购买机票时,机票原价会按照淡季、旺季,
将来我们去做一些需求,都是一个一个方法来实现的,所以在这里我们也采用方法来编写。
*/
public class Test1 {
public static void main(String[] args) {
// 目标:完成买飞机票的案例。
double result = calculate(1000,8,"经济舱");
System.out.println("优惠价是:"+result);
}
public static double calculate(int price, int month, String type){
//1.判断当前月份是淡季还是旺季
//旺季
if (month >= 5 && month <= 11) {
//判断舱位类型
if (type == "经济舱") {
return price * 0.85;
} else {
return price * 0.9;
}
//淡季
} else {
if (type == "经济舱") {
return price * 0.65;
} else {
return price * 0.7;
}
}
}
}
运行:
案例二: 开发验证码
分析:
1.要求生成指定位数的验证码,让调用者传递即可, 所以需要一个参数,用来表示验证码的位数。
2.考虑方法是否需要有返回值?该方法的结果,就是为了得到验证码,所以,返回值就是验证码;
3.定义一个空字符串用来接收随机出来的字符,使用字符'z'-'0'随机区间,进行条件分析
代码:
package cn.itcast.practices;
import java.util.Random;
目标:完成生成随机验证码。
public class Test3 {
public static void main(String[] args) {
//调用方法
String result = createCode(5);
System.out.println(result);
}
public static String createCode(int n) {
//1.定义一个String类型的变量用于记住产生的每位随机字符
String s = "";
Random random = new Random();
//2.按照方法接收的验证码位数n,循环n次
for (int i = 0; i < n; i++) {
//每次循环,产生一个字符,可以是数字字符、或者大小写字母字符,
//使用字符在底层是ASCII码进行计算,最后强转为char类型
char c = (char) (random.nextInt('z' - '0' + 1) + '0');
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) {
s += c; //中间还有用不到的字符需要排除
}else {
//如果随机到其中几个不在范围的字符,就重新随机直到符合
i--;
}
}
return s;
}
}
运行:
案例三:评委打分
分析:
1.到底多少个评委呢? 可以由调用者传递,所以,我们可以把评委的个数写成参数。
2.需求中,想要的最终结果是平均分,所以,返回值就是平均分;
3.(1)假设评委的个位为n个,那么就需要n个评委的分数,首先可以新建一个长度为n的数组, 用来存储每一个评委的分数
(2)循环n次,使用Scanner键盘录入n个1~100范围内的整数,并把整数存储到数组中
(3)求数组中元素的总和、最大值、最小值
(4)最后再计算平均值; 平均值 = (和-最大值-最小值)/(数组.length-2);
代码:
package cn.itcast.practices;
import java.util.Scanner;
public class Test10 {
public static void main(String[] args) {
// 目标:完成评委打分案例。
System.out.println("当前选手得分是:" + getAverageScore(6));
}
public static double getAverageScore(int n) {
// 1、定义一个动态初始化的数组,负责后期存入评委的打分
int[] scores = new int[n];
//2、遍历数组的每个位置,依次录入评委的分数
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入第" + (i + 1) + "位评委打分");
int number = scanner.nextInt();
scores[i] = number;
}
// 3、从数组中计算出总分,找出最高分,最低分。
int sum = 0; // 求总分用的变量
int max = scores[0]; // 求最大值的
int min = scores[0]; // 求最小值的。
// 遍历数组找出这些数据的。
for (int i = 0; i < scores.length; i++) {
//求最大值
if (max < scores[i]) {
max = scores[i];
}
//求最小值
if (min > scores[i]) {
min = scores[i];
}
//求和
sum += scores[i];
}
// 4、计算出平均分并返回
return 1.0 * (sum - min - max) / (scores.length - 2);
}
}
运行:
案例四: 数字加密
分析:
1.首先,考虑方法是否需要接收数据处理?
需要一个4位数,至于是哪一个数,让方法的调用者传递。
所以,方法的参数,就是这个需要加密的四位数
2.接着,考虑方法是否需要有返回值?
方法最终的结果是一个加密后的数据
所以,返回值就表示为加密后的数据。
3.最后,再考虑方法内部的业务逻辑,这里的业务逻辑就是那一系列的加密运算
1)先要把4位数整数拆分为,4个数字,用一个数组保存起来
2)再将数组中的每一个元素加5,再对10取余
3)最后将数组中的元素反转,
代码:
package cn.itcast.practices;
import java.util.Scanner;
public class Test4 {
public static void main(String[] args) {
//创建随机数对象
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个四位数密码");
int number = scanner.nextInt();
//调用方法
String result = jiaMI(number);
System.out.println(result);
}
public static String jiaMI(int number) {
//1.数字拆分放入数组
int[] arr = {
number / 1000 % 10,
number / 100 % 10,
number / 10 % 10,
number % 10
};
//2.对每一位进行+5
for (int i = 0; i < arr.length; i++) {
arr[i] += 5;
arr[i] %= 10;
}
//3.将数组反转
int left = 0;
int right = arr.length - 1;
while (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
//4.循环字符串相加
String s = "";
for (int i = 0; i < arr.length; i++) {
s += arr[i];
}
return s;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/e852083a5647074a3b9b29b3368096b4.png)
案例五:数组拷贝
分析:
1.首先,考虑方法是否需要接收数据处理?
该方法的目的是拷贝数组,拷贝哪一个数组呢? 需要调用者传递
所以,参数应该是一个数组
2.接着,考虑方法是否需要有返回值?
该方法最终想要得到一个新数组
所以,返回值是拷贝得到的新数组
3.最后,考虑方法内部的业务逻辑?
1)创建一个新的数组,新数组的长度和元素数组一样
2)遍历原数组,将原数组中的元素赋值给新数组
3)最终将新数组返回
代码:
package cn.itcast.practices;
public class Test11 {
public static void main(String[] args) {
// 目标:掌握数组拷贝。
int[] arr = {11, 22, 33};
int[] arr2 = copy(arr);
printArray(arr2);
// 注意:这个不是拷贝数组,叫把数组变量赋值给另一个数组变量。
// int[] arr3 = arr;
// arr3[1] = 666;
// System.out.println(arr[1]);
}
public static int[] copy(int[] arr) {
// arr = [11, 22, 33]
// 0 1 2
// 1、创建一个长度一样的整型数组出来。
int[] arr2 = new int[arr.length];
// arr2 = [0, 0, 0]
// 0 1 2
// 2、把原数组的元素值对应位置赋值给新数组。
for (int i = 0; i < arr.length; i++) {
// i = 0 1 2
arr2[i] = arr[i];
}
return arr2;
}
//这是定义了一个打印的方法
public static void printArray(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ", ");
}
System.out.println("]");
}
}
运行: