Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
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
Archives
Today
Total
관리 메뉴

코딩로그

[명품 JAVA Programming] 제3장 반복문과 배열 그리고 예외 처리 - 실습문제 본문

YJ/JAVA

[명품 JAVA Programming] 제3장 반복문과 배열 그리고 예외 처리 - 실습문제

Team DAON 2020. 12. 27. 01:07

[1번]

다음 프로그램에 대해 물음에 답하라?

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

 

(1) 무엇을 계산하는 코드이며 실행 결과 출력되는 코드는?

→ 0 이상 100 이하 정수 중, 짝수의 합을 출력하는 코드. 실행 결과 2450이 출력된다.

 

(2) 위의 코드를 main() 메소드로 만들고 WhileTest 클래스로 완성하라.

import java.util.*;

public class WhileTest {
	public static void main(String[] args) {
	    int sum=0, i=0;
	    while(i < 100){
	    	sum = sum + i;
	        i += 2;
	    }
	    System.out.println(sum);
	}
}

(3) for문을 이용하여 동일하게 실행되는 ForTest 클래스를 작성하라.

import java.util.*;

public class ForTest {
	public static void main(String[] args) {
	    int sum=0;
	    for(int i = 0; i<100; i+=2) {
	    	sum = sum + i;
	    }
	    System.out.println(sum);
	}
}

(4) do-while 문을 이용하여 동일하게 실행되는 DoWhileTest 클래스를 작성하라.

import java.util.*;

public class DoWhileTest {
	public static void main(String[] args) {
	    int sum = 0;
	    int i = 0;
	    do {
	    	sum += i;
	    	i += 2;
	    }while(i<100);
	    System.out.println(sum);
	}
}

[2번]

다음 2차원 배열 n을 출력하는 프로그램을 작성하라.

int n[][] = {{1},{1,2,3},{1},{1,2,3,4},{1,2}};
import java.util.*;

public class Main {
	public static void main(String[] args) {
	    int n[][] = {{1},{1,2,3},{1},{1,2,3,4},{1,2}};
	    
	    for(int i = 0; i<n.length; i++) {//행의 수만큼 반복
	    	for(int j = 0; j<n[i].length; j++) {//열의 수만큼 반복
	    		System.out.print(n[i][j]+" ");
	    	}
	    	System.out.println();
	    }
	}
}

 

실행 결과


[3번]

Scanner를 이용하여 정수를 입력받고 다음과 같이 *를 출력하는 프로그램을 작성하라. 다음은 5를 입력받았을 경우이다.

 

정수를 입력하시오>>5
*****
****
***
**
*
import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.println("정수를 입력하시오>>");
	    int n = scanner.nextInt();//정수 입력 받기
	    int count = n;//입력 받은 정수 저장
	    for(int i = 0; i<n; i++) {//입력받은 횟수만큼 반복
	    	for(int j=count; j>=1; j--) {//count에 저장된 값만큼 * 반복 출력
	    		System.out.print("*");
	    	}
	    	System.out.println();
	    	count--;//count에 저장된 값 1 줄여 패턴 유지
	    }
	}
}

실행 결과


[4번]

Scanner를 이용하여 소문자 알파벳을 하나 입력받고 다음과 같이 출력하는 프로그램을 작성하라. 다음은 e를 입력받았을 경우이다.

소문자 알파벳 하나를 입력하시오>>e
abcde
abcd
abc
ab
a

 

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.println("소문자 알파벳 하나를 입력하시오>>");
	    String s = scanner.next();//알파벳 입력 받기
	    char alpha = s.charAt(0);//String의 가장 앞 알파벳 alpha에 저장
	    char count = alpha;
	    for(char i = count; i>='a'; i--) {//입력받은 알파벳만큼 반복
	    	for(char j='a'; j<=count; j++) {//한 줄씩 출력
	    		System.out.print(j);
	    	}
	    	System.out.println();
	    	count--;//count에 저장된 값 1 줄여 패턴 유지
	    }
	}
}

실행 결과


[5번]

양의 정수를 10개 입력받아 배열에 저장하고, 배열에 있는 정수 중에서 3의 배수만 출력하는 프로그램을 작성하라.

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.println("양의 정수 10개를 입력하시오>>");
	    int[] arr = new int[10];//int형의 10 크기를 가진 배열 선언
	    for(int i = 0; i<10; i++) {
	    	arr[i] = scanner.nextInt();//10개의 정수 입력받아 저장하기
	    }
	    System.out.print("3의 배수는 ");
	    for(int i = 0; i<arr.length; i++) {//arr에 저장된 모든 변수
	    	if(arr[i]%3==0) {//3의 배수인 경우 실행
	    		System.out.print(arr[i]+" ");
	    	}
	    }
	}
}

