您的当前位置:首页正文

java程序设计教程第二版课后答案

2020-10-21 来源:榕意旅游网
java程序设计教程第二版课后答案

【篇一:《java程序设计》课后习题参考答案】

参考答案

――武汉大学出版社 习题1参考答案

1.java语言的特点有哪些?? 答:参考1.1.2

防止直接访问数据变量看起来有些奇怪,但它实际上却对使用类的程序质量有极大的好处。既然数据的单个项是不可访问的,那么惟一的办法就是通过方法来读或写。因此,如果要求类成员内部的一致性,就应该通过类本身的方法来处理。

这种数据隐藏技术就是面向对象的重要特性——封装。它将类的外部界面与类功能的实现区分开来,隐藏实现细节,(通过公共方法)保留有限的对外接口,迫使用户使用外部界面,通过访问接口实现对数据的操作。即使实现细节发生了改变,还可通过界面承担其功能

而保留原样,确保调用它的代码还继续工作,这使代码维护更简单。 2.简述封装的优点。?

答:封装是一个简单而有效的思想,优点有:(1)模块化,对内成为一个结构完整、可进行自我管理、自我平衡、高度集中的整体。(2)信息隐蔽,对外则是一个功能明确、接口单一、可在各种适合的环境下都能独立工作的有机单元。

面向对象的程序设计实现了对象的封装,使得用户不必关心诸如对象的行为是如何实现的这样一些细节。通过对对象的封装,实现了模块化和信息隐藏,有利于程序的可移植性和安全性,同时也有利于对复杂对象的管理。类的封装性使得代码的可重用性大为提高,这样的有机单元特别适合构建大型标准化的软件系统,具有很高的开发效率。

3.java的基本工具有哪些?? (1) javac 编译器 (2) java 解释器

(3) jdb java 语言调试器

(4) javadoc api文档管理器 (5) javah 头文件生成器

(6) appletviewer 小应用程序浏览器

(7) javap 类文件反汇编器

4.java开发环境是如何配置的?

答:对于windows 2000以上版本的操作系统,可以打开[控制面板]窗口,双击其中的[系统]图标,在[系统特性]窗口中单击[高级]选项卡,进而单击[环境变量]按钮。在出现的[环境变量]窗口中,在[系统变量]框中选择[path]项,单击[编辑]按钮,在弹出的[编辑系统变量]窗口的[变量值]框后加上上面两条语句。 1.java语言包含哪些数据类型??

答:包含基本数据类型和复合数据类型。基本类型包括整数类型、浮点数类型、布尔类型。复合类型包括类类型(class type)、接口类型(interface type)与数组类型(array type)。 2.java有多少关键字??

答:abstract, continue, for, new, switch,boolean, default, goto*, null, synchronized,break, do, if, package, this,byte, double, implements, private, threadsafe,byvalve*, else, import, protected, throw,case, extends, instanceof, public, transient,catch, false, int, return, true,char, final, interface, short, try,class, finally, long, static, void,const*, float, native, super, while

3.byte、short、int、long和char整数类型各占了多少字节?? 答:byte占了1字节,short占了2字节,int占了4字节,long占了8字节,char占了2字节。 4.java的控制结构有哪几类??

答:流程控制语句可以分为选择、循环和跳转3大类。 习题3参考答案?

1.声明类的格式是什么?? 答:

[类修饰符]class类名称[extends父类名称][implements接口名称] {

类主体 }

2.面向对象程序设计中,什么是构造函数??

答:类类型声明方法成员,如果方法名称与类名称一样,这种方法成员称为构造函数。 习题4参考答案?

1.面向对象程序设计中,什么是封装??

2.面向对象程序设计中,什么是数据抽象化??

答:oop程序设计的重心为对象,因些对象被视为拥有本身数据与处理过程的组件,这些组件都有其独立性。所以对象内、外程序的处理就有某种程度的限制,换句话说,对象外部并不明了对象内部数据如何传递、改变,如何处理过程。这种隐藏对象内部的数据及处理过程的方式,使得对象抽象化,有人将这种处理方式称为数据抽象化。类库就是java api(application programminginterface,应用程序接口),是系统提供的已实现的标准类的集合。在程序设计中,合理和充分利用类库提供的类和接口,不仅可以完成字符串处理、绘图、网络应用、数学计算等多方面的工作,而且可以大大提高编程效率,使程序简练、易懂。 1.简述数据类型类的常用方法。?

