본문 바로가기
학원수업/12월

12/05 국비학원 자바수업 6회차(생성자, 제어문, 연습문제)

by 코딩마스터^^ 2022. 12. 5.

 

자바 API 

자바에서는 여러가지 이미 만들어서 배포하는 패키지들이 있다.

기본 패키지 : java.lang

 

java

java extension--->javax

 

지역변수는 호출할때 반드시 초기화를 해야한다.

 

()있는경우

1. 메소드(이름 뒤)

2. 생성자(전역변수의 초기화를 담당) 

     -디폴트 생성자 : 파라미터 없는 생성자

     -파라미터가 있는 생성자가 있음. 같은 이름의 생성자가 여러개 올 수 있다.

     -중복정의가 가능하다.

3. 

integer생성자는 디폴트 생성자

즉, 파라미터가 없는 경우

 

wrapper 클래스

왜 래퍼 클래스?

원시형에는 변수와 메소드를 소유할 수 없다.

원시형에 대응하는 클래스가 필요하다.

값을 갖는 연산자의 재료

 

string---파라미터---->int(integer)오토박싱

 

메소드 파라미터 넣으면 리턴값준다

파라미터는 사용자로부터 입력받는 값이다.

고객의 요구를 들어주는것이 우선이므로 파라미터가 중요하다. 

요구사항 충족하는 개발자

 

static 

인스턴스화 안함

 

연산자

값계산에 사용되는 계산용 기호 문자

 

산술연산자

% 나머지를 반환하는 연산자 

 

관계연산자

true false로 결과 반환

< > <= >= == !=

관계중요 조건문에 쓰임 if문에쓰임

=는 항상 오른쪽에 온다

!= 같지않다

 

논리연산자

&& 그리고

|| 또는

! 아니다

 

대입연산자

 

기타

 instanceof 타입체크

 

증감연산자

++ 1증가

-- 1감소

 

++num 1을 더하기 먼저 하고 대입하라

num++ 대입 먼저 하고 1을 더해라

switch 문

if문을 스위치로 바꿀수있어야

case문이 직관적이라 많이 쓴다 if보다

 

package dev_java.ch02;

public class P21_1 {

  public static void main(String[] args) {
    int i =1;
    switch(i){//조건에 따라 실행문을 진행할 수 있는 틀을 제공하는 예약어
      case 0: 
      ++i;//실행문
      
      case 1: //i가 1이므로 여기로온다.
      ++i; //i=2
      break; //switch문 탈출

      default:
      ++i; //i=3
    }//end of switch
    //insert here--i는 얼마일까요?
    System.out.println(i);
  }
  
}

코드를 누가 보더라도 알수있게 짜야한다.

 

증감 연산자는 변수의 값을 연산에 사용한 후에 변수의 값을 증감시킨다.

 

조건문

조건식을 제시하고 조건식의 결과에 따라 다음 코드의 수행 여부를 결정하는 문장이다.

조건식은 반드시 true 또는 false의 결과가 나오게 작성해야 된다.

조건문에는 if문과switch문이 있다.

 

boolean 가장 원시적인 조건식

 

  • if문
if(조건식){
   //조건식이 참일 경우 실행되는 문장들
   }

 

조건식의 결과는 boolean이다. true/false이다.

boolean아니면 컴파일 에러가 발생한다.

 

에러

1. 문법 에러-컴파일 타임 에러

2. 실행 에러-런타임 에러 

     찾기 더 어려움... 알고리즘의 오류 같은것들

 

