생각하는 감쟈

[JAVA] 참조 타입, 배열, 버블 정렬 본문

Language/Java

[JAVA] 참조 타입, 배열, 버블 정렬

생각하는 감쟈🥔 2024. 3. 13. 12:39

기본타임 : byte, short, chat, int, long, float, double, boolean

변수에 값 자체를 저장

 

참조타입 : 객체의 번지를 참조하는 타입

 

메모리 영역(클래스 영역)

-메소드 : 정적필드, 상수, 생성자, 메소드 등 코드 등을 분류 저장

 

힙영역

-객체와 배열리 생성된는 영역

 

JVM 스택 영역

-메소드가 호출되면 프레임이 추가 / 메소드가 종료되면 프레임이 제가됨

 

stack에 string이 바로 저장이 안됨-주소값만 저장됨

heap영역에  값이 저장됨 

 

	 	public void method1() {
		//string는 heap에 저장됨  stack에는 주소만 있음
		
		String a1 = "자바";
		String a2 = "자바";
		String a3 = "오라클";
		String a4 = new String ("오라클"); // heap에 새로운 개체가 생김
		String a5 = new String ("오라클");
		
		System.out.println(a1==a2); //stack이 같냐는 뜻 (값이 아닌 주소값이 같나 비교)
		System.out.println(a2==a3);
		System.out.println(a3==a4); //값('오라클')은 같지만 주소값이 다르다 - new 새로운 개체가 만들어져서
		System.out.println(a4==a5);
		System.out.println(a4.equals(a5));//==으로는 값을 비교 할수 없음 비교할떄 equals를 사용
		

	}

 

 


 

배열
	//int 변수 5개 만들어서 선언 및 저장 하기
		
		int a1 = 1;
		int a2 = 2;
		int a3 = 3;
		int a4 = 4;
		int a5 = 5;
		//변수는 하나의 값만 저장함
		
		int sum = a1+a2+a3+a4+a5;
		
		System.out.println(sum);
