Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Tags
more
Archives
Today
Total
관리 메뉴

정리정돈 개발블로그~

[13일차] 국비교육 본문

국비학원 교육 일지

[13일차] 국비교육

snooop 2022. 8. 4. 17:38

<자동차 종합연습 수정>

 

package 자동차종합연습;

public class Driver {
    // 매개변수 다형성을 위해서 자동차 부모 클래스를 매개변수로 전달
    // 두번째 매개변수는 승객 수
    // 세번째는 거리
    // 각 자동차의 모드 기능

    void drive(Car car, int passCnt, int dist, boolean mode) {
        if(mode) car.setMode(true);
        else car.setMode(false);
        int moveCnt = car.getMovingCnt(passCnt);
        System.out.println("총 비용 : " +car.getTotalCost(dist, moveCnt));// 총 비용
        System.out.println("주유 횟수 : "+car.getRefuelCnt(dist, moveCnt)); // 주유 횟수
        System.out.printf("이동시간 : %.3f\n",car.getMovingTime(dist, moveCnt));
    }
}
package 자동차종합연습;
// 추상 클래스 : setMode를 반드시 오버라이딩 해야하므로
public abstract class Car {
    int maxSpeed; // 최고속도
    int fuelEff; // 연비
    int fuelTank; // 연료 탱크
    int seatCnt; // 좌석 수
    String name; // 차량 이름

    //이동 횟수 구하기
    int getMovingCnt(int passCnt){
        if(passCnt % seatCnt != 0 ){ // 좌석수로 나눈 나머지가 있으면 승객이 남아 있으므로 추가 운행 필요
            return(passCnt /seatCnt)+1;
        }else return passCnt / seatCnt;
    }
    // 이동 비용 구하기
    int getTotalCost(int dist, int moveCnt){
        return (dist/fuelEff * 2000)*moveCnt;
    }
    // 주유 횟수 구하기
    int getRefuelCnt(int dist, int moveCnt){
        if(((dist * moveCnt)/fuelEff) % fuelTank != 0)
        return (((dist * moveCnt)/fuelEff) / fuelTank) +1;
        else return (((dist * moveCnt)/fuelEff) / fuelTank);
    }
    double getMovingTime(int dist, int moveCnt){
        return(double)dist * moveCnt / maxSpeed;
    }
    abstract void setMode(boolean isMode);

}
package 자동차종합연습;

import java.util.Scanner;

// 매개변수 다형성을 이용해서 moveCnt = car.getMovigCnt(passCnt)부터 줄일 수 있음
public class CarTotalExMain {
    public static void main(String[] args){
        final int[] dist = {0, 400, 150, 200, 300};
        Car car = null; // 부모 클래스로 참조 타입 변수, 자식 객체를 동적 바인딩 할 수 있다.
        Driver driver = new Driver();
        //동적 바인딩은 런타임중 결정 남
        Scanner sc = new Scanner(System.in);
        System.out.print("이동 지역 선택 [1]부산, [2]대전, [3]강릉, [4]광주 : ");
        int cityLoc  = sc.nextInt();
        System.out.print("이동할 승객 수를 입력 하세요 : ");
        int passCnt = sc.nextInt();
        System.out.print("이동할 차량 선택 : [1]스포츠카, [2]승용차, [3]버스 : ");
        int carSel = sc.nextInt();
        System.out.print("부가 기능 [1]ON, [2]OFF : ");
        int option = sc.nextInt();
        boolean isMode  = (option == 1) ? true : false;
        switch(carSel) {
            case 1 : car = new SportsCar("Ferrari"); break;
            case 2 : car = new Sedan("GV80"); break;
            case 3 : car = new Bus("BUS"); break;
            default :
                System.out.println("차량 선택이 잘 못 되었습니다.");
        }
        driver.drive(car, passCnt, dist[cityLoc], isMode);
    }
}
package 자동차종합연습;

    public class Bus extends Car {
        public Bus(String name) {
            this.name = name;
            this.maxSpeed = 150;
            this.fuelEff = 5;
            this.fuelTank = 100;
            this.seatCnt = 20;
        }
        @Override
        void setMode(boolean isMode) {
            if(isMode) fuelTank += 30;
        }
    }

