M

3장 실습문제 본문

Java/명품 Java Programming

3장 실습문제

M_master 2022. 1. 29. 17:32

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

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

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

->  100까지 짝수의 합계를 구하는 코드이며, 결과는 2450

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

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

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

class DoWhileTest {
 public static void main(String[] args) {
  int sum = 0, 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}};

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를 입력받았을 경우이다

Scanner sc = new Scanner(System.in);
System.out.print("정수를 입력하시오>>");
int num = sc.nextInt();

/*
for(int i=num; i>0; i--) {
 for(int j=0; j<i; j++) {
  System.out.print("*");
 }
 System.out.println();
}
*/

for(int i=0; i<num; i++) {
 for(int j=0; j<num - i; j++) {
  System.out.print("*");
 }
 System.out.println();
}

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

Scanner sc = new Scanner(System.in);

System.out.print("소문자 알파벳 하나를 입력하시오>>");

String s = sc.next();
char c = s.charAt(0);

final int ANUM = 'a'; // 97

for(int i = 0; i <= ((int)c - (int)ANUM); i++) {
 for(int j = ANUM; j <= (int)c - i; j++) {
  System.out.print((char)j);
 }
 System.out.println();
}

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

Scanner sc = new Scanner(System.in);

int[] numArr = new int[10];

System.out.print("양의 정수 10개를 입력하시오>>");

for(int i=0; i<numArr.length; i++) {
 numArr[i] = sc.nextInt();
}

System.out.print("3의 배수는");
for(int j=0; j<numArr.length; j++) {
 if(numArr[j] % 3 != 0) continue;

 System.out.print(" "+ numArr[j]);
}

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

Scanner sc = new Scanner(System.in);

int[] unit = {50000, 10000, 1000, 500, 100, 50, 10, 1};

System.out.print("금액을 입력하시오>>");
int money = sc.nextInt();

for(int i=0; i<unit.length; i++) {
 System.out.printf("%d원 짜리 : %d개\n", unit[i], (money/unit[i]));
 money = money % unit[i];
}

sc.close();

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

int[] num = new int[10];
int sum = 0;

for(int i=0; i<num.length; i++) {
 num[i] = (int)(Math.random() * 10 + 1);
}

System.out.print("랜덤한 정수들 : ");
for(int i=0; i<num.length; i++) {
 System.out.print(num[i] +" ");
 sum += num[i];
}

System.out.println();

System.out.printf("평균은 %.1f ", (double)(sum / num.length));

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

Scanner sc = new Scanner(System.in);

System.out.print("정수 몇개?");
int n = sc.nextInt();

int[] a = new int[n];

for(int i=0; i<a.length; i++) {
 int r = (int)(Math.random() * 100 + 1);

 for(int j=0; j<a.length; j++) {
  if(a[j] == r) break;

  a[i] = r;
 }
}

for(int i=0; i<a.length; i++) {
 if(i != 0 && i % 10 == 0) System.out.println();

 System.out.print(a[i] +" "); 
}

sc.close();

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

int[][] n = new Int[4][4];

for(int i=0; i<n.length; i++) {
 for(int j=0; j<n[i]; j++) {
  n[i][j] = (int) (Math.random() * 10 + 1);
 }
}

for(int i=0; i<n.length; i++) {
 for(int j=0; j<n[i]; j++) {
  System.out.print(n[i][j] +" ");
 }
 System.out.println();
}

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

int[][] n = new Int[4][4];
int count = 0;

for(int i=0; i<n.length; i++) {
 for(int j=0; j<n[i].length; j++) {
  if(count >= 10) n[i][j] = 0;
  
  int r = (int)(Math.random() * 10);
  
  n[i][j] = r;
  
  if(r > 0) 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();
}

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

int sum = 0;
      
  for(int i=0; i<args.length; i++) {
     sum += Integer.parseInt(args[i]);
  }

  System.out.printf("%d",sum/args.length);
}

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

int sum=0;
for(int i=0; i<args.length; i++) {
 try {
    sum += Integer.parseInt(args[i]);
 }catch(NumberFormatException e) {
    continue;
 }
}
System.out.println(sum);

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

