JAVA 4강_3_★★★Array 주소값 복사★★★, 내림차순 정렬 문제풀기

열라뽕따히·2024년 2월 3일

JAVA

목록 보기
23/79

배열의 주소값 복사

  • 배열의 이름은 heap 메모리 영역의 배열이 만들어진 곳의 시작 주소값을 가지고 있기 때문에 아래의 문장은 다른 배열의 주소값을 복사해주는 명령어임
    ex)
    String[ ] str = new String[sc.nextInt];
    String[ ] strcopy = str;
    즉, 배열의 공유가 이루어지게 됨(공간 공유) ==> 메서드에서도 사용함! ★★★★아주 중요★★★★




============================코드============================

Scanner sc = new Scanner(System.in);
		
		System.out.print("문자열 배열 크기 입력 : ");
		
		String[] str = new String[sc.nextInt()];
		
		//★★★★★★★★★★★★너무너무너무너무너무 중요★★★★★★★★★★★★
		 
		String[] strCopy = str;   
        
        //★★★★★★★★★★★★너무너무너무너무너무 중요★★★★★★★★★★★★
		
		System.out.println("str 배열 주소값 >>> " + str);
		
		System.out.println("strCopy 배열 주소값 >>> " + strCopy);
		
		// strCopy 배열에 초기값을 할당해보자
		for(int i = 0; i < strCopy.length; i++) {
			
			System.out.print((i+1) + "번째 문자열 입력 : ");
			
			strCopy[i] = sc.next();
		}
		
		// str 배열에 있는 데이터를 출력해보자
		for(int i = 0; i < str.length; i++) {
			
			System.out.println("str[" + i + "] >>> " + str[i]);
		}
		
		sc.close();

============================실행============================




**기억해둘 것
-복사된 배열은 heap 메모리 안에 있는 변수명의 주소값을 갖고 있다는 것을 기억하자! 솔직히 아직 감은 안옴..ㅎ





[문제]
키보드로 배열에 정수 데이터를 저장하고 입력된 값을 내림차순으로 정렬해보자!




============================코드============================

Scanner sc = new Scanner(System.in);
		
System.out.print("정수형 배열 크기 입력 : ");
		
		int[] sort = new int[sc.nextInt()];
		
		// 배열에 키보드로 데이터를 저장해보자
		for(int i = 0; i < sort.length; i++) {
			
			System.out.print((i+1) + "번째 정수 입력 : ");
			
			sort[i] = sc.nextInt();
		}
		
		// 내림차순으로 정렬을 해보자 (종이에 꼭 쓰면서 이해해보자!!!)
		int temp = 0;
		
		for(int i = 0; i < sort.length; i++) {
			
			for(int j = i+1; j < sort.length; j++) {
				
				if(sort[j] > sort[i]) {
					
					temp = sort[i];
					
					sort[i] = sort[j];
					
					sort[j] = temp;
				}
			}
		}
		
		// 내림차순으로 정렬한 sort 배열을 화면에 출력하자
		for(int i = 0; i < sort.length; i++) {
			System.out.print(sort[i] + "\t");
		}
		
		sc.close();

============================실행============================





**어려웠던 점
-값의 자리를 변동하기 위해 임의의 temp변수를 만들어 활용하는 것이 바로 생각해내기에 굉장히 어려웠다..
배열의 인덱스 0과 1을 비교해 적은 값을 temp에 넣고 인덱스 0에는 더 큰 값을, 큰 값을 가졌던 인덱스의 자리에는 비교했던 적은 값을 넣는 순환이 머리로는 잘 그려지지 않아 힘들었음..ㅜ
종이에 그려가며 연습하는 것이 필요할듯 하다

0개의 댓글