答:对所有数据类型类的对象,形如“对象名.xxxxvalue()”的成员方法,用来获得对象中的基本类型数据。包括: 对象名.doublevalue(); 对象名.intvalue(); 对象名.bytevalue(); 对象名.shortvalue(); 对象名.longvalue(); 对象名.charvalue(); 对象名.floatvalue();

对象名.booleanvalue(); 2.何为命令行参数??

答:所谓命令行参数,是指执行某个java应用程序时,从命令行中向程序直接传送的参数。我们可以获得这些参数的值,并运用到程序的执行过程中。

3.如何定义和创建一个数组??

答:要创建一个数组,必须首先定义数组变量所需的类型。通用的一维数组的声明格式是:type arrayname[];其中,type定义了数组的基本类型,arrayname是数组的名称。基本类型决定了组成数组的每一个基本元素的数据类型。 4.如何声明一个二组数组??

答:二维数组的一般声明格式如下: 数组元素类型 数组名[][];

数组元素类型 [][]数组名;

5.列举一下数据类型类的常用方法。?

答:对所有数据类型类的对象,形如“对象名、xxxxvalue()”的成员方法,用来获得对象中的基本数据类型。包括:对象名、

double value();对象名、int value();对象名、byte value();等。

习题6参考答案?

1.解释下列方法的意义:?

(1)tolowercase()(2)touppercase() (3)charat()?

(4)equalsignorecase() (5)capacity() (6)setlength()? (7)reverse() (8)replace(start,end,str)? 答:

(1)将字符转换成小写字符 (2)将字符转换成大写字符 (3)从0算起第index字符

(4)忽略大小写,比较两字符串是否,相等,若是返回true,否则返回false

(5)计算字符串缓冲器的容量 (6)设定字符串的长度 (7)将字符串反转排列

(8)返回字符串缓冲器从stare开始到end结束字符被str字符串取代

2.capacity()与length()的用法有什么不同??

答: capacity()用来计算字符串缓冲器的容量,length()用于计算字符串长度。如:string buffer ko1=new string buffer(20),则ko1 capacity()=20,但ko1,length()可能是0或20,视ko1字符串长度而定。 习题7参考答案?

1.什么叫流?流式输入输出有什么特点??

答:java中的流是对数据传递机制的抽象。流分为两种:输入和输出。java中所有输入/输出操作都是使用基本字节类型完成的。字符是通过值为字节类型的特殊代码处理的。java程序的所有读写操作都是通过流实现的。流是一组字符序列。输入源可以是键盘、文件或网络,输出自的地可以是屏幕、文件或网络。数据作为字节序列进行发送和接收。

2.file类有哪些构造函数和常用方法?并举例说明。?

答:使用下面的构造函数创建file对象: ?file(string dirpath)

?file(stringdirpath,stringnlename) ?file(fnedirobj,stringfilename)

这里,dirpath是文件的路径名,filename是文件名,dirobj是指定目录的fie对象。 下面的例子创建了3个文件:f1、f2和f3。第一个file对象只有目录路径一个参数。第二个有两个参数——目录和文件名。第三个包括赋给n的文件路径和文件名。f3和f2指的是同一个文件。最后一个包括指定文件“autoexec.bat”所在的目录名称。 file f1=newfile(/);

file f2=newfile(/,autoexec.bat); file f3=newfile(f1,autoexec.bat); file f3=newfile(user,autoexec.bat); file类的方法

下面是file类中一些重要的方法: ?getname()

该方法用来获取指定文件的名称。 ?getpath()/getabsolutepath()

这两个方法分别得到指定文件的相对路径和绝对路径。 ?exists()

该方法用来判断命名的文件是否存在于目录当中。 ?isfile()/isdirectory()

这两个方法分别用来判断命名的文件是否是普通文件和目录。 ?canread()/canwrite()

这两个方法分别用来判断指定文件是否可读写。 ?lastmodified()

该方法返回文件最近一次被修改的时间。 ?length()

该方法返回文件的大小,以字节记。 ?delete()

该方法用来删除指定文件。 ?renameto()

该方法用来对已知文件进行重命名。它将目的文件或者说重命名后的文件对象作为参数。 ?isfile()

该方法通常返回true,但是一些特殊的文件如设备驱动和命名管道可能与普通文件不同,所以该方法可以确定所访问实体是一个文件。 ?isabsolute()

如果文件是绝对路径该方法返回true,相对路径则返回false。 3.简单介绍一下random access file类。?

答:randomaceessfile类封装了一个随机访问文件。它不是从输入输出流中获得。相反,它实现了定义基础fo方法的datalnput和dataoutput这两个接口。它也支持定位请求,例如可以在文件中定位文件指针。它包含下面两个构造函数: randomaccessfile(file fobj,string acc)