실행 결과


[6번]

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

int [] unit = {50000, 10000, 1000, 500, 100, 50, 10, 1};
import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.println("금액을 입력하시오>>");
	    int money = scanner.nextInt();//금액 입력받기
	    int [] unit = {50000, 10000, 1000, 500, 100, 50, 10, 1};//환산할 돈의 종류
	    
	    for(int i = 0; i<unit.length; i++) {//unit 배열의 크기만큼 반복
	    	int result = money/unit[i];//환산할 돈을 기준으로 몇 개가 필요한지 결정
	    	if(result != 0) {//각 금액으로 환산이 가능한 경우
	    		System.out.println(unit[i]+"원 짜리 : "+ result+"개");//출력
	    		money = money%unit[i];//환산 후 남은 금액 저장
	    	}
	    }
	}
}

실행 결과


[7번]

정수를 10개 저장하는 배열을 만들고 1에서 10까지 범위의 정수를 랜덤하게 생성하여 배열에 저장하라. 그리고 배열에 든 숫자들과 평균을 출력하라.

 

Hint!

1에서 10까지 범위의 정수를 랜덤하게 생성할 때는 다음 코드를 이용하라.
int i = (int)(Math.random()*10+1);

 

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    int[] arr = new int[10];//int형의 10 크기의 배열 선언
	    int sum = 0;//합을 구하기 위한 변수 선언
	    System.out.print("랜덤한 정수들 : ");
	    for(int i = 0; i<arr.length; i++) {//arr의 크기만큼 반복문 실행
	    	arr[i] = (int)(Math.random()*10+1);//랜덤한 정수 10개 arr에 저장
	    	sum += arr[i];//랜덤한 정수 10개의 합 저장
	    	System.out.print(arr[i]+" ");//랜덤한 정수 출력
	    }
	    System.out.println();
	    System.out.println("평균은 "+(double)sum/arr.length);
	    //평균값을 구한 후, double형으로 변환. 소수점 아래까지 표기
	    
	}
}

실행 결과


[8번]

정수를 몇 개 저장할지 키보드로부터 개수를 입력받아(100보다 작은 개수) 정수 배열을 생성하고, 이곳에 1에서 100까지 범위의 정수를 랜덤하게 삽입하라. 배열에는 같은 수가 없도록 하고 배열을 출력하라.

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    Scanner scanner = new Scanner(System.in);
	    System.out.println("정수 몇 개?");
	    int n = scanner.nextInt();//개수 받아오기
	    int arr[] = new int[n];//n 크기의 배열 생성
	    
	    for(int i = 0; i<n; i++) {//n번 반복
			arr[i] = (int)(Math.random()*100+1);//난수 생성 및 arr에 저장
			for(int j = 0; j<i; j++) {//중복 체크를 위한 for문
				if(arr[j] == arr[i]) {//중복인 경우
					i--;//i의 값을 하나 줄여 가장 최근에 넣은 값을 취소한다.
					break;//이전 자리에 새로운 값을 넣어 갱신하기 위해 break
				}
			}
		}
		for(int i = 1; i<=arr.length; i++) {//arr 크기만큼 반복
			System.out.print(arr[i-1]+" ");
			if(i%10==0&&i!=0) {//10개 단위로 줄바꿈을 하기 위한 if문
				System.out.println();
			}
		}
	}
}

 

실행 결과


[9번]

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

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    int arr[][] = new int[4][4];//4x4 배열 생성
	    
	    for(int i = 0; i<arr.length; i++) {//4번 반복(행)
	    	for(int j = 0; j<arr[i].length; j++) {//4번 반복(열)
	    		arr[i][j] = (int)(Math.random()*10+1);//난수 발생 및 저장
	    	}
	    }
	    
	    for(int i = 0; i<arr.length; i++) {//4번 반복(행)
	    	for(int j = 0; j<arr[i].length; j++) {//4번 반복(열)
	    		System.out.print(arr[i][j]+" ");//배열 출력
	    	}
	    	System.out.println();//줄 바꿈
	    }
	    
	    
	}
}

실행 결과


[10번]

4X4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 10개만 랜덤하게 생성하여 임의의 위치에 삽입하라. 동일한 정수가 있어도 상관없다. 나머지 6개의 숫자는 모두 0이다. 만들어진 2차원 배열을 화면에 출력하라.

 

→ int 배열은 default 값이 0으로 저장된다. 따라서 따로 0을 삽입할 필요가 없음을 기억하자.

