《java课后习题2.pdf》由会员分享,可在线阅读,更多相关《java课后习题2.pdf(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、8.7设计一个名为A c c o u n t 类,它包括:一个名为i d 的 i n t 类型私有帐户数据域(默认值0)。一个名为b a l a n c e的 d o u b l e类型私有帐户数据域(默认值0)。一个名为a n n u a l l n t erest R a t e的 d o u b l e类型私有数据域存储当前利率(默认值0)。假设所以的帐户都有相同的利率。一个名为d a t eC rea t ed 的D a t e类型私有数据域存储帐户的开户日期。一个能创建默认帐户的无参构造方法。一个能创建带特定i d 和初始余额的帐户的构造方法。I d b a l a n c e a
2、n n u a l I n t erst R a t e 的访问器和修改器。d a t eC rea t ed 的访问器。一个名为g et Mo n t h l yl n t erest R a t eO 的方法返回月利率。一个名为wi t h D ra w的方法从帐户提取特定数额。一个名d ep o si t 的方法向帐户存储特定的数额。画出该类的UML 图。实现这个类。编写一个测试程序,创建一个帐户I D 为 1 1 2 2,余额为2 0 0 0 0 美元,年利率为4.5%的A c c o u n t 对象。使用wi t h d ra w方法取款2 5 0 0 美元,使用d ep o si
3、 t 方法存款3 0 0 0 美元,然后打印余额,月利息以及这个帐户的开户日期。源程序:public class Account private int id;账户号码private double balance;账户余额private double annuallnterestRate;当前利率private java.util.Date dateCreated=new java.util.Date();开户 日 期public Account()(this.id=0;this.balance=0;this.annuallnterestRate=0;)public Account(int i
4、d,int balance)(this.id=id;this.balance=balance;)public int getld()(return this.id;)public void steld(int id)(this.id=id;public double getBalance()return this.balance;public void setBalance(double balance)this.balance=balance;)public double getannualInterestRate()(return this.annuallntereslRate;)publ
5、ic void setAnnualInterestRate(double annuallnterestRate)this.annuallnterestRate=annuallnterestRate;)public java.util.Date getDateCreated()(return this.dateCreated;)public double getMonthlylnterestRateOreturn this.annuallnterestRate/12;)public double wilhDraw(double count)(this.balance-=count;return
6、this.balance;)public double deposit(double count)(this.balance+=count;return this.balance;)public static void main(String args)(Account account=new Account(l 122,20000);account.setAnnualInterestRate(0.045);account.withDraw(2500);account.deposit(3000);System.out.prinlln(“余额:+account.getBalance();Syst
7、em.out.println(月利息:+account.getMonthlyInterestRate()*account.getBalance();System.out.println(开户日期:+account.getDateCreated().toString();运行结果:余额:20500.0月利息:76.875开户日期:Mon Apr 16 20:54:13 CST 20128.8设计一个名为F a n 的类来表示一个风扇。这个类包括:三个名为S L O W、ME D I UM和 F A S T而值是1、2 和 3的常量表示风扇的速度。一个名为sp eed 的 i n t 类型私有数据
8、域表示风扇的速度(默认值S L O W)。一个人名为o n 的 b o o l ea n 类型私有数据域表示风扇是否打开(默认值为fa l se).一个名为ra d i u s的d o u b l e类型私有数据域表示风扇的半径(默认值5)。一个名为c o l o r的 st ri n g 类型数据域表示风扇的颜色(默认值为b l u e)这四个数据域的访问器和修改器。一个创建默认风扇的无参构造方法。一个名为t o S t ri n g O 方法返回描述风扇的字符串。如果风扇是打开的,那么该方法在一个组合的字符串中返回风扇的速度、颜色和半径。如果风扇没有打开,该方法就会返回一个由“fa n i
9、 s o ff”和风扇颜色及半径组合成的字符串。画出该类的U M L图。实现这个类。编写一个测试程序,创建两个F a n 对象。将第一个对象设置为最大速度、半 径 1 0、颜色为yel l o w,状态为打开。将第二个对象设置为中等速度、半径为5、颜色为b l u e、状态为关闭。通过调用它们的t o S rt i n g 方法显示这些对象。源程序:public class Fan final static int SLOW=1;final static int MEDIUM=2;final static int FAST=3;private int speed=SLOW;private bo
10、olean on=false;private double radius=5;private String color=blue;public int getSpeed()return speed;public void setSpeed(int speed)this.speed=speed;)public boolean isOn()return on;public void setOn(boolean on)this.on=on;public double getRadius()return radius;public void setRadius(double radius)this.r
11、adius=radius;public String getColor()return color;)public void setColor(String color)this.color=color;)public Fan()public String toStringO(if(on=true)return“风扇速度:,+this.getSpeed()+,nM+风扇半径:,+this.getRadius()+,nH+”风扇颜色:+this.getCok)r()+”n”;elsereturn fan is off+“n+风扇半径:,+this.getRadius()+nn+”风扇颜色:”+t
12、his.getCok)rO+n;)public static void main(String args)(Fan fan=new Fan();fan.setColor(yello);fan.setRadius(IO.O);fan.setSpeed(FAST);fan.setOn(true);Fan fanl=new Fan();fan l.setColor(bule();fanl.setOn(false);fanl.setRadius(5.0);System.out.println(fan.toStringO);System.out.println(fan 1 .toStringO);)运行
13、结果:风扇速度:3风扇半径:10.0风扇颜色:yellofan is off风扇半径:5.0风扇颜色:bule8.9 在一个正n 边形中,所以边的长度都相同,且所有角的度数都相同(即这个多边形是等边等角的)。设计一个名为R eg u l a rP o l yg o n 的类,该类包括:一个名为i n t 型的私有数据域定义多边形的边数,默认值3 o一个名为si d e的d o u b l e型私有数据域存储边的长度,默认值1。一个名为x 的d o u b l e型私有数据域,它定义多边形中点的x 坐标,默认值0。一个名为y 的d o u b l e型私有数据域,它定义多边形中点的y 坐标,默认
14、值0。一个创建带默认值的正多边形的无参构造方法。一个能创建带指定边数和边长度、中心在(0,0)的正多边形的构造方法。一个能创建带指定边数和边长度、中心在(x,y)的正多边形的构造方法。所有数据域的访问器和修改器。一个返回多边形周长的方法g et P eri m et er()。一个返回多边形面积的方法g et A rea。.计算多边形面积的公式是:面积=(n*s*s)/(4*t a n (p/n)画出该类的UML 图。实现这个类。编写一个测试程序,分别使用无参构造方法、R eg u l a rP o l yg o n (6,4)和R eg u l a rP o l yg o n (1 0,4,
15、5.6,7.8)创建三个R eg u l a rP o l yg o n 对象。显示每个对象的周长和面积。源程序:public class RegularPolygon private int n=3;private double side=1;private double x=0;private double y=0;public RegularPolygon()public RegularPolygon(int n,double side)(this.n=n;this.side=side;)public RegularPolygon(int n,double side,double x,d
16、ouble y)(this(n,side);this.x=x;this.y=y;)public int getN()return n;)public void setN(int n)this.n=n;public double getSide()return side;public void setSide(double side)this.side=side;)public double getX()return x;)public void setX(double x)this.x=x;)public double getY()return y;)public void setY(doub
17、le y)this.y=y;)public double getPerimeter()(return n*side;)public double getArea()(return(n*side*side)/(4*Math.tan(Math.PI/n);)public static void main(String args)RegularPolygon regl=new RegularPolygon();System.out.println(reg 1 的周长为:+reg l.getPerimeter()4-n+regl 的面积为:+regl.getArea();RegularPolygon
18、reg2=new RegularPolygon(6,4);System.out.println(Hreg 1 的周长为:+reg2.getPerimeter()+,+,reg2 的面积为:”+reg2.getArea();RegularPolygon reg3=new RegularPolygon(10,4,5.6,7.8);System.out.println(nreg3 的周长为:”+reg3.getPerimeter()+reg3 的面积 为:+reg3.getArea();)运行结果:r e g l的周长为:3.0 r e g l的面积 为:0.43301270189221946r e
19、 g l的周长为:24.0 reg 2 的面积为:41.569219381653056reg 3 的周一长为:40.0 reg 3 的面积 为:123.107341487010158.1 1 为二次方程式ax2+bx+c=0设计一个名为QuadraticEquation的类。这个类包括:代表三个系数的私有数据域a、b、co一个参数为a、b 和 c 的构造方法。a b、c的三个g et 方法。一个名为g et D i sc ri m i n a n t ()的方法返回判别式,b 2-4 a co一个名为g et R o o t l()和 g et R o o t 2()的方法返回登时的两个根:r
20、l=(-b+sqr(b 2-4 a c)/2 a a n d r2=(-b-sqr(b 2-4 a c)/2 a这些方法只有在判别式为非负数时才有用。如果判别式为负,这些方法返回0.画出该类的UML 图。实现这个类。编写一个测试程序,提示用户输入a、b和 c的值,然后显示判别式的结果。如果判别式为正数,显示俩个根;如果判别式为0,显示一个根;否则,显示“Th e equ a t i o n h a s n oro o t s.w(这个方程无根)。参见练习题的3.1 运行示例。源程序:import java.util.Scanner;public class QuadraticEquation
21、private double a;private double b;private double c;public QuadraticEquation(double a,double b,double c)(this.a=a;this.b=b;this.c=c;)public double getA()return a;public double getB()return b;)public double getC()return c;public double getDiscriminant()return(b*b-4*a*c);public double getRoot1()(if(thi
22、s.getDiscriminant()=0)return(-b+Math.pow(this.getDiscriminant(),0.5)/(2*a);elsereturn 0;)public double getRoot2()if(this.getDiscriminant()=0)return(-b-Math.pow(this.getDiscriminant(),0.5)/(2*a);elsereturn 0;)public static void main(String args)Scanner input=new Scanner(System.in);double x,y,z;x=inpu
23、t.nextDouble();y=input.nextDouble();z=input.nextDouble();QuadraticEquation qua=new QuadraticEquation(x,y,z);System.out.printIn(该方程的两个木艮分别为:n+qua.getRoot 1()+”H+qua.getRoot2();)运行结果:1-2 1该方程的两个根分别为:1.0 1.09.3(检验密码)一些网站设定了一些制定密码的规则。编写一个方法,检验一个字符串是否是合法的密码。假设密码规则如下:1、密码必须至少有8个字符2、密码职能包括字母和数字3、密码必须至少有2个数
24、字编写一个程序,提示用户输入密码,如果该密码符合规则就显示“Valid Password,否则显示“Invilid Passwordw 源程序:import java.util.Scanner;public class TestPassword public static int numbersOfcount(String si)(int count=0;for(int i=0;isl.length();i+)(if(Character.isDigit(si.charAt(i)count+;return count;)public static boolean testword(String
25、s2)(boolean b=false;for(int i=0;i=2&s.length()=8&test:word(s)System.out.printIn(Valid Password!”);elseSystem.out.printIn(nInvalid Password!”);public static void main(String args)Scanner input=new Scanner(System.in);System,out.printin(Enter your password*+n(including words and numbers)M;String passwo
26、rd=input.nextLine();testPassword(password);运行结果:Enter your password(including words and numbers)121bcdddValid Password!Enter your password(including words and numbers)12332123Valid Password!9.5 使用下面的方法头编写一个方法,统计每个数字在字符串中出现的次数:public static void main(String args)这个方法统计每个数字在字符串中出现的次数。返回值是10个元素构成的数组,每个
27、元素存储的是一个数字出现的的次数。例如,在执行完in t口 count(“12203AB3)之后,count0为L count 为 L count2为2,count3为2.编写一个测试程序,提示用户输入一个字符串,然后显示每个数字在字符串中出现的次数。源程序:import java.util.Scanner;public class TestNumbersOfCount public static int count(String s)int count=new int 10;for(int i=0;is.length();i+)(i f(Character.isDigit(s.charAt(
28、i)counts.charAt(i)-*0*+;return count;public static void main(String args)Scanner input=new Scanner(System.in);System.out.printIn(Enter a String:);String si=input.nextLine();int count=new int 10;count=count(si);for(int i=0;icount.length;i+)System.out.print(count +i+”=*+count i +n n);)运行结果:Enter a Str
29、ing:19921202abccount0=1 count1=2 count2=3 count3=0 count4=0count5=0 count6=0 count7=0 count8=0 count9=29.12编写一个方法,检测两个单词是否互为变位词。如果在不记顺序的情况下两个单词包含完全相同的字母,则称这两个单词互为变位词(a n a g r a m)0例如,“s i l e n t”和“l i s t e n”互为变位词。该方法的方法头如下所示:P u b l i c s t a t i c b o o l e a n i s An a g r a m (S t r i n g s L
30、 S t r i n g s 2)编写一个测试程序,提示用户输入两个字符串,如果它们是变位词,则显示“a n a g r a m”,否则显示“n o ta n a g r a mw。源程序:import java.util.*;public class TestAnagram public static boolean isAnagram(String slz String s2)(boolean b=true;char ch=si.toCharArray();char chi=s2.toCharArray();if(ch.length=chl.length)for(int i=0;ich.l
31、ength-1;i+)for(int j=0;jchl.length-1;j+)if(chi!=chj)b=false;)return b;)public static void main(String args)Scanner input=new Scanner(System.in);System.out.printIn(Enter a word);String strl=input.next();String str2=input.next();System.out.printIn(isAnagram(strl,str2);)运行结果:please input one word:silen
32、tplease input the other word:isltenAnagram补充题:用一个数组存储不同的对象源程序:public class TestArrays public static void main(String args)Arrays arrays=new Arrays10;for(int i=0;iorrays.length;i+)switch(i%4)case 0:arraysi =new Rengtange();break;case 1:arraysi=new Circle();break;case 2:arraysi =new MyDouble();break;c
33、ase 3:arraysi =new Mylntenger();break;)for(int i=0;iarrays.length;i+)arraysi.shape();abstract class Arrayspublic abstract void shape();)class Rengtange extends Arrayspublic void shape()System.out.println(“这是一个矩形。”);class Circle extends Arrayspublic void shape()(System.out.printIn(“这是一个圆。”);)class My
34、Double extends Arrayspublic void shape()(System.out.printIn(这是一个双精度浮点数。”);)class Mylntenger extends Arrayspublic void shape()(System.out.printIn(这是一个整数。”);)运行结果:这是一个矩形。这是一个圆。这是一个双精度浮点数。这是一个整数。这是一个矩形。这是一个圆。这是一个双精度浮点数。这是一个整数。这是一个矩形。这是一个圆。9.14(求整数的和)编写两个程序,第一个程序给main方法传入个数不定的整数,每个整数都是一个独立的字符串,然后显示它们的和。
35、第二个程序给main方法传入个数不定的整数构成的同一字符串,数字之间被空格分隔,然后显示它们的和。源程序:import java.util.*;public class Exerce9_14 public static int add(String s)(int sum=0;String ch=s.split(n n);int a=new intch.length;for(int i=0;ich.length;i+)(a i =Integer.parseint(chi);sum+=ai;)return sum;public static void main(String args)Scanne
36、r input=new Scanner(System.in);System.out.printIn(nwA一串数字(以空格隔开):”);String strl=input.nextLine();System.out.printin(add(strl);)运行结果:输入一串数字(以空格隔开):1 2 3The total is:6源程序:public class Exercise9_14b public static void main(String args)int sum=0;if(args0=null)System.out.print In(请传个main方法一个参数!n);else St
37、ring s=args0.split(n n);for(int i=0;i Faculty和S ta ff,并调用他们的toString 方法。源程序:public class TestPerson public static void main(String args)Person person=new Person(张三1 1坞城路 1 号”,“13312332233“,”“);Student stu=new Student(李四“,”坞城路2号“,“12344332234”,,Student.FIRST);Employee emp=new Employee(王五,坞城路3号,123456
38、2234“,”办公楼 1 号“,“,4000,new MyData(2012,12f2);Faculty fac=new Faculty(5000z“赵六”,”坞城路4号“,”1234562934”,nz new MyData(2012,1,2),“教授”);Staff sta=new Staff(“张七”,“坞城路4号”,”1234562 934”,”,“办公楼 2 号”,3000,new MyData(2012,1 r 2),“标兵“);System.outprintIn(“类名:n+person.getClass().getName()+“n+person.tostring();Syst
39、em.out.printIn(“类 名:n+stu.getClass().getName()+“n+stu.tostring();System.out.printIn(“类 名:n+emp.getClass().getName()+”H+emp.tostring();System.out.printIn(“类 名:n+fac.getClass().getName()+”n+fac.tostring();System.out.printIn(“类 名:n+sta.getClass().getName()+”H+sta.tostring();)class Personprivate String
40、name,address telephone,email;public Person(String name,String address,String telephone,Stringemail)(this.name=name;this.address=address;this.telephone=telephone;this.email=email;public String getName()return name;public String getAddress()return address;public String getTelephone()return telephone;p
41、ublic String getEmail()return email;public String tostring()(return”人名:*+this.getName();)class Student extends Personprivate String grade;final static String FIRST=fisherman”;final static String SECOND=Msophmoren;final static String THIRD=senior*;final static String FOURTH=n junior;public Student(St
42、ring name,String address,String telephone,String email,String grade)super(name,address,telephone,email);this.grade=grade;public String tostring()(return”人名:n+this.getName();class Employee extends Personprivate String officer;protected double salarity;private MyData data;public String getOfficer()ret
43、urn officer;)public double getSalarity()return salarity;public MyData getData()return data;public Employee(String name,String address,String telephone.String email,String officer,double salarity,MyData data)(super(name,address,telephone,email);this.officer=officer;this.salarity=salarity;this.data=da
44、ta;public String tostring()(return”人名:*+this.getName();)class Faculty extends Employeeprivate MyData datal;private String level;public Faculty(double salarity,String name,String address,String telephone,String email,MyData datalz String level)super(name,address,telephone,emailf levelr salarity,datal
45、);this.level=level;public String tostring()return”人名:n+this.getName();class Staff extends Employeeprivate String call;public Staff(String name,String address,String telephone,Stringemail,String officer,double salarity,MyData data,String call)super(name,address,telephone,email,officer,salarity,data);
46、this.call=call;)public String tostring()(return”人名:n+this.getName();class MyDataprivate int year;private int month;private int day;public MyData(int year,int month,int day)(this.year=year;this.month=month;this.day=day;运行结果:类名:Student人名:李四类名:Employee人名:王五类名:Faculty人名:赵六类名:Staff人名:张七1 3.2编写一个程序,提示用户读取
47、两个整数,然后显示它们的和。程序应该在输入不正确时提示用户再次读取数字Incorrect input and re-enter two integers:w(源程序:import java.util.InputMismatchException;import java.util.Scanner;public class TestAddException public static void main(String args)Scanner input=new Scanner(System.in);System.out.print In(Please Enter two Interger num
48、ber:;boolean flag=true;do tryint a=input.nextlnt();int b=input.nextlnt();System,out.print In(*The result is”+(a+b);flag=false;catch(InputMismatchException ex)System.out.printIn(nIncorrect input and re-enter twoi n t e g e r s;input.nextLine();while(flag);)运行结果:Please Enter two Interger number:1 1.2I
49、ncorrect input and re-enter two integers:1 3The result is 41 3.5 (IllegalTriangleException异常)练习题11.1定义了带三条边的Triangle类。在三角形中,任意两边之和总大于第三边,三角形类Triangle必须遵从这一规则。创建一个IllegalTriangleException类,然后修改Triangle类的构造方法,如果创建的三角形的边违反了这一规则,抛出一个IllegalTriangleException 对象,如下所示:/Construct a triangle with the specified sides*/Public Triangle(double sidel,double side2,double side3)Throws IllegalTriangleException/Implement it)源程序:class 工lleagalTriangleExccption extends Exceptionprivate double si,s2,s3;public IlleagalTriangleException(double slz double s2rdouble s3)super(三边不合法:三角形任意两边之和应大于第三边。“);this.si=s2;this.s
限制150内