생각하는 감쟈
[JAVA] 참조 타입, 배열, 버블 정렬 본문
기본타임 : 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");
}
}
'Language > Java' 카테고리의 다른 글
[JAVA] 2차원 배열_02 (0) | 2024.03.15 |
---|---|
[JAVA] Stack_heap, 배열 복사, 2차원 배열_01 (2) | 2024.03.15 |
[JAVA] 자바 별, 피라미드 찍기 (0) | 2024.03.13 |
[JAVA] 조건문 : while, break, continue 문 (0) | 2024.03.13 |
[JAVA] 조건문 : If문, Switch문 (1) | 2024.03.08 |
Comments