package 자동차종합연습;

public class Sedan extends Car {

        public Sedan(String name) {
            this.name = name;
            this.maxSpeed=200;
            this.fuelEff =12;
            this.fuelTank = 45;
            this.seatCnt= 4;
        }

        @Override
        void setMode(boolean isMode) {
            if(isMode) seatCnt +=1;
        }
    }

package 자동차종합연습;

public class SportsCar extends Car {

        public SportsCar(String name) {
            this.name = name;
            this.maxSpeed=250;
            this.fuelEff =8;
            this.fuelTank = 30;
            this.seatCnt= 2;
        }

        @Override
        void setMode(boolean isMode) {
           if(isMode) maxSpeed *= 1.2;
        }
    }

<Enum 클래스>

  • 열거 타입은 한정된 값인 열거 상수 중에서 하나의 상수를 저장하는 타입
  • 서로 관련 있는 상수들끼리 모아 상수들을 정의
  • 왜 필요한가??  주석 없이 이해, 정한 값 이외에 다른 값이 들어오지 못하게 함
package 열거형연습;

import java.util.Scanner;

// 연관된 상수를 나열해 놓은 것 
// 자바의 열거형은 상수값과 타입 체크 기능이 추가 되어 있음
// 직업 :  1.학생, 2.회사원, 3.주부, 4.무직
public class EmunMainEx {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("직업을 입력 하세요 : ");
        int job = sc.nextInt();
        switch (job){
            case 1:
                System.out.println("학생 입니다.");
                break;
            case 2 :
                System.out.println("회사원 입니다.");
                break; 
            case 3:
                System.out.println("주부 입니다.");
                break;
            case 4:
                System.out.println("무직입니다.");
                break;
        }
    }
}

---> 주석이 없으면 1이 뭐를 뜻하는지 알 수 없음

 

 

package 열거형연습;

import java.util.Scanner;

import static 열거형연습.Common.*;

// 연관된 상수를 나열해 놓은 것
// 자바의 열거형은 상수값과 타입 체크 기능이 추가 되어 있음

public class EmunMainEx {
   
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("직업을 입력 하세요 : ");
        int job = sc.nextInt();
        switch (job){
            case STUDENT :
                System.out.println("학생 입니다.");
                break;
            case WORKER :
                System.out.println("회사원 입니다.");
                break;
            case HOUSEWIFE :
                System.out.println("주부 입니다.");
                break;
            case NONE:
                System.out.println("무직입니다.");
                break;
        }
    }
}
package 열거형연습;

public class Common {
    final static int STUDENT = 1;
    final static int WORKER = 2;
    final static int HOUSEWIFE = 3;
    final static int NONE = 4;
}

출력

직업을 입력 하세요 : 2
회사원 입니다.

<인터페이스로>

package 열거형연습;

import java.util.Scanner;


// 연관된 상수를 나열해 놓은 것
// 자바의 열거형은 상수값과 타입 체크 기능이 추가 되어 있음
interface Jobs{
    int STUDENT = 1; // public static final
    int WORKER = 2;
    int HOUSEWIFE = 3;
    int NONE = 4;
}
// 인터페이스는 상수 선언 하지 않아도 final static 이 붙기때문에 같음

interface Hobby {
    int BASEBALL = 1;
    int SOCCER = 2;
    int SING = 3;
    int NONE = 4;
}
public class EmunMainEx {

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("직업을 입력 하세요 : ");
        int hobby = sc.nextInt();
        switch (hobby){
            case Hobby.BASEBALL :
                System.out.println("학생 입니다.");
                break;
            case Hobby.SOCCER :
                System.out.println("회사원 입니다.");
                break;
            case Hobby.SING :
                System.out.println("주부 입니다.");
                break;
            case Hobby.NONE:
                System.out.println("무직입니다.");
                break;
        }
    }
}
package 열거형연습;

