https://www.cs.utexas.edu/~scottm/cs307/javacode/codeSamples/Factorial.java
public class Factorial { public static void main(String[] args) { final int NUM_FACTS = 100; for(int i = 0; i < NUM_FACTS; i++) System.out.println( i + "! is " + factorial(i)); } public static int factorial(int n) { int result = 1; for(int i = 2; i <= n; i++) result *= i; return result; } }
이것도 따라쳐본다.
public class Factorial { public static void main(String[] args) { final int NUM_FACTS = 100; for (int i = 0; i < NUM_FACTS; i++) { System.out.println(i + "! is " + factorial(i);); }; } public static int factorial(int n) { int result = 1; for (int 1 = 2; i <= 2; i++) { result += i; }; return result; } }
오탈자가 없기를 바라면서 cmd 에서 컴파일을 시도해본다.
아니 왜 i 를 1로 쓰는 이상한 짓을 한거지; 기억해두고 반성한다.
고쳐쓰다가 발견한건데 result 도 곱해야하는데 더했다. 이것도 *= 로 고치자.
public class Factorial { public static void main(String[] args) { final int NUM_FACTS = 100; for (int i = 0; i < NUM_FACTS; i++) { System.out.println(i + "! is " + factorial(i);); }; } public static int factorial(int n) { int result = 1; for (int i = 2; i <= 2; i++) { result *= i; }; return result; } }
자 이번에는 어떨까? 컴파일을 시도해본다.
아니 무슨 이번에는 세미콜론이 이상한 곳에 달려있다. 이걸 고쳐본다.
public class Factorial { public static void main(String[] args) { final int NUM_FACTS = 100; for (int i = 0; i < NUM_FACTS; i++) { System.out.println(i + "! is " + factorial(i)); }; } public static int factorial(int n) { int result = 1; for (int i = 2; i <= 2; i++) { result *= i; }; return result; } }
다시 cmd 로 돌려본다.
컴파일도 됐고 작동도 했는데 결과값이 이상하다. 코드를 대충 훑어보니 n 대신에 2 를 적어서 이상한 값이 나온 걸로 보인다. 그 부분을 고쳐본다.
public class Factorial { public static void main(String[] args) { final int NUM_FACTS = 100; for (int i = 0; i < NUM_FACTS; i++) { System.out.println(i + "! is " + factorial(i)); }; } public static int factorial(int n) { int result = 1; for (int i = 2; i <= n; i++) { result *= i; }; return result; } }
드디어 잘 작동하는 것 같다. 하지만 눈에 띄는 점들이 있는데 이 cmd 를 아래로 내려보면,
26번 이후로 값이 0 으로 나온다. 사실 그것뿐만이 아니라 양수랑 음수를 오락가락하기도 한다.
하지만 초기값 자체는 잘 나오는 걸 보니 이건 java int 에서의 오버플로와 관련이 있는 것 같다. 0이 나오는 건 너무 커서 연산 자체가 안 되는 걸까? 잘 모르겠다.
내용 자체에 대한 이해는 문제 없었다. 하지만 이런저런 미스가 많았다. 좀 더 집중하면서 타이핑을 해야겠다. 베끼는 동시에 이해가 제대로 됐다면 이런 문제가 줄어들었을 것 같다.
사람들이 왜 ide 를 쓰는지 알 것 같다는 감상이다.