지금까지 배웠던 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 > Java' 카테고리의 다른 글
[Java] 자바 객체 | java 객체 예제 | java 클래스 | java 필드 | java 생성자 (java로 웹개발하기)(day09) (0) | 2021.08.04 |
---|---|
[Java] 자바 2차원배열 | java 2차원배열 예제 (java로 웹개발하기)(day08) (0) | 2021.08.03 |
[Java] 자바 배열의 기초 | 배열 예제 (java로 웹개발하기)(day06) (0) | 2021.07.30 |
[Java] 자바 반복문(java for, while,do-while) | 반복문 예제 (java로 웹개발하기)(day05) (1) | 2021.07.29 |
[Java] 자바 반복문(java for, while,do-while) | 반복문 예제 (java로 웹개발하기)(day04) (0) | 2021.07.28 |