본문으로 바로가기
반응형

 

 

 

 

지금까지 배웠던 java언어를 총정리해 실습 문제를 풀고자 합니다.

 

그전에,

 

저번 포스팅의 배열 복사의 간단한 예제를 풀고 가봅시다.

 

 

 

 

 

 

 

 


배열 예제(배열의 복사)


 

 

 

난이도 ★☆☆☆☆

 

 

 

예제 1

 

 

Q : 배열의 얕은 복사를 수행

 

 

 

 

 

 


 

 

 

 

public static void ex1() {
		System.out.println("-----배열 복사(얕은 복사)-----");
		
		int[] iArr1 = new int[] {1, 2, 3, 4};
		int[] iArr2 = iArr1;
		for(int i = 0; i < iArr1.length; i++) {
			System.out.println("iArr1[" + i + "]:" + iArr1[i] + "|iArr2[" + i + "]:" + iArr2[i]);
		}
		
		System.out.println("-----배열 복사 후 값 변경-----");
		
		iArr1[0] = 15;	// 동일한 참조값으로 변경을 하기 때문에 iArr1 이나 iArr2 모두 변경된 것으로 보임
		iArr2[3] = 25;	// 동일한 참조값으로 변경을 하기 때문에 iArr1 이나 iArr2 모두 변경된 것으로 보임
		for(int i = 0; i < iArr1.length; i++) {
			System.out.println("iArr1[" + i + "]:" + iArr1[i] + "|iArr2[" + i + "]:" + iArr2[i]);
		}
		
		System.out.println("-----참조값 확인-----");
		System.out.println("iArr1 참조값 : " + iArr1);
		System.out.println("iArr2 참조값 : " + iArr2);
	}
    
 public static void main(String[] args) {
		ex1();
	}

 

 

 


 

 




난이도 ★☆☆☆

 

 

 

예제 2

 

 

Q : 배열의 깊은복사를 수행하여 배열의 크기를 늘려라.

 

 

 

 

 

 


 

 

 

 

public static void ex2() {
		// 배열의 깊은 복사 방법 1
		int[] iArr1 = new int[] {1, 2, 3, 4};
		int[] iArr2 = new int[iArr1.length];
		
		// 깊은 복사 중...
		for(int i = 0; i < iArr1.length; i++) {
			iArr2[i] = iArr1[i];
		}
		
		for(int i = 0; i < iArr1.length; i++) {
			System.out.println("iArr1[" + i + "]:" + iArr1[i] + "|iArr2[" + i + "]:" + iArr2[i]);
		}
		
		iArr1[0] = 15;
		iArr2[3] = 25;
		for(int i = 0; i < iArr1.length; i++) {
			System.out.println("iArr1[" + i + "]:" + iArr1[i] + "|iArr2[" + i + "]:" + iArr2[i]);
		}
		
		System.out.println("-----참조값 확인-----");
		System.out.println("iArr1 참조값 : " + iArr1);
		System.out.println("iArr2 참조값 : " + iArr2);
	}
    
 public static void main(String[] args) {
		ex2();
	}

 

 

 

 


 

 

 

 

 

 

위 내용은 지난시간 학습한 배열의 아주 간단한 예제들입니다.

 

 

 

이제부터,

 

지금까지 배워온 자바를 활용하여 실습 문제를 풀어봅시다.

 

 

 

 

 

 

 

 


java 실습문제


 

 

 

 

 

난이도 ★

 

 

 

예제 1

 

 

Q : 가위바위보 게임 -> 사용자 입력으로 사용자가 가위 또는 바위 또는 보를 입력하는 것만으로 동작.


 1. 사용자 / 컴퓨터가 임의의 가위, 바위, 보를 입력
     - 사용자는 Scanner 를 사용하여 입력 (직접 가위, 바위, 보 중 하나 입력)
     - 컴퓨터는 Random 를 사용하여 입력 (0, 1, 2 중 하나를 임의로 생성)
     - Random 을 통해 생성된 0, 1, 2 의 값은 각각 가위, 바위, 보로 치환하여 동작하게 한다.

 2. 승부 비교를 위한 조건문 작성
     - 가위 : 바위 -> 바위 승, 가위 : 보 -> 가위 승, 가위 : 가위 -> 무승부
     - 바위 : 바위 -> 무승부,  바위 : 보 -> 보 승,  바위 : 가위 -> 바위 승
     - 보 : 바위 -> 보 승,    보 : 보 -> 무승부,   보 : 가위 -> 가위 승
   
 3. 2번 비교 결과에 따른 승, 패, 무 저장해두어 승률을 출력

 

 

 

 

 


 

 

 

 

