본문 바로가기
Java

두 변수의 값 바꾸기 (swap)

by Ms.Pudding 2022. 1. 7.

자바에서는 두 변수의 값을 바꿀 때 임시 저장 변수인 temp변수를 이용하여 값을 바꾼다.

 

아래 코드를 2,3,1로 바꿔보자

public class Temporary {
    public static void main(String[] args){

        int a = 1; 
        int b = 2; 
        int c = 3; 
        int temp = 0;
        //temp 라는 빈공간에 a의 값인 1의 값을 넣는다.
        //이제 a 로 아무거나 할 수 있음 (a = 1상태임 아직, 근데 temp도 1임)
        temp = a;
        a = b; //이때도 b의 값은 b = 2
        b = c; 
        c = temp; //복사해둔 a값을 쓴다. 




        System.out.println(a);
        System.out.println(b);
        System.out.println(c);




    }
}

1.제일 먼저 생각할 부분은 첫번째 변수 값을 temp변수에 넣는 것이다.

그럼 temp = a 즉, temp가 a의 값을 가지고 있다. a는 이제 아무거나 할 수 있다.

 

2.temp에게 값을 준 변수, a에 들어갈 값을 찾아보자 . 2,3,1로 바꾼다고 했으니까 

a에 2의 값을 넣어주면 되겠다 a=2 즉 , a=b

 

3.b의 값은 아직까지 2이다. b를 원하는 변수에 넣어주자 b=c

 

4.이제 마지막 c마무리 부분에 temp를 넣어준다 c = temp 


temp변수와 배열의 관계 ... 

temp변수는 주로 배열에서 많이 사용한다.. 주로 인덱스 값을 찾거나, 배열을 순서대로 정렬할 때 쓴다.

 

1.인덱스 값을 찾는 경우

인덱스 번호가 어디있는지 찾을 때 temp변수를 쓰는 경우이다.

import java.util.ArrayList;

public class Temporary {
    public static void main(String[] args){

        //지금의 경우는 리스트를 내가 만들어서 인덱스가 몇번인지 알수 있음
        //그런데 값만 받고 , 인텍스 몇번인지 모를때, winter가 인덱스값 몇번 값인지 찾아봐야함
     ArrayList<String> aespa = new ArrayList<String>();
        aespa.add("karina");
        aespa.add("winter");
        aespa.add("ningning");
        aespa.add("giselle");

        //1. winter index 값 뽑아내기
        /*
        temp를 안썼을 때
        for(int i = 0;i<aespa.size();i++){
            if(aespa.get(i)=="winter"){
                System.out.println(i);
            }
        }
        */

        //2.temp , 인덱스 번호를 구하는 것이기 때문에 int 로 타입을 정해준다.
        int temp = 0;
        for(int i=0; i<aespa.size();i++){
            if (aespa.get(i) == "winter") {
                temp = i;
            }
        }
        System.out.println(temp);

    }
}

 

2.배열 오름차순으로 정렬 ( 저 -> 고)

가장 많이 쓰는 코드이다. 1,2,5,7 로 배열 정렬하기 ! 

public class MySortIntArray {
    public static void main(String[] args){
        ArrayList<Integer> digits = new ArrayList<Integer>();
        digits.add(2);
        digits.add(5);
        digits.add(1);
        digits.add(7);

        my_sort_int_array(digits);
    }
    public static void my_sort_int_array(ArrayList<Integer> a){
       
        for(int i = 0; i < a.size(); i++){
            int temp = 0;
            //a.get(3)까지 체크가 가능함
            //밑 if문에 a.get(i+1)을 만들어 놓음  만약 i가 3일 때 if문이 계속 돌아가면
            //a.get(4)도 검사해야함 . 범위 밖임 .. 따라서 i+1일 때 나갈 수 있게 해줌 
            if(i+1==a.size()){
                break;
            }
            
            if(a.get(i)>a.get(i+1)){
            temp = a.get(i); 
            a.set(i, a.get(i+1)); 
            a.set(i + 1, temp);
            //i는 항상 i++로 되기 떄문에 위로에서 내려올 떄 1임 , i를 -1로 해줘야 초기화됨
            //a.get(0)상태로 돌아가서 if문 컨디션이 맞을 때까지 계속 돌아준다.
            i=-1;
            }
        }



        for(int i = 0; i < a.size(); i++){
            System.out.print(a.get(i)+" ");
        }



    }
}

참고로 i=-1로 하는 이유는 위에서 for문 조건문에 i++가 있기 때문이다. 

'Java' 카테고리의 다른 글

인스턴스 변수, 클래스 변수 , static변수  (0) 2022.01.07
Arrays.asList()란  (0) 2022.01.07
Try-catch 예외처리  (0) 2022.01.07
Super() 메소드  (0) 2022.01.07
super 키워드  (0) 2022.01.07

댓글