java 面向对象简单案例*2(Circle、Point)

78 篇文章 4 订阅
2 篇文章 0 订阅

1.定义一个表示圆的名为Circle的类,其软件接口如下:

class Circle {
   public void setRadius(int r);      // 设置圆的半径
   public int getArea();             // 计算圆的面积
   public int getPerimeter();        // 计算圆的周长
   public int getRadius();           // 返回圆的半径
}
然后编写一个应用程序起始类测试该类。

接口实现:

package Test;

public class Circle {
	/*
	1.定义一个表示圆的名为Circle的类,其软件接口如下:
	class Circle {
	   public void setRadius(int r);      // 设置圆的半径
	   public int getArea();             // 计算圆的面积
	   public int getPerimeter();        // 计算圆的周长
	   public int getRadius();           // 返回圆的半径
	}
	然后编写一个应用程序起始类测试该类。
	 *
	 */
	 public static int r,s,c;
	 public void setRadius(int r){// 设置圆的半径
	  this.r=r;
	 }
	 public int getArea(){// 计算圆的面积
	  return (int) (Math.PI*r*r);
	  
	 }
	 public int getPerimeter(){// 计算圆的周长
	  return (int) (2*Math.PI*r);
	 }
	 
	 public int getRadius(){// 返回圆的半径
	  return r;
	 }
}

测试类:

package Test;

public class CircleTest {

	/**
	  * @param args
	  */
	 public static void main(String[] args) {
	  Circle Cir=new Circle();//new一个圆的对象
	  Cir.setRadius(5);//设置圆的半径为5
	  System.out.println("圆的半径为:"+Cir.getRadius());
	  System.out.println("圆的面积为:"+Cir.getArea());
	  System.out.println("圆的周长为:"+Cir.getPerimeter());
	 }
}

2.定义一个Point类。该类用两个int型变量表示屏幕坐标系上的一个点,其软件接口如下:

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 Point(int x,int y);            // 构造方法
   public Point();                       // 构造方法
   public Point(Point p);                // 构造方法
   public void move(int x, int y);       // 当前点移至指定位置
   public void move(int way); // 按指定的方向将当前点移动1个像素
   public double distance(int x, int y); // 计算两个点之间的距离
   public double distance(Point p);      // 计算两个点之间的距离
   public int getX();                    // 返回当前点的X坐标
   public int getY();             // 返回当前点的Y坐标
   public String toString();      // 以格式(x, y)返回当前点的字符串表示
}

然后编写一个应用程序起始类测试该类。

接口实现:

package Test;
/*
2.定义一个Point类。该类用两个int型变量表示屏幕坐标系上的一个点,其软件接口如下:

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 Point(int x,int y);            // 构造方法
   public Point();                       // 构造方法
   public Point(Point p);                // 构造方法
   public void move(int x, int y);       // 当前点移至指定位置
   public void move(int way); // 按指定的方向将当前点移动1个像素
   public double distance(int x, int y); // 计算两个点之间的距离
   public double distance(Point p);      // 计算两个点之间的距离
   public int getX();                    // 返回当前点的X坐标
   public int getY();             // 返回当前点的Y坐标
   public String toString();      // 以格式(x, y)返回当前点的字符串表示
}
  然后编写一个应用程序起始类测试该类。
*/
public class Point {
  public 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 Point(int x,int y){             // 构造方法
	  this.x=x;
	  this.y=y;
  };
  public Point(){                        // 构造方法
	  /*this.x=0;
	  this.y=0;*/
  };
  public Point(Point p){};                 // 构造方法
  public void move(int x, int y){       // 当前点移至指定坐标位置(第一个点)
     this.x=x;
     this.y=y;
  };
  public void move(int way){     // 按指定的方向将当前点移动1个像素(第二个点)
     if(way==EAST){//向东移动一单位
      this.x+=1;
     }else if(way==SOUTH){
      this.y+=1;
     }else if(way==WEST){
      this.x-=1;
     }else if(way==NORTH){
      this.y-=1;
     }
  };
  public double distance(int x, int y){  // 计算两个点之间的距离
   return Math.sqrt((this.x-x)*(this.x-x)+(this.y-y)*(this.y-y));
  };
  public double distance(Point p){       // 计算两个点之间的距离
   return Math.sqrt((0-x)*(0-x)+(0-y)*(0-y));
  };
  public int getX(){                     // 返回当前点的X坐标
     return this.x;
  };
  public int getY(){                // 返回当前点的Y坐标
     return this.y;
  }
  public String toString() {        // 以格式(x, y)返回当前点的字符串表示
	  //return "Point ["+this.x+","+this.y + "]";
	  return " [" + this.x+","+this.y+ "]";
  };
  
}

