2

我需要编写一个 java 类的“分数”。

这个类应该能够理解基本的算术运算,如+、-、*、/。我发现了很多“Fraction”类并理解了它们,但都使用“ f1.add(f2); ”之类的方法(f1、f2 是 Fraction 的对象,例如:

f1 = new Fraction(1,5);
f2 = new Fraction(2,5);

我需要的是像整数操作一样的直接操作,例如:

**f1 = f1 + f2;**

代替

f1.add(f2);
4

4 回答 4

6

你不能:java 不允许重载运算符。

于 2013-06-04T15:34:57.483 回答
1

这在标准 Java 中是不可能的。

正如您在评论中明确询问的那样:我建议使用Scala(与Groovy相比),因为它是类型安全的(还有许多其他优点),而且它也是一种 JVM 语言:

class Fraction(val n: Int, val d: Int) {
  override def toString = s"$n/$d"

  def +(that: Fraction) = new Fraction(this.n + that.n, this.d)
}

object FractionDemo extends App {
  val f1 = new Fraction(1, 4)
  val f2 = new Fraction(2, 4)
  val f3 = f1 + f2
  println(s"$f1 + $f2 = $f3")
}

输出是

1/4 + 2/4 = 3/4

我知道+没有正确实现,这只是一个小例子。

如果您对Scala的数值库感兴趣,请查看spire,它已经有一个Fractional类。

于 2013-06-04T16:06:50.303 回答
0

正如永恒所说,Java 不支持运算符重载。你可以看看Groovy 。它是一种类似 Java 的基于 JVM 的语言,它支持运算符重载。

于 2013-06-04T15:40:26.833 回答
0

如果您对支持运算符重载的基于 JVM 的语言感兴趣,可以尝试 Groovy。请参阅此处的一些讨论: Java 中的运算符重载

于 2013-06-04T15:41:27.870 回答