자바의 정석 Chapter5 연습문제

Geun Bo Kim·2023년 3월 10일
0
post-thumbnail

* 자바의 정석 공부 및 배열에 관한 연습문제 풀이

Chapter5 연습문제 [5-1 ~ 5-6]

[5-1] 다음은 배열을 선언하거나 초기화한 것이다. 잘못된 것을 고르고 그 이유를 설명하시오.

1.int[] arr[];

2.int[] arr = {1,2,3,};

3.int[] arr = new int[5];

4.int[] arr = new int[5]{1,2,3,4,5};

5.int arr[5];

6.int arr[] = new int[3][];

정답 : 4,5

풀이 :

int[] arr = new int[]{1,2,3,4,5}에서는 대괄호[]안에 배열의 크기를 지정할 수 없다.

[5-2] 다음과 같은 배열이 있을 때, arr[3].length의 값은 얼마인가?

int[][] arr = {
{5,5,5,5,5},
{10,10,10},
{20,20,20,20}
{30,30}
};

답 : 2

풀이 :

arr[3].length 는 3열{30,30}이 가리키는 배열의 크기를 의미함으로 2.

[5-3] 배열 arr에 담긴 모든 값을 더하는 프로그램을 완성하시오.

class Exercise5_3
{
	public static void main(String[] args)
	{
		int[] arr = {10, 20, 30, 40, 50};
		int sum = 0;
		for(int i=0;i<arr.length;i++) {
			sum += arr[i];
		}
		System.out.println("sum="+sum);
	}
}

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

{sum += arr[i];

}

[5-4] 2차원 배열 arr에 담긴 모든 값의 총합과 평균을 구하는 프로그램을 완성하시오.

class Exercise5_4
{
	public static void main(String[] args)
	{
		int[][] arr = {
		{ 5, 5, 5, 5, 5},
		{10,10,10,10,10},
		{20,20,20,20,20},
		{30,30,30,30,30}
	};
	int total = 0;
	float average = 0;
	/*
    
                    (1)알맞은 코드를 넣어 완성하시오.
                    
                    									*/
	average = total /(float)(arr.length * arr[0].length);
	System.out.println("total="+total);
	System.out.println("average="+average);
	} // end of main
} // end of class

정답 & 풀이 :

  1. int (4 byte) int . 형 보다 크기가 작은 자료형은 형으로 형변환 후에 연산을 수행한다
    byte / short → int / int -> int
  2. . 두 개의 피연산자 중 자료형의 표현범위가 큰 쪽에 맞춰서 형변환 된 후 연산을 수행한다
    int / float -> float / float -> float
  3. 정수형 간의 나눗셈에서 0으로 나누는 것은 금지되어 있다.

[5-5] 다음은 1과 9사이의 중복되지 않은 숫자로 이루어진 3자리 숫자를 만들어내는 프로그램이다.(1)~(2)에 알맞은 코드를 넣어서 프로그램을 완성하시오.

참고 Math.random()을 사용했기 때문에 실행결과와 다를 수 있다.

class Exercise5_5 {
    public static void main(String[] args) {
        int[] ballArr = {1,2,3,4,5,6,7,8,9};
        int[] ball3 = new int[3];
// ballArr . 배열 의 임의의 요소를 골라서 위치를 바꾼다
        for(int i=0; i< ballArr.length;i++) {
            int j = (int)(Math.random() * ballArr.length);
            int tmp = 0;
           /*
                          (1)알맞은 코드를 넣어 완성하시오.
            */
        }
// ballArr 3 ball3 . 배열 의 앞에서 개의 수를 배열 로 복사한다
         /*            (2)          */
        
        for(int i=0;i<ball3.length;i++) {
            System.out.print(ball3[i]);
        }
        System.out.println();
    } // end of main
} // end of class

정답&풀이 :

1~9 , 의 숫자를 배열에 순서대로 담고 반복해서 위치를 서로 바꿈으로써 숫자를 섞는다.
그 다음에 배열의 세 요소를 차례대로 가져오면 중복되지 않은 세 개의 정수를 얻을 수 있다. 책 140p 참조

[5-6] 단어의 글자위치를 섞어서 보여주고 원래의 단어를 맞추는 예제이다. 실행결과와 같이 동작하도록 예제의 빈곳을 채우시오.

import port java.util.Scanner;
class Exercise5_6 {
    public static void main(String args[]) {
        String[] words = { "television", "computer", "mouse", "phone" };
        Scanner scanner = new Scanner(System.in);
        for(int i=0;i<words.length;i++) {
            char[] question = words[i].toCharArray(); // String char[] 을 로 변환
           /*
                              (1) 알맞은 코드를 넣어 완성하시오.
                              char 배열 question에 담긴 문자의 위치를 임의로 바꾼다.
            */            
            System.out.printf("Q%d. %s의 정답을 입력하세요.>", 
                    i+1, new String(question));
            String answer = scanner.nextLine();
// trim() answer , equals word[i] 으로 의 좌우 공백을 제거한 후 로 와 비교
            if(words[i].equals(answer.trim()))
                System.out.printf("맞았습니다 .%n%n"); 
            else
            System.out.printf("틀렸습니다.%n%n");
        }
    } // main의 끝
}

실행결과

정답& 풀이 :

★Bonus : 로또번호를 중복되지 않게 6개의 숫자를 랜덤으로 뽑아주기

profile
미래는 개발이다

0개의 댓글