Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 4153495

Browse files
add gcd
1 parent 6a017ad commit 4153495

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

‎src/main/scala/org/codecraftlabs/training/Rational.scala

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package org.codecraftlabs.training
22

3+
import scala.annotation.tailrec
4+
35
class Rational (n: Int, d: Int) {
46
require(d != 0)
57

6-
val numer: Int = n
7-
val denom: Int = d
8+
private val g = gcd (n.abs, d.abs)
9+
val numer: Int = n / g
10+
val denom: Int = d / g
811

912
def this (n: Int) = this(n, 1)
1013

@@ -17,4 +20,9 @@ class Rational (n: Int, d: Int) {
1720
def lessThan(that: Rational): Boolean = {
1821
this.numer * that.denom < that.numer * this.denom
1922
}
23+
24+
@tailrec
25+
private def gcd(a: Int, b: Int): Int = {
26+
if (b == 0) a else gcd (b, a % b)
27+
}
2028
}

‎src/test/scala/org/codecraftlabs/training/RationalSpec.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,11 @@ class RationalSpec extends AnyFlatSpec with Matchers {
2626
rational.numer shouldEqual 2
2727
rational.denom shouldEqual 1
2828
}
29+
30+
"Initial value 3/6" should "be converted to 1/2" in {
31+
val rational = new Rational(3, 6)
32+
33+
rational.numer shouldEqual 1
34+
rational.denom shouldEqual 2
35+
}
2936
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /