一、简答题
1、聊聊你对方法的理解, 以及方法可以为代码带来怎样的好处 ?
答:
方法就是把一些代码打包起来, 用的时候就调用
提高代码复用性,提高代码的可维护性
2、方法最完整的定义格式是什么 ? 再请详细描述下
答: public static void 方法名(){
方法体
}
方法必须先定义后调用,不调用不执行
方法的定义顺序不影响执行结果,但是调用顺序影响执行结果
方法执行完毕后,会回到调用的地方,继续向下执行
3、请回答形参和实参分别指的是 ?
答:
形参是:方法体在定义的时候的名字
实参是: 方法体被调用时的参数值
4、请回答, 你认为方法在什么时候需要声明参数, 什么时候需要声明返回值类型
答: 当方法需要接收外部传入的数据或信息时。
当方法执行完毕后需要返回一个结果给调用者时(返回值类型需要和定义的方法类型一致)。
5、请回答带返回值方法有几种调用格式, 分别是哪几种, 还有不带返回值方法的调用格式
答:
3种
赋值调用
直接调用
打印输出调用
直接调用方法并接收其返回值。
如果方法没有返回值,则可以将其返回值类型声明为void。调用不带返回值方法的方式与调用带返回值方法的第三种方式类似,但是不需要用一个变量来接收返回值,
obj.method(argument);
6、请观察以下代码,在横线处补齐正确代码,保证可以在控制台上输出 wo ai java
public class Test08 {
public static void main(String[] args){
_____①_____ print();
}
public __static void___②_____ print() {
System.out.println("wo ai java");
}
}
7、请问, 在定义方法的时候, 多个方法之间需要保证什么关系 ? 方法的return语句下面, 还可以编写代码吗 ?
答:
方法与方法之间是平级关系,不能嵌套定义
方法调用顺序与执行顺序无关
return(执行后)下面的代码不会被执行,不可以
8、聊聊什么是方法重载, 方法重载能带来怎样的好处呢 ?
答: 方法重载是方法名相同, 与返回值类型无关,形参列表不同(参数类型 数量 位置)
让调用者不用去记忆太多繁琐的方法名称
9、正确的方法重载, 需要满足哪些条件呢 ?
答:
方法名(相同)和参数列表(不同),与返回值无关
形参列表不同,主要包括三个维度:类型、数量、顺序
10、我们调用方法传递实际参数的时候, 参数是基本数据类型, 和引用数据类型, 有什么不同 ?
答: 基本数据类型传递的是具体的值, 引用数据类型参数传递的是地址
11、现有如下代码, 请分析后回答运行结果和原因
public class Test {
public static void main(String[] args){
int num = 10;
change(num);
System.out.println(num);
int[] arr = {10,20,30};
change(arr);
System.out.println(arr[0]);
}
public static void change(int num){
num = num * 100 / 20 + 30;
}
public static void change(int[] arr){
arr = new int[]{100,200,300};
}
}
答: 10
10
方法体中定义的num的变化,影响不到主函数中定义的num
方法体中new出来的地址为新地址, 而change(arr);传过去的地址并没有被使用到
二、编程题
2.1 编程题目一
需求描述:定义一个方法, 方法能够计算出三个整数的最小值,返回
实现提示:
- 参数 :
- 返回值 :
答:
public class MethodVoid {
public static void main(String[] args) {
int a, b, c;
a = 1;
b = 2;
c = 3;
System.out.println("求取的最小值为" + min(a, b, c));
}
/**
* 采取Math方法进行运算判断两个数据的大小
* @param a
* @param b
* @param c
* @return
*/
public static int min(int a, int b,int c) {
//int min = Math.min(a, Math.min(b,c));
int min = (a < b ? a : b) < c ? (a < b ? a : b) : c;
return min;
}
}
2.2 编程题目二
需求描述:随机产生指定范围(给定最大和最小值)的10个数,放在长度为10的数组里,并将数组返回
实现提示:
- 参数 :
- 返回值 :
public class RanArrayr {
public static void main(String[] args) {
int[] arra = new int[10];
arra = rvoid(arra);
System.out.print("[ ");
for (int i = 0; i < arra.length; i++) {
if ((arra.length - 1) == i) {
System.out.print(arra[i]);
} else {
System.out.print(arra[i] + ", ");
}
}
System.out.print(" ]");
}
/*public static int[] rvoid(int[] arr) {
Random r = new Random();
int[] arrays = new int[10];
for (int i = 0; i < 10; i++) {
int num = r.nextInt(9) + 1;
arrays[i] = num;
}
return arrays;
}*/
public static int[] rvoid(int min,int max) {
Random r = new Random();
int[] arrays = new int[10];
for (int i = 0; i < arraays.length; i++) {
arrays[i] = r.nextInt(max-min+1) + min;
}
return arrays;
}
}
2.3 编程题目三
训练目标:能够合理的设计方法参数和返回值, 并调用方法
需求描述:模拟一个简单的考试管理系统, 已知成绩为 10, 20, 30, 40, 50, 60, 70, 80
- 程序运行后, 展示一个菜单, 根据用户输入的选择, 程序响应不同的业务逻辑
- 程序需要一直运行, 直到用户输入 6 的时候, 程序结束
实现提示:
- 将需要操作的多个成绩, 存入一个数组中
- 使用输出语句构建出菜单
- 利用 switch 或者是 if 语句, 区分出用户输入的 1 2 3 4 5 6
- 1 ~ 5 每一个都是一段独立的功能, 所以定义5个方法, 分别实现业务功能
- 在用户输入 1 ~ 5 的时候, 调用对应的方法
答:
public class ExaminationManagementSystem {
public static void main(String[] args) {
//定义成绩数组
int[] scores = {10, 20, 30, 40, 50, 60, 70, 80};
//获取扫描器
Scanner sc = new Scanner(System.in);
int max = scores[0];//最高分
int min = scores[0];//最低分
double avg = 0;//平均分数
int noPass = 0;//合格人数
/*while (true) {
if (input<=0||input>7){
System.out.println("您录入的数字无效, 请重新录入. ");
}else {
break;
}
}*/
while (true) {
System.out.println("---------------------");
System.out.println("欢迎来到黑马考试管理系统");
System.out.println("1. 查看成绩");
System.out.println("2. 查看最高分");
System.out.println("3. 查看最低分");
System.out.println("4. 查看平均分");
System.out.println("5. 查看不及格人数");
System.out.println("6. 退出");
System.out.println("---------------------");
int input = sc.nextInt();//管理系统编号录入
switch (input) {
case 1:
System.out.println("学生成绩为: ");
viewScore(scores);
break;
case 2:
System.out.println("最高分为: " + viewMaxScore(scores, max));
break;
case 3:
System.out.println("最低分为: " + viewMinScore(scores, min));
break;
case 4:
System.out.println("平均分为: " + viewAvgScore(scores, avg));
break;
case 5:
System.out.println("不及格人数为: " + viewnoPass(scores, noPass));
break;
case 6:
System.exit(0);
break;
default:;
}
}
}
/**
* 求平均数
* @param scores
* @param avg
* @return
*/
private static double viewAvgScore(int[] scores, double avg) {
int sum=scores[0];
for (int i = 0; i < scores.length; i++) {
sum+=scores[i];
}
return avg=sum/scores.length*1.0;
}
/**
* 不及格人数
* @param scores
* @param noPass
* @return
*/
private static int viewnoPass(int[] scores, int noPass) {
noPass=0;
for (int i = 0; i < scores.length; i++) {
if (scores[i]<60){
noPass++;
}
}
return noPass;
}
/**
* 查看最低分
* @param arr
* @param min
* @return
*/
private static int viewMinScore(int[] arr, int min) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
return min;
}
/**
* 查看最高分
*
* @param arr
* @param max
*/
private static int viewMaxScore(int[] arr, int max) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
/**
* 查看成绩
*
* @param arr
*/
private static void viewScore(int[] arr) {
System.out.print("[ ");
for (int i = 0; i < arr.length; i++) {
if ((arr.length - 1) == i) {
System.out.print(arr[i]);
} else {
System.out.print(arr[i] + ", ");
}
}
System.out.print(" ]");
}
/* private static void TTL(int[] arr){
for (int i = 0; i < arr.length; i++) {
}
}*/
}