2012年(106)
分类: Java
2012-05-07 17:43:43
源程序文件:zuoye2.java,类:Circle、TestCircle。
Circle类是对形状圆的抽象,包含一个表示圆半径的private的、int型的实例变量radius,其软件接口如下:
class Circle {
public void setRadius(int r); // 设置圆的半径
public double getArea(); // 计算圆的面积
public double getPerimeter(); // 计算圆的周长
public int getRadius(); // 返回圆的半径
}
注意,圆周率π可以使用常量Math.PI。
TestCircle是一个应该程序起始类,用于测试上面定义的Circle类,代码如下:
class TestCircle {
public static void main(String[] args) {
Circle c1 = newCircle();
c1.setRadius(1);
Circle c2 = newCircle();
c2.setRadius(5);
System.out.println(“r1=”+c1.getRadius());
System.out.println(“a1=”+c1.getArea()+”,p1=”+c1.getPerimeter());
System.out.println(“r2=”+c2.getRadius());
System.out.println(“a2=”+c2.getArea()+”,p2=”+c2.getPerimeter());
}
}
class Circle {
private int radius;
public void setRadius(int r){
radius=r;
}
public double getArea(){
return Math.PI*radius*radius;
}
public double getPerimeter(){
return 2*Math.PI*radius;
}
public int getRadius(){
return radius;
}
}
class TestCircle {
public static void main(String[] args) {
Circle c1 = new Circle();
c1.setRadius(1);
Circle c2 = new Circle();
c2.setRadius(5);
System.out.println("r1="+c1.getRadius());
System.out.println("a1="+c1.getArea()+",p1="+c1.getPerimeter());
System.out.println("r2="+c2.getRadius());
System.out.println("a2="+c2.getArea()+",p2="+c2.getPerimeter());
}
}
编程序。源程序文件:zuoye3.java,类:Zy3、TestZy3
类Zy3有一个表示年份的private的、int型的实例变量year,并包含以下两个方法:
public void set(int y); // 设置实例变量year的值。
public boolean isLeap(); // 报告year表示的年份是否为闰年。
注:(1) 闰年是指能被400整除、或者能被4整除但不能被100整除的年份。(2) 方法的实现可以使用各种类型的表达式,不要使用if等语句。
然后再定义一个应该程序起始类TestZy3测试该类:判断1900、1964、1990以及2000年是否为闰年,并输出判断结果。
源程序文件:zuoye4_1.java,类:Zy4_1。
请定义类Zy4_1,该类的软件接口如下:
class Zy4_1{
public static int method(int x);
public static void main(String[] args);
}
方法method计算如下函数的值:
2x - 1 (x < 0) 3x + 5 (0 <= x <3) x + 1 (3 <= x <5) 5x - 3 (5 <= x <10) 7x +2 (x >= 10) |
f(x) = |
编程序
本题需要创建和定义的源程序文件及类如下:
源程序文件:zuoye4_2.java,类:Zy4_2。
有一个数列2、3、4、6、9、13、19、28…,其各数存在以下递推关系:
tn= tn-1 + tn-3, t1= 2, t2 = 3, t3 = 4
请定义类Zy4_2,该类的软件接口如下:
class Zy4_2{
public static int method1(int x);
public static int method2(int x);
public static void main(String[] args);
}
方法method1和method2分别用迭代和递归方法求上述数列的第n个数。main方法完成对上面两个方法的测试,需要测试的参数包括:1、2、3、4、10。
方法一:
编译代码:
import java.util.Scanner;
class Zy4_1 {
public static int method(int x){
int s;
if(x<0) {
s=2*x-1;}
else{
switch(x){
case0:
case1:
case2:
case3:s=3*x+5;break;
case4:
case5:s=x+1;break;
case6:
case7:
case8:
case9:
case10:s=5*x-3;break;
default:s=7*x+2;
}
}
returns;
}
public static void main(String[] args) {
Scannerscanner=new Scanner(System.in);
System.out.print("x=");
intx = scanner.nextInt();
System.out.println("x("+ x + ")=" + method(x));
}
}
方法二:
编译代码:
import java.util.Scanner;
class Zy4_1 {
public static int method(int x){
int s=0;
if(x<0) {
s=2*x-1;}
if(x>=0&&x<3) {
s=3*x+5;}
if(x>=3&&x<5) {
s=x+1;}
if(x>=5&&x<10) {
s=5*x-3;}
if(x>=10) {
s=7*x+2;}
returns;
}
public static void main(String[] args) {
Scannerscanner=new Scanner(System.in);
System.out.print("x=");
intx = scanner.nextInt();
System.out.println("x("+ x + ")=" + method(x));
}
}
编程序
本题需要创建和定义的源程序文件及类如下:
源程序文件:Point.java,类:Point。
定义一个表示屏幕坐标系上点的Point类。该类有两个int型、变量名分别为x和y的实例变量(访问修饰符为private),用以存储点的坐标值。该类的软件接口如下:
public class Point {
public final static int EAST = 1; // 类的有名常量,用以表示的点移动方向
public final static int SOUTH =2;
public final static int WEST = 3;
public final static int NORTH =4;
public void set(int x, int y); // 设置点的坐标值
public void move(int orientation); // 按指定的方向将当前点移动1个像素
public double distance(int x, int y); // 计算当前点与指定点之间的距离
public boolean equals(Point p); // 测试当前点与参数点p的坐标值是否相等
public int getX(); // 返回当前点的X坐标
public int getY(); // 返回当前点的Y坐标
public String toString(); // 以(x,y)格式返回当前点对象的字符串表示
}
然后在类中编写main方法进行测试。特别地,在实现Point类的move(int orientation)方法和main方法的相关测试代码时,如果涉及点的移动方向,要使用类中定义的EAST、SOUTH等有名常量,不要直接使用1、2等整数。
2.法一;
public classPoint {
private int x,y;
public final static int EAST = 1;
public final static int SOUTH =2;
public final static int WEST = 3;
public final static int NORTH =4;
public void set(int x, int y){
this.x=x;
this.y=y;
}
public void move(int orientation){
switch (orientation){
case EAST: x++;break;
case WEST: x--;break;
case NORTH: y++;break;
case SOUTH: y--;break;
}
}
public double distance(int x, inty){
returnMath.sqrt((this.x-x)*(this.x-x)+(this.y-y)*(this.y-y));
}
public boolean equals(Point p){
if(p.getX()==x&&p.getY()==y)
return true;
else return false;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public String toString(){
return"("+x+","+y+")";
}
public static void main(String args[]){
Point r1=new Point();
r1.set(10,15);
System.out.println("当前点的坐标:"+r1.toString());
r1.move(EAST);
System.out.println("当前点与指定点的距离:"+r1.distance(10,15));
Point r2=new Point();
r2.set(5,6);
System.out.println("当前点与参考点坐标值是否相同:"+r1.equals(r2));
System.out.println("当前点的坐标:"+r1.toString());
法二:public class Point {
private int x,y;
public final static int EAST = 1; // 类的有名常量,用以表示的点移动方向
public final static int SOUTH =2;
public final static int WEST = 3;
public final static int NORTH =4;
public void set(int x, int y){
this.x=x;
this.y=y;
}
// 设置点的坐标值
public void move(int orientation){
if(orientation==EAST)
x++;
if(orientation==SOUTH)
y--;
if(orientation==WEST)
x--;
if(orientation==NORTH)
y++;
}
// 按指定的方向将当前点移动1个像素
public double distance(int x, inty){
returnMath.sqrt((this.x-x)*(this.x-x)+(this.y-y)*(this.y-y));
}
// 计算当前点与指定点之间的距离
public boolean equals(Point p){
if (x==p.getX()&&y==p.getY())
return true;
else return false;
}
// 测试当前点与参数点p的坐标值是否相等
public int getX(){
return x;
}
// 返回当前点的X坐标
public int getY(){
return y;
}
// 返回当前点的Y坐标
public String toString(){
return"("+x+","+y+")";
}
// 以(x,y)格式返回当前点对象的字符串表示
public static void main (Stringargs[]) {
Point o=new Point();
o.set(10,15);
System.out.println(o.toString());
o.move(EAST);
Point p=new Point();
p.set(5,6);
System.out.println("distance= " + o.distance(10,15));
System.out.println(o.equals(p));
System.out.println(o.toString());
}
}
编程序
本题需要创建和定义的源程序文件及类如下:
源程序文件:zuoye8_1.java,类:Zy8_1。
在类Zy8_1中定义方法public static booleanisPalindrome(String str),方法的功能是判断参数字符串是否为“回文”。然后再在类中定义适当的main方法,以便对上述方法进行测试。
说明:当一个字符串顺读和倒读时都一样,则该串就是“回文”。如”level”、”12321”等都是“回文”。
class Zy8{
public static boolean isPalindrome(String str){
StringBuffer buf=new StringBuffer(str);
buf.reverse();
String s1=buf.toString();
if(s1.equals(str))return true;
return false;
}
public static void main(String args[]){
System.out.println("判断结果:"+isPalindrome("level"));
}
}
编程序
本题需要创建和定义的源程序文件及类如下:
源程序文件:zuoye9.java,类R_Circle、TestR_Circle。
实验7第2题通过组合Point类和Circle类定义了一个表示屏幕坐标系上圆区域的R_Circle类。现在请通过扩展Circle类定义一个具有相同软件接口的屏幕坐标系上圆区域类。该类包含一个private的、Point型的实例变量p,表示圆区域的圆心在屏幕坐标系上的位置。其软件接口如下:
class R_Circle extendsCircle {
public R_Circle(); // 构造方法,圆心位置(1, 1),圆半径为1
public R_Circle(Point p, Circle c); // 构造方法
public R_Circle(Circle c, Point p); // 构造方法
public R_Circle(int x, int y, int r ); // 构造方法,圆心位置(x, y),圆半径为r
public boolean equals(R_Circle rc); // 判断两个圆区域是否相等
public void move(int orientation); // 按指定的方向将当前圆区域移动1个像素
public Point getPoint(); // 返回当前圆区域的圆心位置
public int getRadius(); //返回当前圆区域的半径
public String toString(); // 以格式“圆区域(x, y, r)”返回当前圆区域的字符串表示
}
然后编写一个应用程序起始类TestR_Circle测试该类(两个类存放在同一个文件中)。
说明:Point类和Circle类在实验6里已经定义,分别存放在Point.java和zuoye6.java文件中。在做此题时,可以先编译这两个文件,产生Point.class和Circle.class文件。
class R_Circle extends Circle {
privatePoint p;
publicR_Circle(){ //构造方法,圆心位置(1, 1),圆半径为1
super(1);
p=newPoint(1,1);
}
publicR_Circle(Point p, Circle c){ //构造方法
super(c);
this.p=new Point(p);
}
publicR_Circle(Circle c, Point p){ //构造方法
this(p,c);
}
publicR_Circle(int x, int y, int r ){ //构造方法,圆心位置(x, y),圆半径为r
super(r);
p=newPoint(x,y);
}
publicboolean equals(R_Circle rc){ //判断两个圆区域是否相等
if(super.equals(rc)&rc.p.equals(this.p))returntrue;
elsereturn false;
}
publicvoid move(int orientation){ //按指定的方向将当前圆区域移动1个像素
p.move(orientation);
}
publicPoint getPoint(){ //返回当前圆区域的圆心位置
return p;
}
public int getRadius(){ // 返回当前圆区域的半径
return super.getRadius();
}
publicString toString(){ // 以格式“圆区域(x, y, r)”返回当前圆区域的字符串表示
return "圆区域("+p.getX()+","+p.getY()+","+getRadius()+")";
}
}
class TestR_Circle{
public static void main(String[] args){
R_Circle a=new R_Circle();
R_Circle b=new R_Circle(3,3,2);
a.move(1);
System.out.println("判断两个圆区域是否相等:"+a.equals(b));
System.out.println("当前圆区域的圆心位置:"+a.getPoint());
System.out.println("当前圆区域的半径:"+a.getRadius());
System.out.println("以格式“圆区域(x, y, r)”返回当前圆区域的字符串"+a.toString());
}
}