명품 자바 프로그래밍

명품자바프로그래밍 3장 실습문제

렛쓰기릿 2023. 10. 7. 19:23

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

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

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

 0 ~ 99의 숫자들 중 짝수들만 더해서 sum에 값을 저장함.

 

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

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클래스를 작성하라.

public class ForTest {

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

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

public class DoWhileTest {

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

 

 

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

import java.util.*;

public class OH {
	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를 이용하여 정수를 입력받고, 다음과 같이 *을 출력하는 프로그램을 작성하라.

import java.util.*;

public class OH {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		System.out.print("정수를 입력하시오 >> ");
		int n = s.nextInt();
		
		for (int i = 0; i<n; i++) {
			for (int j = 0; j<n-i; j++) 
				System.out.print("*");
			System.out.println("");
		}
		s.close();
	}
}

 

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

import java.util.*;

public class OH {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		System.out.print("소문자 알파벳 하나를 입력하시오 >> ");
		char ch = s.next().charAt(0);
		
		for (int i = 0; i <= ch-'a'; i++) {
			for (char pc = 'a'; pc<=ch-i; pc++)
				System.out.print(pc);
			System.out.println("");
		}
		s.close();
	}
}

 

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

import java.util.*;

public class OH {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		System.out.print("양의 정수 10개를 입력하시오 >> ");
		int n[] = new int[10];
		
		for (int i = 0; i<10; i++)
			n[i] = s.nextInt();
		
		System.out.print("3의 배수는 " );
		for (int j = 0; j<n.length; j++) {
			if (n[j] % 3 == 0) 
				System.out.print( n[j] + " ");
		}		
		s.close();
	}
}

 

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

import java.util.*;

public class OH {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		int [] unit = {50000, 10000, 1000, 500, 100, 50, 10, 1}; 	//환산할 돈의 종류
		
		System.out.print("금액을 입력하시오 >> ");
		int don = s.nextInt();
		
		for (int i = 0; i<unit.length; i++) {
			System.out.println(unit[i] + "원 짜리 : " + don/unit[i] + "개"); 
			don = don % unit[i]; 
		}
		
		s.close();
	}
}

 

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

public class OH {
	public static void main(String[] args) {
		
		int n[] = new int[10];		//리스트 생성
		double sum = 0;
		
		System.out.print("랜덤한 변수들 : ");
		for (int i = 0; i<n.length; i++) {
			n[i] = (int)(Math.random()*10+1);
			System.out.print(n[i] + " ");
			sum += n[i];
		}
		System.out.println("");
		
		System.out.println("평균은 " + sum/n.length);
		
	}
}

 

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

import java.util.*;

public class OH {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int count = 0;
		
		System.out.print("정수 몇개? ");
		int nums = s.nextInt();

		int n[] = new int[nums];
		
		for (int i = 0; i < n.length; i++) {
			n[i] = (int)(Math.random()*100+1);	// 1부터 100까지의 랜덤 정수 생성 후 n[i]에 대입
			System.out.print(n[i] + " ");		// n[i]에 대입된 수를 바로 출력.
		
			count++;
			if (count == 10) {		// 정수 10개 출력될때마다 줄바꿈
				System.out.println();
				count = 0;
			}
		}
		s.close();
	}
}

 

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

import java.util.*;

public class OH {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		int n[][] = new int [4][4];
		
		for (int i = 0; i<n.length; i++) {
			for (int j = 0; j<n[i].length; j++) {
				n[i][j] = (int)(Math.random()*10+1);
				System.out.print(n[i][j] + "   ");
			}
			System.out.println();
		}
		s.close();
	}
}

 

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

import java.util.*;

public class OH {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		int n[][] = new int[4][4];		// 4x4의 2차원 배열 생성
		int count = 0;
		
		while (count < 10) {	
			int x = (int)(Math.random()*4);
			int y = (int)(Math.random()*4);
			
			if (n[x][y] == 0) {		// 4x4의 2차원 배열 내의 랜덤한 위치에 값이 0일 경우, 1~10사이의 난수를 저장함.
				n[x][y] = (int)(Math.random()*10+1);
				count++;
			}
		}
		
		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();
		}
		s.close();
	}
}

 

11과 12는... 쓰는 일 얼마 없다고 교수님이 말씀하시기도 하셨고... 시험에 안 나올 것 같기도 하고.. 

