처음 국비 학원에 등록할 때만 해도 나는 6개월 내내 JAVA 언어만 배우는 줄 알았다. 굉장히 단순한 접근..

 

난 아직 학원에서 배운 JAVA 지식을 핥아보지도 못한 느낌인데...

순식간에 너무 많은 과목이 진행돼버렸다.

 

집에 와서 복습을 할라치면 뭐부터 공부하고 손을 대야 하는지 뒤죽박죽

그래서 오늘은 다 까먹어가는 java 기초적인 예제를 좀 해보자 해서 배열 합계를 구하는 메서드를 써봤는데,

이것도 거의 30분이 넘게 걸렸다.

그 결과물...

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;
 
class Test {
 
    static long sum(int[] a) {
        long result = 0;
        for (int i = 0; i < a.length; i++) {
            result += a[i];
        }
        return result;
    }
 
    public static void main(String[] args) {
        int[] a = new int[3];
        Scanner scan = new Scanner(System.in);
        System.out.println("정수 입력 3개 :");
        a[0= scan.nextInt();
        a[1= scan.nextInt();
        a[2= scan.nextInt();
        scan.close();
        System.out.println("정수의 합 : " + sum(a));
    }
}
cs

JAVA의 정석 기초편 연습문제 6-16

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Exercise6_16 {
 
    public static void change(String str) {
        str += "456";
    }
    
 
    public static void main(String[] args) {
        
        String str = "ABC123";
        System.out.println(str);
        
        change(str); // 메서드 실행-종료 후 메모리에서 지워짐.
        System.out.println(str); // 실행결과 : ABC123
 
        System.out.println(change(str)); // change메서드에서 실행 된 값을 호출하여 출력 : ABC123456
    }
}
cs

 

 

실행순서

1. main메서드 안에서 String str = "ABC123"; 생성.

2. change메서드 매개변수로 메인메서드의 str이 넘어감.

3. change메서드 구현부에서 str = "ABC123456" 으로 새로 생성 되고 주소값 변경 됨.

4. change메서드 종료 후, 메서드에서 작업하던 내용들이 메모리에서 제거 됨.

5. main메서드에서 실행된 sysout(str)에서는 main안의 기존 변수였던 str의 주소값 ABC123이 출력 됨.

 

change 메서드가 사라지기 전에 출력하고 싶으면! sysout(change(str)); 로 작성한다.

sysout메서드가 change메서드를 호출하면서 change는 대기상태가 되고, sysout에서 change의 수행값을 출력한 뒤 main을 제외하고 모두 메모리에서 제거된다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class isNumberTest {
 
    static boolean isNumber(String str) {
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (ch > '9' || ch < '0') {
                return false;
            }
        }
        return true;
    }
 
    public static void main(String[] args) {
        String t = "1034d3";
        if (isNumber(t) == false) {
            System.out.println("숫자로만 이루어지지 않았습니다.");
        } else {
            System.out.println("숫자로만 이루어져 있습니다.");
        }
    }
}
cs

피곤에 쩔어버린 머리로 이리쓰고 저리쓰고 하다보니 작성된 메서드..

사실 완벽하게 이해된 코드가 아니다..

if (ch > '9' || ch < '0') 에서

문자를 어떻게 크기 비교했는지 그게 이해가 잘 안되는 중..

문자랑 문자랑 비교?

아스키코드 값이랑 비교해서 이루어지는건가???

일단 졸린 눈 좀 붙이고 다시 생각해봐야겠다..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Exercise6_21 {
 
    static int abs(int value) {
        int res = value > 0 ? value : -(value);
        return res;
    }
 
    public static void main(String[] args) {
        int value = 5;
        System.out.println(value + "의 절대값 : " + abs(value)); // 5
        value = -25;
        System.out.println(value + "의 절대값 : " + abs(value)); // 25
    }
}
cs

 

남들이 쉬운건 나도 쉽다.

그런데 쉽게 풀고 나면 뭔가 불안하다.

이게 맞나? 답은 잘 나오는데.... 왜 쉽게 풀렸지?

코딩도 자신감인걸까...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Exercise6_20 {
 
//    주어진 int형 배열의 값 중에서 제일 큰 값을 반환한다.
//    만약 주어진 배열이 null이거나 크기가 0인 경우, -999999를 반환한다.
 
    static int max(int[] arr) {
        int res = -999999;
        if (arr == null || arr.length == 0) {
            return res;
        } else {
            for (int i = 0; i < arr.length - 1; i++) {
                res = arr[i] < arr[i + 1] ? arr[i + 1] : arr[i];
                for (int j = 0; j < arr.length - 1; j++) {
                    if (res < arr[j]) {
                        res = arr[j];
                    } else {
                        continue;
                    }
                }
            }
            return res;
        }
    }
 
    public static void main(String[] args) {
        int[] data = {3,2,9,4,7};
        System.out.println(java.util.Arrays.toString(data));
        System.out.println("최대값 : " + max(data)); // 최대값 : 9
        System.out.println("최대값 : " + max(null)); // 최대값 : -999999
        System.out.println("최대값 : " + max(new int[]{})); // 최대값 : -999999
    }
}
cs
 

 

 

고수들의 정답은 매우 간단할 것 같은데, 내가 쓰고나니 너무 지저분하다.

느낌적인 느낌으로 메서드 안에 분명 불필요한 코드가 있을 것만 같다.

노트에 순서를 적어가며 짠 건데, 사실 노트에 끄적인대로 하니 잘 안돼서

이리저리 뭘 더 넣어보다가 저 코드가 되었다.

학원 강사님이 말씀하시기를

아예 실행조차 안되거나 엉뚱한 값을 내놓는거보다는

보기에 더러워도 일단 실행이 되고 값이 올바르게 나오는 것이 훨씬 낫다고 하셨다.

(나같이 코드 쓰는 사람에게 이 말이 얼마나 위로가 되는지 모르겠다...ㅠㅠ)

일단 실행이 되는 지저분한 코드는 해두었으니

이걸 어떻게 이쁘게 다듬어야할지 고민해봐야겠다.