24 분 소요


1. Chapter1

1.1 Hello Wolrd

아래와 같이 실행할 수 있다. (Run(Ctrl+F11) 을 눌러 실행)

public class _01_HelloWorld {
	public static void main(String[] args) {
		System.out.println("안녕하세요!");
	}
}


1.2 자료형

자바는 기본 자료형과 객체(레퍼런스, 참조) 자료형으로 나뉨

자바의 기본 자료형(8가지)⭐⭐

자료(데이터)형 예약어(명령어) 비트(바이트) 값의 저장범위
논리형 boolean 1 (true, false)
문자형 char 16(2) 유니코드, 수치로는 0 ~ 65535
수치형(바이트) byte 8(1) -128 ~ 127
수치형(16비트 정수) short 16(2) -32,768 ~ 32,767
수치형(정수) int 32(4) -2,147,438,648 ~ 2,147,438,647
수치형(64비트 정수) long 64(8) -9223372036854775080 ~ 9223372036854775080
수치형(실수형) float 32(4) 3.40282347E+38 ~1.40239846E-45, IEEE 754-1985 표준
수치형(64비트 실수형) double 64(8) 1.79769313486231570E+308 ~ 4.94065645841265544E-324, IEEE 754- 1985 표준

자바의 객체(레퍼런스, 참조) 자료형

문자열(String), 배열형, 열거형, 클래스형, 인터페이스형

⚠️ 문자열은 객체 자료형이다.

public class _02_DataTypes {
	public static void main(String[] args) {
		System.out.println("안녕하세요"); // 문자열
		System.out.println(12); // 정수
		System.out.println(-34); // 정수
		System.out.println(3.14); // 실수
		System.out.println(true); // 불리언(참)
		System.out.println(false); // 불리언(거짓)

		System.out.println(123 + 345);
	}
}


1.3 변수

public class _03_Variables {
	public static void main(String[] args) {
		String name = "박시은";
		char grade = 'A';
		int hour = 15;
		double score = 90.5;
		boolean pass = true;

		System.out.println(name + "님 반갑습니다!");
		System.out.println("현재 시각은 " + hour + "시입니다.");
		System.out.println(name + "님의 평균 점수는 " + score + "입니다.");
		System.out.println("학점은 " + score + "입니다.");
		System.out.println("이번 시험에 합격했을까요? " + pass);
	}
}


int와 long

  • int
    • 32비트 부호 있는 정수를 나타내는 자료형
    • 범위: -2,147,483,648 ~ 2,147,483,647
    • 예시: int number = 10;
  • long
    • 64비트 부호 있는 정수를 나타내는 자료형
    • 범위: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
    • 예시: long bigNumber = 10000000000L; (마지막에 L을 붙여야 한다.).


double과 float

  • double

    • 64비트 IEEE 부동 소수점을 나타내는 자료형
    • 더 높은 정밀도를 제공한다.
    • 예시: double number = 3.14;
  • float
  • 32비트 IEEE 부동 소수점을 나타내는 자료형 더 낮은 정밀도를 가지며, 더 적은 메모리를 사용한다. 예시: float number = 3.14f; (마지막에 f를 붙여야 한다.).


1.4 상수

  • final 키워드로 상수를 선언할 수 있다.
  • 상수 이름은 대문자로 짓는다.
public class _04_Constants {
	public static void main(String[] args) {
		final String KR_COUNTRY_CODE ="+82";
		System.out.println(KR_COUNTRY_CODE);
	}
}


1.5 형 변환

public class _05_TypeCasting {
	public static void main(String[] args) {
		// (1) 정수형에서 실수형으로 형 변환(int to float, double)
		int score = 93;
		System.out.println(score); // 93
		System.out.println((float) score); // 93.0
		System.out.println((double) score); // 93.0

		// (2) 실수형에서 정수형으로 형 변환(float, double to int)
		float score_f = 93.3F;
		double score_d = 98.8;
		System.out.println((int) score_f); // 93
		System.out.println((int) score_d); // 98

		// (3) 정수 + 실수 연산
		score = 93 + (int) 98.8; // 93 + 98
		System.out.println(score); // 191

		score_d = (double) 93 + 98.8; // 93.0 + 98.8
		System.out.println(score_d); // 191.8

		// (4) 변수에 형변환된 데이터 집어넣기
		// (4.1) int -> long -> float -> double (자동 형변환)
		double convertedScoreDouble = score; // 191 -> 191.0


		// (4.2) double -> float -> long -> int (수동 형변환)
		int convertedScoreInt = (int) score_d; // 191.8 -> 191
	}
}
public class _05_TypeCasting {
	public static void main(String[] args) {
		// (1) 숫자를 문자열로
		String s1 = String.valueOf(93); // 방법1
		s1 = Integer.toString(93); // 방법2
		System.out.println(s1); // 93

		String s2 = String.valueOf(98.8); // 방법1
		s2 = Double.toString(98.8); // 방법2
		System.out.println(s2); // 98.8

		// (2) 문자열을 숫자로
		int i = Integer.parseInt("93");
		System.out.println(i); // 93

		double d = Double.parseDouble("98.8");
		System.out.println(d); // 98.8
	}
}