그냥 스킵하고 13으로 넘어감.

 

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

import java.util.*;

public class OH {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		for (int i = 0; i<=99; i++) {
			if ( (i/10 == 3 || i/10 == 6 ||  i/10 == 9) && (i%10 == 3 || i%10 == 6 ||  i%10 == 9 ) ) 		// 십의자리, 일의자리 둘  다 3,6,9에 해당될 경우
				System.out.println(i + "박수 짝짝");
			else if ( (i/10 == 3 || i/10 == 6 ||  i/10 == 9) || (i%10 == 3 || i%10 == 6 ||  i%10 == 9 ) )		// 십의자리, 일의자리 둘 중 한 부분만 3,6,9에 해당될 경우
				System.out.println(i + "박수 짝");
		}
		
		s.close();
	}
}

 

14. 다음 코드와 같이 과목과 점수가 짝을 이루도록 2개의 배열을 작성하라. 그리고 다음 예시와 같이 과목 이름을 입력받아 점수를 출력하는 프로그램을 작성하라. "그만"을 입력받으면 종료한다.

import java.util.*;

public class OH {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		String course[] = { "Java", "C++", "HTML5", "컴퓨터구조", "안드로이드" };
		int score[] = { 95, 88, 76, 62, 55 };
		int i;
		
		while (true) {
			System.out.print("과목 이름 >> ");
			String subject = s.next();
			
			if ( subject.equals("그만") )
				break;
			
			for (i = 0; i<course.length; i++) {
				if ( course[i].equals( subject ) ) {
					System.out.println(subject + "의 점수는 " + score[i] );
					break;
				}
			}
			if (i == score.length)			// 왜 여따 집어넣었는지 그 이유는 for문 안에서 여러번 직접 헤매보는 게 베스트인듯
				System.out.println("없는 과목입니다.");
		}
		s.close();
	}
}

 

15. Multiply클래스 관련 문제

import java.util.*;

public class OH {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		while (true) {
			System.out.print("곱하고자 하는 두 수 입력 >> ");
	
			try {
				int n = s.nextInt();
				int m = s.nextInt();
				System.out.print(n + "x" + m + "=" + n*m);
				break;
			}
			catch (InputMismatchException e) {
				System.out.println("실수는 입력하면 안됩니다.");
				s.nextLine();	// 스캐너에 입력된 키값들을 제거. 이걸 입력하지 않으면 catch의 출력문 무한반복됨.
			}
		}
		s.close();
	}
}

 

16. 컴퓨터와 독자 사이의 가위바위보 게임

import java.util.*;

public class OH {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		String str[] = { "가위", "바위", "보" };
		
		while (true) {
			System.out.println("컴퓨터와 가위 바위 보 게임을 합니다.");
			System.out.print("가위 바위 보! >> ");
			String user_pick = s.next();
			
			if (user_pick.equals("그만")) {		// "그만" 입력 시 종료
				System.out.println("게임을 종료합니다...");
				break;
			}
			
			int cp = (int)(Math.random()*3);
			String com_pick = str[cp];
			
			System.out.print("사용자 = " + user_pick + ", 컴퓨터 = " + com_pick + ", ");
			
			switch (user_pick) {
				case "가위":
					if (com_pick.equals("가위")) {
						System.out.println("비겼습니다."); 
						break;
					}
					else if (com_pick.equals("바위")) {	
						System.out.println("컴퓨터가 이겼습니다."); 
						break;
					}
					else {
						System.out.println("사용자가 이겼습니다.");
						break;
					}
					
				case "바위":
					if (com_pick.equals("가위")) {
						System.out.println("사용자가 이겼습니다.");
						break;
					}
					else if (com_pick.equals("바위")) {
						System.out.println("비겼습니다."); 
						break;
					}
					else {	
						System.out.println("컴퓨터가 이겼습니다."); 
						break;
					}
					
				case "보":
					if (com_pick.equals("가위")) {	
						System.out.println("컴퓨터가 이겼습니다."); 
						break;
					}
					else if (com_pick.equals("바위")) {
						System.out.println("사용자가 이겼습니다.");
						break;
					}
					else {
						System.out.println("비겼습니다."); 
						break;
					}
			}
		}
		s.close();
	}
}