반응형
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package homeW;
 
import java.util.Scanner;
 
public class CalcClass {
private int num1,num2;
private String oper;
 
//생성자
CalcClass(){}
CalcClass(int n1, int n2){
    num1 = n1;
    num2 = n2;
}
CalcClass(String o){
    oper = o;
}
//set
public void setNum1(int n) {num1 = n;}
public void setNum2(int n) {num2 = n;}
public void setOper(String o) {oper = o;}
//get
public int getNum1() {return num1;}
public int getNum2() {return num2;}
public String getOper() {return oper;}
    
    public static void main(String[] args) {
        Scanner sc;
        sc = new Scanner(System.in);
        
        CalcClass cs = new CalcClass();
 
        String replay;
        do {
            System.out.print("첫번째 수: ");
            cs.setNum1(sc.nextInt());
            System.out.print("연산자 +, -, *, /: ");
            cs.setOper(sc.next());         //연산자 입력
            System.out.print("두번째 수: ");
            cs.setNum2(sc.nextInt());    //두번째 정수 입력
 
            switch(cs.getOper()) {         //연산자에 따라 case를 나눈다
            case "+"System.out.println(cs.getNum1()+cs.getNum2());
            break;
            case "-"System.out.println(cs.getNum1()-cs.getNum2());
            break;
            case "*"System.out.println(cs.getNum1()*cs.getNum2());
            break;
            case "/"System.out.println(cs.getNum1()/cs.getNum2());
            break;
            default:                      //다른 값이 들어올 경우
            System.out.println("잘못 입력했습니다.");
        }
            System.out.println("다시 하시겠습니까? (Y/N)");
            replay = sc.next();               //비교할 값을 입력받음
        }while(replay.equals("y")||replay.equals("Y"));         //replay가 "y"나 "Y"일 경우 do를 반복
    
        System.out.println("끝났습니다.");                         //"y"나 "Y" 가 아닌 값을 입력받았을 경우 종료
 
    }
 
}
 

 

반응형
반응형
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
package homeW;
 
public class Lotto {
 public static void main(String[] args) {
 
  int[] lottoNum= new int[6]; //배열 초기화
 
  for(int i =0;i<=5;i++) { //6번 반복
   int count=0//중복된 값을 확인하기 위함
   int landomNum = (int)(Math.random()*45+1); //1부터 45까지의 수중 랜덤 숫자 초기화
   for(int j=0;j<=5;j++) {
    if(lottoNum[j]==landomNum) { //인덱스 0~5 까지 수중 난수와 같은 값이 있을경우 count++
     count++;
    }
   }
   if(count == 0) { //중복된 수가 없을경우 난수 저장
    lottoNum[i] = landomNum;
   }
   else { //중복된 수가 있을경우 i--를 통해 다시 실행
    i--;
   }
  }
  for(int i=0;i<=5;i++//출력
   System.out.print(" "+lottoNum[i]);
 }
}
 
 

실행결과(정렬기능X)

 

반응형
반응형

6가지의 경우를 가진 별 그리기 예제입니다.

 

1번 경우

****
****
****

 

2번 경우 

*
**
***

 

3번 경우

--*
-**
***

 

4번 경우

--*  
-***
*****

 

5번 경우

 

--*  
-***
*****
-***
--*

 

6번 경우: 숫자를 입력받아 해당하는 층의 마름모 그리기

ex) 13 입력시

------*     
-----***     
----*****    
---*******   
--*********  
-*********** 
*************
-*********** 
--*********  
---*******   
----*****    
-----***     
------

 

 

코드

import java.util.Scanner;

public class StarExam {

	public static final String STAR = "*";

	// star-1번 과제
	void starOne() {
		for (int i = 1; i <= 12; i++) {
			System.out.print(STAR);
			if (i % 4 == 0)
				System.out.println(); // 4개씩 끊어서 출력
		}
	}

	// star-2번 과제
	void starTwo() {
		for (int i = 1; i < 4; i++) {// 행
			for (int j = 0; j < i; j++) { // i행일때 별 개수 i개 입력
				System.out.print(STAR);
			}
			System.out.println();
		}
	}

	// star-3번 과제
	void starThree() {
		int fr = 2;
		for (int i = 1; i < 4; i++) { // 행
			for (int j = 1; j <= 3; j++) {// 열
				if (j <= fr) { // 공백
					System.out.print(" ");
				} else { // 별
					System.out.print(STAR);
				}
			}
			fr--;
			System.out.println();
		}
	}

	// star-4번 과제
	void starFour() {
		int fr = 2, ba = 3;
		for (int i = 1; i <= 3; i++) {// 행
			for (int j = 1; j <= 6; j++) {// 열
				if (j <= fr) {// 공백 삽입
					System.out.print(" ");
				} else if (j > ba) {// 공백 삽입
					System.out.print(" ");
				} else { // 별 삽입
					System.out.print(STAR);
				}
			}
			fr--;
			ba++;
			System.out.println();
		}
	}