import java.util.Scanner;


// 연관된 상수를 나열해 놓은 것
// 자바의 열거형은 상수값과 타입 체크 기능이 추가 되어 있음
interface Jobs{
    int STUDENT = 1; // public static final
    int WORKER = 2;
    int HOUSEWIFE = 3;
    int NONE = 4;
}
// 인터페이스는 상수 선언 하지 않아도 final static 이 붙기때문에 같음

interface Hobby {
    int BASEBALL = 1;
    int SOCCER = 2;
    int SING = 3;
    int NONE = 4;
}
public class EmunMainEx {

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("직업을 입력 하세요 : ");
       if (Jobs.HOUSEWIFE == Hobby.SING){
           System.out.println("주부와 노래는 같다..");
           //인터페이스로 구현 시 문제점 : true로 뜸,,
        }
    }
}

 

 

package 열거형연습;

import java.util.Scanner;


// 연관된 상수를 나열해 놓은 것
// 자바의 열거형은 상수값과 타입 체크 기능이 추가 되어 있음

public class EmunMainEx {

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("직업을 입력 하세요 : ");
       if (Common.Jobs.HOUSEWIFE == Common.Hobby.SING){
           System.out.println("주부와 노래는 같다..");
          
        }
    }
}
package 열거형연습;

public class Common {
    interface Jobs{
        int STUDENT = 1; // public static final
        int WORKER = 2;
        int HOUSEWIFE = 3;
        int NONE = 4;
    }
// 인터페이스는 상수 선언 하지 않아도 final static 이 붙기때문에 같음

    interface Hobby {
        int BASEBALL = 1;
        int SOCCER = 2;
        int SING = 3;
        int NONE = 4;
    }
}

 

<enum 사용>

 

package 열거형연습;

public class EmunMainEx {

    public static void main(String[] args){
        MemberInfo member = new MemberInfo();
        member.name = "우영우";
        member.gender = Common.Gender.FEMALE;
        // 입력 받을 값이 MALE, FEMALE 만 쓸 수 있음
        member.job = Common.Job.STUDENT;
        member.addr = Common.Addr.KYUNGKI;
        System.out.println("이름 : " + member.name );
        System.out.println("성별 : " + member.gender);
        System.out.println("직업 : " + member.job);
        System.out.println("주소 : " + member.addr);
    }
}
class MemberInfo{
    String name;
    Common.Gender gender;
    Common.Job job;
    Common.Addr addr;
}
package 열거형연습;

public class Common {
    enum Gender {
        MALE, FEMALE
    }

    enum Job {
        STUDENT, WORKER, HOUSEWIFE, NONE
    }

    enum Addr {
        SEOUL, KYUNGKI, INCHUN, SUWON
    }
}

출력

이름 : 우영우
성별 : FEMALE
직업 : STUDENT
주소 : KYUNGKI

 

 

package 열거형연습;

public class Common {
    enum Gender {
        MALE, FEMALE
    }

    enum Job {
        STUDENT, WORKER, HOUSEWIFE, NONE
    }

    enum Addr {
        SEOUL, KYUNGKI, INCHUN, SUWON
    }
    enum Week{
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
}
package 열거형연습;
import 열거형연습.Common.*;

import java.util.Calendar;
// 주석 없이 이해
// 정한 값 이외에 다른 값이 들어오지 못하게 함

public class EmunMainEx {