randomaccessfile(string fname,string acc)

在第一种形式下,fobj是指作为file对象打开的文件名称。在第二种形式下,以fname作为参数传递文件名。在两种情况下,acc都决定了允许访问什么样的文件类型。如果是“r”,那么可以对文件进行读访问,如果是“rw”,则可以进行读写访问。seek()方法用来设置文件指针的当前位置。 void seek(long newpos)

这里,newpos是指以字节方式指定的新位置或者从文件头或文件尾开始的文件指针。调用seek方法之后,将会在新的文件位置发生读或写的操作。

4.举例实现写文件fileoutputstream类。? 写文件举例如下:

//fileoutputsample.java import java.io.*;

public class fileoutputsample {

public static void main (string args[]) { string name=outputfileexample.txt;

fileoutputstream outputstre~m; //文件输出流对象 //缓冲数组,假设写入文件的长度不超过1024字节 byte[] buffer=new byte[1024]; try {

outputstream=new fileoutputstream (new file (name)) ; try {

system.out.println (\ninput file content (tab+enter to exit) : ); //循环读入字符,tab+enter键结束 int b, i= 0;

while (i 1024 (char)(b=system.in.read ()) != \t) {

buffer[i++]=(byte) b; }

outputstream.write (buffer) ; outputstream.close () ; }

catch (ioexception e) {

【篇二:java程序设计教程(第六版)课后习题答案】

lic class fudian {

public static void main(string[] args) { float a=2.10f,b=3.70f;

float result1,result2,result3; result1=a+b; result2=a-b; result3=a*b;

system.out.println(result1 is:+result1); system.out.println(result2 is:+result2); system.out.println(result3 is:+result3); } } 2.4

public class tempconverter {

public static void main(string[] args) { final int base = 32;

final double conversion_factor = 5.0 / 9.0; double celsiustemp;

int fahrenheittemp = 70; // value to convert

celsiustemp = (fahrenheittemp - base)*conversion_factor; system.out.println (fahrenheit equivalent: + fahrenheittemp); system.out.println (celsius temperature: + celsiustemp); } } 2.5

public class yinglizhuanqianmi {

public static void main(string[] args) { float base=1.60935f; float qianmi;

float yingli=19.85f; qianmi=yingli*base;

system.out.println (ying li: + yingli); system.out.println (qian mi: +qianmi);

} } 2.6

public class timeconverter1 {

public static void main(string[] args) { int hour=5,minute=35,second=51; int seconds;

seconds=hour*60*60+minute*60+second;

system.out.println (+hour+时+minute+分+second+秒); system.out.println (换算成秒: + seconds); } } 2.7

public class timeconverter2 {

public static void main(string[] args) { int seconds=10853;

int hour,minute,second; second=seconds%60;

minute=(seconds-second)%60;

hour=(seconds-second-minute*60)/3600; system.out.println (seconds+秒,转化为);

system.out.println (hour+时+minute+分+second+秒); } } 2.9

import java.util.*;

public class dollarbill {

public static void main(string[] args) { float dollar1,dollar2;

int ten,five,one,quarters,dimes,nickles,pennies; scanner reader=new scanner(system.in); system.out.println(输入币值:); dollar1=reader.nextfloat(); dollar2=dollar1*100;

pennies= (int)dollar2%5;

nickles=((int)dollar2%10-pennies)/5;

dimes=((int)dollar2-pennies-nickles*5)%50/10; quarters=(int)dollar2%100/50;

one=((int)dollar2- pennies-nickles*5-dimes*10-quarters*50)%500/100;five=(int)dollar2%1000/500; ten=(int)dollar2/1000;

system.out.println(ten+ ten dollar bills); system.out.println(five+ five dollar bills); system.out.println(one+ one dollar bills);

system.out.println(quarters+ quarters dollar bills); system.out.println(dimes+ dimes dollar bills); system.out.println(nickles+ nickles dollar bills);

system.out.println(pennies+ pennies dollar bills!); } }

2.11

import java.util.*;

public class fenshuzhuanhuan {

public static void main(string[] args) { int x,y;

double result=0;

scanner reader=new scanner(system.in); system.out.println(输入x:); x=reader.nextint();

system.out.println(输入y:); y=reader.nextint(); result+=x/y;

system.out.println (分数 +x+/+y);

system.out.println (转换成小数是: + result); } }

2.16

import javax.swing.japplet; import java.awt.*;

public class olympiclogo extends japplet{ public void paint (graphics page) { page.setcolor(color.blue);

page.drawoval(25, 65, 40, 40); page.setcolor(color.yellow); page.drawoval (55, 65, 40, 40); page.setcolor(color.black);

page.drawoval (85, 65, 40, 40);

page.setcolor(color.green);

page.drawoval (115, 65, 40, 40); page.setcolor(color.red);

page.drawoval (145, 65, 40, 40);// circle page.setcolor(color.cyan);

page.drawstring (olympic logo, 40, 30); } }

2.19

import java.applet.*; import java.awt.*;

public class ex2_19 extends applet{ public void paint (graphics page){ page.setcolor(color.black);

page.setfont(new font(楷体,font.italic+font.bold,30)); page.drawstring (林少锋, 40, 30); page.setcolor(color.blue);

page.setfont(new font(宋体,font.bold,30)); page.drawstring (林少锋, 70, 80); } }

2.20

import java.applet.*; import java.awt.*;

public class ex2_20 extends applet{ public void paint (graphics page){ page.drawoval(35, 35, 130, 130); page.setcolor(color.red);

page.fillarc(35, 35, 130, 130,0,45);page.setcolor(color.blue);

page.fillarc(35, 35, 130, 130,45,45);page.setcolor(color.yellow); page.fillarc(35, 35, 130, 130,90,45);page.setcolor(color.cyan); page.fillarc(35, 35, 130, 130,135,45);page.setcolor(color.gray); page.fillarc(35, 35, 130, 130,180,45);page.setcolor(color.green); page.fillarc(35, 35, 130,

130,225,45);page.setcolor(color.darkgray);

page.fillarc(35, 35, 130, 130,270,45);page.setcolor(color.pink); page.fillarc(35, 35, 130, 130,315,45); } }

pp4.1 方法1

import java.util.*;

public class createsphere { /**

* @param args */

public static void main(string[] args) { // todo 自动生成方法存根

system.out.println(请输入直径d:);

scanner scan=new scanner(system.in);double d=scan.nextdouble();

sphere d=new sphere(d); d.square(); d.volum();

system.out.println(d.tostring()); } }

public class sphere { final double pi=3.14; double v,s; double d;

sphere(double d){ this.d=d; }

public void volum(){

v=(4/3)*pi*(d/2)*(d/2)*(d/2); }

public void square(){ s=4*pi*(d/2)*(d/2); }

public string tostring(){ string s=;

string result1=double.tostring(s);string result2=double.tostring(v);

s=(体积为:+result2+面积为:+result1);return s; } }

方法2

//sphere.java

public class sphere{

private double diameter;

【篇三:java程序设计案例教程(第二版)周怡、张英主

编。第4章 java流程控制_课后习题答案】

/p> 1.下列语句执行后的输出结果是__a____。 if (62*5)

system.out.print(hello);

system.out.print( every one);

a.hello every one b.hello c.every one 2.下列语句执行后,k的值是__c____。 int i=6,j=8,k=10,m=7; if (ij || mk--)k++; else k--;

a.12 b.11 c.10 d.9

3.下列循环语句的循环次数是___d___。 int i=5; do {

system.out.println(i--); i--; d.one }while (i!=0);

a.0b.1 c.5 d.无限

4.下列代码片段执行之后,输出的结果为__c___。 int x=12, m=11, y=13; int temp=xy?x:y;

temp=tempm?temp:m; system.out.print]n(temp); a.11 b.12c.13d.1

5.下列关于switch语句的描述中,正确的是__d____。 a.退出switch语句的唯一途径是执行break语句 b.switch语句中case和default子句都可以有多个

c.switch语句中case子句的语句序列中一定要包含break语句 d.switch语句中default子句可以省略

6.执行for(i=1;i=10;i++)循环后,i 的值为___c___。 a.1 b.10 c.11 d.9

7.下列关于for循环和while循环的说法中__a___是正确的。 a.while循环能实现的操作,for循环也都能实现

b.while循环判断条件一般是程序结果,for循环判断条件一般是非程序结果

c.两种循环任何时候都可替换

d.两种循环结构中循环体都不可以为空

8.给出下列的代码,___c__行在编译时可能会有错误。 ① public void modify() { ②int i, j, k; ③i = 100;

④while ( i 0){ ⑤j = i * 2;

⑥system.out.println ( the value of j is + j ); ⑦k = k + 1; ⑧} ⑨ }

a.line 4b.line 6c.line 7 d.line 8

9.执行如下程序代码后,变量c的值是___c____。 int a=0,c=0; do{ --c;

a=a-1;

}while(a0);

a.0b.1 c.-1d.死循环

10.下列关于for 语句的描述错误的是____a____。

a.在for 语句中定义的变量,可以在for语句之外的语句中使用 b.循环变量的值可以由大到小变化

c.for 语句中的循环语句体有可能一次都不执行 d.for 语句中的3个表达式都可以省略 二、填空题

1.在switch 语句中,表达式的值必须是____整型(整型,短整型)____或者__字符型(字符型,字节型)____类型的数据。

2.在__do...while______语句形式中,不论表达式的值是true 还是false,循环体中的语句至少被执行一次。

3.___continue_____语句可以终止当前一轮的循环,不再执行其下面的语句,直接进入下一轮的循环;___break_____语句通可以

使程序从一个语句体的内部跳出去,继续执行该语句体下面的语句。

4.对于下面代码,输出的第7个整数是___18_____,共有

____9____行输出,如果将i++改为i--,___不会_____(会/不会)出现编译错误。

for (i=12;i=20;i++)

system.out.println(i);system.out.println();

5.如果在程序执行过程中,while 语句中表达式的值始终为true,则循环体会被无数次执行,进入到无休止的____死循环___ 状态中。 6.for 语句的表达式1 中可以并列多个表达式,但它们之间要用____逗号___ 隔开。

7.实现下面的程序流程,请填空。 if (条件1)

system.out.println(a); 条件2)

system.out.println(b); system.out.println(c);

system.out.println(___d____);

8.设有以下程序段, 填写适当表达式,使程序运行时执行3次循环体。

int x=1 do

x += 2;

system.out.println (x); 三、简答题

1.if语句中判断条件是否成立的表达式一定是逻辑型的表达式吗,为什么? 答:

可以不是,但是最终结果必须是逻辑值。逻辑表达式的值是表达式中各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。只要最后的逻辑值为逻辑值就满足条件。

2.switch语句中,case后面的语句序列中一定要有break语句吗? 答:

不一定要有break语句。

break语句的作用是执行完一个case分支后,使程序跳出switch结构。如果没有break语句,程序执行完匹配的case语句序列后,还会继续执行后面的case子句。当不使用break语句时,switch

允许多个case子句执行(当多个case子句符合执行条件且case子句中没有使用break语句时)。

3.试比较break语句与continue语句用于循环语句中的不同。 答:

continue 语句只能用在循环语句中。它的作用是终止本次循环,跳过循环体的其余部分,直接转向循环条件判断。

对于while语句和do…while语句,continue语句执行时,直接跳过循环体中剩余的代码而转到循环条件判断处;对于for语句,continue语句执行时,直接跳过循环体中剩余的代码,转到执行表达式3,先改变循环控制变量后再进行循环条件的判断。

break 语句通常用在循环语句和switch 语句中。它的作用是使程序从一个语句体的内部跳出去,继续执行该语句体后面的语句。例如,从switch 语句的case 语句中跳出,或者用来结束循环。

break语句及continue语句均可用于循环语句中,对于单层循环,continue语句仅结束本次循环,如果循环条件仍为true,则继续循环;而break语句是结束整个循环。

4.试比较while、do…while和for三种循环的异同。 答:

循环语句的三种形式while、do…while和for语句在表达上是等价的,也就是说任意一个循环都可以用三种形式之一实现。

(1)while语句和do...while语句,只在while后面指定循环条件,但是需要在循环体中包括使循环趋于结束的语句,而for语句则可以在迭代语句中包含使循环趋于结束的语句。

(2)用while语句和do...while语句时,对循环变量的初始化操作应该放在while语句和do...while语句之前,而for语句则可以在初始化语句中完成。

(3)while语句和do...while语句实现的功能相同,唯一的区别就是do?while语句先执行后判断,无论表达式的值是否为true,都将执行一次循环;而while语句则是首先判断表达式的值是否为true,如果为true则执行循环语句;否则将不执行循环语句。

(4)for循环语句一般用在对于循环次数已知的情况下,而while语句和do...while语句则一般用在对于循环次数不确定的情况下。 5.分析下面3 个if 语句中哪两个是等价的。 if(a==b); if(a==b) if(a==b)

if(c==d) a=1; { if(c==d) a=1; if(c==d) a=1; else b=1; else b=1; else b=1;

}

答:第二个和第三个是等价的。 四、编程题

2. 写程序求解以下分段函数。要求输入x 的值,输出函数y 的值。 ?x,?5?x?0?y??x?1,x?0 ?x?1,0?x?10?

4. 编程找出所有的水仙花数。(水仙花数是指一个3位数,其各位数字的立方和等于其本

身。例如:153是一个水仙数,1333

因篇幅问题不能全部显示,请点此查看更多更全内容