퀴즈 #1

문제

  • 버스 도착 정보를 출력하는 프로그램을 작성하시오. 각 정보는 적절한 자료형의 변수에 정의합니다. (파일명: _Quiz_01.java)
  • 버스 번호는 “1234”, “상암08” 과 같은 형태
  • 남은 시간은 분 단위 (예: 3분, 5분)
  • 남은 거리는 km 단위(예: 1.5km, 0.8km)


정답

public class _Quiz_01 {
	public static void main(String[] args) {
		String busNo = "08";
		int minute = 3;
		float distance = 1.2f;

		System.out.println("상암" + busNo + "번 버스");
		System.out.println("약 " + minute + "분 후 도착");
		System.out.println("남은 거리 " + distance + "km");

	}
}



2. Chapter2

2.1 산술 연산자

public class _01_Operater1 {
	public static void main(String[] args) {
		// (1) 일반 연산
		System.out.println(4 + 2); // 6
		System.out.println(4 - 2); // 2
		System.out.println(4 * 2); // 8
		System.out.println(4 / 2); // 2
		System.out.println(5 / 2); // 2
		System.out.println(2 / 4); // 0
		System.out.println(5 % 2); // 1

		// (2) 우선 순위 연산
		System.out.println(2 + 2 * 2); // 6
		System.out.println((2 + 2) * 2); // 8

		// (3) 변수를 이용한 연산
		int a = 20;
		int b = 10;
		int c;

		c = a + b;
		System.out.println(c); // 30

		c = a - b;
		System.out.println(c); // 10

		c = a * b;
		System.out.println(c); // 200

		c = a / b;
		System.out.println(c); // 2

		c = a % b;
		System.out.println(c); // 0

		// (4) 증감 연산자 ++, --
		int val;
		val = 10;
		System.out.println(val); // 10
		System.out.println(++val); // 11
		System.out.println(val); // 11

		val = 10;
		System.out.println(val); // 10
		System.out.println(val++); // 10
		System.out.println(val); // 11

		val = 10;
		System.out.println(val); // 10
		System.out.println(--val); // 9
		System.out.println(val); // 9

		val = 10;
		System.out.println(val); // 10
		System.out.println(val--); // 10
		System.out.println(val); // 9

	}
}


산술 연산자 활용 예시 : 은행 대기번호 표

public class _01_Operater1 {
	public static void main(String[] args) {
		int waiting = 0;
		System.out.println("대기 인원 : " + waiting++); // 대기 인원 : 0
		System.out.println("대기 인원 : " + waiting++); // 대기 인원 : 1
		System.out.println("대기 인원 : " + waiting++); // 대기 인원 : 2
		System.out.println("총 대기 인원 : " + waiting); // 총 대기 인원 : 3
	}
}
  • 처음 번호표를 뽑았을 때, 대기를 아무도 하고 있지 않으면 대기 인원 : 0
  • 차후 번호표를 뽑을 때마다 1씩 증가함

따라서 문장 결과를 출력한 후 연산을 해야하므로 waiting++


2.2 대입 연산자


public class _02_Operater2 {
	public static void main(String[] args) {

		// 대입 연산자
		int num = 10;

		num = num + 2;
		System.out.println(num); // 12

		num = num - 2;
		System.out.println(num); // 10

		num = num * 2;
		System.out.println(num); // 20

		num = num / 2;
		System.out.println(num); // 10

		num = num % 2;
		System.out.println(num); // 0

		// 복합 대입 연산자
		num = 10;

		num += 2; // num = num + 2;
		System.out.println(num); // 12

		num -= 2; // num = num - 2;
		System.out.println(num); // 10

		num *= 2; // num = num * 2;
		System.out.println(num); // 20

		num /= 2; // num = num / 2;
		System.out.println(num); // 10

		num %= 2; // num = num % 2;
		System.out.println(num); // 0
	}
}


2.3 비교 연산자

public class _03_Operator3 {
	public static void main(String[] args) {
		System.out.println(5 > 3); // true
		System.out.println(5 >= 3); // true
		System.out.println(5 >= 5); // true
		System.out.println(5 >= 7); // false
		System.out.println(5 < 3); // false
		System.out.println(5 <= 3); // false

		System.out.println(5 == 5); // true
		System.out.println(5 == 3); // false
		System.out.println(5 != 5); // false
		System.out.println(5 != 3); // true
	}
}


2.4 논리 연산자

논리 연산자

public class _04_Operator4 {
	public static void main(String[] args) {
		boolean 김치찌개 = true;
		boolean 계란말이 = true;
		boolean 제육볶음 = false;

		// 하나라도 true 이면 true (|| , Or 연산)
		System.out.println(김치찌개 || 계란말이 || 제육볶음); // true

		System.out.println((5 > 3) || (3 > 1)); // true
		System.out.println((5 > 3) || (3 < 1)); // true
		System.out.println((5 < 3) || (3 < 1)); // false


		// 모두 true 이면 true (&&, And 연산)
		System.out.println(김치찌개 && 계란말이 && 제육볶음); // false

		System.out.println((5 > 3) && (3 > 1)); // true
		System.out.println((5 > 3) && (3 < 1)); // false

	}
}


논리 부정 연산자