    public static void main(String[] args){
        Week today = null;
        // 열거형에 대한 참조 변수 (정의 된 열거형 타입만 올 수 있음)
        // Calendar : 추상 클래스이기 때문에 객체를 생성하지 않음 (new 가 없음)
        // 왜?? --> 날짜가 정형화 되지 않음(나라마다 다를 수 있음)
        Calendar cal = Calendar.getInstance();
        int week = cal.get(Calendar.DAY_OF_WEEK); // 1 ~ 7(일요일부터)
        switch (week) {
            case 1:
                today = Week.SUNDAY;
                break;
            case 2:
                today = Week.MONDAY;
                break;
            case 3:
                today = Week.TUESDAY;
                break;
            case 4 :
                today = Week.WEDNESDAY;
                break;
            case 5 :
                today = Week.THURSDAY;
                break;
            case 6:
                today = Week.FRIDAY;
                break;
            case 7 :
                today = Week.SATURDAY;
                break;

        }
        System.out.println("오늘 요일 : " + today);
    }
}

 

출력

오늘 요일 : THURSDAY

 

package 열거형연습;

public class Common {
    enum Gender {
        MALE, FEMALE
    }

    enum Job {
        STUDENT, WORKER, HOUSEWIFE, NONE
    }

    enum Addr {
        SEOUL, KYUNGKI, INCHUN, SUWON
    }
    enum Week{
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
    enum Rainbow{
        RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET
    }
}

 

package 열거형연습;
import 열거형연습.Common.*;
// java.lang.enum (적어주지 않아도 됨 -> 기본이기 때문)
// values() : 열거체의 모든 상수를 저장한 배열을 생성하여 반환 합니다.
public class EmunMainEx {
    public static void main(String[] args) {
        Rainbow[] arr = Rainbow.values();
        for(Rainbow rb : arr){
            System.out.println(rb);
        }
    }
}

출력

RED
ORANGE
YELLOW
GREEN
BLUE
INDIGO
VIOLET

 

 

// valueOf() : 전달된 문자열과 일치하는 해당 열거체 상수를 반환
public class EmunMainEx {
    public static void main(String[] args) {
        Rainbow rb = Rainbow.valueOf("GREEN");
        System.out.println(rb);
        }
    }

출력

GREEN

 

// ordinal() : 해당 열거체 상수가 몇번째에 정의 되었는지 인덱스를 반환(0부터 시작)
 public class EmunMainEx {
    public static void main(String[] args) {
        int index = Rainbow.YELLOW.ordinal();
        System.out.println(index);
        }
    }

출력

2

 

<Date, Calendar 클래스>