int first, second;
    String bagsu;

    for(int i = 1; i < 100; i++) {
        int count = 0;

        first = i / 10;
        second = i % 10;

        // if(second == 0 || second % 3 != 0) continue;

        if(second == 3 || second == 6 || second == 9) count++;	

        if(first == 3 || first == 6 || first == 9) count++;

        if(count == 0) continue;

        bagsu =(count == 1) ? "짝" : "짝짝";

        System.out.printf("%d 박수 %s \n", i, bagsu);
    }
}

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

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

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

Scanner sc = new Scanner(System.in);

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

while(true) {
    System.out.print("과목 이름>>");
    String str = sc.nextLine();

    if(str.equals("그만") == true) break;

    for(int i = 0; i < course.length; i++) {
        if(course[i].equals(str) == true) {
            System.out.printf("%s의 점수는 %d\n", course[i], score[i]);
            isSubject = true;
            break;
        }
    }

    if(isSubject == false) {
        System.out.println("없는 과목입니다.");
    }
}

sc.close();

/* ---------------------------------- */

while(true) {
    System.out.print("과목 이름>>");
    String str = sc.nextLine();

    if(str.equals("그만") == true) break;
	
    int i = 0;
    for(i = 0; i < course.length; i++) {
        if(course[i].equals(str) == true) {
            System.out.printf("%s의 점수는 %d\n", course[i], score[i]);
            isSubject = true;
            break;
        }
    }

    if(i == course.length) {
        System.out.println("없는 과목입니다.");
    }
}

sc.close();

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

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 클래스를 수정하라.

Scanner scanner = new Scanner(System.in);

while(true) {
    try {
        System.out.print("곱하고자 하는 두 수 입력>>");
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        System.out.print(n + "x" + m + "=" + n*m);
        break;
    } catch (InputMismatchException e) {
        System.out.println("실수는 입력하면 안됩니다.");
        scanner.nextLine();
    }
}

scanner.close();

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

String[] str = {"가위", "바위", "보"};
boolean bOnLoop = true;
String user;

Scanner sc = new Scanner(System.in);

System.out.println("컴퓨터와 가위 바위 보 게임을 합니다.");

do {
    int n = (int)(Math.random() * 3);

    System.out.print("가위 바위 보!>>");
    user = sc.next();

    switch(user) {
        case "가위":
            if(str[n].equals("보")) {
                System.out.printf("사용자 = %s , 컴퓨터 = %s, 사용자가 이겼습니다.\n", user, str[n]);
            } else if(str[n].equals("바위")) {
                System.out.printf("사용자 = %s , 컴퓨터 = %s, 컴퓨터가 이겼습니다.\n", user, str[n]);
            } else {
                System.out.printf("사용자 = %s , 컴퓨터 = %s, 비겼습니다.\n", user, str[n]);
            }
            break;

        case "바위":
            if(str[n].equals("가위")) {
                System.out.printf("사용자 = %s , 컴퓨터 = %s, 사용자가 이겼습니다.\n", user, str[n]);
            } else if(str[n].equals("보")) {
                System.out.printf("사용자 = %s , 컴퓨터 = %s, 컴퓨터가 이겼습니다.\n", user, str[n]);
            } else {
                System.out.printf("사용자 = %s , 컴퓨터 = %s, 비겼습니다.\n", user, str[n]);
            }
            break;

        case "보":
            if(str[n].equals("주먹")) {
                System.out.printf("사용자 = %s , 컴퓨터 = %s, 사용자가 이겼습니다.\n", user, str[n]);
            } else if(str[n].equals("가위")) {
                System.out.printf("사용자 = %s , 컴퓨터 = %s, 컴퓨터가 이겼습니다.\n", user, str[n]);
            } else {
                System.out.printf("사용자 = %s , 컴퓨터 = %s, 비겼습니다.\n", user, str[n]);
            }
            break;

        case "그만":
            bOnLoop = false;
            System.out.println("게임을 종료합니다...");
            break;

        default:
            System.out.println("가위 바위 보 중에서 입력해주세요.");
    }
} while(bOnLoop);

sc.close();
728x90

'Java > 명품 Java Programming' 카테고리의 다른 글

4장 연습문제  (0) 2022.02.07
4장 Open Challenge  (0) 2022.02.06
3장 연습문제  (0) 2022.01.26
3장 Open Challenge  (0) 2022.01.26
2장 상속 실습문제  (0) 2022.01.23