정리정돈 개발블로그~
[13일차] 국비교육 본문
<자동차 종합연습 수정>
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 |