Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 환경설정
- 예외미루기
- 제네릭
- Java
- 메소드오버로딩
- 어윈 사용법
- 한국건설관리시스템
- 집합_SET
- 오라클
- 생성자오버로드
- 객체 비교
- 인터페이스
- oracle
- cursor문
- abstract
- 다형성
- 자바
- NestedFor
- 컬렉션프레임워크
- 참조형변수
- 정수형타입
- GRANT VIEW
- 사용자예외클래스생성
- 자동차수리시스템
- 대덕인재개발원
- 예외처리
- 컬렉션 타입
- EnhancedFor
- exception
- 추상메서드
Archives
- Today
- Total
거니의 velog
230713 자바 강의 본문
[Selection Sort : n개로 구성된 배열]
(1) 자료의 수가 n개일 때 n-1 회전 수행
(2) 각 회전에서 가장 왼쪽의 자료와 나머지 모든 자료를 비교.
(3) 각 회전 수행 후, 왼쪽의 기준자료를 하나씩 비교대상에서 제외.
[50, 37, 69, 7, 42]
1회전 : 7 <= 비교대상에서 제외 / 50, 69, 37, 42
2회전 : 7, 37 <= 비교대상에서 제외 / 69, 50, 42
3회전 : 7, 37, 42 <= 비교대상에서 제외 / 69, 50
4회전 : 7, 37, 42, 50 <= 비교대상에서 제외 / 69
[SortExample.java]
package ddit.chap05.sec02;
import java.util.Arrays;
public class SortExample {
public static void main(String[] args) {
BubbleSort bubbleSort = new BubbleSort();
bubbleSort.sort(); // [정렬된 데이터] : [7, 15, 27, 38, 43, 50, 62, 65, 74, 80]
SelectionSort selectionSort = new SelectionSort();
selectionSort.selectionSort();
selectionSort.printData(); // [정렬된 데이터] : [16, 19, 27, 35, 40, 57, 63, 70, 88, 95]
}
}
class BubbleSort {
// 멤버변수
private int[] number;
// 생성자(constructor). 멤버변수 초기화.
BubbleSort() {
number = new int[] {27, 15, 38, 62, 7, 43, 80, 65, 50, 74};
}
public void sort() {
boolean flag = true; // 개선된 BubbleSort 알고리즘.
System.out.println("[원본 데이터]");
System.out.println(Arrays.toString(number));
for(int i=0; i<number.length-1; i++) { // n-1 회전수행
flag = true; // 회전 시작시 true
for(int j=0; j<number.length-1-i; j++) { // 2개를 비교해서 자리 바꿈(배열의 범위 내에서 비교하기 위해, j<number.length-1). 그리고 하나하나씩 비교대상에서 제외시켜라(-i) /
if(number[j]>number[j+1]) {
int temp = number[j];
number[j] = number[j+1];
number[j+1] = temp;
flag = false; // 자리 바꿈이 한 번이라도 일어나면 false
}
}
if(flag) break; // 자리 바꿈이 한 번도 일어나지 않았다면(flag = true;) 완료되었으므로 반복문을 빠져나와라.
}
System.out.println("[정렬된 데이터]");
System.out.println(Arrays.toString(number));
}
}
class SelectionSort {
// 멤버 변수
private int[] num;
// 생성자. 멤버 변수-인스턴스 변수(num) 초기화.
public SelectionSort() {
num = new int[] {35, 40, 70, 16, 95, 19, 27, 63, 88, 57}; // 힙 메모리에 10칸을 만들고 값을 넣어 초기화
}
// 메서드
public void selectionSort() {
System.out.println("[원본 데이터]");
System.out.println(Arrays.toString(num));
for(int i=0; i<num.length-1; i++) { // n-1 회전 수행
for(int j=i+1; j<num.length; j++) { // 각 회전에서 비교 담당. i번째가 기준키 위치. 비교대상은 이보다 1 더 큰 수(int j=i+1;). 맨 끝까지 비교해야 함(j<s.length).
if(num[i] > num[j]) {
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
// System.out.println("[정렬된 데이터]");
// System.out.println(Arrays.toString(num));
}
public void printData() {
System.out.println("[정렬된 데이터]");
System.out.print("[");
for(int su : num) {
System.out.printf("%-2d, ", su);
}
System.out.print("]");
}
}
[Dice.java]
package ddit.chap05.sec02;
import java.util.Arrays;
public class Dice {
// 1 ~ 6가지의 경우의 수를 카운트하여 저장하므로 int[6] 칸의 배열 생성.
// 멤버 변수
private int[] dice = new int[6]; // 멤버 변수는 초기화하지 않아도 오류가 없다. 컴파일러가 자동 초기화(기본 생성자 생성).
public void setDice() {
for(int i=0; i<50; i++) {
int rand = (int)(Math.random()*6)+1; // 주사위 눈의 난수 발생(1~6).
dice[rand-1]++; // 주사위 눈의 -1번째 배열칸에 +1 카운트.
}
// System.out.println(Arrays.toString(dice));
}
public void getDiagram() {
setDice();
for(int i=0; i<dice.length; i++) {
System.out.print((i+1) + " | ");
for(int j=0; j<dice[i]; j++) {
System.out.print("*");
}
System.out.println(dice[i]);
}
System.out.println(" -------------------------");
}
}
[DiceExample.java]
package ddit.chap05.sec02;
// 주사위를 50번 던져서 발생된 각 눈의 경우의 수를 저장하고
// 그 자료를 이용하여 1차원 그래프를 작성.
public class DiceExample {
public static void main(String[] args) {
Dice dice = new Dice();
dice.setDice(); // 모집단의 크기(50번 roll)가 작으므로 편차가 큰 편. 그래도 값은 잘 나옴.
dice.getDiagram();
}
}
[WordScramble.java]
package ddit.chap05.sec03;
import java.util.Scanner;
public class WordScramble {
private String[] word = {"apple", "banana", "orange", "persimmon", "hope"};
// 임의의 단어 선택(0~4 사이의 난수)
public String getWord() {
int rand = (int)(Math.random()*word.length); // 0 ~ 배열 전체길이-1 만큼의 범위의 난수 발생.
return word[rand]; // word[0] ~ word[4]
}
public String shuffle(String str) {
char[] ch = str.toCharArray(); // String 한 단어(banana)를, char 형태의 배열로 한 글자씩 집어 넣음({b,a,n,a,n,a}).
for(int i=0; i<1000; i++) {
int rand = (int)(Math.random()*ch.length); // 0 ~ 배열 전체길이-1 만큼의 범위의 난수 발생.
char temp = ch[0];
ch[0] = ch[rand];
ch[rand] = temp;
}
return new String(ch); // ch[0] ~ ch[n-1]. 문자 배열을 문자열로 바꾸는 방법 => new String(ch)
}
public void answer(String str) {
int count = 0; // 시도횟수.
Scanner sc = new Scanner(System.in);
String anStr = ""; // 사용자가 입력할 정답.
while(true) {
System.out.print("정답? : ");
anStr = sc.nextLine();
count++; // 시도횟수 증가
if(str.equalsIgnoreCase(anStr)) { // 대문자, 소문자를 무시하고 A = a; 둘다 a로 본다.
System.out.println("==============");
System.out.println("정답입니다.");
System.out.println("시도횟수 : " + count);
System.out.println("==============");
break;
}
}
System.out.println("프로그램 종료");
}
}
[WordScrambleExample.java]
package ddit.chap05.sec03;
// 5개의 단어를 배열에 저장한 후 임의의 한 단어를 선택한다.
// 선택된 단어의 철자를 섞어 사용자에게 제시한다.
// 사용자는 제시된 철자들을 보고 원래의 단어를 맞추는 게임.
// 시도횟수도 출력.
public class WordScrambleExample {
public static void main(String[] args) {
WordScramble ws = new WordScramble();
String str = ws.getWord(); // String 타입으로 반환.
System.out.println("정답 : " + str);
String question = ws.shuffle(str); // 섞을 단어(str)를 매개변수로 설정.
System.out.println("제시어 : " + question);
ws.answer(str);
}
}
[Point.java]
package ddit.chap05.sec04;
public class Point {
// 2차원 좌표(x, y)
private int x;
private int y;
// 기본 생성자
Point() {
x = 0;
y = 0;
}
// 생성자 오버로딩(overloading).
// 전제조건 : 하나의 클래스 안에서 이름이 똑같은 메소드가 복수 개가 존재하는 현상.
// 필요충분조건 : (1) 메서드의 매개변수의 갯수가 다르거나, (2) 또는 타입이 다르거나, (3) 또는 배열 상태가 다르면 된다.
// 사용 목적 : 똑같은 메서드로 여러 타입의 다양한 데이터를 취급하고 처리하기 위함이다.
// 지역 변수의 이름과 멤버 변수의 이름이 같은 이유?
// 지역(메서드) 안에서 변수를 호출하면 멤버 변수가 대답을 못하고 지역 변수만 참조됨. 데이터 저장 불가. 지역 변수만 참조됨.
// 지역 변수는 언제 생성되서 소멸? 메서드가 호출되어 생성하고, 호출이 끝나면 소멸(Garbage Collector).
// Point p1 = new Point(); -> 매개 변수가 없으므로 기본 생성자 Point()가 호출됨.
// Point p2 = new Point(10, 20); -> 매개 변수 2개에 데이터 타입이 int 이므로 Point(int x, int y)가 호출됨.
// p2이 new Point(10, 20)을 호출하면 10, 20이라는 값을 매개변수로 전달하고 메서드 실행을 한 뒤 소멸.
// 이 짧은 순간에 int x = 10; 은 Point 클래스 안에 멤버변수 private int x;에 얼른 전달하여 힙 메모리에 저장.
// int y = 20; 은 Point 클래스 안에 멤버변수 private int y;에 얼른 전달하여 힙 메모리에 저장.
// 이 때 사용하는 특별한 참조 변수가 this. 자기 자신의 클래스 주소 값을 this가 가지고 있다. 자바에서 만든 특수 변수(super-부모 클래스의 주소, this-자기 자신 클래스의 주소).
Point(int x, int y) {
this.x = x;
this.y = y;
}
// 오버라이드(@Override) : 메서드 재정의
// 반드시 상속관계에 있는 두 개 이상의 클래스에서 발생하는 개념.
// 메서드의 머리(Header), 선언부-public String toString()가 부모와 자식이 똑같아야 한다.
// 내용은 달라도 된다.
// 다형성-상속 개념을 알아야 함.
// 하나의 부모 이름을 중심으로 여러 형태의 자식 메서드가 서로 다른 구현을 만족시키기 위함.
@Override
public String toString() {
return "(" + x + ", " + y + ")";
}
}
[Triangle.java]
package ddit.chap05.sec04;
public class Triangle {
// 3개의 꼭지점
private Point p1;
private Point p2;
private Point p3;
// 생성자
Triangle(Point p1, Point p2, Point p3) {
this.p1 = p1;
this.p2 = p2;
this.p3 = p3;
}
public void draw() {
System.out.println(p1 + "과 " + p2 + "을(를) 연결합니다.");
System.out.println(p2 + "과 " + p3 + "을(를) 연결합니다.");
System.out.println(p3 + "과 " + p1 + "을(를) 연결합니다.");
}
}
[ShapeExample.java]
package ddit.chap05.sec04;
public class ShapeExample {
public static void main(String[] args) {
Triangle t1 = new Triangle(new Point(100, 100),
new Point(500, 100),
new Point(250, 250)); // 객체 생성.
// t1.draw(); // 이대로 하면 주소값만 출력.
/*
* ddit.chap05.sec04.Point@15db9742과 ddit.chap05.sec04.Point@6d06d69c을(를) 연결합니다.
* ddit.chap05.sec04.Point@6d06d69c과 ddit.chap05.sec04.Point@7852e922을(를) 연결합니다.
* ddit.chap05.sec04.Point@7852e922과 ddit.chap05.sec04.Point@15db9742을(를) 연결합니다.
*/
t1.draw(); // Point 클래스에서 toString() 메서드를 오버라이딩(재정의)하여 내용을 출력.
// https://zangzangs.tistory.com/44
// Has-a 관계 - 문장이 성립되어지면 상속 관계. 삼각형은 점을 포함하고 있다(O).
// is-a관계 - 문장이 성립되면 포함 관계. 삼각형은 점입니다(X).
}
}
'대덕인재개발원 > 대덕인재개발원_Java' 카테고리의 다른 글
230717 자바 강의 (0) | 2023.07.17 |
---|---|
230714 자바 강의 (0) | 2023.07.14 |
230712 자바 강의 (0) | 2023.07.12 |
230711 자바 강의 (0) | 2023.07.12 |
230710 자바 강의 (0) | 2023.07.12 |