import java.util.*;

public class Main {
	public static void main(String[] args) {
	    int arr[][] = new int[4][4];//4x4 배열 생성
	    //int 배열은 default 값이 0으로 저장되어 있다는 것을 기억하자
	    int count = 1;//임의 위치에 배열한 정수의 수를 확인하기 위한 변수
	    while(count<=10) {//총 10개의 정수가 삽입될 때까지 반복
	    	int i = (int)(Math.random()*4);//0에서 3 사이의 임의의 수
	    	int j = (int)(Math.random()*4);//0에서 3 사이의 임의의 수
	    	int x = (int)(Math.random()*10+1);//1에서 10 사이의 임의의 수
	    	
	    	if(arr[i][j] == 0) {//default 값인 경우, 즉 임의의 수가 삽입되지 않은 경우
	    		arr[i][j] = x;//1에서 10 사이의 임의의 수 저장
	    		count++;//삽입된 임의의 수 개수 하나 증가
	    	}
	    }
	    for(int i = 0; i<arr.length; i++) {//2차원 배열 출력
	    	for(int j = 0; j<arr[i].length; j++) {//2차원 배열 출력
	    		System.out.print(arr[i][j]+" ");//저장된 값 출력
	    	}
	    	System.out.println();//줄 바꿈
	    }
	    
	}
}

실행 결과


[11번]

다음과 같이 작동하는 Average.java를 작성하라. 명령행 인자는 모두 정수만 사용되며 정수들의 평균을 출력한다. 다음 화면은 컴파일된 Average.class 파일을 c:\Temp 디렉터리에 복사한 뒤 실행한 경우이다. 원본 Average.class 파일은 이클립스의 프로젝트 폴더 밑에 bin 폴더에 있다.

 

문자열을 정수로 변환할 때 다음 코드를 이용하라.

int i = Integer.parseInt("10"); // i는 10
import java.util.*;

public class Average {
	public static void main(String[] args) {
		/* 프로그램 아규먼트 args
		프로그램을 실행할 때 자동으로 넘겨주는 값으로
		클래스 이름 뒤에 값을 지정하면 공백을 기준으로 문자열을 잘라 배열 형식으로 main()에 전달한다.*/
		
	    int sum = 0; //합을 구하기 위한 변수 선언
	    for(int i = 0; i<args.length; i++) {//입력한 수의 개수만큼 반복
	    	sum += Integer.parseInt(args[i]);//공백을 기준으로 문자열을 자른 후, int형으로 변환해 sum에 더함
	    }
	    System.out.println(sum/args.length);//평균을 구해 출력
	}
}

 


[12번]

다음과 같이 작동하는 Add.java를 작성하라. 명령행 인자 중에서 정수만을 골라 합을 구하라. 다음 화면은 Add.java 파일을 C:\Temp 디렉터리에 복사한 뒤 실행한 경우이다. 원본 Add.class 파일은 이클립스 프로젝트 폴더 밑에 bin 폴더에 있다.

 

import java.util.*;

public class Add {
	public static void main(String[] args) {
		/* 프로그램 아규먼트 args
		프로그램을 실행할 때 자동으로 넘겨주는 값으로
		클래스 이름 뒤에 값을 지정하면 공백을 기준으로 문자열을 잘라 배열 형식으로 main()에 전달한다.*/

	    int sum = 0; //합을 구하기 위한 변수 선언
	    for(int i = 0; i<args.length; i++) {//입력한 수의 개수만큼 반복
	    	try {//정수를 입력해 형변환 오류가 일어나지 않는 경우
	    		sum += Integer.parseInt(args[i]);//공백을 기준으로 문자열을 자른 후, int형으로 변환해 sum에 더함
	    	}
	    	catch(Exception e){//정수가 아닌 경우에 대비, 예외처리 설정
	    		continue;//멈추지 않고 계속 진행
	    	}
	    }
	    System.out.println(sum);//정수의 합 출력
	}
}

[13번]

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

import java.util.*;

public class Main {
	public static void main(String[] args) {
		
	    Scanner scanner = new Scanner(System.in);
	    int ten = 0;//십의 자리 숫자
	    int one = 0;//일의 자리 숫자
	    
	    for(int i = 1; i<=99; i++) {//1부터 99까지 반복
	    	ten = i/10;//십의 자리 숫자 저장
	    	one = i%10;//일의 자리 숫자 저장
	    	
	    	if(ten==3||ten==6||ten==9||one==3||one==6||one==9) {//십의 자리나 일의 자리 중 하나만 3,6,9인 경우 실행
	    		if((ten==3||ten==6||ten==9)&&(one==3||one==6||one==9)) {//십의 자리와 일의 자리 둘 다 3,6,9인 경우 실행
	    			System.out.println(i+" 박수 짝짝");
	    		}
	    		else {//둘 중 하나만 3,6,9인 경우
	    			System.out.println(i+" 박수 짝");
	    		}
	    	}
	    }
	}
}

