반응형

 

3장 이론 문제

 

1. while문을 가진 다음 프로그램에 대해 물음에 답하라.

int i = 0, sum = 0;
while(i<10) {
    i = i + 2;
    sum += i;
}
System.out.println(sum);

(1) 무엇을 계산하는 프로그램이며, 실행 결과는?

답 : 10보다 작은 2의 배수를 더함, sum = 30

(2) 앞의 실행 결과와 동일한 실행 결과를 얻고자 할 때 다음 빈칸을 채워라.

int i = 0, sum = 0;
while(true) {
    i = i + 2;
    sum += i;
    if(i > 10) break;
}
System.out.println(sum);
int i = 0, sum = 0;
do {
    i = i + 2;
    if(i > 10) continue;
    sum += i;
} while(i<10)
System.out.println(sum);

 

2. 다음 for문에 대해 물음에 답하라.

double sum = 0.0;
double d[] = {1.0, 2.3, 3.4, 5.5};
for(int i=0; i<4; i++) sum += d[i];
System.out.println(sum);

(1) 예상되는 실행 결과는 무엇인가?

답 : d 배열의 모든 원소 값이 더해진다. sum = 12.2

(2) for(int i=0; i <4; i++) 부분을 배열의 length 필드를 이용하여 수정하라.

답 : for(int i=0; i <d.length; i++)

(3) while문으로 바꾸어 작성하라.

double sum = 0.0;
double d[] = {1.0, 2.3, 3.4, 5.5};
int i = 0;
while(i < d.length) sum += d[i++];
System.out.println(sum);

(4) do-whlie 문으로 바꾸어 작성하라.

double sum = 0.0;
double d[] = {1.0, 2.3, 3.4, 5.5};
int i = 0;
do {
    sum += d[i++];
} while(i < d.length);
System.out.println(sum);

(5) for-each 문으로 바꾸어 작성하라.

double sum = 0.0;
double d[] = {1.0, 2.3, 3.4, 5.5};
for(double i : d) sum+= i;
System.out.println(sum);

 

3. 배열을 선언하고 생성하는 다음 물음에 답하라.

(1) 10개의 문자를 가지는 배열 c를 생성하는 코드를 쓰라.

답 : char c[] = new char[10];

(2) 0에서 5까지 정수 값으로 초기화된 정수 배열 n을 선언하라.

답 : int n[] = { 0, 1, 2, 3, 4, 5 };

(3)'일', '월', '화', '수', '목', '금', '토'로 초기화된 배열 day를 선언하라.

답 : char [] day = { '일', '월', '화', '수', '목', '금', '토' };

(4) 5행 4열 크기의 실수 배열 d를 선언하라.

답 : double[][] d = new double[5][4];

(5) 1에서 12까지 순서대로 정수로 초기화되는 3행 4열의 이차원 배열 var을 선언하라.

int[][] var = { {1, 2, 3, 4},
                {5, 6, 7, 8},
                {9, 10, 11, 12} };

 

4. 다음 코드에 대해 실행 중 오류가 발생하는 보기는?

답 : ② myArray[myArray.length] = 100; 
배열의 마지막 인덱스는 (myArray.length-1)이다.

 

5. 다음 2차원 배열 선언문에서 문법적으로 잘못된 것은?
답 : ④ int [3][2] n = { {1, 2}, {3, 4}, {4, 5} };
'{ }'사이에 원소를 나열하여 배열을 초기화할 때는 배열의 크기가 자동적으로 '{ }'사이에 있는 원소의 개수로 정해진다. 원소로 배열을 초기화할 때 [ ] 에는 값을 적지 않는 것을 원칙으로 한다.

 

6. for-each 문을 이용하여 배열 b를 모두 출력하고자 한다. 빈칸에 적절한 코드를 삽입하라.

boolean [] b = {true, false, true, true};
for(boolean boo : b)
    System.out.println(boo);

 

7. 다음은 사용자로부터 배열의 개수를 얻어서 배열을 생성하여 리턴하는 allocArray() 메서드를 작성하고자 한다.

(1) 빈칸을 적절한 코드로 채워라.

static double[] allocArray() {
    Scanner scanner = new Scanner(System.in);
    double [] n = new double[scanner.nextInt()];
    return n;
}

(2) allocArray()를 호출하여 배열을 전달받는 한 줄의 코드를 작성하라.

답 : double [ ] d = allocArray();

 

8. 다음 코드에 대해 물음에 답하라.

package blog;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String s = "123";		
		try {
			int n = Integer.parseInt(s);
			n++;
			System.out.println(n);
		} 
		catch (NumberFormatException e) {
			System.out.println(s+"를 정수로 변환할 수 없습니다.");
		}
		finally {
			System.out.println("계산을 끝냅니다.");
		}
	}
}

(1) 코드를 실행하면 출력되는 내용은?

답 : 문자열 "123"을 정수로 변환하여 int형 변수 n에 저장한 뒤 n++을 해주어 124가 정답.

(2) s가 “23.5”일 때 앞의 코드를 실행한 결과 출력되는 내용은?

답 : s = "23.5"에서 s가 정수 문자열이 아니므로 예외상황인 "NumberFormatException" 에러를 catch블록에서 "s를 정수로 변환할 수 없습니다."라고 출력하도록 설정.

 

 

 

3장 실습 문제

 

1. 영문 소문자를 하나 입력받고 그 문자보다 알파벳 순위가 낮은 모든 문자를 출력하는 프로그램을 작성하라.

package blog;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("알파벳 한 문자를 입력하세요>>");
		String s = sc.next();
		char c = s.charAt(0);
		
		for (int i = 0; i <= c-'a'; i++) {
			for (int j = i; j <= c-'a'; j++) {
				System.out.print((char)('a'+j));
			}
			System.out.println();
		}
	}
}

 

2. 정수를 10개 입력받아 배열에 저장한 후, 배열을 검색하여 3의 배수만 출력하는 프로그램을 작성하라.

package blog;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수 10개 입력>>");

		int arr[] = new int[10];
		
		for (int i = 0; i < 10; i++) {
			arr[i] = sc.nextInt();
		}
		
		for(int i : arr){
			if(i % 3 == 0) System.out.print(i+" ");
		}
		
	}
}

 

3. 정수를 입력받아 짝수이면 “짝”, 홀수이면 “홀”을 출력하는 프로그램을 작성하라. 사용자가 정수를 입력하지 않는 경우에는 프로그램을 종료하라. 정답을 통해 try-catch-finally를 사용하는 정통적인 코드를 볼 수 있다.

package blog;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수를 입력하세요>>");

		try {
			int n = sc.nextInt();
			if(n % 2 == 0) System.out.println("짝수");
			else System.out.println("홀수");
		} 
		catch (InputMismatchException e) {
			System.out.println("수를 입력하지 않아 프로그램을 종료합니다.");
		}
		
	}
}

 

4. ‘일’, ‘월’, ‘화’, ‘수’, ‘목’, ‘금’, ‘토’로 초기화된 문자 배열 day를 선언하고, 사용자로부터 정수를 입력받아 7(배열 day의 크기)로 나눈 나머지를 인덱스로 하여 배열 day에 저장된 문자를 출력하라. 음수가 입력되면 프로그램을 종료하라. 아래 실행 결과와 같이 예외 처리하라.

package blog;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		

		char day[] = {'일','월','화','수','목','금','토'};
		
		while (true) 
		{
			System.out.print("정수를 입력하세요>>");
			try {
				int n = sc.nextInt();
				if(n == -1) break;
				System.out.println(day[n%7]);
			} 
			catch (InputMismatchException e) {
				System.out.println("경고! 수를 입력하지 않았습니다.");
				sc.next(); // 입력 토큰 날리기
			}
		}
		System.out.println("프로그램을 종료합니다...");
	}
}

 

5. 정수를 10개 입력받아 배열에 저장하고 증가 순으로 정렬하여 출력하라.

package blog;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수 10개 입력>>");

		int tmp;
		int arr[] = new int[10];
		
		for (int i = 0; i < arr.length; i++) {
			arr[i] = sc.nextInt();
		}
		
		// 버블 정렬
		for (int i = 0; i < arr.length; i++) {
			for (int j = i; j < arr.length; j++) {
				if(arr[i] > arr[j])
				{
					tmp = arr[i];
					arr[i] = arr[j];
					arr[j] = tmp;
				}
			}
		}
		
		for(int i : arr){
			System.out.print(i+" ");
		}
	}
}

 

6. 다음과 같이 영어와 한글의 짝을 이루는 2개의 배열을 만들고, 사용자로부터 영어 단어를 입력받아 출력하는 프로그램을 작성하라. “exit”을 입력하면 프로그램을 종료하라.

