收藏 分销(赏)

Java程序设计项目教程(第二版)-参考答案.docx

上传人:w****g 文档编号:3242946 上传时间:2024-06-26 格式:DOCX 页数:29 大小:99.35KB 下载积分:10 金币
下载 相关 举报
Java程序设计项目教程(第二版)-参考答案.docx_第1页
第1页 / 共29页
Java程序设计项目教程(第二版)-参考答案.docx_第2页
第2页 / 共29页


点击查看更多>>
资源描述
项目1 一、思考题 1.Java程序有几种版本,分别是什么? Java有三种版本,分别是J2ME、J2SE、J2EE 2.Java程序有何特点? Java语言的特点如下: ①面向对象:支持代码继承及重用,是完全面向对象的,它不支持类似C语言那样的面向过程的程序设计技术。 ②解释执行:Java解释器(运行系统)能直接运行目标代码指令。 ③平台无关:Java源程序被编译成一种高层次的与机器无关的Byte-codes格式语言, 被设计在Java虚拟机上运行。 ④多线程:Java提供的多线程功能使得在一个程序里可同时执行多个小任务。多线程带来的好处是可以有更好的交互性能和实时控制性能。 ⑤健壮性:Java致力于检查程序在编译和运行时的错误,类型检查帮助检查出许多开发早期出现的错误。 3.什么是JVM,为什么需要JVM? JVM即Java虚拟机,是一台可以存在于不同的真实的软、硬件环境下的虚拟的计算机,其功能是将字节码解释为真实平台能执行的指令。Java正是通过虚拟机JVM技术,实现了与平台无关,实现“编写一次,到处运行”。因此,任何平台只要安装相应的Java虚拟机环境,就能运行Java程序。 4.如何理解Java程序的基本结构? ①语句package p1;是建立一个包(文件夹),生成的类文件将存放于包中。 ②程序第一行public class 类名{},是一个类定义语句。public关键字指明类的访问方式为公有,也就是在整个程序内都可以访问到它。如果将类定义为public,则类其名称必须与主文件名一致,并且大小写敏感。 ③类后大括号内可以定义类的成员和方法,对于一个可执行的Java类,main方法是必需的,而且该main方法必须是公有 (public)、静态 (static)和没有返回值(void)的,同时它只能带一个字符串型(String[])的参数。 ④程序的一行“//……”是注释,只说明不运行。 ⑤每个命令语句结束,必须以“;”结尾。 二、编程 1.编写一Java应用程序,要求在屏幕上输出字符串“Happy New Year!”。 class Prac1 { public static void main(String args[]) { System.out.println("Happy New Year!"); } } 2.编写一个简单的Java程序,在屏幕上输出如下图形: * * * * * * * * * class Prac2 { public static void main(String args[]) { System.out.println(" *"); System.out.println(" ***"); System.out.println("*****"); } } 项目2 一、选择题 1.数组中可以包含什么类型的元素?( D ) A. int型 B. String型 C. 数组 D. 以上都可以 2.Java中定义数组名为Arr,下面哪项可以得到数组元素的个数?( B ) A. Arr.length( ) B. Arr.length C. Arr (xyz) D. Arr (xyz) 3.下面哪条语句定义了3个元素的数组?( A ) A. int [ ] a={20,30,40}; B. int a [ ]=new int(3) ; C. int [3] array; D. int [ ] arr; 4.下面的代码段中,执行之后i和j的值是( B )。 int i = 10; int j; j = i++; A. 10, 10 B. 11, 10 C. 10, 11 D. 11, 11 二、编程 1.试编写一个程序,输入三条边长值,并判断这三条边长能不能构成三角形,如果能,能构成什么样的三角形(一般、等边、等腰)。 import java.util.*; class Practice1{ public static void main(String args[]) { Scanner s=new Scanner(System.in); int a,b,c; a=s.nextInt(); b=s.nextInt(); c=s.nextInt(); if(a+b>c&&a+c>b&&b+c>a) { if(a==b&&a==c) System.out.print("构成的三角形为等边三角形。"); else if(a==b||a==c||b==c) System.out.print("构成的三角形为等腰三角形。"); else System.out.print("构成的三角形为一般三角形。"); } else System.out.print("不能构成三角形。"); } } 2.试编写一个程序,读入10个学生的成绩,成绩在0~59分为D,成绩在60~79分为C,成绩在80~89分为B,成绩在90~100分为A,并输出A、B、C、D的人数个数。 import java.util.*; public class Practice2{ public static void main(String args[]) throws IOException { int a=10,a1=0,a2=0,a3=0,a4=0,c; int numa[]=new int[a]; for (int i=0;i<a;i++){ System.out.print("请输入第"+(i+1)+"个人的成绩"); c=getInputData(); while (c<0||c>100) { System.out.print("请重新输入第"+(i+1)+"个学生的成绩"); c=getInputData(); } numa[i]=c;//保存 System.out.println(numa[i]); switch (numa[i]/10){ case 10: System.out.println("成绩为A级!"); a1++; break; case 9: System.out.println("成绩为A级!"); a1++; break; case 8: System.out.println("成绩为B级!"); a2++; break; case 7: System.out.println("成绩为C级!"); a3++; break; case 6: System.out.println("成绩为C级!"); a3++; break; default: System.out.println("成绩为D级!"); a4++; break; } } System.out.println("90-100分的人数="+a1); System.out.println("80-89分的人数="+a2); System.out.println("60-79分的人数="+a3); System.out.println("0-59分的人数="+a4); } public static int getInputData() throws IOException { Scanner s=new Scanner(System.in); int n=s.nextInt(); return n; } } 3.试编写一个程序,输出以下形式的图形。 * * * * * * * * * * * * * * * * * * * * * * * * class Practice3 { public static void main(String args[]) { for(int i=1;i<=4;i++) { for(int j=1;j<=i;j++) System.out.print(" "); for(int k=1;k<=5;k++) System.out.print("*"); System.out.println(); } } } 4.试编写游戏程序,完成猜数字游戏,数字是由计算机随机产生的100以内整数。一次就猜中得100分,2次才猜中得90分,依次类推,超过10次无分。程序最后输出参与者得分。 import java.util.*; class Practice4 { public static void main(String args[]) { int a=(int)(Math.random()*10); int guess,score=100; Scanner s=new Scanner(System.in); int i; for( i=1;i<=10;i++) { guess=s.nextInt(); if(guess==a) break; score=score-10; } System.out.print(i+"得分为:"+score); } } 项目3 一、选择题 1. 定义类头(非内部类)时,不可能用到的关键字是( B ) A) class B)private C)extends D)public 2.下列类头定义中,错误的是( A ) A)public x extends y {...} B) public class x extends y {...} C)class x extends y implements y1 {...} D)class x {...} 3.设 A为已定义的类名,下列声明A类的对象a的语句中正确的是( D ) A)float A a; B)public A a=A( ); C)A a=new int( ); D)static A a=new A( ); 4.设 X 、Y 均为已定义的类名,下列声明类X的对象x1的语句中正确的是( C ) A)public X x1= new Y( ); B)X x1= X ( ); C)X x1=new X( ); D)int X x1; 5.设X 、Y为已定义的类名,下列声明X类的对象x1的语句中正确的是( A ) A)static X x1; B)public X x1=new X(int 123); C)Y x1; D)X x1= X( ); 6. 有一个类A,以下为其构造方法的声明,其中正确的是( A ) A)public A(int x){...} B)static A(int x){...} C)public a(int x){...} D)void A(int x){...} 7.有一个类Student,以下为其构造方法的声明,其中正确的是( B ) A)void Student (int x){...} B)Student (int x){...} C)s(int x){...} D)void s(int x){...} 8.下列选项中,用于定义接口的关键字是( A ) A)interface B) implements C) abstract D)class 9.现有类A和接口B,以下描述中表示类A实现接口B的语句是( A ) A)class A implements B B)class B implements A C)class A extends B D)class B extends A 二、填空题 1.如果子类中的某个变量的变量名与它的父类中的某个变量完全一样,则称子类中的这个变量___隐藏__了父类的同名变量。 2.如果子类中的某个方法的名字、返回值类型和___参数列表__与它的父类中的某个方法完全一样,则称子类中的这个方法覆盖了父类的同名方法。 3.抽象方法只有方法头,没有___方法体_____。 4.接口中所有属性均为___public______、___static__和___final_____的。 5.一个类如果实现一个接口,那么它就必须实现接口中定义的所有方法,否则该类就必须定义成__抽象__的。 6.Java语言中用于表示类间继承的关键字是____extends_______。 7.下面是一个类的定义,请将其补充完整。 class _Student____ { String name; int age; Student( __String___ s, int i) { name=s; age=i; } } 8.下面是一个类的定义,请将其补充完整。 _____class______ A { String s; ___static__ int a=666; A(String s1) { s=s1; } static int geta( ) { return a; } } 三、编程题 1.编写一个类,描述学生的学号、姓名、成绩。学号用整型,成绩用浮点型,姓名用String类型。编写一个测试类,输入学生的学号、姓名、成绩,并显示该学号的学生姓名,以及成绩。 import java.util.*; class Student{ int sNum; String name; double score; } class T1_Student{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); Student s=new Student(); s.sNum=sc.nextInt(); s.name=sc.next(); s.score=sc.nextDouble(); System.out.println(s.name+"的学号是"+s.sNum+"成绩是"+s.score); } } 2.设计一个Birthday类,其成员变量有:year,month,day;提供构造方法、输出Birthday对象值的方法和计算年龄的方法。编写程序测试这个类。 class Birthday{ private int year; private int month; private int day; public Birthday(int year,int month,int day) { this.year=year; this.month=month; this.day=day; } public void printBirthDay() { System.out.println(year+"-"+month+"-"+day); } public int printAge() { return 2021-year; } public static void main(String[] args) { Birthday birth=new Birthday(1991,11,5); birth.printBirthDay(); int age=birth.printAge(); System.out.println(age); } } 3.编写一个类,描述汽车,其中用字符型描述车的牌号,用浮点型描述车的价格。编写一个测试类,其中有一个修改价格方法,对汽车对象进行操作,根据折扣数修改汽车的价格,最后在main方法中输出修改过后的汽车信息。 public class ChangeCar{ public static void main(String[] args){ Car c=new Car(); c.carNum="鲁A1111"; c.price=10; System.out.println("before change ,the car's num and price is:"+c.carNum+" "+c.price); changePrice(c); System.out.println("After Change ,the car's price is:"+c.price); } public static void changePrice(Car c){ c.price=c.price*0.8; } } class Car{ String carNum; double price; } 4.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个类都有构造方法和输出相关数据的方法。 class Vehicle { int wheels; float weight; Vehicle(int a,float b) { wheels=a; weight=b; } void outData() { System.out.print("The vehicle's data:wheels:"+wheels+",weight:"+weight); } } class Car extends Vehicle { int loader; Car(int a,float b,int c) { super(a,b); loader=c; } void outData() { super.outData(); System.out.print(",loader:"+loader); } } class Truck extends Car { float payload; Truck(int a,float b,int c,float d) { super(a,b,c); payload=d; } void outData() { super.outData(); System.out.println(",payload:"+payload); } } class Test { public static void main(String args[]) { Vehicle v=new Vehicle(4,7); v.outData(); System.out.println(); Car c=new Car(4,6,4); c.outData(); System.out.println(); Truck t=new Truck(4,2,10,8); t.outData(); } } 5.定义一个接口CanFly,描述会飞的方法public void fly();分别定义类飞机和鸟,实现CanFly接口。定义一个测试类,测试飞机和鸟,在main方法中创建飞机对象和鸟对象,让飞机和鸟起飞。 interface CanFly { public void fly(); } class Plane implements CanFly { public void fly() { System.out.println("飞机需借助螺旋桨飞上了天空。"); } } class Bird implements CanFly { public void fly() { System.out.println("鸟需借助翅膀飞上了天空。"); } } class Test { public static void main(String args[]) { Plane p=new Plane(); Bird b=new Bird(); p.fly(); b.fly(); } } 项目4 一、选择题 1.关于异常的定义,下列描述中最正确的一个是( D )。 A)程序编译错误 B)程序语法错误 C)程序自定义的异常事件 D)程序编译或运行时发生的异常事件 2.抛出异常时,应该使用的子句是( A )。 A)throw B)catch C)finally D)throws 3.自定义异常类时,可以继承的类是( C )。 A)Error B)Applet C)Exception及其子类 D)AssertionError 4.当方法产生异常但却无法确定该如何处理时,应采用的方法是( C )。 A)声明异常 B)捕获异常 C)抛出异常 D)自定义异常 5.对于try{…}catch子句的排列方式,正确的一项是( A )。 A)子类异常在前,父类异常在后 B)父类异常在前,子类异常在后 C)只能有子类异常 D)父类异常与子类异常不能同时出现 6.下列关于try、catch和finally的表述,错误的是( C )。 A)try语句块后必须紧跟catch语句块 B)catch语句块必须紧跟在try语句块后 C)可以有try但无catch D)可以有try但无finally 7.下列描述中,错误的一项是( A )。 A)一个程序抛出异常,其他任何运行中的程序都可以捕获 B)算术溢出需要进行异常处理 C)在方法中检测到错误但不知如何处理时,方法就声明异常 D)任何没有被程序捕获的异常最终被默认处理程序处理 8.下面程序运行时,会产生的异常是( C )。 class Test{ public static void main(String ar[]) {int x=0,y=20,z; z=(x+y)/(x*y); System.out.println("z="+z); } } A)ArrayIndexOutOfBoundsException B)NumberFormatException C)ArithMeticException D)NullPointerException 二、填空题 1.一个try代码段后必须跟 catch 代码段, finally 代码段可以没有。 2.自定义异常类必须继承 Exception 类或其子类。 3.异常处理机制可以允许根据具体的情况选择在何处处理异常,可以在 当前方法中 捕获并处理,也可以用throws子句把它交给 调用方法 去处理。 4.数组下标越界对应的类是 ArrayIndexOutOfBoundsException 。 5.为达到高效运行的要求, 运行时产生 的异常,可以直接交给Java虚拟机系统来处理,而 Exception 类派生出的非运行异常,要求编写程序捕获或者声明。 三、编程题 1.从键盘输入5个数,求出5个数的阶乘之和。若输入负数时,产生异常并进行相应的处理。 import javax.swing.*; class ExceptionExam { public static void main(String args[]) { int i,sum=0,j; for(i=0;i<5;i++) { j=1; int x=Integer.parseInt(JOptionPane.showInputDialog(null,"input:")); try { if(x<0) throw new Exception(); for(int k=1;k<=x;k++) j=j*k; sum=sum+j; }catch(Exception e) { System.out.println("输入了一个负数,请重新输入!"); i--; } } System.out.println("阶乘和为:"+sum); } } 2.设计自己的异常类,从键盘输入一个数,若输入的数不小于0,则输出它的平方根。若小于0,则输出提示信息“输入错误”。(求平方根的方法为:Math.sqrt(int x)) import javax.swing.*; class MyException extends Exception { static int i=3; MyException() { super("产生异常!"); } } class ExceptionTest { public static void main(String args[]) { int x=Integer.parseInt(JOptionPane.showInputDialog(null,"input:")); try { if(x<0) throw new MyException(); System.out.println("输入数的平方根为:"+Math.sqrt(x)); }catch(MyException e) { System.out.println(e.getMessage()); System.out.println("异常编号为:"+e.i); } } } 项目5 一、选择题 1.下面属于容器类的是( A ) A.JFrame B.JTextField C.Color D.JMenu 2.FlowLayout的布局策略是( A ) A.按添加的顺序由左至右将组件排列在容器中。 B.按设定的行数和列数以网格的形式排列组件。 C.将窗口划分成五部分,在这五个区域中添加组件。 D.组件相互叠加排列在容器中。 3.BorderLayout的布局策略是( C ) A.按添加的顺序由左至右将组件排列在容器中。 B.按设定的行数和列数以网格的形式排列组件。 C.将窗口划分成五部分,在这五个区域中添加组件。 D.组件相互叠加排列在容器中。 4.GridLayout的布局策略是( B ) A.按添加的顺序由左至右将组件排列在容器中。 B.按设定的行数和列数以网格的形式排列组件。 C.将窗口划分成五部分,在这五个区域中添加组件。 D.组件相互叠加排列在容器中。 5.JFrame中内容窗格缺省的布局管理器是( B ) A.FlowLayout B.BorderLayout C.GridLayout D.CardLayout 6.监听事件和处理事件( B ) A.都由Listener完成 B.都由相应事件Listener处注册的构件完成 C.由Listener和构件分别完成 D.由Listener和窗口分别完成 7.在下列事件处理机制中不是机制中的角色的是( A ) A.事件 B.事件源 C.事件接口 D.事件处理者 8.addActionListener(this)方法中的this参数表示的意思是( B ) A.当有事件发生时,应该使用this监听器 B.this对象类会处理此事件 C.this 事件优先于其他事件 D.只是一种形式 9.下列关于Component的方法中,错误的是( A ) A.getName( )用于获得组件的名字 B. getSize( )用于获得组件的大小 C.setColor( )用于设置前景颜色 D.setVisible( )设置组件是否可见 10.当窗口关闭时,会触发的事件是( C ) A.ContainerEvent B.ItemEvent C.WindowEvent D.MouseEvent 二、填空题 1.AWT的用户界面组件库被更稳定、通用、灵活的库取代,该库称为 swing 。 2.__布局管理器__用于安排容器上的GUI组件。 3.设置容器布局管理器的方法是 setLayout() 。 4.当释放鼠标按键时,将产生____ mouseRelease _____事件。 5.Java为那些声明了多个方法的Listener接口提供了一个对应的___适配器___,在该类中实现了对应接口的所有方法。 6.ActionEvent事件的监听接口是 ActionListener ,注册方法名是 add ActionListener() ,事件处理方法名是__public void action_performed()_______。 7.图形用户界面通过____事件___响应用户和程序的交互,产生事件的组件称为___事件源_______。 8.Java的Swing包中定义菜单的类是 JMenu 。 三、编程题 1.设计如图所示样式的图形用户界面(不要求实现功能)。 import javax.swing.*; class Demo { public Demo() { JLabel b1 = new JLabel("当前时间:"); JLabel b2 = new JLabel("时"); JLabel b3 = new JLabel("分"); JLabel b4 = new JLabel("秒"); JLabel b5 = new JLabel("闹钟时间:"); JLabel b6 = new JLabel("时"); JLabel b7= new JLabel("分"); JLabel b8 = new JLabel("秒"); JLabel b9 = new JLabel("闹钟设置"); JTextField t1=new JTextField("8",3); JTextField t2=new JTextField("57",3); JTextField t3=new JTextField("59",3); JTextField t4=new JTextField(3); JTextField t5=new JTextField(3); JTextField t6=new JTextField(3); JButton bt1=new JButton("开"); JButton bt2=new JButton("关"); JFrame win = new JFrame(); win.setLayout(new FlowLayout()); win.add(b1); win.add(t1); win.add(b2); win.add(t2); win.add(b3); win.add(t3); win.add(b4); win.add(b5); win.add(t4); win.add(b6); win.add(t5); win.add(b7); win.add(t6); win.add(b8); win.add(b9); win.add(bt1); win.add(bt2); win.setSize(340,160); win.setVisible(true); } public static void main(String arg[]) { new Demo(); } } 2.编写一个将华氏温度转换为摄氏温度的程序。其中一个文本框输入华氏温度,另一个文本框显示转换后的摄氏温度,一个按钮完成温度的转换。使用下面的公式进行温度转换:摄氏温度=5/9×(华氏温度-32)。 import java.awt.*; import java.awt.event.*; import javax.swing.*; class Demo implements ActionListener { JLabel b1,b2; TJextField t1,t2; public Demo() { b1 = new JLabel("华氏温度:"); b2 = new JLa
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服