실행 결과


[14번]

다음 코드와 같이 과목과 점수가 짝을 이루도록 2개의 배열을 작성하라

String course [] = {"Java", "C++", "HTML5", "컴퓨터구조", "안드로이드"};
int score [] = {95, 88, 76, 62, 55};

그리고 다음 예시와 같이 과목 이름을 입력받아 점수를 출력하는 프로그램을 작성하라. "그만"을 입력받으면 종료한다.

과목 이름>>Jaba
없는 과목입니다.
과목 이름>>Java
Java의 점수는 95
과목 이름>>안드로이드
안드로이드의 점수는 55
과목 이름>>그만
Hint!
문자열을 비교하기 위해서는 String 클래스의 equals() 메소드를 이용해야 한다.
String name;
if(course[i].equals(name)){
	int n = score[i];
}
import java.util.*;

public class Main {
	public static void main(String[] args) {
   
	    String course [] = {"Java", "C++", "HTML5", "컴퓨터구조", "안드로이드"};//배열 작성
	    int score [] = {95, 88, 76, 62, 55};//배열 작성
	    int count = 0;//배열 내에 과목 유무를 확인하기 위한 변수 선언
	    //배열에 입력받은 값이 존재하는 경우 1, 존재하지 않는 경우 0으로 저장
	    while(true) {//break 전까지 무한 반복
	    	System.out.println("과목 이름>>");
	    	String input = scanner.next();//과목 이름 입력
	    	if(input.equals("그만")) {//그만을 입력한 경우
	    		break;//반복 종료 후 while문 나가기
	    	}
	    	else {//그만을 입력하지 않은 경우
	    		for(int i = 0; i<course.length; i++) {//course 배열에 저장된 값만큼 반복
	    			if(input.equals(course[i])) {//입력받은 값과 배열에 저장된 과목명이 같은 경우
	    				System.out.println(input+"의 점수는 "+score[i]);//점수 출력
	    				count++;//입력받은 값이 배열에 존재하므로 count의 값을 1로 변경
	    			}
	    		}
	    		if(count == 0) {//입력받은 값이 존재하지 않는 경우
	    			System.out.println("없는 과목입니다.");
	    		}
	    		else {//입력받은 값이 존재하는 경우, 1이었던 count 값을 0으로 초기화
	    			count = 0;
	    		}
	    	}
	    }
	}
}

 

실행 결과


[15번]

다음은 2개의 정수를 입력 받아 곱을 구하는 Multiply 클래스이다.

import java.util.Scanner;
public class Multiply {
	public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        System.out.print("곱하고자 하는 두 수 입력>>");
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        System.out.print(n + "x" + m + "=" + n*m);
        scanner.close();
    }
}

다음과 같이 실행할 때 프로그램은 10과 5를 곱해 50을 잘 출력한다.

하지만, 다음과 같이 실수를 입력하였을 때, 예외가 발생한다.

다음과 같이 실수가 입력되면 정수를 다시 입력하도록 하여 예외 없이 정상적으로 처리되도록 예외 처리코드를 삽입하여 Multiply 클래스를 수정하라.

곱하고자 하는 두 수 입력>>2.5 4
실수는 입력하면 안 됩니다.
곱하고자 하는 두 수 입력>> 4 3.5
실수는 입력하면 안 됩니다.
곱하고자 하는 두 수 입력>> 4 3
4x3=12
Hint!
InputMismatchException 예외를 처리할 try-catch 코드를 작성하고
catch 블록에서 Scanner에 이미 입력된 키를 모두 제거하기 위해 Scanner의 nextLine()을 호출하라.
import java.util.*;

public class Main {
	public static void main(String[] args) {
		
	    Scanner scanner = new Scanner(System.in);
	    while(true) {//break 전까지 무한 반복
	    	System.out.print("곱하고자 하는 두 수 입력>>");
		    try {//예외처리, 오류가 발생하지 않는 경우
		    	int n = scanner.nextInt();
		        int m = scanner.nextInt();
		        System.out.print(n + "x" + m + "=" + n*m);//두 정수를 받아와 결과 출력
		        break;//while문을 종료하고 벗어남
		    }
		    catch(InputMismatchException e) {//예외처리, 오류가 발생한 경우
		    	System.out.println("실수는 입력하면 안 됩니다.");
		    	scanner.nextLine();//Scanner에 이미 입력된 키를 모두 제거하기 위해 호출
		    	continue;//while문 반복
		    }
	    }
        scanner.close();
	}
}

 