public class _04_Operator4 {
	public static void main(String[] args) {
		System.out.println(!true); // false
		System.out.println(!false); // true
		System.out.println(!(5 == 5)); // false
		System.out.println(!(5 == 3)); // true
	}
}


2.5 삼항 연산자

결과 = (조건) ? (참의 경우 결과값) : (거짓의 경우 결과값)

public class _05_Operator5 {
	public static void main(String[] args) {
		int x = 5;
		int y = 3;

		int max = (x > y) ? x : y;
		System.out.println(max); // 5

		int min = (x < y) ? x : y;
		System.out.println(min); // 3

		boolean b = (x == y) ? true : false;
		System.out.println(b); // false

		String s = (x != y) ? "달라요" : "같아요";
		System.out.println(s); // "달라요"
	}
}


퀴즈 #2

문제

  • 어린이 키에 따른 놀이 기구 탑승 가능 여부를 확인하는 프로그램을 작성하시오.(파일명: _Quiz_02.java)
  • 키가 120 cm 이상인 경우에만 탑승 가능
  • 삼항연산자 사용


정답

public class _Quiz_02 {
	public static void main(String[] args) {
		int height = 121;
		String result = (height >= 120) ? ("키가 " + height + " 이므로 탑승 가능합니다.") : ("키가 " + height + " 이므로 탑승 불가능합니다.");
		System.out.println(result); // 키가 121 이므로 탑승 가능합니다.
	}
}



3. Chapter3

3.1 문자열

public class _01_String1 {
	public static void main(String[] args) {
		String s ="I Like Java";
		System.out.println(s); // "I Like Java"

		// (1) 문자열의 길이
		System.out.println(s.length()); // 11

		// (2) 대소문자 변환
		System.out.println(s.toUpperCase()); // "I LIKE JAVA"
		System.out.println(s.toLowerCase()); // "i like java"

		// (3) 포함 관계
		// (3.1) 포함된다면 true, 포함되지 않는다면 false
		System.out.println(s.contains("Java")); // true
		System.out.println(s.contains("C#")); // false

		// (3.2) 위치 정보 확인
		System.out.println(s.indexOf("Java")); // 7
		System.out.println(s.indexOf("C#")); // 포함되지 않는다면 -1
		System.out.println(s.indexOf("Like")); // 처음 일치하는 위치 정보 (2)
		System.out.println(s.lastIndexOf("Java")); // 마지막 일치하는 위치 정보 (7)
		System.out.println(s.startsWith("I Like")); // 이 문자열로 시작하면 true (아니면 false)
	System.out.println(s.endsWith("Java")); // 이 문자열로 끝나면 true (아니면 false)
	}
}
public class _02_String2 {
	public static void main(String[] args) {
		String s = "I Like Java";

		// (1) 문자열 변환
		System.out.println(s.replace("Java", "Python")); // "I Like Python"

		// 인덱스 기준 3부터 시작(이전 내용은 삭제), 단 s 변수에 변환 결과가 반영되는 것은 아니다.
		System.out.println(s.substring(4)); // "ke Java"

		// "Like"가 시작하는 위치부터 끝까지의 부분 문자열을 출력
		System.out.println(s.substring(s.indexOf("Like"))); // "Like Java"

		// "Like"가 시작하는 위치부터, "Java"가 시작하는 위치 바로 앞까지
		System.out.println(s.substring(s.indexOf("I"), s.indexOf("Java"))); // "I Like"

		// (2) 공백 제거
		s = "       I love Java.          ";
		System.out.println(s.trim()); // 앞 뒤 공백 제거

		// (3) 문자열 결합
		String s1 = "Java";
		String s2 = "Python";
		System.out.println(s1 + ", " + s2); // "Java, Python"
		System.out.println(s1.concat(", ").concat(s2)); // "Java, Python"
	}

}


3.2 문자열 비교

  • 자바에서 문자열을 비교하려고 할 때는 equals를 사용해야 한다.
  • == 연산자는 문자열의 메모리 주소를 비교하므로, 두 문자열이 동일한 내용을 가지더라도 메모리 주소가 다르다면 false를 반환하기 때문이다.
public class _03_StringCompare {
	public static void main(String[] args) {
		// (1) 문자열 비교
		String s1 = "Java";
		String s2 = "Python";

		// 문자열 내용이 같으면 true, 다르면 false
		System.out.println(s1.equals(s2)); // false
		System.out.println(s1.equals("Java")); // true

		// 대소문자 구분 없이 문자열 내용이 같은지 여부 체크
		System.out.println(s2.equalsIgnoreCase("PYTHON")); // true

		// 문자열 비교 심화
		s1 = "1234";
		s2 = "1234";
		System.out.println(s1.equals(s2)); // true
		System.out.println(s1==s2); // true (참조)

		s1=new String("1234");
		s2=new String("1234"); // (newString 독립적인 메모리이므로 주소를 가짐)
		System.out.println(s1.equals(s2)); // true
		System.out.println(s1==s2); // false
	}
}



3.3 특수 문자(이스케이프 문자)

\n : 줄바꿈

