《Java黑皮书基础篇第10版》 第6章【习题】

Java语言程序设计 习题

6.4习题

使用方法的优点有哪些?

可以实现代码复用,将相似的多个解决方案统一写成1个方法

代码更简单高效,需要使用方法时只需要调用即可,不必重写代码

如何定义一个方法?如何调用一个方法?

定位方法声明修饰符、返回值类型、方法名、参数列表

调用方法写出方法名和对应的方法参数

如何使用条件操作符简化程序清单6-1中的max方法?

public class Main {
    public static void main(String[] args) {
    	int a = 10;
    	int b = 5;
    	int z = max(a,b);
    	System.out.print(z);
    }
    
    	public static int max (int num1, int num2) {
    		int result = (num1 > num2) ? num1 : num2;
    		return result;
    }
}

下面的说法是否正确:对返回值类型为void的方法的调用总是单独的一条语句,但是对带返回值类型的方法的调用本身不能作为一条语句

第二句错误

main方法的返回值类型是什么?

void

如果在一个带返回值的方法中,不写return语句会发生什么错误?在返回值类型为void的方法中可以有return语句吗?下面方法中的return语句是否会导致语法错误?

public static void xMethod(double x,double y){
	System.out.println(x + y)return x + y;
}

语法错误

可以有,但只能有return;用于终止程序

会,void方法的return只能用于终止程序

给出形参、实参和方法签名的定义。

形参时方法头中,也就是参数列表中定义的参数

实参是实际调用形参的真实数据

方法签名=方法体+参数列表

写出下列方法的方法头(而不是方法体):

//给定销售额和提成率,计算销售提成
public static double sales(price, percent)
//给定月份和年份,打印该月的日历。 
public static void canlendar(month, year)
//计算一个数的平方根。
public static double sqrt(double x)
//测试一个数是否是偶数,如果是,则返回true。 
public static boolean even(int x)
//按指定次数打印某条消息。
public static void times(int x)
//给定贷款额、还款年数和年利率,计算月支付额。 
public static double monthlyPayment(loan, year, rate)
//对于给定的小写字母,给出相应的大写字母。
public static char case(char x)

确定并更正下面程序中的错误:

public class Test {
	public static method1(int n, m){ 
  	n+=m;
		method2(3.4);
}

	public static int method2(int n){ 
    if (n > 0) return 1;
		else if (n == 0) return 0; 
    else if (n < 0)return -1;
  }
}

没有main入口方法

method1没有指明返回值

method1的参数需要独立定义

method1中调用method2,只能为int整数

method2中如果用了else-if,需要保证有else结尾,不然编译器会认为该方法会出现没有返回值的情况

根据1.9节提出的程序设计风格和文档指南,使用花括号的次行风格重新编排下面的程序。

public class Test
{
	public static double method(double i,double j)
	{
	while (i < j)
  { 
    j--;
  }

	return j;
  }
}
6.5 习题

实参是如何传递给方法的?实参可以和形参同名吗?

通过将实参传递给形参进行传递

可以,二者被分配不同的储存空间,互不影响

确定并更正下面程序中的错误:

public class Main{
	public static void main(String[]args){ 
		nPrintln(5, "Welcome to Java!");
	}
	
	public static void nPrintln(String message, int n){ 
		int n = 1;
		for (int i=0; i<n; i++)
			System.out.println(message); 
	}
}

第一,调用参数不匹配,调用时应该先写字符串,再写数字

第二,已经在方法头中定义了n,不需要在方法体中再次定义了

什么是值传递?给出下面程序的运行结果:

值传递就是把实参传递给形参的过程

public class Main{
	public static void main(String[]args){ 
    //形参与实参使用2个不同的储存空间
  	int max = 0; 
  	max(1, 2, max);
		System.out.println(max); 
	}

	public static void max(int valuel, int value2, int max){ 
    if (valuel > value2) 
      max = valuel; 
    else
			max = value2;
  }
}
0
public class Main{
	public static void main(String[]args){ 
    int i = 1;
		while (i <= 6){ 
      method1(i, 2);
			i++;
    }
  }
  
	public static void method1(int i,int num){
		for (int j=1; j<=i; j++){
			System.out.print(num + " "); 
      num *= 2;
    }
		System.out.println();
  }
}
2 
2 4 
2 4 8 
2 4 8 16 
2 4 8 16 32 
2 4 8 16 32 64 
public class Main {
	public static void main(String[]args) {
    //Initialize times 
    int times =3;
		System.out.println("Before the call," + "variable times is " + times);

		//Invoke nPrintln and display times 
    nPrintln("Welcome to Java!", times);
		System.out.println("After the call," + "variable times is " + times); 
  }

	//Print the message n times 
  public static void nPrintln(String message, int n){ 
    while (n > 0){
      System.out.println("n = " + n);
			System.out.println(message); 
      n--;
    }
  }
}
Before the call,variable times is 3
n = 3
Welcome to Java!
n = 2
Welcome to Java!
n = 1
Welcome to Java!
After the call,variable times is 3
public class Main{
	public static void main(String[]args){ 
    //循环会改变变量的值,按值传递不会
  	int i =0;
		while (i <= 4){ 
      methodl(i);
			i++;
    }

		System.out.println("i is " + i);
	}

	public static void methodl(int i){ 
    do{
			if(i % 3 != 0)
				System.out.print(i + "");
      i--;
    }
		while (i >= 1);

		System.out.println();
  }
}
1 
2 1 
2 1 
4 2 1 
i is 5

在6.13的a中,分别给出调用max方法之前、刚进人max方法、max方法刚要返回之前以及 max方法返回之后堆栈的内容

调用main方法:

main方法所需要的空间:max = 0

调用max方法:

max方法所需要的空间:value1 = 1, value2 = 2, max = 0

main方法所需要的空间:max = 0

执行max方法:

max方法所需要的空间:value1 = 1, value2 = 2, max = 2

main方法所需要的空间:max = 0

结束max方法:

main方法所需要的空间:max = 0

结束main方法

栈为空

6.8习题

什么是方法重载?可以定义两个同名但参数类型不同的方法吗?可以在一个类中定义两个名称和参数列表相同,但返回值类型不同或修饰符不同的方法吗?

方法重载就是,在方法头中,只有参数列表不同的方法

可以,就是方法重载

不可以

下面的程序有什么错误?

public class Main{
	public static void method(int x){
}

	public static int method(int y){ 
    return y; 
  }
}
方法重载必须返回值相同

给定两个方法定义:

public static double m(double x,double y)
public static double m(int x,double y) 

给出对于下面的语句,两个方法中的哪个被调用?

a.double z =m(4, 5); //调用第二个(相比于第一个,第二个方法更精确)
b.double z = m(4, 5.4); //调用第二个
c.double z = m(4.5, 5.4); //调用第一个
6.9习题

什么是局部变量? 什么是局部变量的作用域?

在方法中定义的变量就是局部变量,局部变量的作用域从定义处开始,一直到包含该变量的块结束为止

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值