题目1(训练) 定义一个方法,该方法能够找出两个小数中的较小值并返回。在主方法中调用方法进行测试。
训练提示
根据方法的功能描述,方法的参数应该是两个小数。
要返回两个小数的较小值,所以返回值类型也是小数类型。
解题方案 操作步骤
定义方法getMin(),方法的参数是double a ,double b。
在方法中对两个数字进行判断,返回较小值。
在主方法中调用getMin()方法并接受返回值。
在主方法中打印结果。
参考代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package test;public class Test01 { public static void main (String[] args) { double a = 2.54 ; double b = 39.5 ; double res = getMin(a, b); System.out.println("较小的数是:" + res); } public static double getMin (double a, double b) { double min = a < b ? a : b; return min; } }
题目2(训练) 定义一个方法,该方法能够找出三个整数中的最大值并返回。在主方法中调用方法测试执行。
训练提示
根据题意,方法中需要使用三个整数,所以方法参数应该是三个整数类型。
方法需要有返回值,返回值的类型也是整数类型。
解题方案 操作步骤
定义方法getMax(),方法的参数是三个int类型变量a,b,c,方法的返回值是int类型。
在方法中使用多分支if…else…判断出最大值并返回。
在主方法中调用getMax()方法并接受返回值。
在主方法中打印结果。
参考代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package test;public class Test02 { public static void main (String[] args) { int a = 269 ; int b = 625 ; int c = 467 ; int res = getMax(a, b, c); System.out.println("三个数最大值为" + res); } public static int getMax (int a,int b,int c) { int res; if (a > b) { res = a; } else if (b > c) { res = b; } else { res = c; } return res; } }
题目3(训练) 通过键盘录入两个整数n和m。n代表行数,m代表列数。定义一个方法,方法的功能是打印n行m列的@符号。执行效果如下:
1 2 3 4 5 6 7 8 请输入行数: 4 请输入列数: 5 @@@@@ @@@@@ @@@@@ @@@@@
训练提示
方法内需要知道行数和列数,所以参数应该是两个整数类型。
方法不需要返回任何值,所以返回值类型应该是void。
解题方案 操作步骤
创建键盘录入对象。
通过键盘录入n的值代表行数,通过键盘录入m的值代表列数。
定义print()方法,方法的参数是两个整数n和m,返回值类型是void。
在方法中使用循环嵌套按照指定格式输出内容。
在主方法中调用print方法,传入n和m两个参数。
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package test;import java.util.Scanner;public class Test03 { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请选择行数:" ); int n = scanner.nextInt(); System.out.print("请选择列数:" ); int m = scanner.nextInt(); generateRectangle(n, m); } public static void generateRectangle (int n,int m) { for (int i = 1 ; i <= n; i++) { for (int j = 1 ; j <= m; j++) { System.out.print("@" ); } System.out.println(); } } }
题目4(训练) 我们知道数学中有九九乘法表。请定义一个方法,方法的功能是打印nn乘法表。在主方法中键盘录入取值范围为[1-9]的变量n,测试方法。执行效果如下:
训练提示
方法需要一个整数变量n,那么方法的参数如何定义?
方法的目的是做打印,那么方法的返回值类型是什么?
解题方案 操作步骤
创建键盘录入对象。
通过键盘输入一个整数变量n。
定义乘法表的方法,方法参数是int类型参数n,返回值类型void。
3.1. 方法内部定义嵌套循环,外层循环从1开始,到n结束,代表打印n行。
3.2.内层循环从1开始,到i结束,代表每行打印i个式子。
3.3.每行最后打印换行。
在主方法中对方法进行调用。
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 package test;import jdk.nashorn.internal.ir.Symbol;import java.util.Scanner;public class Test04 { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("想生成几阶乘法表?可选择1~9:" ); int n = scanner.nextInt(); if (n < 1 || n > 9 ) { System.out.println("超出规定范围1~9" ); return ; } printMultiplicationTable(n); } public static void printMultiplicationTable (int n) { for (int i = 1 ; i <= n; i++) { for (int j = 1 ; j <= i; j++) { System.out.print(j + "×" + i + "=" + (j * i) + " | " ); } System.out.println(); } } }
题目5(训练) 在主方法中通过键盘录入三个整数。定义一个方法,方法接收三个整数变量,在方法中从大到小依次打印三个变量。执行效果如下:
1 2 3 4 请输入第一个整数:10 请输入第二个整数:30 请输入第三个整数:20 从大到小的顺序是: 30 20 10
训练提示
方法需要接受三个整数,那么方法的形式参数如何定义?
方法没有返回值的需求,返回值类型是什么?
解题方案 操作步骤
使用键盘录入分别录入三个整数。
定义method方法,方法的参数是三个int类型,方法的返回值类型是void。
2.1. 定义整数变量max用于存储最大值,定义min变量用于存储最小值。
2.2. 使用if..else..多分支判断语句计算三个整数中的最大值并赋值给max。
2.3. 使用if..else..多分支判断语句计算三个整数中的最小值并赋值给min。
2.4. 定义变量mid代表中间数,三个整数的和减去max,再减去min,就是中间数的值。
2.5. 依次打印最大值,中间值和最小值。
在主方法中调用method方法,传入参数。
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 package test;import java.util.Scanner;public class Test05 { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入第一个整数:" ); int a = scanner.nextInt(); System.out.print("请输入第二个整数:" ); int b = scanner.nextInt(); System.out.print("请输入第三个整数:" ); int c = scanner.nextInt(); sortBySize(a, b, c); } public static void sortBySize (int a,int b,int c) { int max = 0 ; int medium = 0 ; int min = 0 ; if (a > b && a > c) { max = a; if (b > c) { medium =b; min = c; } else { medium = c; min = b; } } if (b > a && b > c) { max = b; if (a > c) { medium =a; min = c; } else { medium = c; min = a; } } if (c > a && c > b) { max = c; if (a > b) { medium =a; min = b; } else { medium = b; min = a; } } System.out.println("从大到小的顺序是:" + max + " " + medium + " " + min); } }
题目6(训练) 数字是有绝对值的,负数的绝对值是它本身取反,非负数的绝对值是它本身。请定义一个方法,方法能够得到小数类型数字的绝对值并返回。请定义方法并测试。
训练提示
方法的功能是得到一个小数的绝对值,参数应该是一个小数类型。
绝对值需要被返回,返回值类型应该也是小数类型。
解题方案 操作步骤
定义一个小数变量num。
定义获取绝对值的方法,方法的参数是一个double类型,返回值类型是double。
在方法内部使用if..else..判断。
3.1. 如果是负数则对负数取反并返回。
3.2. 如果不是负数则直接返回数字本身。
在主方法中调用绝对值方法,传入参数num,并接受返回值。
打印返回的结果。
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package test;public class Test06 { public static void main (String[] args) { double num1 = 34.6 ; double res1 = getAbsoluteValue(num1); System.out.println(num1 + "的绝对值是:" + res1); double num2 = -6.8 ; double res2 = getAbsoluteValue(num2); System.out.println(num2 + "的绝对值是:" + res2); } public static double getAbsoluteValue (double num) { if (num >= 0 ) { return num; } else { return -num; } } }
题目7(综合) 请定义一个方法,对正数的小数进行四舍五入的操作(不考虑负数情况)。四舍五入之后的结果是一个int整数类型并返回。最后对方法进行测试。
训练提示
要求对小数进行操作,方法的参数类型是一个小数类型。
操作之后的结果是int整数,那么返回值类型是int类型。
四舍五入的操作关键是十分位(小数第一位),如何获取十分位?
解题方案 操作步骤
定义一个正数的小数数字num。
定义四舍五入的方法,方法的参数是一个double类型num,返回值类型是int类型。
将小数乘以10后强转为int,再对10取余 ,能过获取到十分位数字,赋值给int类型变量a。
对a进行判断,如果a小于4则把num强转为int并返回(舍去小数)。
如果a大于等于5则把num强转为int后再加一并返回(相当于进一位)。
在主方法中调用四舍五入方法,传入参数num,并接收返回值。
打印返回的结果。
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package test;import java.util.Scanner;public class Test07 { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个正数的小数,为您四舍五入:" ); double num = scanner.nextDouble(); int res = numRounding(num); System.out.print("计算结果为:" + res); } public static int numRounding (double num) { double flag = (num * 10 ) % 10 ; int tenths = (int )flag; if (flag >= 5 ) { num = num + 1 ; } int res = (int )num; return res; } }
题目8(综合扩展)选做 一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)
1 2 3 4 5 888元的奖金被抽出 588元的奖金被抽出 10000元的奖金被抽出 1000元的奖金被抽出 2元的奖金被抽出
训练提示
奖项要随机出现,但奖金不是连续的数字,不能被随机产生。能随机产生的只有数组的索引了,可以使用随机索引来代表随机元素。因为索引和元素是一一对应的,
哪些奖被抽过了,哪些奖没有被抽过,要定义一个数组来存放已经被抽过的奖项 。
每个奖项只能被抽出一次,要写一个方法来控制奖项不重复。
解题方案 使用数组存放多个奖金,再使用另一个数组存放已经被抽过的奖金,使用方法来判断某个奖金是否已经被抽取过。
操作步骤
定义奖金的数组arr。
定义数组brr准备存放已经被抽过的奖金,两个数组长度相同。
定义一个变量index,用于代表数组brr的索引。
定义方法,判断数组中是否存在某数字,存在返回true,不存在返回false。
写一个while循环,如果index6. 在循环中使用随机数产生一个随机索引i。
使用步骤4的方法判断brr数组中是否包含arr[i]奖金。
如果不包含,则打印arr[i]奖金,并且把它放入brr数组中代表已经被抽取过,同时index加一。
参考答案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 package test;import java.util.Random;public class Test08 { public static void main (String[] args) { int [] arr = {2 ,588 ,888 ,1000 ,10000 }; int [] brr = new int [arr.length]; int index = 0 ; Random random = new Random(); while (index <= brr.length - 1 ) { int randomIndex = random.nextInt(brr.length); boolean res = brrSearch(arr[randomIndex], brr); if (res == false ) { System.out.println(arr[randomIndex] + "元的奖金被抽出" ); brr[index] = arr[randomIndex]; index++; } } } public static boolean brrSearch (int num, int [] brr) { for (int i = 0 ; i < brr.length; i++) { if (brr[i] == num) { return true ; } } return false ; } }
第八题做傻了,读不懂题是让干什么的。 一开始想的是对红包数组随机排序,然后按顺序打印出来; 但感觉题没这么简单,于是把题想复杂了,写出来的代码我自己都看不懂想干啥。 最后提交的这版Test08代码是根据题目提示的操作步骤还原出来的作者意图,如果让自己想,我是想不出来的。(ó﹏ò。)