Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Linux
- SW
- 리눅스마스터2급2차
- 코딩
- 정처기기출
- 정처기실기
- 정보처리기사기출
- 정처기
- 리눅스마스터
- Django
- C
- 장고
- IT
- 정보처리기사
- IT자격증
- 정보처리기사실기
- 자격증
- 리눅스마스터2급
- 리눅스명령어
- 리눅스자격증
- AI
- 공부블로그
- 기사자격증
- 웹개발
- python
- 리눅스활용
- 프로그래밍
- 머신러닝
- Java
- 리눅스
Archives
- Today
- Total
Tech Trail
[정보처리기사 실기] Java 언어 프로그래밍 특강(7) 본문
728x90
SMALL
44번 문제
public class Circles {
public static void main(String[] args) {
int[] ia = {1, 3, 5, 7, 9}; // int ia[] 랑 같음
for (int x : ia) { // ia의 값을 x에 하나씩 가져온다.
for (int j = 0; j < 3; j++) {
if (x > 4 && x < 8) continue;
System.out.print(" " + x);
if (j == 1) break;
continue;
}
continue;
}
}
}
- 배열 ia가 선언되고 초기화됩니다. 배열에는 1, 3, 5, 7, 9 다섯 개의 정수가 들어 있습니다.
- 첫 번째 for-each 루프에서 배열 ia의 각 요소를 변수 x에 순차적으로 할당합니다.
- 두 번째 for 루프에서 j가 0부터 2까지 증가하며 반복됩니다.
- if 문에서는 현재 x의 값이 4보다 크고 8보다 작은지를 확인합니다. 만약 그렇다면 continue 문을 통해 현재 반복을 중지하고 다음 반복으로 넘어갑니다. 그렇지 않으면 출력문이 실행됩니다.
- 출력문은 " " + x를 출력하며, x의 값이 출력됩니다.
- j가 1일 때 (두 번째 반복에서) break 문을 사용하여 현재 내부 반복문을 종료합니다. 이 때, 내부 반복문은 다음 값을 처리하기 위해 바깥쪽 반복문으로 넘어갑니다.
- 바깥쪽 반복문의 continue 문도 사용되어 다음 x 값으로 이동합니다.
<출력>
1 1 3 3 9 9
<과정>
- 초기 상태: x=1, j=0
- j=0, j<3 True
- 첫번째 if문: 4<x<8 조건 False, x에 1 출력
- 두번째 if문: j==1 조건 False, j for 문으로 올라감. j=1로 증가
- 첫번째 if문: 4<x<8 조건 False, x에 1 출력
- 두번째 if문: j==1조건 True, break로 빠져 나와서 레퍼런스 변수가 가르키는 객체가 3이 됩니다(x=3)
- 첫번째 if문: 4<x<8 조건 False, x에 3 출력
- 두번째 if문: j==1 조건 False, j for 문으로 올라감. j=1로 증가
- 첫번째 if문: 4<x<8 조건 False, x에 3 출력
- 두번째 if문: j==1조건 True, break로 빠져 나와서 레퍼런스 변수가 가르키는 객체가 5가 됩니다(x=5)
- 첫번째 if문: 4<x<8 조건 True, continue로 인해 j for 문으로 다시 올라감. j=2로 증가
- 첫번째 if문: 4<x<8 조건 True, continue로 인해 j for 문으로 다시 올라감. j=3로 증가
- j=3이므로 j<3 조건을 만족하지 않음. x가 5일 때는 출력되지 않습니다.
- 레퍼런스 변수가 가르키는 객체가 7이 됩니다. (x=7)
- 첫번째 if문: 4<x<8 조건 True, continue로 인해 j for 문으로 다시 올라감. j=2로 증가
- 첫번째 if문: 4<x<8 조건 True, continue로 인해 j for 문으로 다시 올라감. j=3로 증가
- j=3이므로 j<3 조건을 만족하지 않음. x가 7일 때는 출력되지 않습니다.
- 레퍼런스 변수가 가르키는 객체가 9가 됩니다. (x=9)
- 첫번째 if문: 4<x<8 조건 False, x에 9 출력
- 두번째 if문: j==1 조건 False, j for 문으로 올라감. j=1로 증가
- 첫번째 if문: 4<x<8 조건 False, x에 9 출력
결국 5, 7을 제외한 변수가 두 번씩 출력됩니다.
45번 문제
public class Test {
public static void main(String args[]){
int i, j, n=0;
aaa:
for(i=0; i<3; i++){
for(j=0; j<3; j++){
System.out.print("abc"+ " ");
continue aaa;
}
}
System.out.println("ccc");
}
}
- 바깥쪽 for 루프 (i 값에 대한 반복)가 처음에 시작됩니다. i는 0입니다.
- 내부 for 루프 (j 값에 대한 반복)가 시작되고 j 값은 0부터 2까지 변화합니다.
- "abc"를 출력하고 continue aaa; 문장이 실행되어 바깥쪽 for 루프(i for 루프)로 제어가 이동합니다.
- 바깥쪽 for 루프에서 i 값이 증가하고, i는 1이 됩니다.
- 다시 내부 for 루프가 시작되고 "abc"를 출력한 후 continue aaa; 문장이 실행되어 바깥쪽 for 루프(i for 루프)로 이동합니다. ("aaa:" 레이블이 있으므로 "continue aaa;" 문장이 실행될 때, 제어가 j for 루프가 아닌 바깥쪽 for 루프 (i for 루프)로 이동
- )
- 바깥쪽 for 루프에서 i 값이 증가하고, i는 2가 됩니다.
- 다시 내부 for 루프가 시작되고 "abc"를 출력한 후 continue aaa; 문장이 실행되어 바깥쪽 for 루프(i for 루프)로 이동합니다.
- 바깥쪽 for 루프에서 i 값이 증가하고, i는 3이 됩니다. 이제 바깥쪽 for 루프를 빠져나가게 됩니다.
- "ccc"를 출력합니다.
<출력>
abc abc abc ccc
46번 문제
public class Test {
public static void main(String[] args) {
int i=1, j=5;
do {
if (i>j) {
continue;
}
j--;
System.out.println("i=" + i + " and j =" + j);
} while (++i < 3);
System.out.println("i=" + i + " and j =" + j);
}
}
- 초기 상태: 변수 i는 1로 초기화되고, 변수 j는 5로 초기화됩니다.
- do-while 루프 시작: do 키워드로 시작하는 무한 루프가 시작됩니다. (for 문은 반복횟수가 0~n회인 반면, do-while 문은 반복횟수가 1~n회임)
- if (i > j) { continue; }: 현재 i 값인 1은 j 값인 5보다 작으므로 if 문의 조건이 거짓이 되지 않아 continue 문은 실행되지 않습니다.
- j--;: j 값을 1 감소시킵니다. j는 이제 4가 됩니다.
- System.out.println("i=" + i + " and j =" + j);: 현재 i와 j 값을 출력합니다. 출력 결과는 "i=1 and j=4"가 됩니다.
- while (++i < 3);: i를 1 증가시키고, i가 3보다 작은 동안 루프를 계속 실행합니다. ++i는 i를 먼저 2로 증가시키고, 그 다음에 비교합니다.
- 루프가 한 번 더 실행됩니다. i가 2이므로 j 값을 감소시키지 않고 바로 출력합니다. 출력 결과는 "i=2 and j=4"가 됩니다.
- while (++i < 3); 다시 루프가 실행됩니다. i가 3이 되므로 루프를 빠져나가게 됩니다.
- System.out.println("i=" + i + " and j =" + j);: 최종 i와 j 값을 출력합니다. 출력 결과는 "i=3 and j=4"가 됩니다.
<출력>
i=1 and j =4
i=2 and j =3
i=3 and j =3
47번 문제
class Testcount {
public static void main(String args[]) {
long charge = 5000;
String country1 = args[1];
String country2 = "Korea";
if (country1.equals(country2))
charge = 10000;
else
charge = 20000;
System.out.println(charge + "[" + args.length + "]");
}
}
실행 c:\java Testcount Korea Germany
- 먼저, 프로그램은 다음과 같이 실행됩니다: c:\java Testcount Korea Germany. 여기서 Korea는 args[0], Germany는 args[1]에 해당합니다.
- main 함수 내에서 long charge = 5000;로 charge 변수를 초기화합니다.
- 다음으로, String country1 = args[1]; 코드에서 country1 변수에 args[1]에 해당하는 값인 "Germany"를 할당합니다.
- String country2 = "Korea"; 코드에서 country2 변수에 "Korea"를 할당합니다.
- 조건문 if (country1.equals(country2))에서 country1 (Germany)와 country2 (Korea)를 비교합니다. 이 두 값은 다르므로 else 블록으로 이동합니다.
- charge = 20000; 코드가 실행되어 charge 변수에 20000이 할당됩니다.
- 마지막으로, System.out.println(charge + "[" + args.length + "]");를 통해 결과를 출력합니다. charge는 20000이고, args.length는 args 배열의 길이를 나타내므로 2입니다. args[0]에는 "Korea"가, args[1]에는 "Germany"가 들어 있기 때문입니다.
<출력>
20000[2]
48번 문제
class A {}
class B extends A {}
class Test {
void dis(A a) {
System.out.print("aaa" + " ");
}
void dis(B b) {
System.out.print("bbb" + " ");
}
public static void main(String args[]) {
Test te = new Test();
A a = new A();
B b = new B();
A c = new B();
te.dis(a);
te.dis(c);
te.dis(b);
}
}
- 클래스 A와 B가 정의됩니다. B 클래스는 A 클래스를 상속합니다.
- Test 클래스가 정의됩니다. 이 클래스에는 dis 메서드가 세 번 정의되어 있습니다.
- main 메서드가 시작됩니다. Test 클래스의 객체 te가 생성됩니다.
- A 클래스의 객체 a가 생성됩니다.
- B 클래스의 객체 b가 생성됩니다.
- A 타입의 변수 c가 생성되고, 이 변수에 B 클래스의 객체가 할당됩니다.
- te.dis(a); 코드가 실행됩니다. dis 메서드는 A 타입의 매개변수를 받으며, 따라서 void dis(A a) 메서드가 호출됩니다. 결과적으로 "aaa"가 출력됩니다.
- te.dis(c); 코드가 실행됩니다. 변수 c는 B 클래스의 객체를 가지고 있지만, 매개변수 타입이 A이므로 void dis(A a) 메서드가 호출됩니다. 결과적으로 "aaa"가 출력됩니다.
- te.dis(b); 코드가 실행됩니다. 변수 b는 B 클래스의 객체를 가지고 있고, 매개변수 타입이 B에 맞으므로 void dis(B b) 메서드가 호출됩니다. 결과적으로 "bbb"가 출력됩니다.
<출력>
aaa aaa bbb
이때, te.dis(a);와 te.dis(c);에서 "aaa"가 출력되는 이유는 메서드 오버로딩의 동적 바인딩(dynamic binding) 때문입니다.
49번 문제
class A {
String str;
public A(String str) {
this.str = str;
}
public String toString() {
return "aa" + str + "aa";
}
}
class Test {
public static void main(String args[]) {
A a = new A("bbb");
A b = new A("ccc");
// 객체를 출력할 때는 객체의 toString 메서드를 자동으로 호출하여 결과를 출력합니다.
System.out.println(a); // "aaabbbbaa"
System.out.println(b); // "aaacccaa"
// 멤버 변수에 직접 접근하는 경우에는 toString 메서드가 호출되지 않고, 해당 멤버 변수의 값을 출력합니다.
System.out.println(a.str); // "bbb"
System.out.println(b.str); // "ccc"
}
}
이 프로그램은 A 클래스와 Test 클래스로 구성되어 있습니다.
1. A 클래스:
- str이라는 문자열 멤버 변수를 가집니다.
- A 클래스의 생성자는 문자열을 입력받아 str 멤버 변수에 저장합니다.
- toString 메서드는 객체를 문자열로 표현할 때 사용되며, 여기서는 "aa"로 감싼 str 값을 반환합니다.
2. Test 클래스:
- main 메서드가 있는 클래스로, 프로그램의 시작점입니다.
- A 클래스의 객체 a와 b를 생성하고 각각 "bbb"와 "ccc"를 생성자에 전달하여 초기화합니다.
- System.out.println()을 사용하여 다음을 출력합니다:
- a 객체를 출력하면 toString 메서드가 호출되어 "aabbbaa"가 출력됩니다.
- b 객체를 출력하면 toString 메서드가 호출되어 "aacccaa"가 출력됩니다.
- a.str은 a 객체의 str 멤버 변수 값을 직접 출력하므로 "bbb"가 출력됩니다.
- b.str은 b 객체의 str 멤버 변수 값을 직접 출력하므로 "ccc"가 출력됩니다.
<출력>
aabbbaa
aacccaa
bbb
ccc
참고) a.str과 같이 멤버 변수에 직접 접근하는 경우, a 객체의 str 멤버 변수 값을 반환합니다. 이 때는 toString 메서드가 직접 호출되지 않습니다. 그러나 System.out.println(a);와 같이 레퍼런스 변수만을 사용하여 객체를 출력할 때는, Java는 해당 객체를 문자열로 변환하기 위해 toString 메서드를 자동으로 호출합니다.
💡 이 게시글은 PC 환경에 최적화하여 작성되었습니다.
💡 위 내용은 에듀윌에서 무료로 제공한 '정보처리기사 비밀 언어 특강' 문제를 직접 풀고 정리한 것입니다.
틀린 부분이 있다면 언제든 댓글 남겨주세요 :)
💡정보처리기사 실기 시험을 준비하시는 분들께는 아래 링크에서 해당 강의를 먼저 듣는 것을 권장합니다.
728x90
LIST
'IT Learning > 정보처리기사' 카테고리의 다른 글
[정보처리기사] 맥케이브(McCabe)의 순환 복잡도 측정 방식에 따른 복잡도 구하기 (0) | 2023.11.17 |
---|---|
[정보처리기사 실기] Java 언어 프로그래밍 특강(8) (0) | 2023.11.17 |
[정보처리기사 실기] Java 언어 프로그래밍 특강(6) (0) | 2023.11.16 |
[정보처리기사 실기] C언어 프로그래밍 특강(5) (2) | 2023.11.16 |
[정보처리기사 실기] C언어 프로그래밍 특강(4) (0) | 2023.11.16 |