  • Date : 1970년 1월 1일 0시 0분 0초부터 msec단위로 경과 시간을 운영체제로부터 읽어냄
  • SimpleDateFormat : 날짜를 원하는 포맷으로 파싱(패턴 매칭)

 

package 시간연습;

import java.util.Date;

// Date 클래스 : 1970년 1월 1일 0시 0분 0초 기준의 msec(1000분의 1초)단위의
// 경과시간을 운영체제로부터 얻어 냄
// SimpleDateFormat() : 날짜를 원하는 포맷을 파싱(패턴매칭) 이후 반환
public class DateMainEx {
    public static void main(String[] args){
        Date date = new Date();
        System.out.println(date);
        System.out.println(date.toString());


    }
}

출력

Thu Aug 04 11:14:48 KST 2022
Thu Aug 04 11:14:48 KST 2022

 

package 시간연습;

import java.text.SimpleDateFormat;
import java.util.Date;

// Date 클래스 : 1970년 1월 1일 0시 0분 0초 기준의 msec(1000분의 1초)단위의
// 경과시간을 운영체제로부터 얻어 냄
// SimpleDateFormat() : 날짜를 원하는 포맷을 파싱(패턴매칭) 이후 반환
public class DateMainEx {
    public static void main(String[] args){
        Date date = new Date();
        // yyyy : 년도를 4자리로 표현
        // yy : 년도를 2자리로 표현
        // MM : 월을 표시, 반드시 대문자 (소문자는 분으로 간주)
        // dd : 일을 표시
        // HH : 24시간제를 의미
        // hh : 12시간제를 의미
        // mm : 분을 의미
        // ss : 초를 의미
        // w : 몇번째 주
        SimpleDateFormat f1, f2, f3, f4, f5, f6, f7;
        f1 = new SimpleDateFormat("yyyy-MM-dd");
        f2 = new SimpleDateFormat("yy/MM/dd");
        f3 = new SimpleDateFormat("yyyy년 MM월 dd일");
        f4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        f5 = new SimpleDateFormat("HH:mm:ss");
        f6 = new SimpleDateFormat("오늘은 M월의 w번째 주, d번째 날 입니다."); 
        f7 = new SimpleDateFormat("yy/M/d");


        System.out.println(f1.format(date));
        System.out.println(f2.format(date));
        System.out.println(f3.format(date));
        System.out.println(f4.format(date));
        System.out.println(f5.format(date));
        System.out.println(f6.format(date));
        System.out.println(f7.format(date));
    }
}

출력

2022-08-04
22/08/04
2022년 08월 04일
2022-08-04 11:28:00
11:28:00
오늘은 8월의 32번째 주, 4번째 날 입니다.
22/8/4

 

-> yy/M/d 는 0만 지워줄 뿐 11월이 되어도 똑같이 11월 나옴

 

package 캘린더연습;
// Calendar 클래스 : 정적메소드인 getInstance()를 이용하여 현재 운영체제에
// 설정된 시간을 기준으로 Calendar 하위 객체를 얻을 수 있습니다.
// 추상클래스이므로 new 키워드를 사용해 객체를 생성 할 수 없습니다.
// (이유는 각 나라마다 날짜 및 시간을 표시하는 방법이 다르기 때문)
// 포함된 필드 전부 클래스(static)변수 입니다.

import java.util.Calendar;

public class CalendarMain {
    public static void main(String[] args){
        // getInstance()는 정적메소드 이므로 클래스 이름을 사용한다.
        Calendar now = Calendar.getInstance();
        System.out.println(now.get(Calendar.YEAR));
        // MONTH는 배열의 인덱스이므로 실제달을 표시하려면 1을 더해야 함
        System.out.println(now.get(Calendar.MONTH)+1);
        System.out.println(now.get(Calendar.DAY_OF_MONTH));
        // 달에서 몇번째 날인지 (며칠)
        System.out.println(now.get(Calendar.DAY_OF_WEEK));
        // 주에서 몇번째 날인지 
        System.out.println(now.get(Calendar.AM_PM));
        System.out.println(now.get(Calendar.HOUR));
        System.out.println(now.get(Calendar.MINUTE));
        System.out.println(now.get(Calendar.SECOND));

    }
}

출력

2022
8
4
5
0
11
44
3

 

public class CalendarMain {
    public static void main(String[] args){
        // getInstance()는 정적메소드 이므로 클래스 이름을 사용한다.
        Calendar now = Calendar.getInstance();
        int year = now.get(Calendar.YEAR);
        int month = now.get(Calendar.MONTH) +1;
        int day = now.get(Calendar.DAY_OF_MONTH);
        System.out.println("오늘은 " + year+"년 " + month +
                "월 "+ day + "일 입니다.");
        // calendar 클래스를 사용

        Date now1 = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("오늘은 yyyy년 M월 d일 입니다.");
        System.out.println(sdf.format(now1));
        // date 클래스를 사용
    }
}

출력

오늘은 2022년 8월 4일 입니다.
오늘은 2022년 8월 4일 입니다.

<wrapper 클래스> -> 중요하지만 자동으로 됨

 

<Arrays 클래스> 

 

binarySearch() 메소드 --> 정렬이 되어있어야 가능

sort() 메소드 --> 전달받은 배열의 모든 요소를 오름차순으로 정렬함

 

package 배열클래스;
// Arrays 클래스 : 배열을 다루기 위한 다양한 메소드를 포함하고 있음
// java.util 패키지에 있음
// 배열의 갯수를 입력 받기
// 배열의 갯수 만큼 임의의 수를 생성하기
// 찾을 수를 입력 받음

import java.util.Arrays;
import java.util.Scanner;

public class ArrayMainEx {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("배열의 개수 입력 : ");
        int num = sc.nextInt();
        int[] arr = new int[num];
        for(int i = 0; i < num; i++) {
            arr[i] = (int)(Math.random() * num) + 1;
        }
        // Arrays.toString() : 배열의 요소를 문자열로 반환
        System.out.println(Arrays.toString(arr));
        // Arrays.sort() : 정렬
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        System.out.print("찾을 수를 입력 : ");
        int findNum = sc.nextInt();
        // binarySearch() : 이분 검색 기능
        int result = Arrays.binarySearch(arr, findNum);
        if(result >= 0) System.out.println(result);
        else System.out.println("찾는 수가 없습니다.");
    }
}

 

출력

배열의 개수 입력 : 12
[5, 3, 5, 8, 9, 9, 1, 11, 5, 5, 5, 6]
[1, 3, 5, 5, 5, 5, 5, 6, 8, 9, 9, 11]
찾을 수를 입력 : 5
5

 

 

