
한 번에 코드를 다 짜려고 하지 말고 차근차근 단계를 밟아 나가자.(test 파일을 만들고 거기서 하면 헷갈리지 않아)
첫 번째 도전
배열의 길이를 이용해 for문 4바퀴 돌리기
package ex03.test;
// 5, 8, 2, 4, 3 을 오름차순으로 정렬하라.
public class BubbleTest01 {
public static void main(String[] args) {
int[] arr = {5, 8, 2, 4, 3}; // 안의 구조는 변해야 하니까 final이 아니야
final int N = arr.length; // 상수의 이름은 대문자로 정의한다.
// 첫 번째 도전: 4바퀴 돌기
for (int i = 0; i < N - 1; i++) {
System.out.println("몇 번 돌지?");
}
}
}
두 번째 도전
4바퀴 도는데, 1회전 때 4바퀴 도는 내부 for문 만들기
package ex03.test;
// 5, 8, 2, 4, 3 을 오름차순으로 정렬하라.
public class BubbleTest01 {
public static void main(String[] args) {
int[] arr = {5, 8, 2, 4, 3};
final int N = arr.length;
// 두 번째 도전: 4바퀴 도는데, 1회전 때 4바퀴 도는 내부 for문 만들기
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 1; j++) {
System.out.println("몇 번 돌지?");
}
System.out.println();
}
}
}
세 번째 도전
4바퀴 도는데, 내부는 4, 3, 2, 1로 돌기
package ex03.test;
public class BubbleTest02 {
public static void main(String[] args) {
int[] arr = {5, 8, 2, 4, 3};
final int N = arr.length;
// 세 번째 도전: 4바퀴 도는데, 내부는 4, 3, 2, 1로 돌기
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 1 - i; j++) {
System.out.println("몇 번 돌지?");
}
System.out.println();
}
}
}
네 번째 도전
0번 배열의 값과 1번 배열의 값 서로 바꾸기
두 공간의 값을 서로 바꾸려면 손이 하나 더 있어야 한다. 변수명은 temp로 많이 한다.
package ex03.test;
public class BubbleTest03 {
public static void main(String[] args) {
int[] arr = {4, 3};
int temp = 0;
temp = arr[0]; // temp = 4
arr[0] = arr[1];// arr[1]=4;
arr[1] = temp;
System.out.println(arr[0] + "," + arr[1]);
}
}
다섯 번째 도전
이웃하는 두 개의 배열의 값 바꾸기
package ex03.test;
public class BubbleTest04 {
public static void main(String[] args) {
int[] arr = {5, 8, 2, 4, 3};
final int N = arr.length;
int temp;
// arr[0]과 arr[1]의 값 바꾸기
if (arr[0] > arr[1]) {
temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
// arr[1]과 arr[2]의 값 바꾸기
if (arr[1] > arr[2]) {
temp = arr[1];
arr[1] = arr[2];
arr[2] = temp;
}
// arr[2]과 arr[3]의 값 바꾸기
if (arr[2] > arr[3]) {
temp = arr[2];
arr[2] = arr[3];
arr[3] = temp;
}
// arr[3]과 arr[4]의 값 바꾸기
if (arr[3] > arr[4]) {
temp = arr[3];
arr[3] = arr[4];
arr[4] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
여섯 번째 도전
다섯 번째 도전을 for문으로 표현하기
package ex03.test;
public class BubbleTest05 {
public static void main(String[] args) {
int[] arr = {5, 8, 2, 4, 3};
final int N = arr.length;
int temp;
// 필요한 변수는 i랑 i+1
// 배열을 넘어서는 값은 쓸 수 없어. n-1번 비교해야 한다는 것을 잊어선 안 된다.
// 1회전
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
일곱 번째 도전
for문을 이용해 배열의 오름차순 정렬 완성 시키기
package ex03.test;
public class BubbleTest06 {
public static void main(String[] args) {
int[] arr = {5, 8, 2, 4, 3};
final int N = arr.length;
int temp;
for (int loop = 1; loop < N; loop++) {
for (int i = 0; i < N - loop; i++) {
if (arr[i] > arr[i + 1]) {
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
System.out.print(loop + "회전");
for (int i = 0; i < N; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
}
여덟 번째 도전
버블 정렬 메서드 만들기
package ex03;
public class BubbleEx01 {
///////////////----------------- 버블 메서드 시작 ----------------------//////////////////
// 메서드(행위)는 메인 위에 만들자
static void bubble(int[] arr) { // static을 호출할 때는 class 이름으로 찾는다.
final int N = arr.length;
int temp;
for (int loop = 1; loop < N; loop++) {
for (int i = 0; i < N - loop; i++) {
if (arr[i] > arr[i + 1]) {
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
System.out.print(loop + "회전");
for (int i = 0; i < N; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
///////////////----------------- 버블 메서드 끝 ----------------------//////////////////
public static void main(String[] args) {
int[] arr = {5, 8, 2, 4, 3};
BubbleEx01.bubble(arr); // class이름.메서드 이름으로 호출하는 것이 원칙인데
// bubble(arr); // 같은 클래스 안에 있는 메서드 이름만으로 불러올 수 있다.
System.out.println();
int[] arr2 = {5, 3000, 8, 100, 2, 4, 3, 700};
BubbleEx01.bubble(arr2);
}
}
Share article