[명품 Java] 3장 실습문제 (반복문과 배열 그리고 예외 처리)
2021. 11. 17. 17:43ㆍSolution`/Java
[01]
다음 프로그램에 대해 물음에 답하라
int sum = 0, i = 0;
while (i < 100) {
sum = sum + i;
i += 2;
}
System.out.println(sum);
(1) 무엇을 계산하는 코드이며 실행 결과 출력되는 내용은?
출력 = 2450
목적 = 0 ~ 99까지 2의 배수들의 합
(2) 위의 코드를 main() 메소드를 만들고 WhileTest 클래스로 완성하라.
package chap03.Solution1;
public class WhileTest {
public static void main(String[] args) {
int sum = 0;
int i = 0;
while (i < 100) {
sum += i;
i += 2;
}
System.out.println(sum);
}
}
(3) for 문을 이용하여 동일하게 실행되는 ForTest 클래스를 작성하라.
package chap03.Solution1;
public class ForTest {
public static void main(String[] args) {
int sum = 0;
for (int i = 0; i < 100; i += 2) {
sum += i;
}
System.out.println(sum);
}
}
(4) do-while 문을 이용하여 동일하게 실행되는 DoWhileTest 클래스를 작성하라.
package chap03.Solution1;
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);
}
}
[02]
다음 2차원 배열 n을 출력하는 프로그램을 작성하라
int n[][] = {{1}, {1, 2, 3}, {1}, {1, 2, 3, 4}, {1, 2}};
package chap03;
public class Solution2 {
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();
}
}
}
[03]
Scanner을 이용하여 정수를 입력받고 다음과 같이 *를 출력하는 프로그램을 작성하라
정수를 입력하시오 >> 5
*****
****
***
**
*
package chap03;
import java.util.Scanner;
public class Solution3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수를 입력하세요 >> ");
int num = Integer.parseInt(sc.nextLine());
for (int i = num; i >= 1; i--) {
for (int j = 0; j < i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
[04]
Scanner를 이용하여 소문자 알파벳을 하나 입력받고 다음과 같이 출력하는 프로그램을 작성하라
소문자 알파벳 하나를 입력하시오 >> e
abcde
abcd
abc
ab
a
package chap03;
import java.util.Scanner;
public class Solution4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("소문자 알파벳 하나를 입력하세요 >> ");
char alpha = sc.nextLine().charAt(0);
for (char i = alpha; i >= 'a'; i--) {
for (char j = 'a'; j <= i; j++) {
System.out.print(j);
}
System.out.println();
}
}
}
[05]
양의 정수를 10개 입력받아 배열에 저장하고, 배열에 있는 정수 중에서 3의 배수만 출력하는 프로그램을 작성하라
양의 정수 10개를 입력하시오 >> 1 5 99 22 345 125 2346 55 32 85
3의 배수는 99 345 2346
package chap03;
import java.util.Scanner;
public class Solution5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("양의 정수 10개를 입력하세요 >> ");
String[] list = sc.nextLine().strip().split(" ");
System.out.print("3의 배수는 ");
boolean flag = false;
for (String s : list) {
if (Integer.parseInt(s) % 3 == 0) {
flag = true;
System.out.print(s + " ");
}
}
if (!flag) {
System.out.println("없습니다");
}
}
}
[06]
배열과 반복문을 이용하여 프로그램을 작성해보자. 키보드에서 정수로 된 돈의 액수를 입력받아 오만 원권, 만 원권, 천 원권, 500원짜리 동전, 100원짜리 동전, 50원짜리 동전, 10원짜리 동전, 1원짜리 동전이 각 몇 개로 변환되는지 예시와 같이 출력하라. 이때 반드시 다음 배열을 이용하고 반복문으로 작성하라.
금액을 입력하시오 >> 65123
50000 원 짜리 : 1개
10000 원 짜리 : 1개
1000 원 짜리 : 5개
100 원 짜리 : 1개
10 원 짜리 : 2개
1 원 짜리 : 3개
package chap03;
import java.util.Collections;
import java.util.Scanner;
public class Solution6 {
static final int[] UNIT = {50000, 10000, 1000, 500, 100, 50, 10, 1};
static final String[] WORDS = {
"50000원 짜리 : ",
"10000원 짜리 : ",
"1000원 짜리 : ",
"500원 짜리 : ",
"100원 짜리 : ",
"50원 짜리 : ",
"10원 짜리 : ",
"1원 짜리 : "
};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("금액을 입력하세요 >> ");
int money = Integer.parseInt(sc.nextLine());
for (int i = 0; i < UNIT.length; i++) {
int cover = money / UNIT[i];
if (cover == 0) {
continue;
} else {
System.out.println(WORDS[i] + money / UNIT[i]);
money %= UNIT[i];
}
}
}
}
[07]
정수를 10개 저장하는 배열을 만들고 1에서 10까지 범위의 정수를 랜덤하게 생성하여 배열에 저장하라. 그리고 배열에 든 숫자들과 평균을 출력하라.
랜덤한 정수들 : 10 5 2 9 1 4 1 5 1 5
평균은 4.3
package chap03;
public class Solution7 {
public static void main(String[] args) {
int[] list = new int[10];
for (int i = 0; i < list.length; i++) {
list[i] = (int)(Math.random() * 10 + 1);
}
System.out.print("랜덤한 정수들 : ");
for (int n : list) {
System.out.print(n + " ");
}
System.out.print("\n평균은 " + getAverage(list));
}
static double getAverage(int[] list) {
int sum = 0;
for (int n : list) {
sum += n;
}
return (double)sum / list.length;
}
}
[08]
정수를 몇 개 저장할지 키보드로부터 개수를 입력받아(100보다 작은 개수) 정수 배열을 생성하고, 이곳에 1에서 100까지 범위의 정수를 랜덤하게 삽입하라. 배열에는 같은 수가 없도록 하고 배열을 출력하라.
정수 몇개? >> 24
48 33 74 94 17 39 55 8 59 81
72 31 63 90 75 2 85 19 84 24
98 32 86 58
package chap03;
import java.util.Scanner;
public class Solution8 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수 몇개 ? ");
int N = Integer.parseInt(sc.nextLine());
int[] list = new int[N];
for (int i = 0; i < N; i++) {
list[i] = (int)(Math.random() * 100 + 1);
for (int j = 0; j < i; j++) {
if (list[j] == list[i]) {
i--;
break;
}
}
}
for (int i = 0; i < N; i++) {
System.out.print(list[i] + "\t");
if ((i + 1) % 10 == 0) {
System.out.println();
}
}
}
}
[09]
4 x 4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 랜덤하게 생성하여 정수 16개를 배열에 저장하고, 2차원 배열을 화면에 출력하라.
6 10 1 8
1 3 7 2
8 4 5 1
1 8 4 4
package chap03;
public class Solution9 {
public static void main(String[] args) {
int[][] list = new int[4][4];
for (int i = 0; i < list.length; i++) {
for (int j = 0; j < list[i].length; j++) {
list[i][j] = (int)(Math.random() * 10 + 1);
}
}
for (int i = 0; i < list.length; i++) {
for (int j = 0; j < list[i].length; j++) {
System.out.print(list[i][j] + "\t");
}
System.out.println();
}
}
}
[10]
4 x 4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 10개만 랜덤하게 생성하여 임의의 위치에 삽입하라. 동일한 정수가 있어도 상관없다. 나머지 6개의 숫자는 모두 0이다. 만들어진 2차원 배열을 화면에 출력하라.
5 0 8 6
0 7 9 5
2 4 0 8
0 0 0 8
package chap03;
public class Solution10 {
public static void main(String[] args) {
int[][] list = new int[4][4];
int count = 0;
while (count != 10) {
int index1 = (int) (Math.random() * 4);
int index2 = (int) (Math.random() * 4);
if (list[index1][index2] == 0) {
list[index1][index2] = (int) (Math.random() * 10 + 1);
count++;
}
}
for (int i = 0; i < list.length; i++) {
for (int j = 0; j < list[i].length; j++) {
System.out.print(list[i][j] + "\t");
}
System.out.println();
}
}
}
[11]
다음과 같이 작동하는 Average.java를 작성하라. 명령행 인자는 모두 정수만 사용되며 정수들의 평균을 출력한다. 다음 화면은 컴파일된 Average.class 파일을 c:\Temp 디렉터리에 복사한 뒤 실행한 경우이다. 원본 Average.class 파일은 이클립스의 프로젝트 폴더 밑에 bin 폴더에 있다.
package chap03;
public class Solution11 {
public static void main(String[] args) {
int sum = 0;
for (String arg : args) {
sum += Integer.parseInt(arg);
}
System.out.println((double)sum / args.length);
}
}
[12]
다음과 같이 작동하는 Add.java를 작성하라. 명령행 인자 중에서 정수 만을 골라 합을 구하라. 다음 화면은 Add.class 파일을 c:\Temp 디렉터리에 복사한 뒤 실행한 경우이다. 원본 Add.class 파일은 이클립스 프로젝트 폴더 밑에 bin 폴더에 있다.
package chap03;
public class Solution12 {
public static void main(String[] args) {
int sum = 0;
for (String arg : args) {
try {
int num = Integer.parseInt(arg);
sum += num;
} catch (NumberFormatException e) {
continue;
}
}
System.out.println(sum);
}
}
[13]
반복문을 이용하여 369게임에서 박수를 쳐야 하는 경우를 순서대로 화면에 출력해보자. 1부터 시작하며 99까지만 한다. 실행 사례는 다음과 같다.
package chap03;
public class Solution13 {
public static void main(String[] args) {
for (int num = 1; num < 100; num++) {
if (getThreeSixNine(num) == 2) {
System.out.println(num + " 박수 짝짝");
} else if (getThreeSixNine(num) == 1) {
System.out.println(num + " 박수 짝");
}
}
}
static int getThreeSixNine(int num) {
int one = num % 10;
int ten = num / 10;
int count = 0;
if (validation(one)) {
count++;
}
if (validation(ten)) {
count++;
}
return count;
}
static boolean validation(int c) {
return c == 3 || c == 6 || c == 9;
}
}
[14]
다음 코드와 같이 과목과 점수가 짝을 이루도록 2개의 배열을 작성하라.
String course[] = {"Java", "C++", "HTML5", "컴퓨터구조", "안드로이드"};
int score[] = {95, 88, 76, 62, 55};
그리고 다음 예시와 같이 과목 이름을 입력받아 점수를 출력하는 프로그램을 작성하라. "그만"을 입력받으면 종료한다.
과목 이름 >> Jaba
없는 과목입니다.
과목 이름 >> Java
Java의 점수는 95
과목 이름 >> 안드로이드
안드로이드의 점수는 55
과목 이름 >> 그만
package chap03;
import java.util.Scanner;
public class Solution14 {
static String[] COURSE = {"Java", "C++", "HTML5", "컴퓨터구조", "안드로이드"};
static int[] SCORE = {95, 88, 76, 62, 55};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.print("과목 이름 >> ");
String subject = sc.nextLine();
if (subject.equals("그만")) {
break;
}
int index = getSubjectIndex(subject);
if (index == -1) {
System.out.println("없는 과목입니다.");
} else {
System.out.println(COURSE[index] + "의 점수는 " + SCORE[index]);
}
}
}
static int getSubjectIndex(String subject) {
int index = 0;
boolean flag = false;
for (int i = 0; i < COURSE.length; i++) {
if (COURSE[i].equals(subject)) {
index = i;
flag = true;
break;
}
}
if (flag) {
return index;
} else {
return -1;
}
}
}
[15]
다음은 2개의 정수를 입력 받아 곱을 구하는 Muliply 클래스이다.
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을 잘 출력한다.
곱하고자 하는 두 수 입력 >> 10 5
10x5=50
하지만, 다음과 같이 실수를 입력하였을 때, 예외가 발생한다.
곱하고자 하는 두 수 입력 >> 2.5 4
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java_study3_15.Multiply.main(Multiply.java:11)
다음과 같이 실수가 입력되면 정수를 다시 입력하도록 하여 예외 없이 정상적으로 처리되도록 예외 처리 코드를 삽입하여 Multiply 클래스를 수정하라.
곱하고자 하는 두 수 입력 >> 2.5 4
실수는 입력하면 안됩니다.
곱하고자 하는 두 수 입력 >> 4 3.5
실수는 입력하면 안됩니다.
곱하고자 하는 두 수 입력 >> 4 3
4x3=12
package chap03;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Solution15 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
try {
System.out.print("곱하고자 하는 두 수 입력 >> ");
int num1 = sc.nextInt();
int num2 = sc.nextInt();
System.out.println(num1 + " x " + num2 + " = " + (num1 * num2));
break;
} catch (InputMismatchException e) {
System.out.println("실수는 입력하면 안됩니다.");
sc.nextLine();
}
}
}
}
[16]
컴퓨터와 독자 사이의 가위 바위 보 게임을 만들어보자. 예시는 다음 그림과 같다. 독자부터 먼저 시작한다. 독자가 가위 바위 보 중 하나를 입력하고 <Enter>키를 치면, 프로그램은 가위 바위 보 중에서 랜덤하게 하나를 선택하고 컴퓨터가 낸 것으로 한다. 독자가 입력한 값과 랜덤하게 선택한 값을 비교하여 누가 이겼는지 판단한다. 독자가 가위 바위 보 대신 "그만"을 입력하면 게임을 끝난다.
컴퓨터와 가위 바위 보 게임을 합니다.
가위 바위 보! >> 바위
사용자 = 바위 , 컴퓨터 = 가위 사용자가 이겼습니다.
가위 바위 보! >> 가위
사용자 = 가위 , 컴퓨터 = 가위 비겼습니다.
가위 바위 보! >> 그만
게임을 종료합니다...
package chap03;
import java.util.Scanner;
public class Solution16 {
static final String[] SELECT = {"가위", "바위", "보"};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("컴퓨터와 가위 바위 보 게임을 합니다");
while (true) {
System.out.print("가위 바위 보! >> ");
String userSelect = sc.nextLine();
if (userSelect.equals("그만")) {
System.out.println("게임을 종료합니다...");
break;
}
String comSelect = SELECT[(int) (Math.random() * 3)];
validationMatch(userSelect, comSelect);
}
}
static void validationMatch(String user, String com) {
if (user.equals("가위")) {
if (com.equals("가위")) {
System.out.println("사용자 = " + user + " VS 컴퓨터 = " + com + " -> 비겼습니다");
} else if (com.equals("바위")) {
System.out.println("사용자 = " + user + " VS 컴퓨터 = " + com + " -> 컴퓨터가 이겼습니다...");
} else {
System.out.println("사용자 = " + user + " VS 컴퓨터 = " + com + " -> 사용자가 이겼습니다!!");
}
} else if (user.equals("바위")) {
if (com.equals("가위")) {
System.out.println("사용자 = " + user + " VS 컴퓨터 = " + com + " -> 사용자가 이겼습니다!!");
} else if (com.equals("바위")) {
System.out.println("사용자 = " + user + " VS 컴퓨터 = " + com + " -> 비겼습니다");
} else {
System.out.println("사용자 = " + user + " VS 컴퓨터 = " + com + " -> 컴퓨터가 이겼습니다...");
}
} else {
if (com.equals("가위")) {
System.out.println("사용자 = " + user + " VS 컴퓨터 = " + com + " -> 컴퓨터가 이겼습니다...");
} else if (com.equals("바위")) {
System.out.println("사용자 = " + user + " VS 컴퓨터 = " + com + " -> 사용자가 이겼습니다!!");
} else {
System.out.println("사용자 = " + user + " VS 컴퓨터 = " + com + " -> 비겼습니다");
}
}
}
}