对象比较_价值计算,设计该对象的价值计算方法,材质,颜色,形状,尺寸

package cn.bh.oop;

/**
 * 某游戏中的对象具有属性:
 * 
1. 材质: 木材,钢铁,合金,塑料

2. 颜色: 红 黑 黄 白 红

3. 形状: 方 圆 三角 五边

4. 尺寸: 整数 1 ~ 1000

请设计该对象的价值计算方法。属性的重要性从上到下减小。同一属性的值的重要性从左到右减小。

即: 材质好的不管颜色、尺寸,肯定有更高价值。
其它相同,红色的比黑色价值高
尺寸越小越值钱。
 */
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;


class Game{
private String materia;
public String getMateria() {
return materia;
}
public void setMateria(String materia) {
this.materia = materia;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getShape() {
return shape;
}
public void setShape(String shape) {
this.shape = shape;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
private String color;
private String shape;
private int size;
public Game(String materia,String color,String shape,int size){
this.materia=materia;
this.color=color;
this.shape=shape;
this.size=size;
}
@Override
public String toString(){
return materia+">"+color+">"+shape+">"+size;
}

}
/**
 * 裁判类又称比较器.为了更好控制比较内容用了枚举
 * @author lenovo
 *
 */
class K1 implements Comparator{
public enum materiaEnum {//木材好于钢材好于合金好于塑料
木材,钢铁,合金,塑料;
}
public enum colorEnum {//木材好于钢材好于合金好于塑料
红色,黑色,黄色,白色;
}
public enum  shapeEnum {//木材好于钢材好于合金好于塑料
方,圆,三角,五边;
}

public int compare(Object obj1, Object obj2) {
//只有game类型才有比较的意义,如果不是该类型就让它相等不添加
if ((obj1 instanceof Game)&&(obj2 instanceof Game)) {
Game g1=(Game)obj1;
Game g2=(Game)obj2;


//对于材料的比较
int x1=0;
for (int i = 0; i < materiaEnum.values().length; i++) {
if (g1.getMateria().equals(materiaEnum.values()[i].toString())) {
x1=i;
break;
}
}

int x2=0;
for (int i = 0; i <materiaEnum.values().length; i++) {
if (g2.getMateria().equals(materiaEnum.values()[i].toString())) {
x2=i;
break;
}
}

int comp1=x1-x2;
if (comp1!=0) {
return comp1;
}
else {
//对于颜色的比较
int y1=0;
for (int i = 0; i < colorEnum.values().length; i++) {
if (g1.getColor().equals(colorEnum.values()[i].toString())) {
y1=i;
break;
}
}

int y2=0;
for (int i = 0; i <colorEnum.values().length; i++) {
if (g2.getColor().equals(colorEnum.values()[i].toString())) {
y2=i;
break;
}
}
int comp2=y1-y2;
if (comp2!=0) {
return comp2;
}
//对于形状的比较
else {
int z1=0;
for (int i = 0; i < shapeEnum.values().length; i++) {
if (g1.getShape().equals(shapeEnum.values()[i].toString())) {
z1=i;
break;
}
}

int z2=0;
for (int i = 0; i <shapeEnum.values().length; i++) {
if (g2.getShape().equals(shapeEnum.values()[i].toString())) {
z2=i;
break;
}
}

int comp3=y1-y2;
if (comp3!=0) {
return comp3;
}
//对于大小的比较
return g1.getSize()-g2.getSize();
}
}
}
return 0;
}

}
public class  qq{

@SuppressWarnings("unchecked")
public static void main(String[] args) {
Set gSet=new TreeSet<Game>(new K1());
gSet.add(new Game("木材","白色","三角",1));
gSet.add(new Game("钢铁","红色","三角",2));
gSet.add(new Game("木材","红色","三角",3));
gSet.add(new Game("塑料","红色","三角",3));
System.out.println(gSet);
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值