public static void ex1() {
		String player;
		String computer = "";
		int[] score = new int[3];	// 0: 승, 1: 패, 2: 무
		String[] sArr = {"가위", "바위", "보"};
		boolean exitFlag = false;
		
		while(true) {
			
			while(true) {
				System.out.print("가위, 바위, 보 중 하나 입력(게임 종료를 원하면 종료 입력) : ");
				player = sc.nextLine();
				if(player.equals("가위") || player.equals("바위") || player.equals("보")
						|| player.equals("종료")) {
					if(player.equals("종료")) {
						exitFlag = true;
					}
					break;
				}
			}
			
			if(exitFlag) {
				break;
			}
			
			computer = sArr[rd.nextInt(3)];
			
			if(player.equals("가위")) {
				if(computer.equals("바위")) {
					System.out.println("컴퓨터 승");
					score[1] += 1;
				} else if(computer.equals("보")) {
					System.out.println("플레이어 승");
					score[0] += 1;
				} else if(computer.equals("가위")) {
					System.out.println("무승부");
					score[2] += 1;
				}
				
			} else if(player.equals("바위")) {
				if(computer.equals("바위")) {
					System.out.println("무승부");
					score[2] += 1;
				} else if(computer.equals("보")) {
					System.out.println("컴퓨터 승");
					score[1] += 1;
				} else if(computer.equals("가위")) {
					System.out.println("플레이어 승");
					score[0] += 1;
				}
				
			} else if(player.equals("보")) {
				if(computer.equals("바위")) {
					System.out.println("플레이어 승");
					score[0] += 1;
				} else if(computer.equals("보")) {
					System.out.println("무승부");
					score[2] += 1;
				} else if(computer.equals("가위")) {
					System.out.println("컴퓨터 승");
					score[1] += 1;
				}
				
			}
			
			System.out.println("현재 플레이어의 스코어는 : " + score[0] + " 승 "
			+ score[1] + " 패 " + score[2] + " 무 입니다.");
		}
	}
    
 public static void main(String[] args) {
		ex1();
	}

 

 

 


 

 




난이도 ★

 

 

 

예제 2

 

 

Q :  업앤 다운. -> 임의의 값을 하나 생성하고 사용자가 일정 범위의 정수 값 안에서 정수를 입력하면
            미리 생성된 값과 비교를 통해 업 또는 다운으로 힌트를 주어 최종 생성 값을 맞추는 게임.

 

 

 

 

 


 

 

 

 

public static void ex2() {
		int num, ran, max = 100, min = 1;
		
		while(true) {
			System.out.println("업 앤 다운 게임 시작!\n");
			
			ran = rd.nextInt(100)+1;
			
			while(true) {
				System.out.print(min + " ~ " + max + "사이의 수 입력 (그만하고 싶은 0입력후 엔터) :");
				num = sc.nextInt();    sc.nextLine();
				
				if(num == 0) break;
				
				if(num < 1 && num > 100) {
					System.out.println("1 ~ 100 사이 입력!!!\n");
					continue;
				}

				if(num > ran) {
					System.out.println("다운\n");
					max = num;
					continue;
				}else if( num < ran) {
					System.out.println("업\n");
					min = num;
					continue;
				}else if(num == ran) {
					System.out.println("정답!! (임의의 수 : " + ran + " )\n" );
					break;
				}
			}
			
			System.out.println("\n=================\n");
			break;
		}
		System.out.println("게임 종료");
	}
    
 public static void main(String[] args) {
		ex2();
	}

 

 

 


 

 



 



 

난이도 ★

 

 

 

예제 3

 

 

Q :   바쁜 직장인들을 위해 미리 선정된 점심 메뉴를 임의로 선택하여 제공하는 프로그램.
     1. 미리 선정된 메뉴를 사용하여 임의로 제공.
     2. 사용자가 직접 메뉴를 입력하여 임의의 메뉴가 선택될 수 있도록 제공.

 

 

 

 

 


 

 

 

 