 // <> 안에 객체만 들어올 수 있음
 // asList() : 일반 배열을 List 타입으로 변환
List<int[]> list = Arrays.asList(arr);

<알고리즘 : 첫글자만 뽑아내기>

package KMP;

import java.util.Scanner;

// "Knuth-Morris-Pratt"형태로 첫글자는 대문자, 그리고 성과 성사이는 '-'으로 이어짐.
// 결과는 성의 첫글자인 대문자만 표시
// 입력은 한 줄로 이루어져 있고 100글자 이내의 영어 대문자/소문자로 이루어짐
public class KmpMain {
    public static void main(String[] args){
        // 문자열 입력을 받기 위한 스캐너 객체 생성
        // 문자열 입력에 대한 가이드 문구 출력
        // 문자열 입력 받기
        // 입력 받은 문자열 길이 만큼 반복문 수행

        Scanner sc = new Scanner(System.in);
        System.out.print("글자 입력 : ");
        String name = sc.next();
        // 첫번째 방법 : charAt(인덱스)로 문자의 ASCII 확인 후 'A' ~ 'Z' 사이 문자만 출력
       for(int i = 0; i< name.length(); i++ ){
           if(name.charAt(i) >= 'A' && name.charAt(i) <= 'Z'){
               System.out.print(name.charAt(i));
           }
       }
      // 두번째 방법 : 0번째 문자 출력, 그리고 '-' 다음의 문자 출력
        for(int i = 0; i< name.length(); i++ ){
            if(i == 0) System.out.print(name.charAt(i));
               else{
                   if(name.charAt(i) == '-') System.out.print(name.charAt(i+1));
            }

        }
        // 세번째 방법 : split() 메소드로 자르고 각자 0번째 인덱스
        String[] splitName = name.split("-");
        for(int i = 0; i > splitName.length; i++){
            System.out.print(splitName[i].charAt(0));
        }
        // 다른 표현
        for(String e : splitName){
            System.out.print(e.charAt(0));
        }

        // 네번째 방법 : 문자 배열로 변경 후 'A' ~ 'Z' 사이 문자만 출력
         char[] chName = name.toCharArray();
         for(int i = 0; i< chName.length; i++){
             if(chName[i] >= 'A' && chName[i] <= 'Z'){
                 System.out.print(name.charAt(i));
         }
         }
    }
}

출력

글자 입력 : Knuth-Morris-Pratt
KMP

 

<알고리즘 : 8진수를 2진수로 변환>

 

package 팔진수이진수;

import java.util.Scanner;

// 입력 받은 8진수를 2진수로 변환하기
// 0이 앞에 오면 안됨
public class TransMainEx {
    public static void main(String[] args){


        final String[] midBin = {"000", "001", "010", "011", "100","101", "110","111" };
        final String[] fBin = {"", "1", "10", "11", "100", "101","110", "111"};
        Scanner sc = new Scanner(System.in);
        System.out.print("8진수 : ");
        String oct = sc.next();
        for(int i= 0;i< oct.length(); i++){
            // 0이 입력되는 경우
            if(oct.length() == 1 && oct.charAt(0) - '0' == 0){
                System.out.print("0");
                break;
            }
            if(i == 0){ // 첫번째 8진수 값 --> 문자로 입력 받아서 '0'빼줘야 숫자로 변환 하므로
                        // 앞에 0을 생략해주는 fBin 배열 이용
                System.out.print(fBin[oct.charAt(0)- '0']);
            }else{
                System.out.print(midBin[oct.charAt(i) -'0']);
            }
        }
        System.out.println();
    }
}

출력

8진수 : 051
101001

<System 클래스>

 

package 시스템클래스;

import java.util.Scanner;

public class SystemMain {
    public static void main(String[] args){
        Scanner sc= new Scanner(System.in);

        while(true) {
            String input = sc.next();
            if(input.equals("quit")) {
                System.out.println("시스템을 강제 종료 합니다.");
                System.exit(0); // 현 위치에서 프로그램이 종료 됨
                // exit 파일 읽는데 읽히지 않음, 예외사항이 생겼을 경우 -> 프로그램 종료
                // 강제 종료 : 운영체제나 jvm이 죽임

            }
            System.out.println("입력값은 " + input + "입니다.");
        }
    }
}

 

어어어
입력값은 어어어입니다.
djkfajl
입력값은 djkfajl입니다.
quit
시스템을 강제 종료 합니다.

 

<System.gc()>

 

static 

heap :  new가 붙은 배열, 문자열, 객체  (ex. new Scanner가 저장되어있음)