	// star-5번 과제
	void starFive() {

		int fr = 3, ba = 3; // 공백이 들어가는 조건 fr앞 공백, ba뒷 공백 조건으로 사용
		for (int i = 1; i <= 5; i++) { // 5번 반복
			for (int j = 1; j <= 5; j++) { // 5열 생성
				if (j < fr) { // 각 열을 fr과 비교해 공백이 들어갈 부분에 공백 삽입, 중간열을 기준으로 앞 공백
					System.out.print(" ");
				} else if (j > ba) { // 각 열을 ba와 비교해 공백 삽입, 중간열을 기준으로 뒷 공백
					System.out.print(" ");
				} else { // 별이 들어갈 곳
					System.out.print(STAR);
				}
			}
			if (i < 3) { // 중간층까지 별 개수를 늘리도록 조건을 증가 및 감소
				fr--;
				ba++;
			} else { // 중간층 이후 별 개수를 줄이도록 조건을 증가 및 감소
				fr++;
				ba--;
			}
			System.out.println();
		}
	}

	// star-6번 과제
	void starSix() {
		Scanner sc = new Scanner(System.in);

		System.out.print("몇층까지 하겠습니까? (홀수만 가능):");
		int re = sc.nextInt(); // 층 입력
		if (re % 2 == 0) {
			System.out.println("홀수를 입력해주세요.");
		} else {
			int fr = re / 2 + 1, ba = re / 2 + 1; // 공백이 들어가는 조건 fr앞 공백, ba뒷 공백 조건으로 사용
			for (int i = 1; i <= re; i++) { // i를 입력받은 re층 만큼 반복
				for (int j = 1; j <= re; j++) { // j는 입력받은 re의 열 만큼 반복
					if (j < fr) { // 앞부분이 공백이 들어가는 조건일 경우 공백 삽입
						System.out.print(" ");
					} else if (j > ba) { // 뒷 부분이 공백이 들어가는 조건일 경우 공백 삽입
						System.out.print(" ");
					} else {
						System.out.print(STAR);
					}
				}
				if (i < re / 2 + 1) { // 중간층까지 별 개수를 늘리도록 조건을 증가 및 감소
					fr--;
					ba++;
				} else { // 중간층 이후 별 개수를 줄이도록 조건을 증가 및 감소
					fr++;
					ba--;
				}
				System.out.println();
			}
		}
	}

	public static void main(String[] args) {
		StarExam starexam;
		starexam = new StarExam(); // static이 아닐 경우 new를 해야한다.
		// 클래스로 받아 오는것들은 static이다

		Scanner sc;
		sc = new Scanner(System.in);
		int num1;
		String replay;
		do {
			System.out.print("1~6 입력");
			num1 = sc.nextInt();

			switch (num1) { // 번호에 따라 case를 나눈다
			case 1:
				starexam.starOne();
				break;

			case 2:
				starexam.starTwo();
				break;

			case 3:
				starexam.starThree();
				break;

			case 4:
				starexam.starFour();
				break;

			case 5:
				starexam.starFive();
				break;

			case 6:
				starexam.starSix();
				break;

			default: // 다른 값이 들어올 경우
				System.out.println("잘못 입력했습니다.");
			}
			System.out.println("다시 하시겠습니까? (Y/N)");
			replay = sc.next(); // 비교할 값을 입력받음
		} while (replay.equals("y") || replay.equals("Y"));
		// replay가 "y"나 "Y"일 경우 true값으로 do를 반복

		System.out.println("끝났습니다."); // false일 경우 출력 후 종료
	}
}

실행 결과

반응형
반응형

상속

-기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것(무언가를 물려준다는 뜻)

-두 클래스를 부모와 자식 관계를 선언하는 것

-자식의 수는 부모의 수보다 같거나 많아야 한다

-재 사용성을 높이고 관리가 쉬움

-단 하나의 클래스만 상속 받을 수 있다.

 

-자식클래스는 부모의 필드 변수와 메서드를 받아 편집해서 사용할 수 있다.

상속 예제

 

정적 바인딩

**

동적 바인딩

-부모의 레퍼런스로 자식에 접근하는 것

-부모가 알고있는 것만 접근가능하다.

 

 

인터페이스

-인터페이스는 객체가 가져야할 특징, 특성 같은 것이지 클래스 X

-클래스가 인터페이스를 물려받을 수 있다.

-추상클래스는 내가 원하는 메소드를 추상메소드로 선언할 수 있는 반면

-인터페이스는 정적 변수나 메소드의 선언만이 올 수 있다

 

-모든 메소드 구현 = 클래스

-일부 메소드 구현 일부 메소드 선언 = 추상 클래스

-모든 메소드 선언 = 인터페이스

 

 

인터페이스

Implements: 인터페이스를 상속

클래스는 여러 개의 인터페이스를 implements 할 수 있다.

