Java重点编程题

来源:互联网 发布:淘宝图片清理工具3.0 编辑:程序博客网 时间:2024/05/23 02:00

源程序文件: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)      =

     
                  
main方法完成对method方法的测试,需要测试的参数包括:-1、0、1、3、5、7、10。这些测试数据在程序运行时从键盘输入。

 

 

编程序

本题需要创建和定义的源程序文件及类如下:

源程序文件: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());

        }

}

 

原创粉丝点击