<오전수업>트리
package 트리;
public class Node {
private int data; //실제 데이터 저장 공간
private Node leftNode; // 왼쪽에 붙을 노드 참조값 저장
private Node rightNode;// 오른쪽에 붙을 노드 참조값 저장
//생성자
public Node(int data) {
this.data = data;
leftNode = null;
rightNode = null;
}
//데이터부 값 가지고오기
public int getData() {
return data;
}
//왼쪽 연결 노드 설정
public void setLeftNode(Node left) {
this.leftNode = left;
}
//왼쪽 연결 노드 참조값 가지고오기
public Node getLeftNode() {
return leftNode;
}
//오른쪽 연결 노드 설정
public void setRightNode(Node right) {
this.rightNode = right;
}
//오른쪽 연결 노드 참조값 가지고오기
public Node getRightNode() {
return rightNode;
}
}
package 트리;
public class Tree {
private Node rootNode; // 근노드(root) 주소(참조)값 저장
// 생성자
public Tree() {
rootNode = null;
}
//루트노드 구하는 메서드
public Node getRootNode() {
return rootNode;
}
// 이진탐색크리구성 메서드
// 근노드값을 기준으로 새로운 값이 작으면 왼쪽, 크면 오른쪽
public void addNode(int n) {
if (rootNode == null) {// 루트가 비어있는 경우, 아무 노드도 없는 경우
rootNode = new Node(n);
} else {
Node root = rootNode; // 최상위루트부터 시작~그 다음 비교해줘야는 노드 참조값 저장
Node currentNode; // 포인터
while (true) {
currentNode = root;
// 새로운 노드의 값이 비교하는(current)노드 값보다 작으면 -> 왼쪽
if (n < root.getData()) {
root = root.getLeftNode();
// 왼쪽 자식노드가 비어있는 경우 -> 바로 새로운 노드 삽입
if (root == null) {
currentNode.setLeftNode(new Node(n));
break; // 삽입끝 -> 반복문 종료
}
} else { // 새로운 노드의 값이 비교하는 (current)노드 값보다 큼 -> 오른쪽
root = root.getRightNode();
// 오른쪽 자식 노드가 비어있는 경우 -> 바로 새로운 노드 삽입
if (root == null) {
currentNode.setRightNode(new Node(n));
break; // 삽입 끝 ->반복문 종료
}
}
}
}
}
public void print() { // 재귀함수 : 메서드 내에서 자기자신을 다시 호출
System.out.println("출력!");
print();
}
// 전위순회(root-left-right)
public void preOrderTree(Node root) {
//1.근노드 확인 - 그노드 data 출력
//2.왼쪽노드주소확인(채워져있는지/null)
//3-1 if 왼쪽 노드 주소가 null -> 더이상 왼쪽은 안봐도됨
//3-2 if 왼쪽 노드 주소가 null이 아님
// 왼쪽노드 data 출력
// 왼쪽노드주소화인(채워져있는지 / null)
if(root!=null) {
System.out.print(root.getData()+" "); //1.
preOrderTree(root.getLeftNode());
preOrderTree(root.getRightNode());
}
}
//중위순회(left-root-right)
public void inOrderTree(Node root) {
if(root!=null) {
inOrderTree(root.getLeftNode());
System.out.println(root.getData()+" ");
inOrderTree(root.getRightNode());
}
}
//후위순회(left-right-root)
public void postOrderTree(Node root) {
if(root!=null) {
postOrderTree(root.getLeftNode());
inOrderTree(root.getRightNode());
System.out.println(root.getData()+" "); // -> 4 2 1 3 6 8
}
}
}
package 트리;
public class TreeMain {
public static void main(String[] args) {
Tree tree = new Tree();
tree.addNode(4);
tree.addNode(2);
tree.addNode(3);
tree.addNode(6);
tree.addNode(1);
tree.addNode(8);
tree.preOrderTree(tree.getRootNode());
tree.inOrderTree(tree.getRootNode());
tree.postOrderTree(tree.getRootNode());
}
}
<오후수업>
추상클래스 -월급 계산 프로그램
<parttimeemployee.java>
package Ex03;
public class Parttimeemployee extends Employee {
private int workDay;
public Parttimeemployee(String empno,String name,int pay, int workDay) {
this.empno = empno;
this.name = name;
this.pay = pay;
this.workDay = workDay;
}
public int getMoneyPay() {
return(pay*workDay);
}
public String print() {
return empno + " : "+name + " : "+ pay;
}
}
<RegualrEmployeeMain.java>
package Ex03;
public class RegularEmployeeMain {
public static void main(String[] args) {
//객체를 생성하는 키워드 -> new
// new -> 키워드 사용과 동시에 생성자 메소드를 호출할 수 있는 기능!
RegularEmployee regular=new RegularEmployee("SMHRD001","홍길동",4000,400);
System.out.println(regular.print());
System.out.println(regular.getMoneyPay()+"만원");
TempEmployee temp = new TempEmployee("SMHRD002","채수민",3000);
System.out.println(temp.print());
System.out.println(temp.getMoneyPay()+"만원");
Parttimeemployee part = new Parttimeemployee("SMHRD003", "김길동",10,100);
System.out.println(part.print());
System.out.println(part.getMoneyPay()+"만원");
}
}
<RegularEmployee.java>
package Ex03;
public class RegularEmployee extends Employee{
int bonus;
public RegularEmployee(String empno, String name, int pay, int bonus) {
this.empno = empno;
this.name = name;
this.pay = pay;
this.bonus = bonus;
}
public int getMoneyPay() {
return (pay+bonus)/12;
}
}
<TempEmployee>
package Ex03;
public class TempEmployee extends Employee {
public TempEmployee(String empno, String name, int pay) {
//super(); -> 상속의 의미에서 부모가 되는 클래스를 지칭하는 키워드
this.empno = empno;
this.name = name;
this.pay = pay;
}
public int getMoneyPay() {
return pay/12;
}
}
<Employee>
package Ex03;
//employee 추상클래스를 만드시오
public abstract class Employee {
//모든 직급에 대하여 공통적인 내용을 관리할 수 있는 설계도!
// protected로 지정된 필드들은 상속을 받은 관계에서만
// 접급할 수 있는 필드가 된다!
protected String empno;
protected String name;
protected int pay;
// 급여 계산 할수 있는 메소드 -> 계급벼로 다른 계산식 사용!
public abstract int getMoneyPay();
//정보를 출력할 수 있는 메소드
public String print() {
return empno + " : "+name+ " : "+ pay;
}
}
<<interface>>
interface(인터페이스)=사용설명서
- 클래스들이 구현해야 하는 공통되는 기능들을 미리 짖어
- 작업명세서 or 프로젝트 설계도
- 기능만 정의함으로써 구현 객체의 같은 동작 보장(구현강제)
- 인터페이스는 클래스가 아니다
public interface 인터페이스이름{
public static final 자료형 변수명 =변수값; ->final = 상수
public abstract 반환자료형 메소드명(매개변수);
}
interface(인터페이스)구조
abstract class(추상클래스)
- 여러 클래스들 사이에 동일한 코드를 사용하고 싶은 경우(상속, 확장)
- 다양한 접근제어자를 사용하고 싶은 경우
- 객체의 상태를 저장하고 수정하고 싶은 경우(non-static, non-final)
interface(인터페이스)
- 특정 메소드(행위)를 구현하도록 하고 싶은 경우 - 강제구현, 규약
- 다중 구현상속을 사용하고 싶은 경우
- 관련 없는 클래스들이 특정 interface를 구현 받게 하고 싶은 경우
(cloneable,comparable,serializable)
<<계산 게임 프로그램>>
<OperatorGame.java>
package Ex01;
public interface OperatorGame {
// 개발자가 원하는 대로 만드세요~ -> 추상 클래스
// 개발자가 제공하는 방식대로 만드세요~ -> 인터페이스
// 난수를 생성할 수 있는 기능
public abstract int random();
//문제를 제출할 수 있는 기능
public abstract String getQuizMsg();
// 정답을 체크할 수 있는 기능
public abstract boolean checkAnswer(int ans);
}
<PlusGame.java>
package Ex01;
import java.util.Random;
public class PlusGame implements OperatorGame{
int num1 =0;
int num2 =0;
@Override
public int random() {
Random rd = new Random();
int num = rd.nextInt(10)+1;
return num;
}
@Override
public String getQuizMsg() {
num1 = random(); //5
num2 = random(); //3
return num1+ " + " + num2 + " = ";//문제 출제
}
@Override
public boolean checkAnswer(int ans) {
if(ans == (num1 + num2)) {
return true;
}else {
return false;
}
}
//extends -> 상속 받는 키워드
//abstract -> 추상화에 대한 키워드
//implements -> 인터페이스 구현에 대한 키워드
//인터페이스가 가지고 있는 게임이라면 꼭 필요한 기능들을
//만들고자 하는 게임 컨셉에 맞추어 완벽하게 구현!
}
<gameMain>
package Ex01;
import java.util.Scanner;
public class GameMain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 1. PlusGame을 진행할 수 있도록 객체 생성하기
PlusGame game1 = new PlusGame();
PlusGame game2 = new PlusGame();
int round = 1; // 게임라운드 체크를 위한 변수
int cnt = 1; // 정답의 기회를 체크할 변수
boolean check = true;
System.out.println("----------사칙연산 게임 start!---------");
// 문제를 제출할 수 있는 메소드를 호출하여 보여주고
// 사용자는 답을 입력할 수 있도록 한다!
while (round < 6) {
String quiz = game1.getQuizMsg();
System.out.print(round + "라운드 : " + quiz);
int ans = sc.nextInt();
check = game1.checkAnswer(ans);
if (check == false) {
while(cnt < 3) {
System.out.println("틀렸습니다!");
// 정답을 맞추지 못했을 경우
// 3번의 기회를 주고, 문제는 틀린 문제 그대로 출제!
System.out.print(round + "라운드 : " + quiz);
ans = sc.nextInt();
cnt++;
check = game1.checkAnswer(ans);
if(check == true) {
break;
}
}
System.out.println("다음으로 넘어갑니다!!");
cnt = 1;
} else {
System.out.println("정답입니다!");
}
// 1라운드가 종료되면 다음 라운드로 증가!
round++;
System.out.println();
} // while문 종료
}
}
<SubGame>
package Ex01;
import java.util.Random;
public class SubGame implements OperatorGame{
int num1 =0;
int num2 =0;
@Override
public int random() {
Random rd = new Random();
int num =rd.nextInt(10)+1;
return num;
}
@Override
public String getQuizMsg() {
num1 = random();
num2 = random();
// 더 큰 수를 판단하고 큰수에서 작은수를 뺄수 있도록 하자
if(num2>num1) {
int temp = num2;
num2 = num1;
num1 = temp;
}
return num1 + " - "+ num2 + " = ";
}
@Override
public boolean checkAnswer(int ans) {
if(ans == (num1-num2)) {
return true;
}else {
return false;
}
}
}
<꼭 필요한 자격증>
정보처리기사 - 필기: cbt문제집만 돌려봐도 된다, 실기: 많이 어려움(자바+파이썬+c언어)
sqld, 빅데이터분석기사
'Full Stack 교육 회고록' 카테고리의 다른 글
8/29 [java] - jdbc,mvc (0) | 2022.08.29 |
---|---|
8/26 [자바]- 피보나치 수열, 버블정렬, 선택정렬, 이진탐색, 인터페이스 (0) | 2022.08.26 |
8/24 - 자료구조 (0) | 2022.08.24 |
8/23 [자료구조]-선형구조,비선형구조 (1) | 2022.08.23 |
8/22- 자료구조(ArratList),클래스와객체 (0) | 2022.08.22 |