Java习题参考答案(1-10).doc_第1页
Java习题参考答案(1-10).doc_第2页
Java习题参考答案(1-10).doc_第3页
Java习题参考答案(1-10).doc_第4页
Java习题参考答案(1-10).doc_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章习题解答1. 答:程序设计语言可分为机器语言、汇编语言、高级语言。机器语言的每条指令都是一串二进制代码,完全依赖于硬件系统,不同的机器有着不同的指令系统,指令难以记忆,程序难以阅读。汇编语言用助记符表示计算机指令,程序要经过汇编程序翻译成机器语言才能运行。优点是编写程序比用机器语言节省时间,发生的错误少,比机器语言容易修改。缺点是面向机器。高级语言程序几乎不用修改就可以用在不同型号的计算机上,比汇编语言容易学习,编程用的时间少、程序容易维护等。2. 答:面向过程是一种以过程为中心的编程方法,就是分析出解决问题的步骤,然后用函数把这些步骤一步一步实现。面向对象的方法是以对象为中心的编程方法,它的基本思想是将要构造的软件系统表示为对象集合,其中每个对象是一组数据和对数据的操作组成的封装体,对象之间的联系通过消息传递实现。3. 答:Java语言的特点:简单的、面向对象的、分布式的、解释型的、平台独立的、可移植的、健壮的、安全的、高性能的、多线程的、动态的。4. 答:开发Java程序通常分3步:(1)编辑源程序;(2)编译源程序;(3)执行程序。5. 答:JDK的编译命令是javac.exe,命令格式:javac Welcome.java。如果编译结果报告找不到文件,可能是类名拼写错误或路径错误。6. 答:可获得字节码文件,文件扩展名为.class。如果一个Java文件中定义了多个类,包括外部类、内部类、匿名内部类,每一个类都会生成对应的字节码文件。7. 答:使用Java解释器,即java.exe,命令格式:java Welcome (无扩展名)。8. 答:(1)该程序缺少main()方法。输出语句不能直接写在类体中。(2)语句缺少分号。(3)缺少类的定义。(4)Main()方法不能作为程序执行的入口点,应该定义main()方法。9. 答:保存为ClassTwo.java文件。Java源程序文件的扩展名是.java,Java字节码文件的扩展名是.class。10. 参考程序:public class ShowStars public static void main(String args) for(int i = 9; i 0; i = i - 2) for(int j = i; j 0 ; j -) System.out.print(*); System.out.println(); / 换行 11. 答:编译型语言写的程序执行前需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的时候就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。 解释型语言专门有一个解释器能够直接执行程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。Java程序是半编译半解释型的。Java程序首先被编译成一种称为字节码的中间代码,这种中间代码只有在Java虚拟机上才能运行,运行时是解释执行的。12. 答:Java平台是在Windows、Linux等系统平台上的程序运行平台,主要由Java虚拟机(Java VM)和Java应用程序接口(Java API)两部分组成。Java虚拟机是在一台真正的机器上用软件方式实现的一台假想机。Java虚拟机是运行Java程序必不可少的环境。编译后的Java程序指令由JVM执行。JVM的具体实现包括:指令集(等价于CPU的指令集)、寄存器组、类文件格式、栈、垃圾收集堆、内存区。13. 答:JVM使用的代码存储在.class文件中。JVM的部分指令很像真正的CPU指令,包括算术运算、流控制和数组元素访问等。Java虚拟机规范提供了编译所有Java代码的硬件平台。因为编译是针对假想机的,所以该规范能让Java程序独立于平台。它适用于每个具体的硬件平台,以保证为JVM编译的代码的运行。JVM不但可以用软件实现,而且可以用硬件实现。 第2章习题解答1. 答:标识符必须以字符、下划线(_)或美元符($)开头,其后可以是字符、下划线、美元符或数字,长度没有限制。错误的标识符:以数字开头 不允许使用连字符“-”2. 答:Java共有8种基本数据类型。字节型、短整型、整型、长整型、单浮点型、双浮点型、布尔类型、字符类型。int型数据的最大值是-231,最小值是231-1。Java中常用的引用数据类型有数组、类、接口、枚举类型四种。3. 答:常量是在程序运行过程中,其值不能被改变的量。变量是在程序运行中其值可以改变的量。Java语言的字符型常量是用单引号将字符括起来单个字符;字符串常量是用双引号括起来的一个或多个字符组成,字符串不是Java的基本数据类型,属于引用类型。4. 答:Java语言使用统一码(Unicode)为字符编码,它是由Unicode Consortium建立的一种编码方案。Unicode字符集是用两个字节(16位)的无符号整数为字符编码,可表示65536个字符。它可以表示各国的语言符号,包括希腊语、阿拉伯语、日语以及汉语等。5. 答:算术运算符有加(+)、减(-)、乘(*)、除(/)和取余数(%)5个二元运算符和正(+)、负(-)、自增(+)、自减(- -)4个一元运算符。关系运算符有大于()、小于(=)、小于等于(=)、等于(=)、不等于(!=)6个。逻辑运算符包括以下几种:逻辑非(!)、短路与(&)、短路或(|) 、逻辑与(&)、逻辑或(|)、逻辑异或()。位逻辑运算符包括按位取反()、按位与(&)、按位或(|)和按位异或()4种。移位运算符包括左移()和无符号右移()3种。赋值运算符主要有两类,一类是使用等号(=)赋值,它把一个表达式的值赋给一个变量或对象;另一类是扩展的赋值运算符,如+=。6. 答:自动类型转换也称加宽转换,它是指将具有较少位数的数据类型转换为具有较多位数的数据类型。例如:byte b = 64 ;int i = b ; / 字节型数据b自动转换为整型强制类型转换是将位数较多的数据类型转换为位数较少的数据类型,如将double型数据转换为byte型数据。其语法是在圆括号中给出要转换的目标类型,随后是待转换的表达式。例如:byte b = 5;double d = 333.567;b = (byte) d; / 将double型值强制转换成byte型值 7. 答:尽管Java语言提供了goto保留字,但不能使用,即不能实现控制的无条件转移。在Java程序中可以使用带标签的continue和break语句实现将控制转移到指定的标签。但需要事先定义标签。标签一般在循环的开始定义。8. 答:先创建一个java.util.Scanner类的对象,然后调用其nextInt()方法、nextDouble()方法和nextLine()方法就可以实现从键盘上输入整数、浮点数和字符串。9. 答:A,B,C,D 10. 答:B,D11. 答:C 12. 答:D13. 答:A,D,F 14. 答:A,D15. 答:去掉unsigned,将b = b-1改为b = (byte)(b-1)16. 答:byte b = 24short s = 128int i = 1111long l = 286331153char c = Afloat f = 0.333double d = 1.001E-5boolean bool = true17. 答:C,D 18. 答:C 19. 答:C20. 答:5 21. 答: 3 true true22. 答:i = 2, j = 2 23. 答:D24. 答:A,B,F 25. 答:A26. 答:if(x = y) 改为if(x = y),while (y-)改为 while (y-0)27. 答:D 28. 答:break; j = I 29. 答:B30. 参考程序如下:import java.util.Scanner;public class Temperature public static void main(Stringargs) Scanner sc = new Scanner(System.in); System.out.print(请输入华氏温度:); double htemp = sc.nextDouble(); double ctemp = (5.0 / 9) * (htemp 32); System.out.printf(摄氏温度为:%8.2f, ctemp);31. 参考程序如下:import java.util.Scanner;public class CylinderDemo public static void main(Stringargs) Scanner sc = new Scanner(System.in); System.out.print(请输入圆柱底面半径:); double radius = sc.nextDouble(); System.out.print(请输入圆柱高:); double height = sc.nextDouble(); System.out.printf(圆柱的体积:%8.2f, Math.PI*radius*radius*height); 32. 参考程序如下:import java.util.Scanner;public class Test public static void main(Stringargs) System.out.print(请输入一个浮点数:); Scanner sc = new Scanner(System.in); double d = sc.nextDouble(); System.out.println(整数部分:+(int)d ); System.out.println(小数部分:+(d (int)d ); 33. 参考程序如下:import java.util.Scanner;public class NumCompare public static void main(Stringargs) Scanner sc = new Scanner(System.in); System.out.print(请输入第一个整数:); int num1 = sc.nextInt(); System.out.print(请输入第二个整数:); int num2 = sc.nextInt(); System.out.print(请输入第三个整数:); int num3 = sc.nextInt(); int max,min,mid; if(num1 num2) if(num1 num3) max = num1; if(num2 num3) mid = num2; min = num3; else mid = num3; min = num2;else max = num3; mid = num1; min = num2; else if(num2 num3) max = num2; if(num1 num3) mid = num1; min = num3;else mid = num3; min = num1; else max = num3; mid = num2; min = num1; System.out.println(min= +min); System.out.println(mid= +mid); System.out.println(max= +max); 34. 参考程序如下:import java.util.Scanner;public class TenNum public static void main(Stringargs) Scanner sc = new Scanner(System.in);System.out.print(请输入第1个整数:); int max = sc.nextInt(); int min = max; for(int i =2;i max) max = num;if(num min) min = num; System.out.println(max= +max); System.out.println(min= +min); 35. 参考程序如下:public class ChickenHarepublic static void main(Stringargs)int legs = 100;int heads = 40;int chick, hare;for(chick = 0;chick = 50;chick+)for(hare=0;hare=25;hare+)if(chick+hare)=40&(chick*2+hare*4)=100) System.out.println(chick=+chick+ ,hare=+hare);36. 参考程序如下:public class Narcissus public static void main(Stringargs) for(int i = 100; i y , gcd(x,y)=gcd(x-y,y) / 若 x y) return gcd(x y, y); if (x y) return gcd(x, y - x); return x;/ 求最小公倍数(Least Common Multiple)/ 最小公倍数等于两数之积除以最大公约数 public static int lcm(int x, int y) int gcd = gcd(x,y); / 求最大公约数 return x*y / gcd; public static void main(Stringargs) Scanner sc = new Scanner(System.in);System.out.print(请输入正整数x:); int a = sc.nextInt();System.out.print(请输入正整数y:); int b = sc.nextInt(); System.out.println(最大公约数= + gcd(a,b); System.out.println(最小公倍数= + lcm(a,b); 38. 参考程序如下:public class PerfectNumberpublic static boolean perfect(int n) int sum=1; for(int k=2;kn;k+) if(n%k=0) sum=sum+k; if(sum=n) return true; else return false; public static void main(String args) for(int i = 1;i = 1000; i+) if(perfect(i) System.out.println(i);39. 参考程序如下:import java.util.Scanner;public class PrimeFactor public static void main(Stringargs) Scanner sc =new Scanner(System.in); System.out.print(Input a number:); int n = sc.nextInt(); do for(int k=2;k=n;k+) if(n%k=0) System.out.println(k); n=n/k; break; while(n!=1); 40. 参考程序如下:public class ComputePI public static void main(Stringargs) double pi = 4 *(1 - 1/3.0); / 前2项pi的值 int n = 2; int sign = 1;while(pi 3.1415927) n = n + 1; / 从第3项开始计算pi = pi + (sign * 4 / (double)(2 * n -1); sign = sign * -1; / 改变符号System.out.println(PI = + pi);System.out.println(n = + n); 程序输出结果如下:PI = 3.1415926000000005n = 18660304 第3章习题解答1. 答:对象是现实世界中客观存在的实体。每个对象一般具有两方面的特征:状态和行为。状态用来描述对象的静态特征,行为用来描述对象的动态特征。类是具有相似特征和行为的对象集合。对象之间的联系是通过消息传递实现的。2. 答:窗口的状态可以有:大小、是否可见等。窗口的行为可以有:关闭、打开、最大化、最小化等。3. 答:用类描述如下:class TV Stirng factory; / 生产厂家 int size; / 尺寸 double price; / 价格 void open(); / 打开 int changeChannel(int n); / 改变频道 void voiceUp(int voice); / 增大声音void voiceDown(int void); / 减小声音 void close(); / 关闭4. 答:方法应定义在类体中,需要指定方法的访问修饰符、返回值、方法名、参数类型和参数名,用一对大括号指定方法体。调用方法一般通过对象名调用。构造方法用来创建对象,普通方法是在对象上执行操作。5. 答:如果参数是基本数据类型的变量,则将变量值的副本传递给方法,方法调用结束后对原来变量的值没有影响。如果参数是引用类型的变量,是将变量的引用(地址)传递给方法,方法调用结束后原来的引用值不改变,但在方法体中可能改变对象的状态。6. 答:构造方法和普通方法都可以重载。构造方法重载目的是提供多种创建对象的方式。普通方法的重载是用相同名称完成不同操作。7. 答:没有用static修饰的成员是实例成员(实例变量和实例方法),用static修饰的成员是类成员(类变量和类方法)或静态成员。实例成员只能用实例名访问,类成员可以用实例名,也可以用类名访问。8. 答:参阅教材3.5.3节的叙述。9. 答:参阅教材3.3.3节的叙述。10. 答:参阅教材3.6节的内容。11. 答:使用import static java.lang.Math.*;语句是将Math类的静态成员和静态方法导入。程序中使用这些静态成员时无需加Math类名。12. 答:(1) String s = null;(2)去掉void(3) int data = 10; 前加static(4) 去掉static或在int data = 10; 前加static13. 答:double14. 答:不能。odd()方法的返回值为int,而if的条件表达式应该为boolean型。15. 答:j = 1 16答:i = 4 17答:10018. 答:ACD 19答:ACD 20答:AC21. 答:A 22答:A23. 答:j = 100InitDemo.j = 100i = 5j = 10j = 1000aa.j = 50024. 代码如下:public double distance(Point p) double xdiff = x p.x; double ydiff = y p.y; return Math.sqrt(xdiff * xdiff + ydiff * ydiff);25. 参考程序如下:public class Person String name; int age; public void setName(String name) = name; public String getName() return name; public void setAge(int age) this.age = age; public int getAge() return age; public void speak() System.out.println(Name=+name); System.out.println(Age=+age); public static void main(Stringargs) Person p = new Person(); p.setName(LiMing); p.setAge(20); p.speak(); System.out.println(p.getName(); System.out.println(p.getAge(); 26. 参考程序如下:public class Rectangledouble length;double width;public void setLength(double length)this.length = length;public double getLength()return length;public void setWidth(double width)this.width = width;public double getWidth()return width;public double perimeter()return 2*(length+width);public double area()return length*width;public class RectDemopublic static void main(String args) Rectangle rect = new Rectangle(); rect.setLength(20); rect.setWidth(10); System.out.println(该矩形的长为:+rect.getLength(); System.out.println(该矩形的宽为:+rect.getWidth(); System.out.println(该矩形的周长为:+rect.perimeter(); System.out.println(该矩形的面积为:+rect.area();27. 参考程序如下:public class Rectangledouble length;double width;public Rectangle(double length,double width)this.length = length;this.width = width;public Rectangle()this(0.0,0.0);public void setLength(double length)this.length = length;public double getLength()return length;public void setWidth(double width)this.width = width;public double getWidth()return width;public double perimeter()return 2*(length+width);public double area()return length*width;public class RectDemopublic static void main(String args)Rectangle rec1 = new Rectangle(20,10);System.out.println(该矩形的长为:+rec1.getLength();System.out.println(该矩形的宽为:+rec1.getWidth();System.out.println(该矩形的周长为:+rec1.perimeter();System.out.println(该矩形的面积为:+rec1.area();System.out.println();Rectangle rec2 = new Rectangle();System.out.println(该矩形的长为:+rec2.getLength();System.out.println(该矩形的宽为:+rec2.getWidth();System.out.println(该矩形的周长为:+rec2.perimeter();System.out.println(该矩形的面积为:+rec2.area();System.out.println();rec2.setLength(100);rec2.setWidth(50);rec2.setColor(YELLOW);System.out.println(该矩形的长为:+rec2.getLength();System.out.println(该矩形的宽为:+rec2.getWidth();System.out.println(该矩形的颜色:+rec2.getColor();System.out.println(该矩形的周长为:+rec2.perimeter();System.out.println(该矩形的面积为:+rec2.area();28. 参考程序如下:public class Triangledouble a,b,c;public Triangle() this.a = 0; this.b = 0; this.c = 0;public Triangle(double a, double b, double c)this.a = a; this.b = b; this.c = c;public double area() double s = (a + b + c) / 2.0; return Math.sqrt(s * (s-a) * (s-b) * (s-c);public static void main(String args) Triangle ta = new Triangle(3, 4, 5); System.out.println(ta.area();29. 参考程序如下:import java.util.Scanner;public class Inputstatic Scanner sc = new Scanner(System.in);public static byte readByte() System.out.print(Please input a byte value:); return sc.nextByte();public static short readShort() System.out.print(Please input a short value:); return sc.nextShort();public static int readInt() System.out.print(Please input a int value:); return sc.nextInt();public static long readLong() System.out.print(Please input a long value:); return sc.nextLong();public static float readFloat() System.out.print(Please input a float value:); return sc.nextFloat();public static double readDouble() System.out.print(Please input a double value:); return sc.nextDouble();public static boolean readBoolean() System.out.print(Please input a boolean value:); return sc.nextBoolean();public static void main(String args) double d = Input.readDouble(); System.out.println(d = + d);30. 参考程序如下:public class ComplexNumber private double realPart; private double imaginaryPart;public ComplexNumber() / 默认构造方法 public ComplexNumber(double r,double i) this.realPart = r; this.imaginaryPart = i; public double getRealPart() return realPart; public double getImaginaryPart() return imaginaryPart; public void setRealPart(double d) this.realPart=d; public void setImaginaryPart(double d) this.imaginaryPart=d; public ComplexNumber complexAdd(ComplexNumber c) ComplexNumber temp=new ComplexNumber(0.0,0.0); temp.setRealPart(this.getRealPart()+c.getRealPart(); temp.setImaginaryPart(this.getImaginaryPart()+c.getImaginaryPart(); return temp; public ComplexNumber complexMinus(ComplexNumber c) ComplexNumber temp=new ComplexNumber(0.0,0.0); temp.setRealPart(this.getRealPart()-c.getRealPart(); temp.setImaginaryPart(this.getImaginaryPart()-c.getImaginaryPart(); return temp; public ComplexNumber complexMulti(ComplexNumber c) ComplexNumber temp=new ComplexNumber(0.0,0.0); temp.setRealPart(this.getRealPart()*c.getRealPart()+this.getImaginaryPart()*c.getImaginaryPart();temp.setImaginaryPart(this.getImaginaryPart()*c.getRealPart()+this.getRealPart()*c.getImaginaryPart(); return temp; public String toString() if(realPart=0.0) return imaginaryPart+i; if(imaginaryPart=0.0) return realPart+; if(imaginaryPart0.0) return realPart+imaginaryPart+i; else return realPart+imaginaryPart+i; 第4章习题解答1. 答:在Java中使用数组分为三步: 声明数组 创建数组 数组初始化2. 答:使用new运算符创建一个数组后,系统自动为数组的每个元素分配了存储空间,同时为每个元素赋了初值。对于整型数组其元素的初值为0,对于浮点型数组,其元素的初值为0.0,对于布尔型的数组其元素的初值为false,对于字符型数组其元素的初值为u0000,对于引用类型的数组其元素的初值为null。3. 答:在Java语言中数组属于引用数据类型,它实际上继承了Object类,并可以调用继承来的方法,另外每个数组有一个length成员,因此每个数组都是一个对象,这就是数组对象。对象数组是指数组的元素为引用数据类型,是一个对象,例如,Circle c = new Circle5 ;for(int i = 0 ; ic.length; i+ ) ci = new Circle();这里,数组c就是一个对象数组,因为c的每个元素都是一个Circle类的对象。4. 答:二维数组实际上是数组的数组,例如: String str = new String32 ;声明了一个3行2列的数组。这3行可以看作数组str是一维数组有下面3个元素:str0、str1、str2。这3个元素本身又是一个二维数组,每个元素各有2个元素。如srt0的2个元素是s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论