오픈프레임워크_Day06
### : 목차 구분 기호
--- : 목차 내에 항목 구분 기호
목차
1. 이론 및 정보
2. 설정 및 그 밖에
3. 소스코드
4. 과제
###################################
1. 이론 및 정보
-----------------------------------
조별과제
수요일까지 회의해서 어떻게 공부할 것인지
조의 목표
주제
팀 다 같이 해도 되고
각자 공부해도 됨
대신 잘 하고 있는지 확인해서 기입하면
월요일마다 제출
-----------------------------------
매주 월요일 질문?
과제는 풀릴때까지 하기
-----------------------------------
질문 내용
메서드를 만드는 경우
자주 수정되는 경우 메서드를 사용
다른 곳에서도 재사용을 하고자 했을 때
무줘건 메소드를 만드는게 좋은것이 아님
-----------------------------------
질문 내용
객체지향언어에서만 가질 수 있는 메서드의 특징
1. 다형성 : 메서드의 오버로딩(Overloading) : 중복정의 , 비슷한 기능을 하는 것끼리 해야 효과가 극대화
2. 생성자 메서드 (Constructor)
3. this
-----------------------------------
질문 내용
모든 클래스가 가지고 있으니까
기본 생성자?
-----------------------------------
질문 내용
ANT
자동으로 빌드하는 도구
-----------------------------------
배열(Array)
1. 자바에서는 배열을 객체로 취급한다.
- 이미 클래스로 만들어져 있다
- 필요한 기능이 만들어져 있어서 가져다 쓰면 된다.
2. 같은 이름으로 정의된 연속적인 메모리 공간
3. 변수
- 값을 하나 밖에 저장 못함, 단점
- 이러한 단점을 극복하기 위해 배열이 등장
따로 떨어뜨려놓은 주소를 모아서 한 곳에 저장하고
이름으로 찾아가서 한칸 한칸 이동해서 다음 주소를
찾아간다. 시작주소가 이름
인덱스로 다음 칸을 혹은 원하는 주소를 찾아간다
4. 종류
1) 1차원 배열(선형 배열) -> DIRECT로 값을 처리
- 각각의 변수를 한줄로 묶어서 나열한 배열
2) 다차원 배열(2차원 이상의 배열) -> 주소값을 이용함
- 여러개의 1차원 배열을 하나로 묶어 준 배열 -> 2차원 배열
- 여러개의 2차원 배열을 하나로 묶어 준 배열 -> 3차원 배열
...
...
...
5. 1차원 배열로 할 수 있는 알고리즘
1) 검색 : 순차검색
2) 정렬 : Bubble, Selection, Insertion
* Swap Algorithm
int a = 10, b = 5, c;
c = a;
a = b;
b = c;
* Bubble Sort : 서로 이웃하는 것끼리 비교하여 교환하는 방식
1. 기준점 있음. 보통 맨 왼쪽
2. 오름차순(1,2,3,4,5,6,...), 내림차순(9,7,6,5,4,...)을 정한다
8,7,9,2,3,6 8,7
7,8,9,2,3,6 8,9
7,8,9,2,3,6 9,2
7,8,2,9,3,6 9,3
7,8,2,3,9,6 9,6
7,8,2,3,6,9
1사이클 끝
7,8,2,3,6,9 7,8
7,8,2,3,6,9 8,2
7,2,8,3,6,9 8,3
7,2,3,8,6,9 8,6
7,2,3,6,8,9
2사이클 끝
7,2,3,6,8,9 7,2
2,7,3,6,8,9 7,3
2,3,7,6,8,9 7,6
2,3,6,7,8,9
3사이클 끝
2,3,6,7,8,9 2,3
2,3,6,7,8,9 3,6
2,3,6,7,8,9
4사이클 끝
끝
* Selection Sort : 기준점을 선택하여 비교하고 교환해 나가는 방식
1. 가장 큰값, 작은 값을 선택해야함, 하지만 가장 왼쪽의 값으로 하겠음
기준점 첫번째로 옮김
8,7,9,2,3,6 8,7
7,8,9,2,3,6 7,9
7,8,9,2,3,6 7,2
2,8,9,7,3,6 2,3
2,8,9,7,3,6 2,6
2,8,9,7,3,6
기준점 두번째로 옮김
2,8,9,7,3,6 8,9
2,8,9,7,3,6 8,7
2,7,9,8,3,6 7,3
2,3,9,8,7,6 3,6
2,3,9,8,7,6
기준점 세번째로 옮김
2,3,9,8,7,6 9,8
2,3,8,9,7,6 8,7
2,3,7,9,8,6 7,6
2,3,6,9,8,7
기준점 네번째로 옮김
2,3,6,9,8,7 9,8
2,3,6,7,8,9 8,9
2,3,6,7,8,9
끝
6.
7.
-----------------------------------
클래스가 객체가 요구하는 세가지 특징을
모두 가지고 있어서 클래스이다.
-----------------------------------
수학 공부를 하라!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-----------------------------------
검색, 정렬이 알고리즘의 시작
검색 알고리즘 대표적인 것 두가지
- 순차 검색
- 이분 검색
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
###################################
2. 설정 및 그 밖에
-----------------------------------
eclipse
F:\study
압축품
전문가 툴? IntelliJ(OpenSource)
jbuilder
netbean, eclipse 일반적으로 쓰임
eclipse에는 ant가 내장되어 있음
Eclipse의 두가지 큰 개념
WorkSpace - 여러개의 프로젝트를 하나로 묶어서 단위(폴더로 만듬)
project
F:\study\java\JavaseWork
만듬
기본 워크스페이스
C:\Users\jhta\workspace
F:\study\java\JavaseWork
로 설정
new - project - java project - name : day05
클래스 생성, 패키지 지움, name : ClassTest
eclipse 저장하면 컴파일
-----------------------------------
eclipse 단축키
해당 줄 복사 기능
그전에 바탕화면 우클릭 - 그래픽 옵션 - 바로가기 - 사용안함
ctrl + shift + f 자동 정렬
art + shift + r rename
art + 화살표 해당 줄 이동
ctrl + art + 화살표 복사, 현재 안됨
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
###################################
3. 소스코드
-----------------------------------
/day05/src/ClassTest.java
public class ClassTest {
public static void main(String[] args) {
System.out.println("처음 작성해보는 이클립스 테스트");
}
}
-----------------------------------
/day05/src/ArrayTest1.java
public class ArrayTest1 {
public static void main(String[] args) {
int a = 3, b = 5, c = 6, d = 8;
/*
//int[] arr1 = new int[4];
int arr1[] = new int[4];
arr1[0] = 3;
arr1[1] = 5;
arr1[2] = 6;
arr1[3] = 8;
*/
int[] arr1 = {3,5,6,8};
for(int cnt=0;cnt<arr1.length;cnt++){
System.out.println(arr1[cnt]);
}
//int arr2[] = {0,}; //나머지도 전부 초기화 됨?
int arr2[] = {0,0,0,0};
arr2 = arr1;
System.out.println(arr2[2]);
}
}
-----------------------------------
/day05/src/SequentialSearch.java
import java.io.IOException;
public class SequentialSearch {
public static void main(String[] args) throws IOException {
char data[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };
System.out.println("검색할 문자 입력 :");
char search = (char) System.in.read();
boolean flag = false;
int cnt = 0;
for (; cnt < data.length; cnt++) {
if (data[cnt] == search) {
flag = true;
break;
}
}
if (flag)
System.out.println("데이터를 "+(cnt+1)+" 번째에서 찾았습니다.");
else
System.out.println("데이터를 못찾았습니다.");
}
}
-----------------------------------
/day05/src/BubbleSort.java
public class BubbleSort {
public static void main(String[] args) {
int data[] = { 8, 7, 9, 2, 3, 6 };
for (int i = 0; i < data.length; i++)
System.out.print(data[i] + "\t");
System.out.println();
for (int row = 0; row < data.length - 1; row++) {// 행의 반복횟수
for (int col = 0; col < data.length - 1; col++) {// 열의 반복횟수
if (data[col] > data[col + 1]) {
int temp = data[col];
data[col] = data[col + 1];
data[col + 1] = temp;
}
}
}
for (int i = 0; i < data.length; i++)
System.out.print(data[i] + "\t");
}
}
-----------------------------------
/day05/src/SelectionSort.java
public class SelectionSort {
public static void main(String[] args) {
int data[] = { 8, 7, 9, 2, 3, 6 };
for (int i = 0; i < data.length; i++)
System.out.print(data[i] + "\t");
System.out.println();
for (int row = 0; row < data.length - 1; row++) {// 행의 반복횟수
for (int col = row + 1; col < data.length; col++) {// 열의 반복횟수
if (data[row] > data[col]) {
int temp = data[row];
data[row] = data[col];
data[col] = temp;
}
}
}
for (int i = 0; i < data.length; i++)
System.out.print(data[i] + "\t");
}
}
-----------------------------------
/day05/src/Sungjuk_v1.java
public class Sungjuk_v1 {
public static void main(String[] args) {
// 입력을 받았다고 가정
int no[] = { 1, 2, 3 };
int kor[] = { 95, 75, 82 };
int eng[] = { 90, 70, 80 };
int math[] = { 98, 78, 88 };
int tot[] = new int[3];
int avg[] = new int[3];
char hak[] = new char[3];
int rank[] = new int[3];
System.out.println(" 성적표");
System.out.println("---------------------------------------------------");
System.out.println("학번\t국어\t영어\t수학\t총점\t평균\t학점\t등수");
System.out.println("---------------------------------------------------");
for (int i = 0; i < no.length; i++) {
System.out.println(no[i]+"\t"+kor[i]+"\t"+eng[i]+"\t"+math[i]+"\t" +tot[i]+"\t" +avg[i]+"\t" +hak[i]+"\t" +rank[i]);
}
}
}
-----------------------------------
/day05/src/Homework1.java
public class Homework1 {
public static void main(String[] args) {
int data[] = { 5, 30, 34, 22, 67, 4, 9, 12 };
int top = 0;
int small = 0;
int rank[] = {0,};
// 가장 큰 값 구하기
// 가장 작은값 구하기
// 랭킹 구하기(7, 3, 2, 4, 1, 8, 6, 5) 등수
}
}
###################################
4. 과제
-----------------------------------
8,7,9,2,3,6 8,7
7,8,9,2,3,6 8,9
7,8,9,2,3,6 9,2
7,8,2,9,3,6 9,3
7,8,2,3,9,6 9,6
7,8,2,3,6,9
1사이클 끝
7,8,2,3,6,9 7,8
7,8,2,3,6,9 8,2
7,2,8,3,6,9 8,3
7,2,3,8,6,9 8,6
7,2,3,6,8,9
2사이클 끝
7,2,3,6,8,9 7,2
2,7,3,6,8,9 7,3
2,3,7,6,8,9 7,6
2,3,6,7,8,9
3사이클 끝
2,3,6,7,8,9 2,3
2,3,6,7,8,9 3,6
2,3,6,7,8,9
4사이클 끝
끝
여기서 보면 각 사이클 마다 비교되는 경우의 수가 줄어드는 것을 볼 수 있다
아래 코드는 위 사이클과 다르게 불필요한 반복이 들어가 있다
불필요한 반복을 줄이는 코드를 작성하라
/day05/src/BubbleSort.java 를 이용
public class BubbleSort {
public static void main(String[] args) {
int data[] = { 8, 7, 9, 2, 3, 6 };
for (int i = 0; i < data.length; i++)
System.out.print(data[i] + "\t");
System.out.println();
int cnt = data.length - 1;
for (int row = 0; row < data.length - 1; row++) {// 행의 반복횟수
for (int col = 0; col < cnt; col++) {// 열의 반복횟수
if (data[col] > data[col + 1]) {
int temp = data[col];
data[col] = data[col + 1];
data[col + 1] = temp;
}
}
cnt--;
}
for (int i = 0; i < data.length; i++)
System.out.print(data[i] + "\t");
}
}
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
수정
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
public class BubbleSort {
public static void main(String[] args) {
int data[] = { 8, 7, 9, 2, 3, 6 };
for (int i = 0; i < data.length; i++)
System.out.print(data[i] + "\t");
System.out.println();
for (int row = 0; row < data.length - 1; row++) {// 행의 반복횟수
for (int col = 0; col < (data.length -1)-row; col++) {// 열의 반복횟수
if (data[col] > data[col + 1]) {
int temp = data[col];
data[col] = data[col + 1];
data[col + 1] = temp;
}
}
}
for (int i = 0; i < data.length; i++)
System.out.print(data[i] + "\t");
}
}
-----------------------------------
1차원 배열로 만들어보는 성적표 예제v1
/day05/src/Sungjuk_v1.java 를 이용
public class Sungjuk_v1 {
public static void main(String[] args) {
// 입력을 받았다고 가정
int no[] = { 1, 2, 3 };
int kor[] = { 95, 75, 82 };
int eng[] = { 90, 70, 80 };
int math[] = { 98, 78, 88 };
int tot[] = new int[3];
int avg[] = new int[3];
char hak[] = new char[3];
int rank[] = new int[3];
int tmp[] = new int[3];
for (int i = 0; i < no.length; i++) {
tot[i] = kor[i]+eng[i]+math[i];
avg[i] = tot[i]/no.length;
tmp[i] = tot[i];
if(avg[i] >= 90)
hak[i] = 'A';
else if(avg[i] >= 80)
hak[i] = 'B';
else if(avg[i] >= 70)
hak[i] = 'C';
else if(avg[i] >= 60)
hak[i] = 'D';
else
hak[i] = 'F';
}
//내림차순으로 정렬해야함
for (int row = 0; row < tmp.length - 1; row++) {// 행의 반복횟수
for (int col = row + 1; col < tmp.length; col++) {// 열의 반복횟수
if (tmp[row] < tmp[col]) {
int temp = tmp[row];
tmp[row] = tmp[col];
tmp[col] = temp;
}
}
}
for (int i = 0; i < rank.length; i++) {
for (int j = 0; j < tmp.length; j++) {
if(tot[i] == tmp[j]){
rank[i] = j+1;
}
}
}
System.out.println(" 성적표");
System.out.println("-------------------------------------------------------------");
System.out.println("학번\t국어\t영어\t수학\t총점\t평균\t학점\t등수");
System.out.println("-------------------------------------------------------------");
for (int i = 0; i < no.length; i++) {
System.out.println(no[i]+"\t"+kor[i]+"\t"+eng[i]+"\t"+math[i]+"\t" +tot[i]+"\t" +avg[i]+"\t" +hak[i]+"\t" +rank[i]);
}
}
}
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
위 방식은 같은 값에 대한 랭킹에 문제가 있음
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
public class Sungjuk_v1 {
public static void main(String[] args) {
// 입력을 받았다고 가정
int no[] = { 1, 2, 3 };
int kor[] = { 95, 75, 82 };
int eng[] = { 90, 70, 80 };
int math[] = { 98, 78, 88 };
int tmp[] = { 1, 1, 1 };
int tot[] = new int[3];
int avg[] = new int[3];
char hak[] = new char[3];
int rank[] = new int[3];
for (int i = 0; i < no.length; i++) {
tot[i] = kor[i] + eng[i] + math[i];
avg[i] = tot[i] / no.length;
if (avg[i] >= 90)
hak[i] = 'A';
else if (avg[i] >= 80)
hak[i] = 'B';
else if (avg[i] >= 70)
hak[i] = 'C';
else if (avg[i] >= 60)
hak[i] = 'D';
else
hak[i] = 'F';
}
for (int i = 0; i < avg.length; i++) {
for (int j = 0; j < tmp.length; j++) {
if (tot[i] > tot[j]) {
tmp[j]++;
}
}
}
for (int i = 0; i < rank.length; i++) {
rank[i] = tmp[i];
}
System.out.println(" 성적표");
System.out
.println("-------------------------------------------------------------");
System.out.println("학번\t국어\t영어\t수학\t총점\t평균\t학점\t등수");
System.out
.println("-------------------------------------------------------------");
for (int i = 0; i < no.length; i++) {
System.out.println(no[i] + "\t" + kor[i] + "\t" + eng[i] + "\t"
+ math[i] + "\t" + tot[i] + "\t" + avg[i] + "\t" + hak[i]
+ "\t" + rank[i]);
}
}
}
-----------------------------------
/day05/src/Homework1.java 에 있는
주석의 내용을 처리해 보세요
public class Homework1 {
public static void main(String[] args) {
int data[] = { 5, 30, 34, 22, 67, 4, 9, 12 };
int tmp[] = new int[data.length];
int top = 0;
int small = 0;
int rank[] = new int[data.length];
// data 값 복사
for (int i = 0; i < rank.length; i++) {
tmp[i] = data[i];
}
for (int row = 0; row < tmp.length - 1; row++) {// 행의 반복횟수
for (int col = row + 1; col < tmp.length; col++) {// 열의 반복횟수
if (tmp[row] < tmp[col]) {
int temp = tmp[row];
tmp[row] = tmp[col];
tmp[col] = temp;
}
}
}
//데이터 출력
System.out.println("데이터");
for (int i = 0; i < data.length; i++) {
System.out.print(data[i]+"\t");
}
System.out.println();
// 가장 큰 값 구하기
System.out.println("가장 큰 값 : "+tmp[0]);
// 가장 작은값 구하기
System.out.println("가장 작은 값 : "+tmp[tmp.length-1]);
// 랭킹 구하기(7, 3, 2, 4, 1, 8, 6, 5) 등수
for (int i = 0; i < rank.length; i++) {
for (int j = 0; j < tmp.length; j++) {
if(data[i] == tmp[j]){
rank[i] = j+1;
}
}
}
for (int i = 0; i < rank.length; i++) {
System.out.print(rank[i]+"\t");
}
}
}
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
위 방식은 같은 값에 대한 랭킹에 문제가 있음
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
public class Homework1 {
public static void main(String[] args) {
int data[] = { 5, 30, 34, 22, 67, 4, 9, 12 };
int tmp[] = new int[data.length];
int rank[] = new int[data.length];
int rank_temp[] = { 1, 1, 1, 1, 1, 1, 1, 1 };
// data 값 복사
for (int i = 0; i < rank.length; i++) {
tmp[i] = data[i];
}
for (int row = 0; row < data.length - 1; row++) {// 행의 반복횟수
for (int col = row + 1; col < data.length; col++) {// 열의 반복횟수
if (tmp[row] < data[col]) {
int temp = tmp[row];
tmp[row] = tmp[col];
tmp[col] = temp;
}
}
}
// 데이터 출력
System.out.println("데이터");
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + "\t");
}
System.out.println();
// 가장 큰 값 구하기
System.out.println("가장 큰 값 : " + tmp[0]);
// 가장 작은값 구하기
System.out.println("가장 작은 값 : " + tmp[tmp.length - 1]);
// 랭킹 구하기(7, 3, 2, 4, 1, 8, 6, 5) 등수
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < rank_temp.length; j++) {
if (data[i] > data[j]) {
rank_temp[j]++;
}
}
}
for (int i = 0; i < rank_temp.length; i++) {
System.out.print(rank_temp[i] + "\t");
}
}
}
-----------------------------------
###################################