if문을 사용할때 실행문이 하나이면 { } 괄호 생략 가능!!

 

  • if-else문
 public static void main(String[] args) {
 	int num=100;
 	
    if(num%2 == 0){
    //num을 2로 나눈 나머지가 0이냐? 즉 짝수냐?
   	 System.out.println("num은 짝수이다. ");
    } else{
    System.out.println("num은 홀수이다. ");
    }

 

  • switch문

 

 

&,&&

공통점

두 조건 모두 참일때만 실행문이 실행됨.

 

차이점 

한개이면 앞에 조건이 거짓이더라도 뒤에 조건을 따진다.// 결과는 같음. &랑 &&랑

두개이면 앞에 조건이 거짓인 경우 판정이 가능하므로 굳이 뒤에 조건을 따지지 않는다.

일의 양이 줄어든다.

TT-T

FT-F

TF-F

FF-F

package dev_java.ch02;

public class P21_2 {

  public static void main(String[] args) {
    int i =1;
    int j =2;
    // if((i==--j)&(++i<=j)){}
    if((i==--j)&&(++i<=j)){ //j=1 i=2 &&는 앞이 참이면 뒤도 따진다
      System.out.println("조건을 만족했을 때");
      //INSERT HERE -i와j의 값을 확인할 수 있다 없다?

    }
    else{
      System.out.println("조건을 만족하지 않았을 때");
    }
    //insert here -->i는 얼마?j는 얼마?
    System.out.println("i="+i+", j="+j);
  }
  
}

 

|| 

or이므로 하나만 참이면 참.

앞이 참이면 뒤는 안따짐.

 

반복문

for문 안에서 선언된 변수는 for문 안에서만 사용할수있다.

 

  • while
  • for
  • do-while

자유자재로 바꿀 수 있도록하기~!

 

선언이 먼저 사용이 나중

 

for문

int sum = 0;
for(int i = 1; i<=100; i++){
	sum+=i;
   }
   system.out.prinln("1부터 100까지 정수들의 합계 : "+sum);

for자리

1.선언 및 초기화

2. 조건식

3.증감연산자

 

무한루프 조심 방어구를 작성하기

 

 

 

while문

횟수가 정해지지 않은 반복 처리에 주로 사용.

조건식만 제시된다.

while문은 조건식에 선언과 초기화가 없다. 증감 연산자가 없다.

 

while (조건식) {
//조건식이 참일경우 실행되는 문장들
}

 

 

문제1

1부터 10까지의 합을 구하기

구구단 문제

i 는 단수 9번 반복--->정해져있어 for문

2중 for문 이중while문이 필요하다

j를 초기화하는 위치가 중요하다!! 다시 생각해보기

 

 

문제 2

1부터 10까지 세면서 짝수의 합을 구하는 프로그램을 작성하시오.

 System.out.printf("tot:%d, cnt:%d%n", tot, cnt);
  }
 
prit

ㅇㅎ

연습문제 

1-5

생성자는 클래스 이름과 같아야 한다.

전역변수는 초기화 없이 쓸수있다.

전역변수int i 디폴트값 0이다.

this.i 

package dev_java.Homework;

public class WhileTest1_5 {
  int i;
  int hap;
  //디폴트 생성자라고 부른다-디폴트 생성자는 파라미터를 결정해줄필요없다 생략하면 
  //JVM이 대신 생성해주어 전변들을 초기화 시킨다.
  public WhileTest1_5();{
    System.out.println("디폴트 생성자 호출 성공");
  }
  public WhileTest1_5(int i, int hap){
    System.out.println("파라미터가 두개인 생성자 호출 성공");
    this.i=i;
    this.hap=hap;
  }

  public static void main(String[] args) {
    WhileTest1_5 mi = new WhileTest1_5();
    WhileTest1_5 m2 = new WhileTest1_5(1,0);
    
  }
  
}

 

😢생성자

클래스에 대한 객체 생성 시 인스턴스 변수의 초기화를 담당하는 메소드이다.

리턴타입이 없고 클래스 이름과 같은 것이 오면 생성자이다.

리턴타입이 있으면 메소드이다.

원시형은 없다.

클래스 급만 있다.

반드시 대문자로 시작

객체를 생성할 때 사용한다.

메모리에 로딩시키는것