public class _04_EscapeSequence {
	public static void main(String[] args) {
		System.out.println("자바가\n너무\n재밌어요"); // \n : 줄바꿈
		System.out.println("---------------");
		System.out.println("오늘의 운세는?\t행운"); // \t : 탭
		System.out.println("---------------");
		System.out.println("C:\\Program Files\\Java"); // \\ : 역슬래시
		System.out.println("---------------");
		System.out.println("단비가 \"냐옹\" 이라고 했어요"); // \" : 큰 따옴표
		System.out.println("단비가 \'냐옹\' 이라고 했어요"); // \' : 작은 따옴표
	}
}


퀴즈 #3

문제

  • 주민등록번호에서 생년월일 및 성별까지만 출력하는 프로그램을 작성하시오(파일명: _Quiz_03.java)
  • 주민등록번호는 13자리의 숫자로 구성
  • 앞 6자리는 생년월일 정보, 뒷 7자리 중 첫 번째 숫자는 성별 정보
  • 입력 데이터는 -을 포함한 14자리의 문자열 형태

예시

  • “901231-1234567”인 경우 901231-1까지 출력
  • “030708-4567890”인 경우 030708-4까지 출력


정답

public class _Quiz_03 {
	public static void main(String[] args) {
		String ID = "901231-1234567";
		System.out.println(ID.substring(0, 8)); // 0 위치부터 8 위치 직전까지
		System.out.println(ID.substring(0, ID.indexOf("-") + 2)); // 0 위치부터 하이픈 위치 +2 직전까지(똑같은 결과)
	}
}



5. Chapter4

5.1 If~else

public class _01_If {
	public static void main(String[] args) {
		int height = 120;
		boolean people = false;

		if (height >= 130 || people == true) {
			System.out.println("탑승 가능합니다.");
		}
		else {
			System.out.println("탑승할 수 없습니다.");
		}

	}
}


5.2 Else If

public class _02_ElseIf {
	public static void main(String[] args) {
		// 한라봉 에이드가 있으면 +1
		// 또는 망고 주스가 있으면 +1
		// 또는 오렌지 주스가 있으면 +1
		// 또는 아이스 아메리카노 +1

		boolean hallabongAde = false; // 한라봉 에이드
		boolean mangoJuice = false; // 망고 주스
		boolean orangeJuice = true; // 오렌지 주스

		if (hallabongAde) {
			System.out.println("한라봉 에이드 +1");
		} else if (mangoJuice) {
			System.out.println("망고 주스 +1");
		} else if (orangeJuice) {
			System.out.println("오렌지 주스 +1");
		}

		// else는 없어도 가능
		else {
			System.out.println("아이스 아메리카노 +1");
		}
		System.out.println("커피 주문 완료");
	}
}


5.3 SwitchCase

Switch Case 문의 기본 형식은 아래와 같다.

switch(입력변수) {
    case 입력값1: ...
         break;
    case 입력값2: ...
         break;
    ...
    default: ...
         break;
}
public class _03_SwitchCase {
	public static void main(String[] args) {
		// 석차에 따른 장학금 지급
		// 1등 : 전액 장학금
		// 2등 : 반액 장학금
		// 3등 : 반액 장학금
		// 4등: 10만원 지급
		// 그 외 : 장학금 대상 아님

		int ranking = 1; // 등수

		// If Else 문을 이용
		if (ranking == 1) {
			System.out.println("전액 장학금");
		} else if (ranking == 2 || ranking == 3) {
			System.out.println("반액 장학금");
		} else if (ranking == 4) {
			System.out.println("10만원 지급");
		} else {
			System.out.println("장학금 대상 아님");
		}
		System.out.println("조회 완료 #1");

		// Switch Case 문을 이용
		ranking = 3;
		switch (ranking) {
		case 1:
			System.out.println("전액 장학금");
			break;

		// case 2와 3을 통합
		case 2:
		case 3:
			System.out.println("반액 장학금");
			break;

		case 4:
			System.out.println("10만원 지급");
			break;
		default:
			System.out.println("장학금 대상 아님");
		}
		System.out.println("조회 완료 #2");

	}
}


break가 없는 경우 예제 -> 값이 누적됨

public class _03_SwitchCase {
	public static void main(String[] args) {
		// 중고상품의 등급에 따른 가격을 책정 (1등급 : 최상, 4등급 : 최하)
		int grade = 1; // 등급
		int price=7000; // 기본 가격
		switch(grade) {
		case 1:
			price+=1000; // price = price + 1000;
		case 2:
			price+=1000;
		case 3:
			price+=1000;
		}
		System.out.println(grade+"등급 제품의 가격 : "+ price+"원");

	}
}



5.4 For

public class _04_For {

	public static void main(String[] args) {
		// 5번 반복
		for (int i = 0; i < 5; i++) {
			System.out.println("시은님, 즐거운 하루 되세요!");
		}

		// 짝수만 출력
		// 0, 2, 4, 6, 8
		for (int i = 0; i < 10; i += 2) {
			System.out.println(i);
		}

		// 홀수만 출력
		// 1, 3, 5, 7, 9
		for (int i = 1; i < 10; i += 2) {
			System.out.println(i);
		}

		// 거꾸로 숫자
		// 5, 4, 3, 2, 1
		for (int i = 5; i > 0; i--) {
			System.out.println(i);
		}

		// 1부터 10까지 수들의 합
		// 1 + 2 + ... + 10 = 55
		int sum = 0;
		for (int i = 1; i <= 10; i++) {
			sum += i;
		}
		System.out.println(sum);

	}
}


