[Java] 나도코딩 Java 기본편
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));
}
}
댓글남기기