implements 예

 

//인터페이스 안에서는 복잡하지 않아 다중 상속이 가능하다

//클래스에 인터페이스를 연결하면 인터페이스에 상속된 다른 인터페이스도 접근 가능하다.

 

반응형
반응형

오버로딩

-동일한 함수명으로 여러 개의 함수를 제공하는 것

-구별할 수 있도록 매개변수 타입” or “타입 개수가 달라야 함

-리턴타입으로 구별할 수 없다

-(중요)같은 기능을 하는 애들끼리 묶어야 한다.

오버로딩

 

-같은 리턴 타입은 오버로딩 불가

 

 

오버로딩

 

This, This()

-자기 자신을 접근할 수 있게 해주는 객체 레퍼런스

-인스턴스 메소드의 첫번째 매개변수로 항상 존재, 만들 수는 없고 존재함

-Static 메소드에는 없다. 모든 객체가 사용하기 때문

This 예제

-메소드 안에서 필드와 매개변수의 이름이 같을 경우 지역 변수가 우선순위가 높기 때문에 매개변수가 지정됨

This 예제

-this를 앞에 붙여주면 필드가 지정됨

This 예제

-this()

This() 예제

 

Final

-값을 변경할 수 없기 때문에 선언과 동시에 초기화 시켜야 한다.

(X)

final선언의 잘못된 예시

(O)

 

FInal선언 예시

-final은 어떤 객체에서나 같은 값이기 때문에 static으로 선언

-static은 메모리 최적화 기능 중 하나

static 예시

 

반응형
반응형

인스턴스(instance)

인스턴스(instance)는 같은 클래스에 속하는 개개의 객체로, 하나의 클래스에서 생성된 객체를 말한다

추상화

본질은 바뀌지 않는다.

최적화

심플하게 만들기

클래스

-is ~a: 상속할 때 사용

-has ~a: 강사님이 마이크를 사용하다.

다형성

편하려고 사용

오버로딩

같은 이름으로 구분해서 부를 수 있다.

-ex) 여자 학생/ 남자 학생 //ㅇㅇ학생

OOP는 항상 사용자 위주로 만들어야 한다

(사용자들이 만족할 수 있도록 개발)

 

제어문 If()

-작업량을 줄이고 분기를 할 것인가를 고민할 때 자주 사용

 

if(조건){true} //조건이 참일 경우, {}을 사용 안 할 경우 첫 번째 ; 까지만 실행

  if else(조건){true} //첫 번째 조건이 거짓, 두 번째 조건이 참일 경우

  else{false} //조건이 거짓일 경우, 참일 경우 건너뜀

Ex)

If문 예제

결과

결과

 

제어문 Switch()

switch(value){

case 1:  //value가 값1일 경우

           break;  //없을 경우 전 라인이 실행됨

case 2:  //value가 값2일 경우

           break;

break;

}

 

Ex)

Switch문 예제

 

결과

결과

반복문 for()

for( 초기문 ; 조건문 ; 증감문 ){

// 조건문이 false일때 탈출

       // 블록내 마지막 라인을 지나고 증감문 실행 조건문 재실행

}

 

Ex)

for문 예제

 

결과 

결과

반복문 While()

While 조건문이 경우 블록안의 코드가 실행됨 거짓 경우 실행X

 

While(조건문){//블록이 없을 경우 첫번째 ‘;’ 까지 실행

 True; //true 경우 실행

       //증감문은 아무 곳에나 작성

}

 

while 사용시 주의사항

while문은 자기 조건식의 초기화를 바로 위에 해주어야 한다.

무한 루프가 돌지 않도록 주의해야 한다.

 

Break 탈출 반복문을 실행 중지할 사용

Continue 증감식 또는 조건식으로 이동(조건문에서 사용X)

 

함수를 만들 모듈로 쪼갠다

 

사각형 종이접기 횟수와 사각형 개수 구하기

사각형 종이접기 횟수와  사각형 개수 구하기

이중for, while문으로 구구단 만들기

이중 for문을 사용해 구구단 만들기

 

Int 정적 메모리 선언

Runtime: array, object 동적 메모리 선언

함수는 함수가 부른다

 

메소드

1.  객체를 만들어야 사용할 수 있는 메소드

2.  만들지 않아도 사용할 수 있는 메소드: static

 

Call by value

 

지역 변수 는 속해있는 method 안에서만 사용 가능

객체 안에 있는 가장 중요한 정보: 필드

필드 private 접근 권한자 사용. 보안이 좋아야 됨

필드와 메소드의 관계는 중요함!

Private((나만 사용가능) ex)지갑: 내 손만 접근가능(메소드)) -> default -> protected(상속 관계만 접근 가능) -> public(모두 접근 가능)

                     

인스턴스, 추상화, 클래스, 다형성, 오버로딩, 제어문, 반복문, 메소드

반응형

+ Recent posts