5.5 While

public class _05_While {
	public static void main(String[] args) {
		int distance = 10; // 전체 거리 25m
		int move = 0; // 현재 이동 거리 0m
		while (move < distance) { // 현재 이동 거리가 전체 거리보다 작다는 조건이 참인 동안 반복 수행
			System.out.println("발차기를 계속 합니다.");
			System.out.println("현재 이동 거리 " + move);
			move += 3; // 3미터 이동
		}
		System.out.println("도착하였습니다.");
	}
}


5.6 Do While

조건 상관 없이 do{()}의 문장을 무조건 한 번 실행시킨 후 조건을 검사하여 반복한다.

do{
	반복 실행할 문장;
} while(조건식) // 조건식이 true일 경우 실행, false일 경우 미실행
package chap_04;

public class _06_DoWhile {
	public static void main(String[] args) {
		int distance = 25; // 전체 거리 25m
		int move=0; // 현재 이동 거리 0m
		int height=30; // 키 : 30m

		do {
			System.out.println("발차기를 계속 합니다.");
			System.out.println("현재 이동 거리 : " + move);
			move+=3;
		}
		while(move+height<distance);
		System.out.println("도착했습니다.");
	}
}


5.7 이중 반복문

별(*) 사각형 만들기

package chap_04;

public class _07_NestedLoop {
	public static void main(String[] args) {
		for (int i = 0; i < 5; i++) {
			for (int j = 0; j < 5; j++) {
				System.out.print("*");
			}
			System.out.println();
		}

	}

}


별(*) 왼쪽 삼각형 만들기

package chap_04;

