본문 바로가기
Programming Study/명품자바프로그래밍

[명품자바프로그래밍] 3장 실습문제(2)

by 푸고배 2017. 7. 8.

7. 4×4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 랜덤하게 생성하여 정수 16개를 배열에 저장하고, 2차원 배열을 화면에 출력하라.

 

<소스코드> Chapter3_7

public class Chapter3_7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int array[][] = new int[4][4];
		int num;
		for(int i=0;i<4;i++){
			for(int j=0;j<4;j++){
				num=(int)Math.round(Math.random()*9+1);
				array[i][j]=num;
				System.out.print(array[i][j]+"\t");
			}
			System.out.println();
		}
	}

}

int array[][] = new int[4][4]// 4 × 4 행렬을 만듦

Math.round(double a) // 실수 a를 소수 첫째 자리에서 반올림한 정수를 long 타입으로 반환Math.random(); // 0.0보다 크거나 같고 1.0보다 작은 임의의 실수 리턴

 

1. 4 × 4의 2차원 배열(array)을 생성한다.
2. for문 안에서 1에서 10까지 범위의 정수를 랜덤하게 생성한다.
3. 생성한 정수를 array에 순서대로 넣는다.

 

 

8. 4×4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 8개만 랜덤하게 생성하여 임의의 위치에 삽입하라. 동일한 수가 나올 수도 있다. 나머지 8개의 숫자는 모두 0이다. 즉, 2차원 배열에는 항상 8개의 정수가 랜덤한 위치에 있도록 하라. 그리고 이 2차원 배열을 화면에 출력하라.

 

<소스코드> Chapter3_8

public class Chapter3_8 {

	public static void main(String[] args) {
        // TODO Auto-generated method stub
        int array[][]= new int[4][4];
        int num1, num2;
        int k=0;
        while(k<8){
            num1 = (int)Math.round(Math.random()*3);
            num2 = (int)Math.round(Math.random()*3);
        	if(array[num1][num2]==0){
              	array[num1][num2]=(int)Math.round(Math.random()*9+1);
           	}
           	else{
           		k--;
           	}
               k++;
        }
        for(int i=0;i<4;i++){
        	for(int j=0;j<4;j++){
        		System.out.print(array[i][j]+ " ");
        	}
        	
    		System.out.println();
        }
    }
}
1. 16개의 숫자를 랜덤한 위치에 담을 4 × 4의 2차원 배열(array)을 생성한다.
2. 랜덤한 인덱스를 발생시키고 array 인덱스에 값이 비어있으면 값을 넣는다. (중복검사 실시)
3. 2번을 8번 반복한다.
4. 배열을 출력한다.

 

9. 다음과 같이 작동하는 Average.java를 작성하라. 명령행 인자는 모두 정수만 사용되며 정수들의 평균을 출력한다.

 

<소스코드> Chapter3_9

public class Chapter3_9 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int sum=0;
		for(int i=0;i<args.length;i++){
			sum+=Integer.parseInt(args[i]);	
		}
		System.out.println(sum/args.length);
	}

}
​

args : 커맨드 라인에 String 객체 배열
args.length; // args의 요소의 개수 출력

Integer.parseInt("10"); // 문자열 "10"을 정수 10으로 바꿈

 

1. 입력받은 문자열을 정수형으로 바꾼다.
2. 정수들을 가지고 평균을 구한다.
3. cmd창에서 "java '클래스명' 10 20 30"를 입력한다.(클래스명 뒤에 붙는 숫자와 숫자의 개수는 예시)
4. cmd창에서 "javac '클래스명'.java" 입력을 통해 소스를 컴파일 한다.

 

10. 다음과 같이 작동하는 add.java를 작성하라. 명령행 인자 중에서 정수만을 골라 합을 구하라.

 

<소스코드> Chapter3_10

public class Chapter3_10 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int sum=0;
		for(int i=0;i<args.length;i++){
			try{
				sum+=Integer.parseInt(args[i]);
			}
			catch(NumberFormatException e){
			}
		}
		System.out.println(sum);
	}
	
}

try{예외가 발생할 가능성이 있는 실행문}catch(처리할 예외 타입 선언){

예외 처리문

}

// 예외 처리

NumberFormatException // 문자열이 나타내는 숫자와 일치하지 않는 타입의 숫자로 변환 시 발생

 

1. 입력받은 수를 다 더한다.
2. try-catch 문을 사용해서 숫자가 아닌 다른 문자를 받았을 경우 예외 처리를 해준다.
3. 9번 문제와 동일한 방법으로 cmd창에서 실행해본다.

 

 

11. 배열과 반복문을 이용하여 프로그램을 작성해보자. 키보드에서 정수로 된 동의 액수를 입력받아 오만 원권, 만 원권, 천 원권, 500원짜리 동전, 100원짜리 동전, 50원짜리 동전, 10원짜리 동전, 1원짜리 동전이 각 몇 개로 변환되는지 출력하라. 예를 들어, 65370이 입력되면 오만 원권 1매, 만 원권 1매, 천 원권 5매, 100원짜리 동전 3개, 50원짜리 동전 1개, 10원짜리 동전 2개이다. 이때 반드시 다음의 배열을 이용하고 반복문으로 작성하라.

 

 int [] unit = {50000, 10000, 1000, 500, 100, 50, 10, 1};

 

<소스코드> Chapter3_11

import java.util.Scanner;

public class Chapter3_11 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int [] unit = {50000, 10000, 1000, 500, 100, 50, 10, 1}; // 환산할 돈의 종류
		while(true){
			System.out.print("금액을 입력하시오(나가기:-1) : ");
			Scanner sd = new Scanner(System.in);
			int money = sd.nextInt();
			if(money==-1){
				break;
			}
			for(int i=0;i<8;i++){
				System.out.println(unit[i]+"원 : "+ (money/unit[i]));
				money%=unit[i];
			}
		}
	}
}

1. 50000으로 나눈 몫이 오만 원권의 개수가 된다.
2. 50000으로 나눈 나머지에서 10000을 나눈 몫이 만 원권의 개수가 된다.
3. 10000으로 나눈 나머지에서 1000을 나눈 몫이 천 원권의 개수가 된다.
4. 이 알고리즘을 반복해서 사용하면 1원짜리 동전의 개수까지 구할 수 있다.

 

 

12. 반복문을 이용하여 369게임에서 박수를 쳐야 하는 경우의 수를 순서대로 화면에 출력해보자. 1부터 시작하며 99까지만 한다. 실행 사례는 다음 그림과 같다.

 

<소스코드> Chapter3_12

public class Chapter3_12 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i=1;
		int first;
		int second;
		while(i<100){
			first=i/10;
			second=i%10;
			if((first%3==0&&first!=0) || second%3==0){
				System.out.print(i+ " 박수 ");
				if((first%3==0&&first!=0) && second%3==0)
					System.out.println("두번");
				else
					System.out.println("한번");
				
			}
			i++;
		}
	}

}

 

1. 1부터 99의 수를 입력받는다.
2. 입력받은 수를 10의 자리와 1의 자리로 구분한다.
3. 10의 자리 수나 1의 자리 수 둘 중 하나만 3의 배수이면 "박수 한번"을 출력한다.
4. 10의 자리 수와 1의 자리 수가 모두 3의 배수이면 "박수 두번"을 출력한다.

 

 

참고자료 : 생능출판 명품 JAVA Programming

github 주소 : 

https://github.com/ch1517/First_Step/tree/master/Chapter3/Chapter3_Ex

 

 

 

 

 

 

 

반응형

댓글