Java语言程序设计(郑莉)第八章课后习题答案
- 格式:docx
- 大小:39.55 KB
- 文档页数:11
习题八参考答案1.什么是组件?什么是容器?并说明各自的作用。
答:从实现角度来看,组件(Component)是构成GUI的基本要素,作用是通过对不同事件的响应来完成和用户的交互或组件之间的交互;容器是能容纳和排列组件的对象,如Applet> Panel (面板)、Frame (窗口)等,作用就是放置组件并控制组件位置。
2.简述Swing组件的优点。
答:Swing是在AWT基础上扩展而来的,提供了非常丰富的组件,远远多于AWT,并且引入了新的概念和性能,这使得基于Swing开发GUI应用程序比直接使用AWT开发更为灵活、方便、效率高,而且能设计出更优美的、感受更好的GUI。
3.简述容器的概念,结合8.4.7小节的内容,解释什么是应用程序的主框架?答:容器是用来容纳其他组件和容器的特殊组件,是由容器类(Container类)创建的对象。
在Java语言中,容器类是组件类(组件类Component类)的一个子类,具有组件的所有性质。
在AWT 技术中,容器类由java. awt包提供,主要包括面板类Panel、窗口类Window、结构类Frame、对话框类Dialog等。
在Swing技术中,容器类由javax. swing包提供,并可分为如下三类:>顶层容器:JFramc. JApplet. JDialog、JWindow;>中间容器:JPanel、JScrollPane^ JSplitPane、JDesktopPaneJToolBar;特殊容器:在GUI上起特殊作用的中间层,如J Interna IFrame、JLayeredPane、 JRootPaneo 应用程序的主框架由可以容纳应用程序各种组件的顶层容器创建,除了负责组件的管理外,通常还提供最大化、最小化、关闭按钮等,实现应用程序展现方式以及关闭等。
4.总结JFrame的使用要点,并说明内容面板的作用。
答:JFrame类包含很多设置窗体的方法,可以用setTitle(String tille)方法设置窗体标题,用setBounds(inl x,int y,int width,int height)方法设置窗体显示的位置及大小,用setVisable (Boolean b)方法设置可见与否(默认不可见)。
《J a v a程序设计》课后练习答案第一章Java概述一、选择题1.( A )是在Dos命令提示符下编译Java程序的命令,( B )是运行Java程序的命令。
A.javacB.javaC.javadocD.javaw2.( D )不是Java程序中有效的注释符号。
A.//B.C.D.3.(A.B.C.D.4.JavaA.B.C.D.5.JavaA.1、JavaJava(JVM)Java以下图展示了Java程序从编译到最后运行的完整过程。
2、简述Java语言的特点Java具有以下特点:1)、简单性Java语言的语法规则和C语言非常相似,只有很少一部分不同于C语言,并且Java还舍弃了C语言中复杂的数据类型(如:指针和结构体),因此很容易入门和掌握。
2)、可靠性和安全性Java从源代码到最终运行经历了一次编译和一次解释,每次都有进行检查,比其它只进行一次编译检查的编程语言具有更高的可靠性和安全性。
3)、面向对象Java是一种完全面向的编程语言,因此它具有面向对象编程语言都拥有的封装、继承和多态三大特点。
4)、平台无关和解释执行Java语言的一个非常重要的特点就是平台无关性。
它是指用Java编写的应用程序编译后不用修改就可在不同的操作系统平台上运行。
Java之所以能平台无关,主要是依靠Java虚拟机(JVM)来实现的。
Java编译器将Java源代码文件编译后生成字节码文件(一种与操作系统无关的二进制文件)5)、6)、Java来。
1、/****/}}第二章Java语法基础一、选择题1.下面哪个单词是Java语言的关键字( B )?A. DoubleB. thisC. stringD. bool2.下面属于Java关键字的是( D )。
A. NULLB. IFC. DoD. goto3.在启动Java应用程序时可以通过main( )方法一次性地传递多个参数。
如果传递的参数有多个,可以用空格将这些参数分割;如果某一个参数本身包含空格,可以使用( B )把整个参数引起来。
习题23.使用“= =”对相同内容的字符串进行比较,看会产生什么样的结果。
答:首先创建一个字符串变量有两种方式:String str = new String("abc");String str = "abc";使用“= =”会因为创建的形式不同而产生不同的结果:String str1 = "abc";String str2 = "abc";System.out.println(str1= =str2); //trueString str1 = new String("abc"); String str2 = "abc";System.out.println(str1= =str2); //falseString str1 = new String("abc"); String str2 = new String("abc"); System.out.println(str1= =str2); //false因此自符串如果是对内容进行比较,使用equals方法比较可靠。
String str1 = "abc";String str2 = "abc";System.out.println(str1= =str2); //trueString str1 = new String("abc"); String str2 = "abc";System.out.println(str1.equals(str2)); //trueString str1 = new String("abc"); String str2 = new String("abc"); System.out.println(str1.equals(str2)); //true5.编写一个程序,把变量n的初始值设置为1678,然后利用除法运算和取余运算把变量的每位数字都提出来并打印,输出结果为:n=1678。
第二章习题答案1.什么是对象、类,它们之间的联系?答:1)对象是包含现实世界物体特征的抽象实体,它反映系统为之保存信息和与它交互的能力。
对象是一些属性及服务的封装体,在程序设计领域,可以用“对象=数据+作用于这些数据上的操作”来表示。
现实生活中对象是指客观世界的实体;在程序中对象是指一组变量和相关方法的集合。
2)类是既有相同操作功能和相同的数据格式的对象的集合与抽象!两者的关系:对象是类的具体实例.。
2.什么是面向对象的程序设计方法?它有那些基本特征?答:面向对象程序设计从所处理的数据入手,以数据为中心而不是以服务为中心来描述系统。
它把编程问题视为一个数据集合,数据相对于功能而言,具有更强的稳定性。
它的特征:抽象,封装,继承,多态。
3.在下面的应用中,找出可能用到的对象,对每一个对象,列出可能的状态和行为。
1)模拟航空预订系统交易的程序2)模拟银行交易的程序答:1)航空预订交易:状态:旅客姓名,身份证号,联系号码,出发地址,抵达地址,出发日期。
行为:订票,领票,买票,退票。
2)银行交易:状态:客户姓名,账号,身份证号。
行为:存款,取款,汇款。
4.请解释类属性、实例属性及其区别。
答:实例属性,由一个个的实例用来存储所有实例都需要的属性信息,不同实例的属性值可能会不同。
5.请解释类方法、实例属性及其区别。
答:实例方法表示特定对象的行为,在声明时前面不加static修饰符,在使用时需要发送给一个类实例。
类方法也称为静态方法,在方法声明时前面需加static修饰符,类方法表示具体实例中类对象的共有行为。
区别:实例方法可以直接访问实例变量,调用实例方法,实例方法可以直接访问类变量,调用类方法;类方法可以直接调用类变量和类方法,类方法不能直接调用实例变量和实例方法;6.类的访问控制符有哪几种?具体含义及其区别。
答:类的访问控制符只有public(公共类)及无修饰符(默认类)两种。
区别:当使用public修饰符时表示所有其他的类都可以使用此类;当没有修饰符时,则只有与此类处于同一包中的其他类可以使用类。
Java语言程序设计课后习题答案全集Java语言程序设计是一门广泛应用于软件开发领域的编程语言,随着其应用范围的不断扩大,对于掌握Java编程技巧的需求也逐渐增加。
为了帮助读者更好地掌握Java编程,本文将提供Java语言程序设计课后习题的全集答案,供读者参考。
一、基础知识题1. 代码中的注释是什么作用?如何使用注释.答:注释在代码中是用来解释或者说明代码的功能或用途的语句,编译器在编译代码时会自动忽略注释。
在Java中,有三种注释的方式:- 单行注释:使用"// " 可以在代码的一行中加入注释。
- 多行注释:使用"/* */" 可以在多行中添加注释。
- 文档注释:使用"/** */" 可以添加方法或类的文档注释。
2. 什么是Java的数据类型?请列举常见的数据类型。
答:Java的数据类型用来指定变量的类型,常见的数据类型有:- 基本数据类型:包括整型(byte、short、int、long)、浮点型(float、double)、字符型(char)、布尔型(boolean)。
- 引用数据类型:包括类(class)、接口(interface)、数组(array)等。
二、代码编写题1. 编写Java程序,输入两个整数,求和并输出结果。
答:```javaimport java.util.Scanner;public class SumCalculator {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入第一个整数:");int num1 = scanner.nextInt();System.out.print("请输入第二个整数:");int num2 = scanner.nextInt();int sum = num1 + num2;System.out.println("两个整数的和为:" + sum);}}```三、综合应用题1. 编写Java程序,实现学生信息管理系统,要求包括以下功能:- 添加学生信息(姓名、年龄、性别、学号等);- 修改学生信息;- 删除学生信息;- 查询学生信息。
《Java程序设计》课后习题参考答案Java程序设计课后习题参考答案1. 介绍在 Java 程序设计课程中,课后习题是帮助学生巩固知识、加深理解和提高编程能力的重要环节。
本文将为大家提供《Java程序设计》课后习题的参考答案,以帮助学生更好地学习和掌握 Java 编程。
2. 基本概念Java 程序设计课后习题涵盖了从基础到高级的各种知识点,包括但不限于变量、数据类型、条件语句、循环语句、数组、类、对象、继承、多态等内容。
通过解答这些习题,学生可以加深对这些概念的理解,并且通过实际操作来巩固他们的编程能力。
3. 习题解答策略当解答课后习题时,以下几个策略可以帮助你更好地理解和解决问题:3.1 仔细阅读题目要求。
确保自己充分理解题目所要求的功能和目标。
3.2 分析问题。
在着手解答问题之前,先理清思路,分析问题的要点和关键部分。
3.3 设计算法。
根据问题的要求,设计一个合适的算法来解决问题。
3.4 编写代码。
用 Java 编程语言将你设计的算法转化为代码实现。
3.5 测试和调试。
对编写的代码进行测试和调试,确保程序能够正常运行,并且得到正确的结果。
4. 习题参考答案示例下面我们将列举几个常见的习题参考答案示例,以帮助大家更好地理解和学习 Java 程序设计:4.1 变量与数据类型:习题要求定义一个整型变量并赋值为10,然后输出该变量的值。
```public class VariableExample {public static void main(String[] args) {int num = 10;System.out.println("变量的值为:" + num);}}```4.2 条件语句:习题要求判断一个数是否是偶数,如果是,则输出“偶数”,否则输出“奇数”。
```public class EvenOddExample {public static void main(String[] args) {int num = 5;if (num % 2 == 0) {System.out.println("偶数");} else {System.out.println("奇数");}}}```4.3 循环语句:习题要求输出1到10之间的所有偶数。
C++语言程序设计(清华大学郑莉)课后习题答案第一章概述1-1 简述计算机程序设计语言的发展历程。
解:迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,C++语言是一种面向对象的编程语言,也属于高级语言。
1-2 面向对象的编程语言有哪些特点?解:面向对象的编程语言与以往各种编程语言有根本的不同,它设计的出发点就是为了能更直接的描述客观世界中存在的事物以及它们之间的关系。
面向对象的编程语言将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),形成类。
通过类的继承与多态可以很方便地实现代码重用,大大缩短了软件开发周期,并使得软件风格统一。
因此,面向对象的编程语言使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。
C++语言是目前应用最广的面向对象的编程语言。
1-3 什么是结构化程序设计方法?这种方法有哪些优点和缺点?解:结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。
结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。
虽然结构化程序设计方法具有很多的优点,但它仍是一种面向过程的程序设计方法,它把数据和处理数据的过程分离为相互独立的实体。
当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。
由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。
[修订]java语言程序设计基础篇第八章第十题编程参考答案为二次方程式ax2+bx+c=0设计一个名为QuadraticEquation的类。
这个类包括: 代表三个系数的私有数据域a、b、c。
一个参数为a、b、c的构造方法。
a、b、c的三个get方法。
一个名为getDiscriminant()的方法返回判别式,b2-4ac。
一个名为getRoot1()和getRoot2()的方法返回等式的两个根。
这些方法只有在判别式为非负数时才有用。
如果判别式为负,方法返回0。
画出该类的UML图。
实现这个类。
编写一个测试程序,提示用户输入a、b、c的值,然后显示判别式的结果。
如果判别式为正数,显示两个根;如果判别式为0,显示一个根;否则,显示“The equation has no roots”。
代码:class QuadraticEquation{private int a,b,c;QuadraticEquation(){}public QuadraticEquation(int a,int b,int c){this.a=a;this.b=b;this.c=c;}public int getA(){return a;}public int getB(){return b;}public int getC(){return c;}public int getDiscriminant(){if(b*b-4*a*c>=0)return b*b-4*a*c;elsereturn 0;}public int getRoot1(){if(b*b-4*a*c>=0)return (int)((-b+Math.pow(b*b-4*a*c, 0.5))/(2*a)); elsereturn 0;}public int getRoot2(){if(b*b-4*a*c>=0)return (int)((-b-Math.pow(b*b-4*a*c, 0.5))/(2*a)); elsereturn 0;}}public class XiTi810 {public static void main(String[] args){System.out.println("请输入要计算的方程的系数a、b和c:");java.util.Scanner input =new java.util.Scanner(System.in);System.out.print("a=");int a=input.nextInt();System.out.print("b=");int b=input.nextInt();System.out.print("c=");int c=input.nextInt();QuadraticEquation q=new QuadraticEquation(a,b,c);q.getDiscriminant();if(q.getDiscriminant()>0)System.out.println("它们的根为:"+q.getRoot1()+"和"+q.getRoot2());else if(q.getDiscriminant()==0)System.out.println("此方程只有一个根为:"+q.getRoot1());elseSystem.out.println("方程无解");}}。
Java语言程序设计(郑莉)第八章课后习题答案1.进程和线程有何区别,Java是如何实现多线程的。
答:区别:一个程序至少有一个进程,一个进程至少有一个线程;线程的划分尺度小于进程;进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
Java程序一般是继承Thread类或者实现Runnable接口,从而实现多线程。
2.简述线程的生命周期,重点注意线程阻塞的几种情况,以及如何重回就绪状态。
答:线程的声明周期:新建-就绪-(阻塞)-运行--死亡线程阻塞的情况:休眠、进入对象wait池等待、进入对象lock池等待;休眠时间到回到就绪状态;在wait池中获得notify()进入lock池,然后获得锁棋标进入就绪状态。
3.随便选择两个城市作为预选旅游目标。
实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000毫秒以内),哪个先显示完毕,就决定去哪个城市。
分别用Runnable接口和Thread类实现。
(注:两个类,相同一个测试类)//Runnable接口实现的线程runable类publicclarunnableimplementRunnable{privateStringcity;publicr unnable(){}publicrunnable(Stringcity){thi.city=city;}publicvoidrun(){for(inti=0;i<10;i++){Sytem.out.println(city);try{//休眠1000毫秒。
Thread.leep(1000);}catch(InterruptedE某ceptione){e.printStackTrace();}}}}//Thread类实现的线程thread类publicclarunnablee某tendThread{privateStringcity;publicrunnable(){}publicrunnable(Stringcity){thi.city=city;}publicvoidrun(){for(inti=0;i<10;i++){Sytem.out.println(city);try{//休眠1000毫秒。
Thread.leep(1000);}catch(InterruptedE某ceptione){e.printStackTrace();}}}}//tet8_3publicclatet8_3{}publictaticvoidmain(String[]arg){}//将创建一个线程对象,这个对象接受一个实现了Runnable接口。
实际上这里也就runnabler1=newrunnable(\广州\);runnabler2=newrunnable(\乌鲁木齐\);Threadt1=newThread(r1);Threadt2=newThread(r2);//启动线程t1.tart();t2.tart();是使用run()方法运行结果分别为:4.编写一个多线程程序实现如下功能:线程A和线程B分别在屏幕上显示信息“tart”后,调用wait等待;线程C开始后调用leep休眠一段时间,然后调用notifyall,使线程A和线程B继续运行。
线程A和线程B恢复运行后输出信息“end”后结束,线程C在判断线程B和线程A结束后自己结束运行。
//tet8_4publicclatet8_4{ThreadA=newThread(\){};ThreadB=newThread(\){};ThreadC=newThread(\){publicvoidrun(){while(true){if(!A.iAlive()&&!B.iAlive())return;publicvoidrun(){}Wait(\);publicvoidrun(){}Wait(\);}};}}try{}notifyall();Thread.leep(2000);e.printStackTrace();}catch(InterruptedE某ceptione){publicynchronizedvoidWait(Stringname){}publicynchronizedvoidnotifyall(){}publictaticvoidmain(Stringarg[]){}tet8_4tet=newtet8_4();//A、B两线程一起输入tart和输出end,不过中间有C让线程休眠2秒,没法全部一//之后再唤醒,让AB继续输出下半部分endtet.A.tart();tet.B.tart();tet.C.tart();notifyAll();Sytem.out.println(name+\);try{}Sytem.out.println(name+\);wait();e.printStackTrace();}catch(InterruptedE某ceptione){次性输出,运行结果:5.实现一个数据单元,包括学号和姓名两部分。
编写两个线程,一个线程往数据单元中写,另一个线程往外读。
要求没写一次就往外读一次。
//Data类importjava.util.Scanner;publicclaData{StringtudentId;Stringname;booleanavailable=fale;//判断是读是写Scannerin=newScanner(Sytem.in);//定义一个输入对象publicynchronizedvoidread(){if(available)try{}catch(E某ceptione){}wait();Sytem.out.printf(\请输入学号:\);try{}catch(E某ceptione){Sytem.out.println(\输入学号出错!\);}Sytem.out.printf(\请输入姓名:\);try{}catch(E某ceptione){Sytem.out.println(\输入姓名出错!\);}Sytem.out.println();available=true;notify();name=in.ne某t();tudentId=in.ne某t();}}Sytem.out.println(\);SonThreadnewThread=newSonThread(10);new Thread.tart();//;浪费时间的循环inti=1;while(i<=100000){}newThread.top();//结束新进程Sytem.out.println(\);i++;运行结果:(这个结果很难把握,通常都会出现2那样的结果,知道原理就好。
)29.用两个线程模拟存、取货物。
一个线程往一对象里放货物(包括品名、价格),另外一个线程取货物。
分别模拟“放一个、取一个”和“放若干个、取若干个”两种情况。
//Good货物类publicclaGood{Stringname;intprice;publicGood(){}publicGood(Stringname,intprice){}publicGood(Goodg){=;=name;thi.price=price;}}thi.price=g.price;//WareHoue仓库类importjava.util.ArrayLit;importjava.util.Lit;importjava.util .Scanner;publicclaWareHoue{publicynchronizedvoidaveGood(){if(available==fale){try{}wait();//TODOAuto-generatedcatchblocke.printStackTrace();}catch(InterruptedE某ceptione){Goodgood=null;Scannerin=newScanner(Sytem.in);Litlit=newArrayLit();//用来存放商品对象intcount;//想存入商品的个数booleanavailable=true;publicWareHoue(){}publicWareHoue(intcount){}publicWareHoue(Litlit){}thi.count=count;for(inti=0;i<lit.ize();i++){}thi.lit.add((Good)lit.get(i));thi.count=count;}for(inti=0;i<count;i++){Stringn;intp;Sytem.out.println(\请输入\+(i+1)+\号商品的名称:\);n=in.ne 某t();Sytem.out.println(\价格:\);p=in.ne某tInt();}}}good=newGood(n,p);lit.add(good);available=fale;notify();publicynchronizedvoidtakeGood(){}if(available==true){}for(inti=0;i<lit.ize();i++){good=(Good)lit.get(i);Sytem.out.print((i+1)+\号商品的名称为:\+);try{} wait();//TODOAuto-generatedcatchblocke.printStackTrace();}catch(InterruptedE某ceptione){Sytem.out.println(\价格为:\+good.price);}available=true;notify();//Save存货物类publicclaSavee某tendThread{}//Take取货物类publicclaTakee某tendThread{WareHouewareHoue=null;publicTake(WareHouew){}publicvoidrun(){thi.wareHoue=w;WareHouewareHoue=null;publicSave(WareHouew){} publicvoidrun(){}wareHoue.aveGood();thi.wareHoue=w;}}wareHoue.takeGood();//tet8_9测试类importjava.util.Scanner;publicclatet8_9{}publictaticvoidmain(String[]arg){}aveGood.tart();takeGood.tart();Scannerin=newScanner(Sytem.in);Sytem.out.println(\请输入仓库的容量:\);inti=in.ne某tInt();WareHouewareHoue=newWareHoue(i);ThreadaveGood=newSave(wareHo ue);ThreadtakeGood=newTake(wareHoue);运行结果:10.用两个线程模拟对话,任何一个线程都可以随时收发信息。