public static void ex3() {
		List<String> menu = new ArrayList<String>();
		menu.add("짜장면");  menu.add("배떡");  menu.add("강준치");  
		
		List<String> addMenu = new ArrayList<String>();
		
		
		int heart = rd.nextInt(3);
		int count = 0;
		int ran = rd.nextInt(3);
		String myMenu = "";
		
		while(true) {
			System.out.println("오늘의 점심은 " + menu.get(ran) + " 입니다!");
			while(true) {
				System.out.print( menu.get(ran) + "이 맘에 들면 1, 맘에 들지 않으면 2, 메뉴 선택 혹은 추가는 3을 눌러주세요");
				heart = sc.nextInt();   sc.nextLine();		
				
				if(heart == 1) {
					System.out.println("오늘의 메뉴는 : " + menu.get(ran) + " 입니다.");
					System.exit(0);
				}else if(heart == 2) {
					if(ran == 2) {
						ran = 0;
					}else {
						ran = (ran % 3) + 1; 
					}
					count = (count % 3) + 1; 
					
					if(count >= 3) {
						System.out.println("우리는 메뉴가 "+ menu.size() +"개뿐입니다..\n");
						continue;
					}
					
					System.out.print("다른 추천 메뉴는 " );
					
					if(ran >= 3)
						ran = 0;
					
					System.out.println(menu.get(ran) + "입니다.");
					continue;
				}else if(heart == 3) {
					System.out.print("원하는 메뉴를 입력해주세요 :");
					myMenu = sc.nextLine();
					
					if(myMenu.equals("강준치")) {
						System.out.println("오늘의 메뉴는 강준치 입니다.");
						System.exit(0);
					}else if(myMenu.equals("배떡")) {
						System.out.println("오늘의 메뉴는 배떡 입니다.");
						System.exit(0);
					}else if(myMenu.equals("짜장면")) {
						System.out.println("오늘의 메뉴는 짜장면 입니다.");
						System.exit(0);
					}else {
						System.out.println(myMenu +"는 오늘부로 주문해서 내일 드실 수 있습니다.\n");
						addMenu.add(myMenu);
						continue;
					}
					
				}
				System.out.println("오늘의 메뉴는  " + menu.get(ran) + " 입니다.");
				break;
			}
			
		}
	}
    
 public static void main(String[] args) {
		ex3();
	}

 

 

 


 

 





 

난이도 ★

 

 

 

예제 4

 

 

Q :    사용자 입력을 통해 과목 정보를 입력받는다.
 사용자 입력이 계속 이루어질 때마다 배열의 크기를 +1씩 늘려 입력한 만큼 저장하게 한다.
 사용자 입력이 종료인 경우 더 이상 입력을 받지 않고 최종 입력된 모든 과목 정보를 출력.

 

 

 

 

 


 

 

 

 

public static void ex4() {
		String sub[] = new String[0];
		String inp = "";
		
		while(true) {
			System.out.print("추가할 과목을 입력 : ");
			inp = sc.nextLine();
			
			if(inp.equals("종료")) {
				break;
			}else {
				String sub2[] = new String[sub.length + 1];
				for(int i=0; i<sub.length; i++) {
					sub2[i] = sub[i];
				}
				sub = sub2;
				sub[sub.length - 1] = inp;
				
			}
		}
		for(int i=0; i<sub.length; i++) {
			System.out.print("추가한 " + (i+1) + " 번째 과목 : " + sub[i]);
			System.out.println();
		}
	}
    
 public static void main(String[] args) {
		ex4();
	}

 

 

 


 

 





 

난이도 ★

 

 

 

예제 5

 

 

Q :   1 ~ 49 사이의 정수 값을 사용자 입력을 통해 입력받고 이를 정수 배열에 저장을 한다.


         -1 이 입력될 때까지 배열의 크기를 +1씩 증가시키면서 사용자 입력 값을 배열에 저장을 하며
         -1 이 입력되어 더 이상 사용자 입력을 받지 않을 때 배열에 저장된 모든 값의 합을 출력한다.

 

 

 

 

 


 

 

 

 

public static void ex5() {
		int arr[] = new int[0];
		int num, sum=0;
		
		while(true) {
			System.out.print("1 ~ 49 사이의 정수 입력(종료는 -1 입력 후 엔터) : ");
			num = sc.nextInt();  sc.nextLine();
			
			if(num == -1) {
				break;
			}else if(num < 1 || num >49) {
				System.out.println(" 1 ~ 49 사이 정수 입력!!!!!\n");
				continue;
			}else {
				int copyArr[] = new int[arr.length + 1];
				for(int i=0; i<arr.length; i++) {
					copyArr[i] = arr[i];
				}
				arr = copyArr;
				arr[arr.length - 1] = num;
			}
		}
		
		if(arr.length > 0) {
			for(int i=0; i<arr.length; i++) {
				sum += arr[i];
			}
			
			System.out.println("작성한 정수 배열에 모든 원소의 합은 : " + sum);
		}else {
			System.out.println("원소 입력을 안했습니다.");
		}
	}
    
 public static void main(String[] args) {
		ex5();
	}

 

 

 


 

 





 

