2 oiu1010110 oiu1010110 于 2016.04.18 18:16 提问

Java 分数比较compareTo(Object obj)方法

要求:
1. 不能用分子除与分母的结果来比较大小,这样不精确。
2.分母为零分子为正数时分数为无穷大,两个无穷大的数相等,无穷大的数大于一切其他数;分母为零分子为负数时分数为负无穷大,两个负无穷大的数相等,负无穷小于一切其他数。
3. 正无穷大大于负无穷大,两个负无穷大的分数一样大,两个正无穷大的分数一样大。谢谢指导。

2个回答

caozhy
caozhy   Ds   Rxr 2016.04.18 19:45
 假设你的分数类
class fraction implements Comparable
{
public int x; //分母
public int y; //分子
public int compareTo(Object obj)
{
    fraction f2 = (fraction)f2;
        if (y < 0) { y = -y; x = -x; }
        if (f2.y < 0) { f2.y = - f2.y; f2.x = - f2.x; }
        int x1 = x * f2.y;
        int x2 = f2.x * y;
        return x1.compareTo(x2);
}
}

caozhy
caozhy 回复Koreyou: 没必要。如果x1==x2,x1.compareTo(x2)也返回0
一年多之前 回复
oiu1010110
oiu1010110 回复caozhy:if(x1==x2) return 0;这样可不可以呢?
一年多之前 回复
caozhy
caozhy 回复Koreyou: 一样的,我假设你定义了fraction类。如果你用的是string,那么用split分出分子分母,然后后面的代码一样
一年多之前 回复
oiu1010110
oiu1010110 还有compareTo(x2)的参数必须要是String类型才可以啊……
一年多之前 回复
oiu1010110
oiu1010110 还有compareTo(x2)的参数必须要是String类型才可以啊……
一年多之前 回复
caozhy
caozhy 你的题目有问题,1/0当然小于2/0。证明2/0-1/0=1/0,1/0>0。所以2/0>1/0。你强行要让“两个负无穷大的分数一样大”,那也不难,加上一个判断分母的步骤。不过这么比较是错的。
一年多之前 回复
oiu1010110
oiu1010110 if (y < 0) { y = -y; x = -x; } if (f2.y < 0) { f2.y = - f2.y; f2.x = - f2.x; }这两句是为什么呢?为什么要变成正数
一年多之前 回复
oiu1010110
oiu1010110 if (y < 0) { y = -y; x = -x; } if (f2.y < 0) { f2.y = - f2.y; f2.x = - f2.x; }这两句是为什么呢?为什么要变成正数
一年多之前 回复
caozhy
caozhy 回复Koreyou: 已经考虑了
一年多之前 回复
oiu1010110
oiu1010110 无穷的情况怎么考虑呢
一年多之前 回复
oiu1010110
oiu1010110 无穷的情况怎么考虑呢
一年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.04.18 18:22

java中compareTo和compare方法之比较
java中compareTo和compare方法之比较
java中compareTo和compare方法之比较
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!