java语言程序设计课后习题集精品资料.doc
Java课后习题第一章1、简述计算机语言的主要分类。答:低级语言,包括:机器语言、汇编语言高级语言,目前比较流行的有:FORTRAN语言、ALGOL语言、COBOL语言、PASCAL语言、C语言、面向对象程序语言C+、纯面向对象的程序设计语言Java、函数式程序设计语言、脚本语言、描述性语言。2、简述不同语言翻译程序的特点。答:解释型翻译程序:读入一句源程序,翻译一句,执行一句,这样反复操作直到最终完成全部源程序的翻译。编译型翻译程序: 加个整个源程序,最终翻译成机器语言代码,然后交给计算机执行。 3、什么是虚拟机,什么是Java运行环境?答:虚拟机:配置了某种语言的翻译程序的计算机被人们称为这种语言的虚拟机。虚拟机好似通用的计算机,有自己的指令系统,但本身没有实际 的硬件。一个Java运行环境:一个Java运行环境包括实际计算机、适配器、Java虚拟机(JVM)、Java基本软件和Java应用程序接口。JVM是Java运行环境的核心。4、简述Java程序开发的步骤。答:编写编译运行(1) 创建Java源程序:简单的Java程序可以用任何编辑程序(如记事本)进行编辑,然后以纯文本方式存储在文件中,文件必须以.java作为后缀。 (2)编译Java源程序:由Java编译器编译成字节码,存储在以.class为后缀的文件中。 (3)运行Java程序:最后由运行系统解释和执行。第二章2.1 先下载jdk安装程序,然后按要求安装即可。JAVA_HOME 为Java安装的路径。需要设置的环境变量有:path,classpath我的电脑->属性->高级->单击“环境变量”按钮->单击“系统变量”区域的“新建”按钮->在“变量名”文本框中输入path,在“变量值”里输入%JAVA_HOME%jdk1.5bin;同样方法创建CLASSPATH变量,变量值为:,;%JAVA_HOME%jdk1.5libdt.jar;%JAVA_HOME%jdk1.5libtools.jar2.2学会下载安装Eclipse软件,正确配置它们的组件。 答:从下载安装Eclipse 首先下载版本Eclipse SDK 3.2-win32.zip下载地址为: (http:/www.eclipse.org/downloads/) 然后将eclipse-SDK-3.2.2-win32.zip直接解压到你想安装的地方: 我的是C:Program FilesJavaq其次按照书上的提示安装Eclipse。其次打开Eclipse,安装NLpack1-eclipse-sdk-3.2-win32中文包,选择Search for new features to install选项然后单击Next进入对话框,单击New Local Site 然后再单击Next,进入到“”浏览文件夹,最后选择NLpackeclipse-SDK-3.2-win32eclipse文件夹,在单击确定最后单击Finish,安装结束。在Eclipse中配置JDK步骤为:在中文界面Java-Eclipse SDK窗口,选择“窗口”“首选项”命令打开对话框然后选择JavaInstalledJREs,进入首选项,再单击Edit,进入Edit JRE对话框,最后单击Browse找到jdk1.5.0_01文件单击确定。2.3程序:class HelloWorld public static void main(String args) System.out.println("Hello World!"); 运行:2.4程序及运行如下:第三章3.1此程序出现以下两个问题:public static void main(String args)int i;System.out.println(i);/1、 i在此处未初始化int i=15;/2、 i已在前面定义以下为正确的源代码:public class T3_1public static void main(String args)int i=10;/可任取一值System.out.println(i);i=15; System.out.println(i);3.2public class BasicTypispublic static void main(String args)byte b=(byte)0X88;short s=0200;int i=11111;long l=0x1111111;char c='A'float f=.333f;double d=.00001001;boolean b1=true;System.out.println("byte b="+b);System.out.println("short s="+s);System.out.println("int i="+i);System.out.println("long l="+l);System.out.println("char c="+c);System.out.println("float f="+f);System.out.println("double d="+d);System.out.println("boolean b1="+b1);运行结果如下:3.3(1)double(2)6.53.4运行结果:a=0 b3 c=3a=6 b4 c=4a=8 b3 c=3其源程序为:public class ArithmeticOp public static void main (String arge) int a,b,c; a=b=c=2; a=+b-+c; System.out.println("a="+a+" b"+b+" c="+c); a=b+c+; System.out.println("a="+a+" b"+b+" c="+c); a=b-+c-; System.out.println("a="+a+" b"+b+" c="+c); 3.5(1)结果为i=1 j=2(如下图),与分析结果一致。(2)break语句起到跳出switch语句的作用。本题源代码如下:public class Testpublic static void main(String s)int x=1,y=2,i=0,j=0;switch(x)case 1: switch(y)case 1: i+;break;case 2: j+;break;/ i=0;j=1default: i+;j+;case 2: i+; j+; break;/i=1;j=2;default:i+;j+;System.out.println("i="+i);System.out.println("j="+j);3.6/ xunhuan.javapublic class xunhuan public static void main (String args)int n;for(n=10;n<=50;n+)if(n%3=0) System.out.println(n);/ xunhuan1.javapublic class xunhuan1 public static void main (String args)int n=10;while(n<=50)if(n%3=0)System.out.println(n);/ xunhuan1.javapublic class xunhuan2 public static void main (String args)int n=10;don+;while(n<=50);if(n%3=0)System.out.println(n);3.7public class T3_7public static void main(String args)int num1,num2,temp;/定义这两个数为100、20,当然你可以随意定义。num1=100;num2=20;temp=0;if(num1>num2)temp=num1;num1=num2;num2=temp;System.out.println("按从小到大的顺序输出:"+num1+" "+num2);3.8public class T3_8 public static void main(String args) int i,j=0; for(i=1;i<=100;i+) if(j=5) System.out.println(); j=0; if(i%2=0) System.out.print(i+" "); j+; 3.9public class ShuiXianHuaShu public static void main(String args) int count = 0; for(int i = 100; i < 1000; i +) if(getCount(i) System.out.println(i + "是水仙花数."); count+; System.out.println("共有" + count + "个水仙花数!"); public static int getLifang(int i) return i * i * i ; public static boolean getCount(int i) int a = i / 100; /取出百位的的数字 int temp = i % 100; int b = temp / 10; /取出十位的数字 int c = temp % 10; /取出各位的数字 if(getLifang(a) + getLifang(b) + getLifang(c) = i) return true; else return false; 运行结果如下:3.10public class T3_10 public static void main(String args) int i=0,j=0,k=0; for(i=0;i<5;i+) for(k=0;k<i;k+) System.out.print(' '); for(j=0;j<5;j+) System.out.print("* "); System.out.println(""); 3.11public class T3_11 public static void main(String args) int i,j; for(i=1;i<=9;i+) for(j=1;j<=i;j+) System.out.print(j+"x"+i+"="+i*j+" "); System.out.println(""); 3.12略。第四章1.什么是类,什么是对象,对象和类是什么关系?答:类是抽取了同类对象的共同属性和行为形成的对象或实体的“模板”。对象是现实世界中实体的描述,是其自身所具有的状态特征及可以对这些状态施加的操作结合在一起所构成的独立实体。类和对象之间的关系是抽象和具体的关系:类表达的是一种抽象的概念,它描述了该类对象的共同特征;而对象是具体事物,以类为模板来生成,它具有自己的状态。举例:类与对象的关系犹如零件的图纸与按图纸制造出的零件关系一样;图纸(类)描述了零件(对象)的共同特征,每个零件(对象)又有自己的个性,如加工精度的不同等等2.什么是方法,方法的结构是怎样的,设计方法应考虑哪些因素?答:方法是Java类的一个组成部分,通过类的方法改变对象的状态。方法的结构:方法修饰符 返回值类型 方法名(形参列表)throws异常列表 方法体; 设计方法应考虑因素有:(1) 方法名是Java中任意的标识符,按照命名的约定,方法名应该是有意义的动词或动词短语,它的第一个字母一般要小写,其他有意义的单词的首字母要大写,其余字母小写。(2) 返回值类型可以是任意的Java类型,甚至可以是定义此方法的类。如果方法没有返回值,则用void表示。(3) 形式参数列表是可选的。如果方法没有形式参数,就用一对小括号“()”表示。形式参数列表的形式如下:(类型 形参名,类型 形参名,)(4) throws异常列表规定了在方法执行中可能导致的异常。3.创建一个类,该类含有int和char类型的成员变量且未被初始化,然后编程输出这些成员变量的值,查看Java是否执行了默认的初始化操作。答:public class parent int a; /整型变量char b; /字符型变量public void show() /用来输出未被初始化的变量的 System out println(a); System out println(b); public static void main(String args) parent c = new parent( ) ; /声明类的对象并实例化c.show(); /函数调用 输出结果: 0 /第四章5题答:class Rectangleprivate int width;private int length;Rectangle() /默认构造方法length=30;width=20;Rectangle(int l,int w) /带参数的构造方法length=l;width=w;Rectangle(Rectangle r) /拷贝构造width=r.getWidth();length=r.getLength(); int getWidth() /返回值return width;int getLength() /返回值return length;public class UseRectanglepublic static void main(String args)Rectangle x1=new Rectangle( );Rectangle x2=new Rectangle(50,40);Rectangle x3=new Rectangle(x1);System.out.println(x1.getLength();System.out.println(x1.getWidth();System.out.println(x2.getLength();System.out.println(x2.getWidth();System.out.println(x3.getLength();System.out.println(x3.getWidth();结果是 6题答:class Fact float fact(int n) int i; float x=1; for(i=1;i<=n;i+) x=x*i; return x; public class CheckFact public static void main(String args) Fact x=new Fact(); System.out.println(x.fact(10); System.out.println(x.fact(15); 结果是7题答:class SuperClass int x; SuperClass() x=10; void doClass() System.out.println("SuperClass.doClass()"); class SubClass extends SuperClass int x; SubClass() super(); x=100; void doClass() System.out.println("subClass.doClass()"); void doDemo() int x; x=1000; super.doClass(); doClass(); System.out.println("super.x="+super.x); System.out.println("this.x="+this.x); System.out.println("x="+x); public class SuperDemo public static void main(String args) SubClass s=new SubClass(); s.doDemo(); 结果是 8题答:class Father void speak() System.out.println("I am Father!"); void speak(String s) System.out.println("I like "+s+"."); public class OverLoadingDemo public static void main(String args) Father x=new Father(); x.speak(); x.speak("music"); 结果是 9题答:class Pointpublic static int x;public int y;Point (int x,int y)this.x=x;this.y=y;public static void main(String args)Point p1,p2,p3;p1=new Point(1,10);p2=new Point(2,20);p3=new Point(3,30);System.out.println(p1.x+","+p1.y);System.out.println(p2.x+","+p2.y);System.out.println(p3.x+","+p3.y);结果是第五章1、什么是异常?简述Java的异常处理机制。答:Java程序把运行过程中各种可能出现的错误都看作异常。其中,Java运行时系统内部的错误或资源枯竭导致的普通程序不能恢复的错误,属于未检测的异常。系统中一旦产生了异常,便去寻找处理该异常的处理程序,以保证不产生死机,从而保证程序的安全运行,这便是异常处理的简单原理。2、系统定义的异常与用户自定义的异常有何不同,如何使用这两类异常?答: 系统定义的异常:程序中经常出现的系统可以预见的错误,系统已定义了异常来处理这些常见错误。使用try-catch-finally语句捕获一个或多个异常try <程序段> catch( <异常类名1> <异常对象名1>) <异常处理代码1> catch( <异常类名2> <异常对象名2>) <异常处理代码2> finally <最终异常处理代码> 抛出异常:说明方法时格式:<访问权限修饰符> <类型> <方法名>(<参数表>)throws <异常列表>抛出异常的语句格式:throw<异常名>用户自定义的异常:程序中出现的一些系统识别不了的运行错误,为了保证系统的稳定性,需要用户创建自己的异常和异常类,以便处理可能出现的异常。创建异常类的格式如下:class<异常类名>extends<异常父类名><类体>抛出异常:( <修饰符> ) <类型> <方法名>(<参数表>)throws <异常类名>throw<异常名>捕捉异常仍可用try-catch-finally语句格式3、输入并运行下面程序:class TestTry public static void main(String args) proc(0);proc(100);proc(1);static void proc(int num)trySystem.out.println("*异常处理测试*");System.out.println("num="+num);int sum=100/num;int array=0,1,2;arraynum=sum;catch(ArithmeticException e)System.out.println("被零除:"+e);catch(ArrayIndexOutOfBoundsException e)System.out.println("数组越界:"+e);finallySystem.out.println("End!n");结果:*异常处理测试*num=0被零除:java.lang. ArithmeticException:/by zeroEnd!*异常处理测试*num=100数组越界:java.lang. ArrayIndexOutOfBoundsException:100End!*异常处理测试*num=1End!4、试说出下列程序的的功能。public class Exception1 void Proc(int sel) throws ArithmeticException,ArrayIndexOutOfBoundsException System.out.println(In situation”+sel);if(sel=0) System.out.println(“no Exception caught” ); return; else if(sel=1) int iArray=new int4; iArray10=3;答:方法体中产生异常,throws子句抛出ArithmeticException和ArrayIndexOutOfBoundsException异常类。但对异常的捕捉处理并没有在产生异常的方法中进行。5、试给出下列程序的执行结果class JavaThrow public static void main(String args) try throw new ArithmeticException(); catch(ArithmeticException ae) System.out.println(ae); try throw new ArrayIndexOutOfBoundsException(); catch(ArrayIndexOutOfBoundsException ai) System.out.println(ai); try throw new StringIndexOutOfBoundsException(); catch(StringIndexOutOfBoundsException si) System.out.println(si); 运行结果:java.lang.ArithmeticExceptionjava.lang.ArrayIndexOutOfBoundsExceptionjava.lang.StringIndexOutOfBoundsException6、编写一个从键盘读入10个字符放入一个字符数组,并在屏幕上显示读入的字符的程序,同时处理数组越界。import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ReadChar public static void main(String args) throws IOException BufferedReader buf = new BufferedReader( new InputStreamReader(System.in); System.out.print( "请输入十个字符: "); String text = buf.readLine(); char c = new char10; try for (int i = 0; i < text.length(); i+) ci = text.charAt(i); System.out.print(ci); catch (ArrayIndexOutOfBoundsException ex) System.out.println(); System.out.println( "输入字符超出要求,只显示前十个字符 "); 运行结果:请输入十个字符: f q t d a y f q t d a 输入字符超出要求,只显示前十个字符或:请输入十个字符: abcdqwertyabcdqwerty第六章6.1利用StringBuffer类编写从键盘读入字符串、整数、实型数,并在屏幕上输出。源程序:package cha10;import java.io.*;public class StringBufferToString public static void main(String args) throws IOException char ch; StringBuffer strb = new StringBuffer(); /创建一个空的StringBuffer类 System.out.println("please Enter the char ,int number or float number:"); while(ch = (char)System.in.read() )!='n') strb.append(ch); /把字符连接到当前串尾 String str = strb.toString( ); /把StringBuffer类转换为String类 System.out.println("the data you have been entered:"); System.out.println(str); 运行:please Enter the char ,int number or float number:d 23the data you have been entered:d 236.2package wc02;import java.util.Vector;public class Shuch /* * param args */public static void main(String args) / TODO Auto-generated method stubVector theVector=new Vector();for(int i=0;i<=9;i+)Integer newIntrger=new Integer(i);theVector.addElement(newIntrger);System.out.println(theVector);运行:6.3利用Vector类,实现一个后进先出栈。待补6.4利用递归计算N!的值。package cha6;public class Nnumber public static void main(Stringargs) int Ns=1; int N=4; while(N>1) Ns=Ns*N; N-; System.out.print("N!="+Ns); 运行:N!=246.5 package cha6import java.util.ArrayList;import java.util.Iterator;public class Databaseprivate ArrayList persons;public Database() Persons =new ArrayList(); Public void addPersons(cha5.Persons p) persons.add(p);Public void listAll()for(Itrator i=persons.iterator(); i.hasNext();)System.out.println(i.next();6.6 待补6.7什么叫流?简述流的分类。答:流可以理解为一条管道,“流”可以看作是一个流动的数据缓冲区。数据从数据源流向数据目的地。根据“管道”中的流动的数据的类型流可分为字节流和字符流,根据流中数据传输的方向,可分为输入流和输出流,而按照流的建立方式和工作原理分为节点流和过滤流。6.8节点流和过滤流有什么特点?解答:节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域。 过滤流:使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或输出流连接创建的。 节点流,用于从文件中读取或往文件中写入字节流。如果在构造FileOutputStream时,文件已经存在,则覆盖这个文件。 过滤流,需要使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效率。69import java.io.*;class filescopy public static void main(String args) try File outFile1 = new File("myfile1.txt"); /创建File类的outFile1对象 FileOutputStream fos1 = new FileOutputStream(outFile1); /创建F