인스턴스 변수 : MyCar

호출하면 나오는것 : 주소번지

클래스의 변수와 메소드를 호출하기위해 인스턴스화 한다.

예약어 new 클래스이름();

이것을 생성자 호출이라고 한다.

파라미터가 없는것도 올수있다.

파라미터 있는것도 가능. 파라미터 여러개 가능.

생성자는 여러개 복제본 가질 수 있다.

인스턴스화 할 때 마다 복사본이 생긴다. 스태틱(고정)이 아니니까.

같은 타입의 다른 객체를 얼마든지 만들 수 있다.

전역변수를 초기화 하는 용도로 생성자를 사용한다.

생성자는 오버로딩이 가능하다. 같은이름의 다른 메소드 가능하다.

왜 그렇게 만드는지?

다 다른 사람이 네이버에 로그인 한다

그때마다 다 다른 인스턴스화 필요하다.

다 다르게 만든다.

여러사람에게 동일한 서비스를제공하므로 

생성자 통해서 멤버 변수의 초기화를 담당한다. 그래서 생략이 가능하다.

 

 

 

 

자동차를 대표하는 속성들이 파라미터

( ); 아무것도 없는 생성자---> 디폴트 생성자 JVM이 자동으로 생성한다. 파라미터 생략가능

 

Sonata Mycar = new Sonata(); 

                         참조형          생성자 ; 호출이다

                        클래스급이다

 

{ } 메소드 선언

( ); 메소드  호출

 

문제3

package dev_java.Homework;
/*문제 3

1부터 100까지 세면서 5의 배수이면 fizz를 출력하고

7의 배수이면 buzz를 출력하고

5와 7의 공배수이면 fizzbuzz를 출력하고

나머지는 숫자를 출력하는 프로그램을 작성하시오. 순서가 중요하다. 35는 fizz만 출력될수도 fizzbuzz 먼저 if문 쓰기
조건이 4가지이다. 
*/

public class Quiz3 {

  public static void main(String[] args) {

    for(int i=1;i<101;i++){
      // System.out.println(i);
    
    if(i%35==0){
    System.out.println("fizzbuzz");
    }
    else if(i%5==0){
    System.out.println("fizz");
    }else if(i%7==0){
    System.out.println("buzz");
    }else{
      System.out.println(i);
    }

  }

    }
  }

문제4

Scanner는 사용자에게 입력 장치로 입력을 받아 그 값을 변수에 저장하는 역할을 한다.

import 문으로 불러와서 사용할수있다.

NextInt는 사용자가 입력한 값을 정수형으로 받아온다.

package dev_java.Homework;

/* 문제 4 

0부터 9까지의 임의의 수를 채번하고 그 숫자를 맞추는 게임을 구현하시오. 기회는 단 5번 그후에는 빠져나오게.

java.util.Random

Random r =new Random();

힌트는 낮춰라 높여라

맞으면 축하합니다. 끝
 */
import java.util.Scanner;
import java.util.Random;

public class Quiz4_P {

  public static void main(String[] args) {
    Random random = new Random();
    Scanner scanner = new Scanner(System.in);

    int x = random.nextInt(10);// 0부터 10까지 범위이다 라는 의미
    System.out.println("채번한 숫자는====>" + x);
    int y = -1;
    while (true) {
      System.out.println("0부터 9까지 숫자를 하나 입력하세요.");
      y = scanner.nextInt();
      System.out.println("사용자가 선택한 값 :" + y);
      if (x == y) {// 맞다
        System.out.println("축하합니다.");
        scanner.close();// 스캐너 쓰고 해킹 안당하기 위해 닫는다.
        break;
      } else if (x > y) {
        System.out.println("올리세요.");
      } else if (x < y) {
        System.out.println("내리세요.");
      } else if (y == 10) {
        scanner.close();
        System.exit(0);
      }
    }
  }
}

문제4 미완성 내일 질문예정.

댓글