            만약 sc가 없어지면 new Scanner에 있는 메모리 주인이 없어짐 --> 가비지 컬렉터가 이걸 지워줌

            강제로 System.gc()로 불러서 지우면 코드가 꼬이게 됨 -> 잘 사용하지 않음

stack : Scanner sc 에서 sc는 스택에 있으면서 heap에 저장되어있는 메모리를 참조하고 있음

 

 

package 시스템클래스;
// 현재 시간 읽기 : System.currentTimeMillis(); // 1000/1초
// 현재 시간 읽기 : System.nanoTime() // 1000000 / 1 초


import static java.lang.Thread.sleep;

public class SystemMain {
    public static void main(String[] args) throws InterruptedException {
        int[] data = new int[1000];
        int cnt = 0; // 총 검색 횟수
        int randVal = (int) (Math.random() * 1000) + 1;
        for (int i = 0; i < 1000; i++) {
            data[i] = i + 1;
        }
        long timeStart = System.currentTimeMillis();
        for (int i = 0; i < 1000; i++) {
            cnt++;
            sleep(1);
            if (randVal == data[i]) {
                System.out.println("찾은 위치 : " + (i + 1));
                break;
            }
        }
        long timeEnd = System.currentTimeMillis();
        System.out.println("총 검색 횟수 : " + cnt);
        System.out.println("총 소요된 검색 시간 : " +
                (timeEnd - timeStart) + "밀리초 입니다.");
        // 찾는데 몇초가 걸리는지 보기 위함

        System.out.println(System.getProperty("os.name"));
        System.out.println(System.getProperty("user.name"));
        System.out.println(System.getProperty("os.home"));
    }
}

출력

찾은 위치 : 110
총 검색 횟수 : 110
총 소요된 검색 시간 : 218밀리초 입니다.
Windows 10
user1
null

 

<StringTokenizer>

문자열이 특정구분자로 연결되어  있는 경우, 구분자를 기준으로 부분 문자열 위해서는 String의 split()메소드를 이용하거나 , java.util 패키지의 StringTokenizer클래스를 이용 -> StringTokenizer클래스가 성능 우수

 

package 문자열분리;

import java.util.Scanner;
import java.util.StringTokenizer;

// StringTokenizer 클래스 : 특정 구분자로 연결되어 있는 경우,
// 구분자 기준으로 문자열을 자름 (String의 split 메소드와 유사함)
// countTokens() : 꺼내지 않고 남아 있는 토큰의 수
// hasMoreTokens() : 남아 있는 토큰이 있는지 여부 확인
// nextToken() : 토큰을 하나씩 꺼내 옴
public class StringSplit {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("이름을 / 기준으로 연속 입력 : ");
        String names = sc.nextLine();
        StringTokenizer st = new StringTokenizer(names, "/");
        String[] nameStr = new String[st.countTokens()];
        int idx = 0;
        while(st.hasMoreTokens()){
            nameStr[idx++] = st.nextToken();
        }
        for(String e : nameStr){
            System.out.print(e + " ");
        }
        System.out.println();
    }
}