public class _07_NestedLoop {
	public static void main(String[] args) {
		for (int i = 0; i < 5; i++) {
			for (int j = 0; j <i+1 ; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}


별(*) 오른쪽 삼각형 만들기

public class _08_NestedLoop {
	public static void main(String[] args) {
		for (int i = 0; i < 3; i++) {
			for (int k = 0; k < 2 - i; k++) {
				System.out.print(" ");
			}
			for (int j = 0; j <= i; j++) {
				System.out.print("*");
			}
			System.out.println(" ");
		}

	}
}


5.8 구구단 만들기

public class _09_MultpleTable {
	public static void main(String[] args) {
		for (int i = 2; i <= 9; i++) {
			for (int j = 1; j <= 9; j++) {
				System.out.println(i + " x " + j + " = " + i * j);
			}
			System.out.println();
		}
	}
}


5.9 Break

import java.util.Iterator;

public class _10_Break {
	public static void main(String[] args) {
		// for문
		int max = 20;
		for (int i = 1; i < 50; i++) {
			System.out.println(i + "번 손님, 주문하신 치킨 나왔습니다.");
			if (i == max) {
				System.out.println("금일 재료가 모두 소진되었습니다.");
				break; // 반복문을 탈출
			}
		}
		System.out.println("영업을 종료합니다.");

		// while 문
		int index = 1; // 손님 대기 번호
		while (index <= 50) {
			System.out.println(index + "번 손님, 주문하신 치킨 나왔습니다.");
			if (index == max) {
				System.out.println("금일 재료가 모두 소진되었습니다.");
				break;
			}
			index++;
		}
		System.out.println("영업을 종료합니다.");
	}

}


5.10 continue

public class _11_Continue {
	public static void main(String[] args) {
		// 치킨 주문 손님 중에 노쇼 손님이 있다고 가정
		// for
		int max = 20; // 최대 치킨 판매 수량
		int sold = 0; // 현재 치킨 판매 수량
		int noShow = 17; // 대기번호 17번 손님이 노쇼
		for (int i = 1; i <= 50; i++) {
			System.out.println(i + "번 손님, 주문하신 치킨 나왔습니다.");


			// 손님이 없다면? (noShow)
			if (i == noShow) {
				System.out.println(i + "번 손님, 노쇼로 인해 다음 손님에게 기회가 넘어갑니다.");
				continue;
			}
			sold++; // 판매 처리
			if (sold == max) {
				System.out.println("금일 재료가 모두 소진되었습니다.");
				break;
			}
		}
		System.out.println("영업을 종료합니다.");

		// while 문
		max = 20;
		sold = 0;
		int index = 0; // 손님 번호
		// while (index < 50) {
		while(true) {
			index++;
			System.out.println(index + "번 손님, 주문하신 치킨 나왔습니다.");

			// 손님이 없다면 (noShow)
			if (index == noShow) {
				System.out.println(index + "번 손님, 노쇼로 인해 다음 손님에게 기회가 넘어갑니다.");
				continue;
			}

			sold++; // 판매 처리
			if (sold == max) {
				System.out.println("금일 재료가 모두 소진되었습니다.");
				break;
			}
		}
		System.out.println("영업을 종료합니다.");

	}
}


5.11 퀴즈 #4

문제

  • 조건문을 활용하여 주차 요금 정산 프로그램을 작성하시오(파일명 : _Quiz_04.java)
  • 주차요금은 시간당 4000원 (일일 최대 요금은 30000원)
  • 경차 또는 장애인 차량은 최종 요금에서 50% 할인(*장애인 차량 : 직접 운전 또는 탑승 모두 포함)

주차요금 예시

  • 일반 차량 5시간 주차 시 20000원
  • 경차 5시간 주차 시 10000원
  • 장애인 차량 10시간 주차 시 15000원


정답

public class _Quiz_04 {
	public static void main(String[] args) {
		boolean isRegularCar = false;
		boolean isCompactCar = false;
		boolean isHandicappedCar = false;
		int parkingHour = 5; // 주차 시간
		int parkingFee = parkingHour * 4000;
		int max = 30000;

		// 30000원 초과 시 일일 최대 요금으로 수정
		if (parkingFee > 30000) {
			parkingFee = 30000;
		}

		// 경차 또는 장애인 차량인 경우 50% 할인
		if (isCompactCar || isHandicappedCar) {
			parkingFee /= 2;
			// parkingFee *= 0.5f
		}
		System.out.println("주차 요금은 " + parkingFee + " 원 입니다.");

	}
}



6. Chapter5

6.1 배열

배열 선언 방법

// 배열 선언 첫 번째 방법
String[] coffees = new String[4];

// 두 번째 방법
String[] coffees = new String[4];
coffees[0] = "아메리카노"; // 0부터 시작
coffees[1] = "카페 모카";
coffees[2] = "라떼";
coffees[3] = "카푸치노";

// 세 번째 방법
String[] coffees = new String[] { "아메리카노", "카페모카", "라떼", "카푸치노" };

// 네 번째 방법
String[] coffees = { "아메리카노", "카페모카", "라떼", "카푸치노" };

실습

public class _01_Array {
	public static void main(String[] args) {
		String[] coffees = { "아메리카노", "카페모카", "라떼", "카푸치노" };

		// 커피 주문
		System.out.println(coffees[0] + " 하나"); // "아메리카노 하나"
		System.out.println(coffees[1] + " 하나"); // "카페모카 하나"

		coffees[2]="에소프레소"; // 값 변경
		System.out.println(coffees[2] + " 하나"); // "에소프레소 하나"
		System.out.println(coffees[3] + " 하나"); // "카푸치노 하나"
		System.out.println("주세요."); // "주세요"
	}
}


6.2 배열 순회

public class _02_ArrayLoop {
	public static void main(String[] args) {
		String[] coffees = { "아메리카노", "카페모카", "라떼", "카푸치노" };

		// for 반복문 순회
		for (int i = 0; i < 4; i++) {
			System.out.println(coffees[i] + " 하나");
		}
		System.out.println("주세요.");

		// 배열의 길이를 이용한 순회
		for (int i = 0; i < coffees.length; i++) {
			System.out.println(coffees[i] + " 하나");
		}
		System.out.println("주세요.");

		// enhanced for (for-each) 반복문
		for (String coffee : coffees) {
			System.out.println(coffee + " 하나");
		}
	}
}


6.3 다차원 배열(2차원 배열)

public class _03_MultiArray {
	public static void main(String[] args) {
		// 소규모 영화관 좌석
		// 1차원 배열
		String[] seatA = { "A1", "A2", "A3", "A4", "A5" };
		String[] seatB = { "B1", "B2", "B3", "B4", "B5" };
		String[] seatC = { "C1", "C2", "C3", "C4", "C5" };

		// 3 x 5 크기의 2차원 배열
		String[][] seats=new String[][] {
			{ "A1", "A2", "A3", "A4", "A5" },
			{ "B1", "B2", "B3", "B4", "B5" },
			{ "C1", "C2", "C3", "C4", "C5" }
		};

		System.out.println(seats[1][1]); // B2
		System.out.println(seats[2][4]); // C5

		// 첫 줄에는 3칸, 둘째 줄에는 4칸, 셋째 줄에는 5칸
		String[][] seats2= {
				{"A1","A2","A3"},
				{"B1","B2","B3","B4"},
				{"C1","C2","C3","C4","C5"}
		};
		System.out.println(seats2[0][2]); // A3
	}
}

6.4 다차열 배열 순회

public class _04_MultArrayLoop {
	public static void main(String[] args) {
		// 다차열 배열 순회
		String[][] seats = new String[][] { { "A1", "A2", "A3", "A4", "A5" }, { "B1", "B2", "B3", "B4", "B5" },
				{ "C1", "C2", "C3", "C4", "C5" } };

		for (int i = 0; i < 3; i++) { // 세로
			for (int j = 0; j < 5; j++) { // 가로
				System.out.print(seats[i][j] + " ");
			}
			System.out.println();
		}

		System.out.println("-------------------");

		String[][] seats2 = { { "A1", "A2", "A3" }, { "B1", "B2", "B3", "B4" }, { "C1", "C2", "C3", "C4", "C5" } };
		for (int i = 0; i < seats2.length; i++) { // 세로
			for (int j = 0; j < seats2[i].length; j++) { // 가로
				System.out.print(seats2[i][j] + " ");
			}
			System.out.println();
		}

		System.out.println("-------------------");

		// 세로 크기 10 x 가로 크기 15에 해당하는 영화관 좌석
		String[][] seats3 = new String[10][15];
		String[] eng = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" };
		for (int i = 0; i < seats3.length; i++) { // 세로
			for (int j = 0; j < seats3[i].length; j++) { // 가로
				seats3[i][j] = eng[i] + (j + 1);
			}
		}

		// 표 구매
		seats3[7][8]="__";
		seats3[7][9]="___";

		// 영화관 좌석 번호 확인
		for (int i = 0; i < seats3.length; i++) { // 세로
			for (int j = 0; j < seats3[i].length; j++) { // 가로
				System.out.print(seats3[i][j] + " ");
			}
			System.out.println();
		}
	}
}


6.5 아스키 코드

아스키 코드 (ANSI) : 미국 표준 코드

public class _05_ASCII {
	public static void main(String[] args) {
		// 알파벳 대문자(A)는 65부터 시작
		char c = 'A';
		System.out.println(c); // A
		System.out.println((int) c); // 65

		// 소문자(a)는 97부터 시작
		c = 'a';
		System.out.println(c); // a
		System.out.println((int) c); // 97

		c = 'B';
		System.out.println(c); // B
		System.out.println((int) c); // 66

		c++;
		System.out.println(c); // C
		System.out.println((int) c); // 67

		// 숫자(0)은 48부터 시작
		c = '0';
		System.out.println(c); // 0
		System.out.println((int) c); // 48

	}
}


아스키 코드 활용해서 목차 6.4 영화관 좌석 코드 리팩토링

public class _05_ASCII {
	public static void main(String[] args) {
		// 세로 크기 10 x 가로 크기 15에 해당하는 영화관 좌석
		String[][] seats3 = new String[10][15];
		char ch = 'A';
		for (int i = 0; i < seats3.length; i++) { // 세로
			for (int j = 0; j < seats3[i].length; j++) { // 가로
				seats3[i][j] = String.valueOf(ch) + (j + 1);
			}
			ch++;
		}
		// 영화관 좌석 번호 확인
		for (int i = 0; i < seats3.length; i++) { // 세로
			for (int j = 0; j < seats3[i].length; j++) { // 가로
				System.out.print(seats3[i][j] + " ");
			}
			System.out.println();
		}
	}
}


퀴즈 #6

문제

  • 배열을 활용하여 쇼핑몰에서 구매 가능한 신발 사이즈 옵션을 출력하는 프로그램을 작성하시오
  • 신발 사이즈는 250부터 295까지 5단위로 증가
  • 신발 사이즈는 총 10까지


정답

⬇️ 내 풀이

public class _Quiz_05 {
	public static void main(String[] args) {
		int[] shoesSize = { 250, 255, 260, 265, 270, 275, 280, 285, 290, 295 };
		for(int i=0;i<shoesSize.length;i++) {
			System.out.println("사이즈 " + shoesSize[i] + " (재고 있음)");
		}

	}
}


⬇️ 선생님 풀이

public class _Quiz_05 {
	public static void main(String[] args) {
		int[] shoseSize = new int[10];
		for (int i = 0; i < shoseSize.length; i++) {
			shoseSize[i] = 250 + (5 * i);
		}

		// for each 사용
		for (int size : shoseSize) {
			System.out.println("사이즈 " + size + " 재고 있음");
		}
	}
}



7. Chapter6

7.1 메소드

C, JavaSciprt의 함수와 유사. 기능을 하는 동작의 묶음

public class _01_Method {
	public static void sayHello() {
		// 메소드 정의
		System.out.println("안녕하세요! 메소드입니다.");

	}

	public static void main(String[] args) {
		// 메소드 호출
		sayHello();
	}
}


7.2 전달 값(Parameter)

public class _02_Parameter {
	public static void power(int number) {
		int result = number * number;
		System.out.println(number + "의 2승은 " + result);
	}

	public static void powerByExp(int number, int exponent) {

		int result = 1;
		for (int i = 0; i < exponent; i++) {
			result *= number;

		}
		System.out.println(number + "의 "+ exponent+"승은 " + result);
	}

	public static void main(String[] args) {
		// 전달 값, Parameter(매개 변수)
		power(4); // 4 * 4 = 16
		powerByExp(2, 3); // 2 * 2 * 2 = 8
	}
}


7.3 반환 값(Return)

public class _03_Return {
	public static String getPhoneNumber() {
		String phoneNumber = "02-1234-5678";
		return phoneNumber;
	}
	public static String getActivities() {
		return "볼링장, 탁구장, 노래방";
	}

	public static void main(String[] args) {
		String contactNumber = getPhoneNumber();
		System.out.println("호텔 전화번호 : " + contactNumber);
		System.out.println("호텔 액티비티 : " + getActivities());
	}
}


7.4 전달 값과 반환 값

public class _04_ParameterAndReturn {
	public static int getPower(int number) {
		int result = number * number;
		return result;
	}

	public static int getPowerByExp(int number, int exponent) {
		int result = 1;
		for (int i = 0; i < exponent; i++) {
			result *= number;
		}
		return result;
	}

	public static void main(String[] args) {
		int retVal = getPower(2);
		System.out.println(retVal); // 2 * 2 = 4

		retVal = getPower(3);
		System.out.println(retVal); // 3 * 3 = 9

		retVal = getPowerByExp(3, 3); // 3 * 3 * 3 = 27
		System.err.println(retVal);
	}

}


7.5 메소드 오버로딩

  • 이름이 같은 메소드를 여러 번 선언하는 것을 오버로딩이라고 한다.
  • 매개변수의 자료형이 다르거나, 매개변수의 개수가 다르면 똑같은 이름의 메소드를 얼마든지 중복해서 선언할 수 있다.

public class _05_Overloading {
	public static int getPower(int number) {
		int result = number * number;
		return result;
	}

	public static int getPower(String strNumber) {
		int number = Integer.parseInt(strNumber);
		return number * number;
	}

	public static int getPower(int number, int exponent) {
		int result = 1;
		for (int i = 0; i < exponent; i++) {
			result *= number;
		}
		return result;
	}

	public static void main(String[] args) {
		System.err.println(getPower(3)); // 3 * 3 = 9
		System.err.println(getPower("3")); // "3" * "3" = "9"
		System.err.println(getPower(3, 3)); // 3 * 3 * 3 = 27
	}
}


7.6 메소드가 필요한 이유

메소드 내에서 다른 메소드 호출할 수 있음 -> 코드가 간결해짐

public class _06_WhenToUse {
	public static int getPower(int number) {
		return getPower(number, 2);
	}

	public static int getPower(int number, int exponent) {
		int result = 1;
		for (int i = 0; i < exponent; i++) {
			result *= number;
		}
		return result;
	}

	public static void main(String[] args) {
		System.out.println(getPower(4)); // 4 * 4 = 4
		System.out.println(getPower(2,2)); // 2 * 2 * 2 = 4
	}
}


7.7 Main 메소드

  • main 메소드는 java 프로그램을 실행할 때 처음으로 진입
  • 문자열을 여러 개 가지고 있는 String 배열을 전달값으로 받는 메소드 main(String[] arge)
  • String 값을 어떻게 전달받을 수 있을까?


① Run > Run Configurations 클릭


② program arguments에 1 입력


③ 아래 코드 작성

public class _07_MainMethod {
	public static void main(String[] args) {
		for (String s : args) {
			System.out.println(s);
		}

		// 1. 도서 조회
		// 2. 도서 대출
		// 3. 도서 반납
		if (args.length == 1) {
			switch (args[0]) {
			case "1":
				System.out.println("도서 조회 메뉴입니다.");
				break;
			case "2":
				System.err.println("도서 대출 메뉴입니다.");
				break;
			case "3":
				System.out.println("도서 반납 메뉴입니다.");
				break;
			default:
				System.out.println("잘못 입력하셨습니다.");
			}

		} else {
			System.out.println("사용법) 1~3 메뉴 중 하나를 입력하세요.");
		}
	}
}


④ 출력 결과

이런식으로 입력 된 값에 따라 특정 기능을 다르게 실행할 수 있다.


퀴즈 #6

문제

  • 개인 정보 중 일부를 비공개로 전환하는 프로그램을 작성하시오(파일명 : _Quiz_06.java)
  • 개인정보를 비공개로 전환하는 메소드 작성
  • 하나의 메소드에서 모든 동작 처리
  • 각 정보는 아래 위치부터 비공개 적용
    • 이름 : 2번째 글자
    • 주민등록번호 : 9번째 글자
    • 전화번호 : 10번째 글자

코드

주어진 코드의 getHiddenData(...) 메소드를 완성하시오.

public class _Quiz_06 {
	// 힌트
	// 1. substring()을 이용하면 문자열의 일부를 자를 수 있음
	// 2. length()를 이용하면 문자열의 길이를 알 수 있음
	public static void main(String[] args) {
		String name = "나코딩";
		String id = "990130-1234567";
		String phoneNumber = "010-1234-5678";

		System.out.println("이름 : " + getHiddenData(name, 1)); // 개인정보, 비공개 시작 위치
		System.out.println("주민등록번호 : " + getHiddenData(id, 8));
		System.out.println("전화번호 : " + getHiddenData(phoneNumber, 9));
	}
}


정답

public class _Quiz_06 {
	// 힌트
	// 1. substring()을 이용하면 문자열의 일부를 자를 수 있음
	// 2. length()를 이용하면 문자열의 길이를 알 수 있음
	public static String getHiddenData(String data, int index) {
		String hiddenData = data.substring(0, index);
		// for (int i = index; i < data.length(); i++)
		for (int i = 0; i < data.length() - index; i++) {
			hiddenData += "*";
		}
		return hiddenData;
	}

	public static void main(String[] args) {
		String name = "나코딩";
		String id = "990130-1234567";
		String phoneNumber = "010-1234-5678";

		System.out.println("이름 : " + getHiddenData(name, 1)); // 개인정보, 비공개 시작 위치
		System.out.println("주민등록번호 : " + getHiddenData(id, 8));
		System.out.println("전화번호 : " + getHiddenData(phoneNumber, 9));
	}
}


태그:

카테고리:

업데이트:

댓글남기기