测试类:

package Test;

import java.util.Scanner;

public class PointTest {

	 /**
	  * @param args
	  */
	 public static void main(String[] args) {
		 
		 EDen();

	 }

	private static void EDen() {
		// TODO Auto-generated method stub
		 System.out.println("            歡迎使用坐標間距計算程序,本程序適用於計算兩個坐標的間距!");
		 System.out.println("===========================================================================");
		 System.out.println("     本程序主要有兩種計算方式:");
		 System.out.println("                   方式一:位移方式,即輸入第一個點的坐標後通過想東南西北四個方向位移方式確定第二個點的坐標 ,計算間距;");
		 System.out.println("                   方式二:坐標方式,即輸入第一個點的坐標後直接輸入第二個點的坐標 ,計算間距。");
	  System.out.println("请输入第一个点的坐标 x y的值:");
	  Scanner s=new Scanner(System.in);
	  int x=s.nextInt();
	  int y=s.nextInt();
	  Point point01 =new Point(x,y);
	  Point point02 =new Point();
	  //方式選擇:方式一:位移;方式二:輸入坐標
	  System.out.println("請選擇方式:(位移方式請輸入W,坐標方式請輸入Z!)");
	  String strA=s.next();String strW="W";String strZ="Z";String strN="N";String str1="1";String str2="2";String str3="3";String str4="4";
	  if(strA.equals(strW)){//=============================================位移方式
		  System.out.println("請輸入位移方向:(1,2,3,4分別代表東西南北,如:輸入1則代表指令向東移動一個單位,結束位移請輸入:N)");
		  String stri=s.next();
		  while(!stri.equals(strN)){
			  if(stri.equals(str1)){//向東移
				  point02.move(1);//向东移动一个单位
			  }else if(stri.equals(str2)){//向南移
				  point02.move(2);//向南移动一个单位
			  }else if(stri.equals(str3)){//向西移
				  point02.move(3);//向西移动一个单位
			  }else if(stri.equals(str4)){//向北移
				  point02.move(4);//向北移动一个单位
			  }
			  stri=s.next();
		  }
		  System.out.println("位移結束!");
		  System.out.println("两点间距为:"+point02.distance(point01.getX(),point01.getY()));
	  }else if(strA.equals(strZ)){//==============================================================定点方式
		  System.out.println("===================================================================");
		  System.out.println("请再输入一个点(第二個點)的坐标,用以计算间距:");
		  int a=s.nextInt();int b=s.nextInt();
		  Point point03=new Point(a,b);
		  System.out.println("第一個點和第二個點两点间距为:"+point03.distance(point01.getX(),point01.getY()));
	  }else{
		  System.out.println("輸入無效,請重新選擇!");
		  //
	  }
	}
}

错误更正:

经验证,上述代码特别是 Point 存在致命bug:

  1. 首先,在选用位移方式的时候初始坐标并不是从第一个点复制而来,而是默认的(0,0),这将直接导致程序运行得出错误的结果。
  2. 其次,在进行个别类中同类的方法进行调用时代码不够简洁,一看就是小白。
  3. 再次,对变量的作用域的理解还有很大的欠缺。等等
    下面以Point类为主进行更正:
public class Point {
  public 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 Point(int x,int y){             // 构造方法
   this.x=x;
   this.y=y;
  };
  public Point(){                        // 构造方法
   this(0,0);
  };
  public Point(Point p){
   this(p.x,p.y);
  };                 // 构造方法
  public void move(int x, int y){       // 当前点移至指定坐标位置(第一个点)
     this.x=x;
     this.y=y;
  };
  public void move(int way){     // 按指定的方向将当前点移动1个像素(第二个点)
      if(way==EAST){//向东移动一单位
          x+=1;
         }else if(way==NORTH){
          y+=1;
         }else if(way==WEST){
          x-=1;
         }else if(way==SOUTH){
          y-=1;
         }
      };
  public double distance(int x, int y){  // 计算两个点之间的距离
   return Math.sqrt((this.x-x)*(this.x-x)+(this.y-y)*(this.y-y));
  };
  public double distance(Point p){       // 计算两个点之间的距离
   return distance(p.x,p.y);
  };
  public int getX(){                     // 返回当前点的X坐标
     return x;
  };
  public int getY(){                // 返回当前点的Y坐标
     return y;
  }
  public String toString() {        // 以格式(x, y)返回当前点的字符串表示
   //return "Point ["+this.x+","+this.y + "]";
   return " [" + x+","+y+ "]";
  };
  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值