난이도 ★★☆

 

 

 

예제 6

 

 

Q :   사용자로부터 임의의 문자열을 입력받은 후
        a, e, i, o, u 문자가 포함되어 있을 때마다 문자 배열에 저장을 한 후
        배열의 길이를 출력하여 얼마나 포함되어 있는지 확인하게 한다.


 

 

 

 

 


 

 

 

 

public static void ex6() {
		String str[] = new String[0];
		String inp = "";
		int count=0;
		while(true) {
			System.out.print("문자열 입력(종료는 'z'누르고 엔터) : ");
			inp = sc.nextLine();
			
			if(inp.equals("z")) {
				break;
			}else {
				String copyStr[] = new String[str.length + 1];
				for(int i=0; i<str.length; i++) {
					copyStr[i] = str[i];
				}
				str = copyStr;
				str[str.length - 1] = inp;
			}
			System.out.println(Arrays.toString(str));
			
			
		}
		
		if(str.length>0) {
			for(int i=0; i<str.length; i++) {
				for(int j=0; j<str[i].length(); j++) {
					
					// a,e,i,o,u 갯수를 모두 찾을때
//					switch(str[i].charAt(j)) {
//					
//						case 'a':
//							count++;
//							break;
//						case 'e':
//							count++;
//							break;
//						case 'i':
//							count++;
//							break;
//						case 'o':
//							count++;
//							break;
//						case 'u':
//							count++;
//							break;
//					}
					
					// a,e,i,o,u가 포함된 문자열의 갯수만 찾을 때
					if(str[i].charAt(j) == 'a' | str[i].charAt(j) == 'e' | str[i].charAt(j) == 'i' | str[i].charAt(j) == 'o' | str[i].charAt(j) == 'u') {
						count++;
						break;
					}
					
				}
			}
		}
		System.out.println("a,e,i,o,u 가 포함된 문자열의 갯수는 : " + count +"개");
	}
    
 public static void main(String[] args) {
		ex6();
	}

 

 

 


 

 





 

난이도 ★★☆

 

 

 

예제7

 

 

Q :   국어, 영어, 수학, 과학, 사회 과목 정보가 있는 배열이 있다.
       위 배열에서 사용자가 제거하기 원하는 과목을 입력하면 배열에서 제거될 수 있도록 한다.

        // System.arraycopy() 활용할 수 있으면 활용한다.


 

 

 

 

 


 

 

 

 

public static void ex7() {
		String sub[] = {"국어", "영어", "수학", "과학", "사회"};
		String inp = "";
		
		while(true) {
			int count = 0;
			System.out.println("현재 과목은" +Arrays.toString(sub));
			System.out.print("제거할 과목은(없으면 0 입력 후 엔터) : ");
			inp = sc.nextLine();
			
			if(inp.equals("0")) {
				System.out.println("현재 입력된 과목은" +Arrays.toString(sub));
				break;
			}
			
			
			for(int i=0; i<sub.length; i++) {
				if(inp.equals(sub[i])) {
					String copySub[] = new String[sub.length - 1];
					System.arraycopy(sub, 0, copySub, 0, copySub.length);
					
					for(int j=i; j<sub.length-1; j++) {
						copySub[j] = sub[j+1];
					}
					
					
					sub = copySub;
					
				}else {
					count++;
					if(count >= sub.length) {
						System.out.println("그런 과목은 없습니다.\n");
					}
				}
				
			}
			
			if(sub.length <=0) {
				System.out.println("모든 과목을 지우셨습니다.");
				break;
			}
			
		}
		
	}
    
 public static void main(String[] args) {
		ex7();
	}

 

 

 

 

 

 


 

 

 

 

 

 

 

 

조금 난이도가 있는 문제들로 실습 문제를 다뤄봤는데요.

 

이전 포스팅 내용을 숙지하고 공부했음에도 위 문제를 다루기 힘들다면,

 

기존 포스팅에 올라온 개념과 예제들을 충분히 복습하면서

재도전해보시기 바랍니다 :)





 

다음 포스팅에선 java의 2차원 배열에 대해서 다뤄보고자 합니다.


https://healthdevelop.tistory.com/entry/java8

 

[Java] 자바 2차원배열 | java 2차원배열 예제 (java로 웹개발하기)(day08)

지난 포스팅에서 자바의 배열에 대해서 다뤘습니다. 이번 포스팅에선 배열의 연장선인 2차원 배열에 대해서 다루고자 합니다. 2차원이라고 해서 복잡하게 생각이 들 수도 있는데, 크게 어렵지

healthdevelop.tistory.com

 

반응형