形式系统

计算机专业教学
posts - 48, comments - 150, trackbacks - 0, articles - 10
  教师博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Java实验三

Posted on 2006-10-23 14:25 形式系统 阅读(511) 评论(4)  编辑 收藏 引用 网摘 所属分类: 编程开发

实验三 接口

 

[实验目的]

1、         Comparable为例,学习接口的使用,了解接口的优势。

2、         学习在Comparable接口的基础上进行排序。

3、         学习和使用自定义接口。

4、         和抽象类进行比较,并且在复杂的情况下选择抽象类或接口作为实现方式。

 

[实验内容]

1、       (必作)定义成绩类封装成绩数据。根据总分实现 Comparable 接口(规范见所附代码)。采用 Collections.sort 方法对其进行排序。构造测试程序测试。

2、       (必作)定义汇率表为一维数组,为一美元兑换各国货币的币值。定义货币类,保持一静态变量对汇率表的引用。派生出具体的货币类,如,人民币,英镑等。通过查表对美元的转换。实现其相互比较,即实现 Comparable 接口(规范见所附代码)。

 

3、       (选作,只需要思考)考虑中国象棋,每种棋子可有不同走法,如 字, 。若采用数组来表示棋子。其内封装变量 x,y 表示在棋盘上的位置。以“相”为例,其规则定义为。行列坐标连续两次同时加 1 (或同减,或 x y 减,或 x y 加连续执行两次)。再如以“马”为例,其规则为:先朝某方向走一步,如 x 1 ,然后走对角线,此时又有两个方向可选择。 x,y 同加 1 x 1 y 1 。因此总体上最多有 8 个方向可以选择。“车”则可朝横向或纵向走一步或多步。所经过的路径上无其它棋子。而“炮”则同样可移动多步,但要求路径上有且只有一个其它棋子。

      综合起来,所有棋子的走步规则均为纵向、横向、对角线的走向组合。另外还要考虑一次走一步或多步、棋盘的区域(如兵、士)限制、路径上是否有无其它棋子阻隔(如 需要且只需要一个棋子阻隔)等因素的制约。就可以实现游戏规则的验证。

可考虑两种方式实现:( 1 )接口方式,如,自定义 Moveable 接口,表示可移动的对象,接口中定义方法 move 方法。在不同的实现类中根据传入的参数实现其移动的检验,若不合法,抛出异常,若合法,则执行移动。( 2 )抽象类方式,定义抽象类棋子,派生出“车”、“马”、“相”等具体类,在派生类中重写其移动方法。考虑本题采用抽象类和接口哪个更好?

 

4、       (选作,只需要思考)考虑军棋,其中部分棋子是可比较的,如 军长 师长 等。有些是不可以比较的,如“军旗”,“地雷”,“炸弹”,有些是可移动的,有些是不可移动的。有些是在特殊情况下可移动的,如“军旗”在“工兵”的占领下是可移动的。仿照上题的思路,考虑本题采用抽象类和接口哪个好?能否同时实现 Comparable (系统定义)接口和 Moveable (自定义)接口。

 

实验报告要求: 1 题由于涉及到排序需要提供主程序及测试结果数据。第 2 题只需写货币基类及人民币派生类的定义,不需主程序,但需要简单的测试用例。 4 5 由于工作量太大,不建议去实施。但建议大家都去思考。实验报告只写必作的内容。

附:

// 成绩类

public class Score implements Comparable{

       int code;

       int English;      // 英语成绩

       int Math;         // 数学成绩

       int History;      // 历史成绩

       public int compareTo(Object obj){

           // 此处需要提供实现 ;

       }}

 

// 货币

    public class Currence {

       public static Map<String,Double> convert;  // 汇率表,

public String type;      // 货币类型

       public double value;     // 币值

      

       // 根据需要添加相应的方法

    }

    public class RMB extendsCurrenceimplements Comparable {

       // 此处需要提供实现

}

Feedback

# re: Java实验三  回复  更多评论   

2006-10-24 11:40 by 151
import java.util.*;

public class M1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Score> s=new ArrayList<Score>();
Score s1=new Score(1,70,80,90);
Score s2=new Score(2,80,80,60);
Score s3=new Score(3,50,60,70);

s.add(s1);
s.add(s2);
s.add(s3);

Collections.sort(s);

for(int i=0;i<s.size();i++){
System.out.println(s.get(i).code);
}
}

}

# re: Java实验三  回复  更多评论   

2006-10-24 11:41 by 151
public class Score implements Comparable{
public int code;
int English; // 英语成绩
int Math; // 数学成绩
int History; // 历史成绩
int a;

public Score(int code,int e,int m,int h){
this.code=code;
this.English=e;
this.Math=m;
this.History=h;
}

public int compareTo(Object obj){
Score s=(Score)obj;
int t1,t2;
t1=this.English+this.Math+this.History;
t2=s.English+s.Math+s.History;
if(t1<t2)
return 1;
else if(t1==t2)
return 0;
else
return -1;
}
}

# re: Java实验三  回复  更多评论   

2006-10-31 10:53 by 学生
输出结果
1
2
3

# re: Java实验三  回复  更多评论   

2006-11-01 21:47 by A student.
第三个小题,老师可不可以给个例子学习一下。

只有注册用户登录后才能发表评论。