실행 결과

 


[16번]

컴퓨터와 독자 사이의 가위 바위 보 게임을 만들어보자. 예시는 다음 그림과 같다. 독자부터 먼저 시작한다. 독자가 가위 바위 보 중 하나를 입력하고 <ENTER>키를 치면, 프로그램을 가위 바위 보 중에서 랜덤하게 하나를 선택하고 컴퓨터가 낸 것으로 한다. 독자가 입력한 값과 랜덤하게 선택한 값을 비교하여 누가 이겼는지 판단한다. 독자가 가위 바위 보 대신 "그만"을 입력하면 게임은 끝난다.

 

컴퓨터와 가위 바위 보 게임을 합니다.
가위 바위 보!>>바위
사용자 = 바위 , 컴퓨터 = 가위, 사용자가 이겼습니다.
가위 바위 보!>>가위
사용자 = 가위 , 컴퓨터 = 가위, 비겼습니다.
가위 바위 보!>>그만
게임을 종료합니다...
Hint!

다음과 같은 문자열 배열을 만든다.
String str[] = {"가위", "바위", "보"};

컴퓨터가 내는 것을 랜덤하게 선택하기 위해서는 다음 코드를 이용한다.
int n = (int)(Math.random()*3+);

컴퓨터가 낸 것이 "바위"인지 비교하는 코드는 다음과 같이 한다.
if(str[n].equals.("바위"));
import java.util.*;

public class Main {
	public static void main(String[] args) {
		
	    Scanner scanner = new Scanner(System.in);
	    String str[] = {"가위", "바위", "보"};//배열 생성
	    int computer = 0;//컴퓨터의 랜덤값 저장을 위한 변수 선언
	    System.out.println("컴퓨터와 가위 바위 보 게임을 합니다.");
	    while(true) {//break 전까지 무한 반복
	    	System.out.print("가위 바위 보!>>");
	    	String input = scanner.next();//사용자 입력 저장
	    	if(input.equals("그만")) {//사용자가 그만을 입력한 경우
	    		System.out.print("게임을 종료합니다...");
	    		break;//while문 종료
	    	}
	    	else {//사용자가 그만이 아닌 다른 것을 입력한 경우
	    		computer = (int)(Math.random()*3);//컴퓨터의 값 임의로 지정
	    		if(str[computer].equals(input)) {//컴퓨터의 값과 사용자의 값이 같은 경우
	    			System.out.println("사용자 = "+input+" , 컴퓨터 = "+input+", 비겼습니다.");
	    		}
	    		else if(input.equals("가위")) {//사용자가 가위를 낸 경우
	    			if(str[computer].equals("바위")) //컴퓨터가 바위를 낸 경우, 컴퓨터 승
	    				System.out.println("사용자 = "+input+" , 컴퓨터 = "+str[computer]+", 컴퓨터가 이겼습니다.");
	    			else if(str[computer].equals("보"))//컴퓨터가 보를 낸 경우, 사용자 승
	    				System.out.println("사용자 = "+input+" , 컴퓨터 = "+str[computer]+", 사용자가 이겼습니다.");
	    		}
	    		else if(input.equals("바위")) {//사용자가 바위를 낸 경우
	    			if(str[computer].equals("보")) //컴퓨터가 보를 낸 경우, 컴퓨터 승
	    				System.out.println("사용자 = "+input+" , 컴퓨터 = "+str[computer]+", 컴퓨터가 이겼습니다.");
	    			else if(str[computer].equals("가위"))//컴퓨터가 가위를 낸 경우, 사용자 승
	    				System.out.println("사용자 = "+input+" , 컴퓨터 = "+str[computer]+", 사용자가 이겼습니다.");
	    		}
	    		else if(input.equals("보")) {//사용자가 보를 낸 경우
	    			if(str[computer].equals("가위")) //컴퓨터가 가위를 낸 경우, 컴퓨터 승
	    				System.out.println("사용자 = "+input+" , 컴퓨터 = "+str[computer]+", 컴퓨터가 이겼습니다.");
	    			else if(str[computer].equals("바위"))//컴퓨터가 바위를 낸 경우, 사용자 승
	    				System.out.println("사용자 = "+input+" , 컴퓨터 = "+str[computer]+", 사용자가 이겼습니다.");
	    		}
	    		
	    	}
		   
	    }
        scanner.close();
	}
}

실행 결과