尚学堂 实战java程序设计 第3、4章课后题答案
第3章
一、选择题
1.A
2.BD
解析:switch的的判断表达式的数据类型:byte short int char
3.A
解析:0+3+5=8
4.BD
解析:函数重载时对返回数据类型不做检查,但形参数量或类型必须变化,B和原函数是同一函数,D中形参数据个数和类型和原函数相同
5.B
解析:非静态变量,形参并不影响实参.
二、简答题
1.答:相同点:他们都是用来处理多分支条件的结构。
不同点:switch语句只能处理等值条件判断的情况,而且条件只能是整型变量或字符型变量。多重if选择结构的限制,特别适合某个变量处于某个连续区间时的情况。
2.答:break是跳出循环,continue是直接进入下一次循环
3.答:使用break- label,先在循环之前加入一个label标签,然后break label;
4.答:定义:一个类中可以有多个相同名字的方法
作用:行为多态
判断依据:同方法名,不同的形参个数或数据类型
5.答:定义:方法自身调用自身
优点:代码简洁,可以省去很多循环
缺点:需要消耗大量计算机资源
三、编码题
1.
代码
/**
* 1. 从键盘输入某个十进制整数数,转换成对应的二进制整数并输出。
*/
import java.util.Scanner;
public class Homework1 {
public static void main(String [] args){
//输入一个十进制数
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num2 = sc.nextInt();
//转换
int num = num2;
String str="";
do{
//除以2得到商
int div = num/2;
//得到余数作为二进制位
int mod = num%2;
str = mod + str;
//商作为被除数
num = div;
}while(num!=0);//被除数不是零
//输出二进制数
System.out.println(num2+"------>"+str);
}
}
代码
/**
* 2.编程求:∑1+∑2+……+∑100。
* @author Administrator
*
*/
public class Homework2 {
public static void main(String[] args) {
int sum_i=0;
for(int i=1;i<=5;i++){
int sum_j=0;
for(int j=1;j<=i;j++){
sum_j=sum_j+j;
}
sum_i=sum_i+sum_j;
}
System.out.println(sum_i);
}
}
代码
/**
* 3. 编写递归算法程序:一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求数列的第40位数是多少。
* @author Administrator
*
*/
public class Homework3 {
public static void main(String[] args) {
System.out.println(sum(40));
}
public static long sum(int n) {
if (n <= 0) {
return 0;
} else if (n == 1 || n == 2) {
return 1;
} else {
return sum(n - 1) + sum(n - 2);
}
}
}
第4章
一、选择题
1.BD
解析:
B:类必须有构造方法,若程序未写,这系统自动调用系统构造方法.
D:super()会调用父类的构造方法,但父类的构造方法不一定无参
2.D
解析:3+4=7
3.AC
解析:
A:静态方法在类被加载进内存时就分配入口地址,此时不一定有非静态方法
D:this表示构造方法创建的对象,在该类被调用时候才产生,而静态方法在加载内存时候就存在,此时不存在对象,不能用this调用.
4.AC
解析:
C:只要权限够,可以调用其他类的方法
5.C
解析:count是全局变量,count1()方法覆盖后为10;如果count1中的count1前加int,使count1()中的count成为局部变量,则为B
二、简答题
1.答:面向过程是将任务分步,一步一步实现.面向对象是将任务分块拆分,每块再用面向过程实现.
2.答:类是对象的抽象集合,对象是类的具体个体.
3.答:
作用:初始化对象
特征:必须与类名相同,且没有类型
4.答:
作用:代表正在调用该方法的对象
用法:this.成员变量
5.答:作用:为了共享变量或方法
三、编码题
1.
代码
package cn.sxt.exec;
public class Circle {
private int r;
/** 无参构造 */
public Circle(){}
/** 有参构造,初始化半径*/
public Circle(int r){
this.r=r;
}
/** 也可以使用setR方法初始化半径 */
public void setR(int r){
this.r = r;
}
/**计算 面积 */
public void getArea(){
double area = Math.PI * r * r;//从Math工具类得到π的值
System.out.println("圆的面积为:"+area);
}
/** 计算 周长 */
public void getPerimeter(){
double zc = Math.PI * 2 * r;
System.out.println("圆的周长为:"+zc);
}
}
代码
package cn.sxt.exec;
public class Circle {
private int r;
/** 无参构造 */
public Circle(){}
/** 有参构造,初始化半径*/
public Circle(int r){
this.r=r;
}
/** 也可以使用setR方法初始化半径 */
public void setR(int r){
this.r = r;
}
/**计算 面积 */
public void getArea(){
double area = Math.PI * r * r;//从Math工具类得到π的值
System.out.println("圆的面积为:"+area);
}
/** 计算 周长 */
public void getPerimeter(){
double zc = Math.PI * 2 * r;
System.out.println("圆的周长为:"+zc);
}
}
代码
package cn.sxt.exec;
public class People {
private String id;
private String password;
private String email;
/** 无参构造 */
public People(){
}
/** 全参构造 */
public People(String id,String password,String email){
this.id = id;
this.password=password;
this.email = email;
}
public People(String id,String password){
this.id = id;
this.password=password;
this.email=id+"@gameschool.com";
}
public void show() {
System.out.println("编号:"+this.id);
System.out.println("密码:"+this.password);
System.out.println("邮件:"+this.email);
}
public static void main(String[] args) {
//调用全参构造
People p1 = new People("sxt0001","123456","[email protected]");
p1.show();
//调用无参构造
People p2 = new People("sxt0002","654321");
p2.show();
}
}