아래의 소스 코드는 Groovy로도 실행되는 Java 용 소스파일 TestWhileLoop.java를 Groovy 용으로 Groovy 언어 답게 고친 것이다.

소스 파일명: testWhile.groovy

  1. /*
  2.  *  Filename: testWhile.groovy
  3.  *
  4.  *  Purpose:  Example using the while loop syntax
  5.  *                while ....
  6.  *
  7.  *  Execute: groovy testWhile.groovy -200 300
  8.  *
  9.  */
  10. // java.lang.Math 클래스를 명시적으로 import하는 구문이 없어도
  11. // Groovy는 이 클래스를 자동으로 import한다.
  12. // 사용법 표시
  13. def printUsage() {
  14.     println 'Using: groovy testWhile.groovy [integer1] [integer2]'
  15.     println 'This finds the greatest common divisor of the given two integers.'
  16. }
  17. if (args.length != 2) {
  18.     printUsage()
  19.     System.exit(1)
  20. }
  21. def val1 = args[0].toLong()
  22. def val2 = args[1].toLong()
  23. def a, b, q, r, gcd
  24. ////////////////////////////////////////////////
  25. // 명령행 인자의 두 스트링을 가져와서
  26. // 긴정수(long) 타입으로 변환하여
  27. // 변수 val1과 val2에 저장한다.
  28. a = val1.abs()
  29. b = val2.abs()
  30. // a는 |val1|, |val2| 중 큰 값
  31. if (a < b) {
  32.     a = val2.abs()
  33.     b = val1.abs()
  34. }
  35. if (b == 0L) {
  36.     println "GCD($val1, $val2) = $a"
  37.     System.exit(0)
  38. }
  39. ////////////////////////////////////////
  40. // Euclidean 알고리즘의 시작
  41. //
  42. // a를 b로 나누어 몫은 q에, 나머지는 r에 저장
  43. q = a / b
  44. r = a % b
  45. ////////////////////////////////////////
  46. // Euclidean 알고리즘의 반복 (나머지 r이 0이 될 때 까지)
  47. while (r != 0L) {
  48.     a = b
  49.     b = r
  50.     q = a / b
  51.     r = a % b
  52. }
  53. // 나머지가 0이면 그 때 나눈 수(제수) b가 최대공약수(GCD)이다.
  54. gcd = b
  55. // 최대공약수(GCD)를 출력한다.
  56. println "GCD($val1, $val2) = $gcd"


실행> groovy testWhile.groovy
Using: groovy testWhile.groovy [integer1] [integer2]
This finds the greatest common divisor of the given two integers.

실행> groovy testWhile.groovy -50, 200
GCD(-50, 200) = 50

실행> groovy testWhile.groovy 50, -30
GCD(50, -30) = 10

실행> groovy testWhile.groovy 0. 30
GCD(0, 30) = 30




Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

Posted by Scripter
,