출력

이름을 / 기준으로 연속 입력 : 우영우/동그라미/최수연/이준호
우영우 동그라미 최수연 이준호

<split메소드>

 

public class StringSplit {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("이름을 / 기준으로 연속 입력 : ");
        String names = sc.nextLine();
        String[] nameStr = names.split("/");
        for(String e : nameStr) {
            System.out.print(e + " ");
        }
        System.out.println();
    }
}

출력

이름을 / 기준으로 연속 입력 : 우영우//동그라미/최수연/이준호
우영우  동그라미 최수연 이준호

split ----> //을 두개 주면 공백이 두개가 됨.!!

               더 디테일함 

 

public class StringSplit {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("이름을 / 기준으로 연속 입력 : ");
        String names = sc.nextLine();
        String[] nameStr = names.split("/");
        for(int i = 0; i < nameStr.length; i++){
            System.out.println(i+ "번째" +nameStr[i] + " ");
        }
        System.out.println();
    }
}

출력

이름을 / 기준으로 연속 입력 : 우영우/동그라미//최수연//이준호
0번째우영우 
1번째동그라미 
2번째 
3번째최수연 
4번째 
5번째이준호

 

 

public class StringSplit {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("이름을 , 기준으로 연속 입력 : ");
        String names = sc.nextLine();
       /* String[] nameStr = names.split("/");
        for(int i = 0; i < nameStr.length; i++){
            System.out.println(i+ "번째" +nameStr[i] + " ");
        }
        System.out.println();*/
        StringTokenizer st = new StringTokenizer(names, ",");
        for(int i = 0; st.hasMoreTokens(); i++){
            System.out.print(i + "번째" + st.nextToken() + " ");
        }
        System.out.println();
    }
}

출력

이름을 , 기준으로 연속 입력 : 우영우, 동그라미, 최수연,,이준호
0번째우영우 1번째 동그라미 2번째 최수연 3번째이준호

-> ,, 두개 넣어도 감지 하지 않음 

 

<class클래스>

 

public class StringSplit {
    public static void main(String[] args) {
        Car car = new Car();
        Class cls = car.getClass(); // Class 클래스
        System.out.println(cls.getName()); // 패키지이름과 클래스이름 입력
        System.out.println(cls.getSimpleName()); // 클래스 이름
        System.out.println(cls.getSuperclass()); // 항상 Object(최고조상 클래스)
        System.out.println(cls.getPackage().getName()); //패키지 이름 
    }
}
class Car{}

출력

문자열분리.Car
Car
class java.lang.Object
문자열분리

'국비학원 교육 일지' 카테고리의 다른 글

[15일차] 국비교육  (0) 2022.08.08
[14일차] 국비교육  (0) 2022.08.05
[12일차] 국비교육  (0) 2022.08.03
[11일차] 국비교육  (0) 2022.08.02
[10일차] 국비교육  (0) 2022.08.01