Java

3주차 과제: 연산자(feedback, 피드백)

향찡 2020. 11. 29. 00:07

(백기선 라이브 스터디)

 

💡 다음 주부터

  •  과제 제출
  •  테스트 코드를 무조건 작성해야 됨(TDD까진 아니어도 괜찮다)
  •  1시까지 과제 제출

 

1. switch operator는 switch문이 아니다.

 

2. &&나 ||   그리고  &와 | 차이점

&&나 ||는 한쪽을 만족하면 뒤에꺼를 확인하지 않는다.

&와 | 는 뒤에 꺼도 확인한다.

public class Main {

    public static void main(String[] args) {

        int i = 0;
        int j = 0;

        if (i++ == 0 || j++ == 0) {
            System.out.println("Hello");
        }

        System.out.println(i); // 1
        System.out.println(j); // 0
    }
}
public class Main {

    public static void main(String[] args) {

        int i = 0;
        int j = 0;

        if (i++ == 0 | j++ == 0) {
            System.out.println("Hello");
        }

        System.out.println(i); // 1
        System.out.println(j); // 1
    }
}

 

3. 중간값 구하기

public class Main {

    public static void main(String[] args) {

        // 중간값 구하기

        int start = 2_100_100_000;
        int end = 2_100_100_000;

        int mid = (start + end) / 2; // 오버플로우 가능성이 있다.
        System.out.println(mid);

        //방법 1
        int mid2 = start + (end - start) / 2;
        System.out.println(mid2);

        //방법 2 - 음수에서는 안된다.
        int mid3 =  (start + end) >>> 1;
        System.out.println(mid3);
    }
}

 

4. 문제) numbers라는 int형 배열이 있다. 해당 배열에 들어있는 숫자들은 오직 한 숫자를 제외하고는 모두 두 번씩 들어 있다. 오직 한 번만 등장하는 숫자를 찾는 코드를 작성하라.

TIP) intelliJ에서  itar / iter로 for문 자동완성 가능하다.

public class Main {

    public static void main(String[] args) {

        Main main = new Main();
        
        int result = main.solution(new int[] {5, 2, 4, 1, 2, 4, 5});
        System.out.println(result);
    }

    // TODO : XOR를 이용
    // 5 ^ 0 = 5
    // 5 ^ 5 = 0
    // TODO
    // 101   101
    // 000   101
    // ---   ---
    // 101   000
    // 5 ^ 1 ^ 5 => ( 5 ^ 5) ^ 1 = 0 ^ 1 = 1
    private int solution(int[] numbers) {
    
        int result = 0;
        
        for( int number : numbers) {
            result ^= number;
        }
        
        return result;
    }
}