package blog;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String eng[] = {"student","love","java","happy","future"};
		String kor[] = {"학생","사랑","자바","행복한","미래"};
		
		while(true)
		{
			System.out.print("영어 단어를 입력하세요>>");
			int i;
			String s = sc.next();
			
			if(s.equals("exit")) break;
			
			for (i = 0; i < eng.length; i++) {
				if(s.equals(eng[i])) {
					System.out.println(kor[i]);
					break;
				}
				if(i == eng.length - 1) System.out.println("그런 영어 단어가 없습니다.");
			}
		}
		System.out.println("종료합니다...");
	}
}

 

7. 1부터 99까지, 369게임에서 박수를 쳐야 하는 경우, 순서대로 화면에 출력하라. 2장 실습 문제 9를 참고하라.

package blog;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n,m,cnt;
		for (int i = 1; i < 100; i++) {
			cnt = 0;
			n = i/10;
			m = i%10;

			if(n != 0 && n % 3 == 0) cnt++;
			if(m != 0 && m % 3 == 0) cnt++;
			if(cnt == 1) System.out.println(i + " 박수한번");
			else if(cnt == 2) System.out.println(i + " 박수두번");
		}	
	}
}

 

 

8. 컴퓨터와 사용자의 가위바위보 게임 프로그램을 작성하라. 사용자가 입력하고 <Enter> 키를 치면, 컴퓨터는 랜덤 하게 가위, 바위, 보 중 하나를 선택한다. 그리고 누가 이겼는지 출력한다. “그만”을 입력하면 게임을 종료한다.

package blog;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
			
		String str[] = {"가위", "바위", "보"};
		
		int i;
		
		while(true)
		{
			int n = (int)(Math.random()*3); //0~2 중 랜덤 정수 리턴
			
			System.out.println("컴퓨터와 가위 바위 보 게임을 합니다.");
			System.out.print("가위 바위 보!>>");
			
			String s = sc.next();
			if(s.equals("그만")) break;
			
			for (i = 0; i < str.length; i++) {
				if(s.equals(str[i])) break;
			}
			
			if(i == n) // 비긴 경우
			{
				System.out.println("사용자는 = "+str[i]+", 컴퓨터 = "+str[n]+", 비겼습니다.");
			}
			else if(i == 0 && n == 2 || i == 1 && n == 0 || i == 2 && n == 1) // 사용자가 이긴경우
			{
				System.out.println("사용자는 = "+str[i]+", 컴퓨터 = "+str[n]+", 사용자가 이겼습니다.");
			}
			else// 컴퓨터가 이긴 경우
			{
				System.out.println("사용자는 = "+str[i]+", 컴퓨터 = "+str[n]+", 컴퓨터가 이겼습니다.");
			}			
		}
		System.out.println("게임을 종료합니다...");
	}
}

 

Bonus1. 다음은 3x4의 2차원 배열을 만들고 이곳에 0~9 범위의 정수를 랜덤 하게 저장한 후 2차원 배열과 합을 출력하는 프로그램의 실행 결과와 코드이다. 빈 곳에 적절한 코드를 삽입하라.

package blog;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
			
		int intArray[][]; // 2차원 정수 배열 생성
		intArray = new int[3][4]; // intArray에 3x4 정수 배열 생성
		
		// 12개의 정수를 랜덤하게 발생기켜 배열에 순서대로 저장한다.
		for (int i = 0; i < 3; i++) 
			for (int j = 0; j < 4; j++) 
				intArray[i][j] = (int)(Math.random()*10); // 0~9의 랜덤 정수 
		
		// 3x4 배열을 출력한다.
		for (int i = 0; i < intArray.length; i++) {
			for (int j = 0; j < intArray[0].length; j++) 
				System.out.print(intArray[i][j]+"\t"); // 0~9의 랜덤 정수 
			System.out.println();
		}
		
		// 3x4 배열의 합을 구하여 출력한다.
		int i = 0, sum = 0;
		while(i < 3) { // 3개의 각 행에 대해 반복
			for(int j = 0; j < intArray[0].length; j++)
				sum += intArray[i][j];
			i++;
		}
		System.out.println("합은 "+sum);
	}
}

 

 

 

 

출처 -명품 자바 에센셜 (저자 : 황기태)

반응형

+ Recent posts