int[] arr = new int[5];
		//arr이라는 배열을 만들겠다 = new를입력해 객체를 만들다.
		
		arr[0] = 1;
		arr[1] = 2;
		arr[2] = 3;
		arr[3] = 4;
		arr[4] = 5;
		
		int sum = 0;
		
		배열의 주소는 0부터 ~
		 			 //arr.length 배열의 길이
		for(int i=0; i<arr.length; i++) {
			System.out.println(arr[i]);			
		}
		
		//배열의 총합
		for(int i=0; i<arr.length; i++) {
			sum += arr[i]; 
			// sum += i는 위에 int i이기 때문에 값을 넣을려면 arr[i]를 입력
			
		}
		
		System.out.println(sum);

	}

 

	public void method2() {
		//정수 5개를 저장하고 역순 출력 
		
		int[] arr = new int[5];
		
		arr[0] = 1;
		arr[1] = 2;
		arr[2] = 3;
		arr[3] = 4;
		arr[4] = 5;
		
		for(int i=0; i<arr.length; i++) {
			System.out.println(arr[arr.length-1-i]);
			//배열의 전체길이는 5 -1은 길이는 5여도 0부터 시작하기 떄문에 [4] -i는 역순 출력
		}

 

public void method3() {
		int[] arr = {1,2,3,4,5};
		
		//그냥 출력 하면 주소값이 나와서 값을 볼려면 for문 사용
		for(int i=0; i<arr.length; i++) {
			System.out.println(arr[i]);			
		}
		
	}

 

그냥 syso사용해서 출력하면 주소값이 나옴 

배열의 값을 보여주고 싶으면 for문을 이용해서 출력해야함!

 

public void method4() {
		// 반복문을 통해 학생 3명의 접수를 입력 받으세요
		// 입력받은 받은 총합, 평균을 구하시오
		
		int arr[] = new int[3];
		
		//점수 입력 받기 for문 
		for(int i=0; i<arr.length; i++) {
			arr[i] = sc.nextInt();
		}
		
		int sum =0;
		
		//값을 더해주기 위해 for문 사용 
		//for문 안하면 주소값으로 나와서 sum이 안 나옴
		for(int i=0; i<arr.length; i++) {
			sum+=arr[i];
		}
		
		double avg =(double)sum/arr.length;
		System.out.println("합  : "+ sum +" 평균 :"+avg);
	}

 

temp 값 바꾸기

public void method5() {
		int a = 10;
		int b = 7;
		// a 값과 b값 바꾸기
		
		int temp =a;
		a = b;
		b = temp;
		
	}

public void method6() {
		//최대값
		int[] score = {75,80,62,90,85};
		int max =0;
		
		for (int i=0; i<score.length; i++) {
			if (max < score[i]) max = score[i];
		}
		System.out.println("최대 값은 : " +max);
	}

 

public void method7() {
		//최소값
		int[] score = {75,80,62,90,85};
		
		//배열 첫번쨰 값 가지고 오기
		//int min =100; 
		//int min =Integer.MIN_VALUE;
		int min = score[0]; 
		
		for (int i=0; i<score.length; i++) {
			if (min > score[i]) min = score[i];
		}
		System.out.println("최소 값은 : " + min);
	}

최대값과 초기값 주의 0보다 작은 값은 없기때문에 

임의 숫자 말고 배열의 첫번째 값으로! 

 


 

정렬
public void method8() {
		//버블 정렬
		//원본자효가 n개일때 n-1차 운행한다
		//각 회차에서 인접한 두 값을 비교하여 오름차순인 경우
		//작은 값을 앞에 위치시킴

		int[] score = {75,80,62,90,85};
		
		// 주소가 아닌 값을 출력하기 위한 for
		for(int i=0; i<score.length-1; i++) {
			
			// score[]비교값 for문 
			//-1은 정렬된 맨뒤에를빼주기 위해 
			for(int j=0; j<score.length-1; j++) {
				
				//비교 if문
				 //j(앞) < j+1(뒤) 비교  j가 작을 시
				if(score[j]<score[j+1]) {
					
					//정렬 값 변경
					int temp = score[j];
					score[j] = score[j+1];
					score[j+1] = temp;
				}
			}
		}
		
		// 보여지는 값 출력 for
		for(int i=0; i<score.length; i++) {
			System.out.print(score[i]+"\t");
		}
	}

버블 정렬

결과 값 90 85 80 75 62

 

정렬 반대로

	public void method9() {
		//버블 정렬
		//원본자효가 n개일때 n-1차 운행한다
		//각 회차에서 인접한 두 값을 비교하여 오름차순인 경우
		//작은 값을 앞에 위치시킴

		int[] score = {75,80,62,90,85};
		
		//-1은 정렬된 맨뒤에를빼주기 위해 
		for(int i=0; i<score.length-1; i++) {
			for(int j=0; j<score.length-1; j++) {
				if(score[j]>score[j+1]) {
					int temp = score[j];
					score[j] = score[j+1];
					score[j+1] = temp;
				}
			}
		}
		for(int i=0; i<score.length; i++) {
			System.out.print(score[i]+"\t");
		}
	}

if문 비교부분 부등호 변경

결과 62 75 80 85 90

 

퀵 정렬

public void method10() {
		//퀵  정렬

		int[] score = {75,80,62,90,85};
		
		//-1은 정렬된 맨뒤에를빼주기 위해 
		for(int i=0; i<score.length-1; i++) {
			boolean flag = true;
			for(int j=0; j < score.length-1; j++) {
				//비교 if문 if(score[j]>score[j+1]) 부등호 바꾸면 내림차순
				if(score[j] < score[j+1]) {
					int temp = score[j];
					score[j] = score[j+1];
					score[j+1] = temp;
					flag = false; //값이 바뀌면 for문 종료하지 않고 다시 for문 시작
 				}
			}
			if(flag) break; //위에서 값이 바뀌지 않았으면 정렬 종효
		}
		for(int i=0; i<score.length; i++) {
			System.out.print(score[i]+"\t");
		}
	}
Comments