코딩로그
[명품 JAVA Programming] 제3장 반복문과 배열 그리고 예외 처리 - 실습문제 본문
[1번]
다음 프로그램에 대해 물음에 답하라?
int sum=0, i=0;
while(i < 100){
sum = sum + i;
i += 2;
}
System.out.println(sum);
(1) 무엇을 계산하는 코드이며 실행 결과 출력되는 코드는?
→ 0 이상 100 이하 정수 중, 짝수의 합을 출력하는 코드. 실행 결과 2450이 출력된다.
(2) 위의 코드를 main() 메소드로 만들고 WhileTest 클래스로 완성하라.
import java.util.*;
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 클래스를 작성하라.
import java.util.*;
public class ForTest {
public static void main(String[] args) {
int sum=0;
for(int i = 0; i<100; i+=2) {
sum = sum + i;
}
System.out.println(sum);
}
}
(4) do-while 문을 이용하여 동일하게 실행되는 DoWhileTest 클래스를 작성하라.
import java.util.*;
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);
}
}
[2번]
다음 2차원 배열 n을 출력하는 프로그램을 작성하라.
int n[][] = {{1},{1,2,3},{1},{1,2,3,4},{1,2}};
import java.util.*;
public class Main {
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를 이용하여 정수를 입력받고 다음과 같이 *를 출력하는 프로그램을 작성하라. 다음은 5를 입력받았을 경우이다.
정수를 입력하시오>>5
*****
****
***
**
*
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("정수를 입력하시오>>");
int n = scanner.nextInt();//정수 입력 받기
int count = n;//입력 받은 정수 저장
for(int i = 0; i<n; i++) {//입력받은 횟수만큼 반복
for(int j=count; j>=1; j--) {//count에 저장된 값만큼 * 반복 출력
System.out.print("*");
}
System.out.println();
count--;//count에 저장된 값 1 줄여 패턴 유지
}
}
}
실행 결과
[4번]
Scanner를 이용하여 소문자 알파벳을 하나 입력받고 다음과 같이 출력하는 프로그램을 작성하라. 다음은 e를 입력받았을 경우이다.
소문자 알파벳 하나를 입력하시오>>e
abcde
abcd
abc
ab
a
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("소문자 알파벳 하나를 입력하시오>>");
String s = scanner.next();//알파벳 입력 받기
char alpha = s.charAt(0);//String의 가장 앞 알파벳 alpha에 저장
char count = alpha;
for(char i = count; i>='a'; i--) {//입력받은 알파벳만큼 반복
for(char j='a'; j<=count; j++) {//한 줄씩 출력
System.out.print(j);
}
System.out.println();
count--;//count에 저장된 값 1 줄여 패턴 유지
}
}
}
실행 결과
[5번]
양의 정수를 10개 입력받아 배열에 저장하고, 배열에 있는 정수 중에서 3의 배수만 출력하는 프로그램을 작성하라.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("양의 정수 10개를 입력하시오>>");
int[] arr = new int[10];//int형의 10 크기를 가진 배열 선언
for(int i = 0; i<10; i++) {
arr[i] = scanner.nextInt();//10개의 정수 입력받아 저장하기
}
System.out.print("3의 배수는 ");
for(int i = 0; i<arr.length; i++) {//arr에 저장된 모든 변수
if(arr[i]%3==0) {//3의 배수인 경우 실행
System.out.print(arr[i]+" ");
}
}
}
}
실행 결과
[6번]
배열과 반복문을 이용하여 프로그램을 작성해보자. 키보드에서 정수로 된 돈의 액수를 입력받아 오만 원권, 만 원권, 천 원권, 500원짜리 동전, 100원짜리 동전, 50원짜리 동전, 10원짜리 동전, 1원짜리 동전이 각 몇 개로 변환되는지 에시와 같이 출력하라. 이때 반드시 다음 배열을 이용하고 반복문으로 작성하라.
int [] unit = {50000, 10000, 1000, 500, 100, 50, 10, 1};
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("금액을 입력하시오>>");
int money = scanner.nextInt();//금액 입력받기
int [] unit = {50000, 10000, 1000, 500, 100, 50, 10, 1};//환산할 돈의 종류
for(int i = 0; i<unit.length; i++) {//unit 배열의 크기만큼 반복
int result = money/unit[i];//환산할 돈을 기준으로 몇 개가 필요한지 결정
if(result != 0) {//각 금액으로 환산이 가능한 경우
System.out.println(unit[i]+"원 짜리 : "+ result+"개");//출력
money = money%unit[i];//환산 후 남은 금액 저장
}
}
}
}
실행 결과
[7번]
정수를 10개 저장하는 배열을 만들고 1에서 10까지 범위의 정수를 랜덤하게 생성하여 배열에 저장하라. 그리고 배열에 든 숫자들과 평균을 출력하라.
Hint!
1에서 10까지 범위의 정수를 랜덤하게 생성할 때는 다음 코드를 이용하라.
int i = (int)(Math.random()*10+1);
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = new int[10];//int형의 10 크기의 배열 선언
int sum = 0;//합을 구하기 위한 변수 선언
System.out.print("랜덤한 정수들 : ");
for(int i = 0; i<arr.length; i++) {//arr의 크기만큼 반복문 실행
arr[i] = (int)(Math.random()*10+1);//랜덤한 정수 10개 arr에 저장
sum += arr[i];//랜덤한 정수 10개의 합 저장
System.out.print(arr[i]+" ");//랜덤한 정수 출력
}
System.out.println();
System.out.println("평균은 "+(double)sum/arr.length);
//평균값을 구한 후, double형으로 변환. 소수점 아래까지 표기
}
}
실행 결과
[8번]
정수를 몇 개 저장할지 키보드로부터 개수를 입력받아(100보다 작은 개수) 정수 배열을 생성하고, 이곳에 1에서 100까지 범위의 정수를 랜덤하게 삽입하라. 배열에는 같은 수가 없도록 하고 배열을 출력하라.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("정수 몇 개?");
int n = scanner.nextInt();//개수 받아오기
int arr[] = new int[n];//n 크기의 배열 생성
for(int i = 0; i<n; i++) {//n번 반복
arr[i] = (int)(Math.random()*100+1);//난수 생성 및 arr에 저장
for(int j = 0; j<i; j++) {//중복 체크를 위한 for문
if(arr[j] == arr[i]) {//중복인 경우
i--;//i의 값을 하나 줄여 가장 최근에 넣은 값을 취소한다.
break;//이전 자리에 새로운 값을 넣어 갱신하기 위해 break
}
}
}
for(int i = 1; i<=arr.length; i++) {//arr 크기만큼 반복
System.out.print(arr[i-1]+" ");
if(i%10==0&&i!=0) {//10개 단위로 줄바꿈을 하기 위한 if문
System.out.println();
}
}
}
}
실행 결과
[9번]
4 X 4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 랜덤하게 생성하여 정수 16개를 배열에 저장하고, 2차원 배열을 화면에 출력하라.
import java.util.*;
public class Main {
public static void main(String[] args) {
int arr[][] = new int[4][4];//4x4 배열 생성
for(int i = 0; i<arr.length; i++) {//4번 반복(행)
for(int j = 0; j<arr[i].length; j++) {//4번 반복(열)
arr[i][j] = (int)(Math.random()*10+1);//난수 발생 및 저장
}
}
for(int i = 0; i<arr.length; i++) {//4번 반복(행)
for(int j = 0; j<arr[i].length; j++) {//4번 반복(열)
System.out.print(arr[i][j]+" ");//배열 출력
}
System.out.println();//줄 바꿈
}
}
}
실행 결과
[10번]
4X4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 10개만 랜덤하게 생성하여 임의의 위치에 삽입하라. 동일한 정수가 있어도 상관없다. 나머지 6개의 숫자는 모두 0이다. 만들어진 2차원 배열을 화면에 출력하라.
→ int 배열은 default 값이 0으로 저장된다. 따라서 따로 0을 삽입할 필요가 없음을 기억하자.
import java.util.*;
public class Main {
public static void main(String[] args) {
int arr[][] = new int[4][4];//4x4 배열 생성
//int 배열은 default 값이 0으로 저장되어 있다는 것을 기억하자
int count = 1;//임의 위치에 배열한 정수의 수를 확인하기 위한 변수
while(count<=10) {//총 10개의 정수가 삽입될 때까지 반복
int i = (int)(Math.random()*4);//0에서 3 사이의 임의의 수
int j = (int)(Math.random()*4);//0에서 3 사이의 임의의 수
int x = (int)(Math.random()*10+1);//1에서 10 사이의 임의의 수
if(arr[i][j] == 0) {//default 값인 경우, 즉 임의의 수가 삽입되지 않은 경우
arr[i][j] = x;//1에서 10 사이의 임의의 수 저장
count++;//삽입된 임의의 수 개수 하나 증가
}
}
for(int i = 0; i<arr.length; i++) {//2차원 배열 출력
for(int j = 0; j<arr[i].length; j++) {//2차원 배열 출력
System.out.print(arr[i][j]+" ");//저장된 값 출력
}
System.out.println();//줄 바꿈
}
}
}
실행 결과
[11번]
다음과 같이 작동하는 Average.java를 작성하라. 명령행 인자는 모두 정수만 사용되며 정수들의 평균을 출력한다. 다음 화면은 컴파일된 Average.class 파일을 c:\Temp 디렉터리에 복사한 뒤 실행한 경우이다. 원본 Average.class 파일은 이클립스의 프로젝트 폴더 밑에 bin 폴더에 있다.
문자열을 정수로 변환할 때 다음 코드를 이용하라.
int i = Integer.parseInt("10"); // i는 10
import java.util.*;
public class Average {
public static void main(String[] args) {
/* 프로그램 아규먼트 args
프로그램을 실행할 때 자동으로 넘겨주는 값으로
클래스 이름 뒤에 값을 지정하면 공백을 기준으로 문자열을 잘라 배열 형식으로 main()에 전달한다.*/
int sum = 0; //합을 구하기 위한 변수 선언
for(int i = 0; i<args.length; i++) {//입력한 수의 개수만큼 반복
sum += Integer.parseInt(args[i]);//공백을 기준으로 문자열을 자른 후, int형으로 변환해 sum에 더함
}
System.out.println(sum/args.length);//평균을 구해 출력
}
}
[12번]
다음과 같이 작동하는 Add.java를 작성하라. 명령행 인자 중에서 정수만을 골라 합을 구하라. 다음 화면은 Add.java 파일을 C:\Temp 디렉터리에 복사한 뒤 실행한 경우이다. 원본 Add.class 파일은 이클립스 프로젝트 폴더 밑에 bin 폴더에 있다.
import java.util.*;
public class Add {
public static void main(String[] args) {
/* 프로그램 아규먼트 args
프로그램을 실행할 때 자동으로 넘겨주는 값으로
클래스 이름 뒤에 값을 지정하면 공백을 기준으로 문자열을 잘라 배열 형식으로 main()에 전달한다.*/
int sum = 0; //합을 구하기 위한 변수 선언
for(int i = 0; i<args.length; i++) {//입력한 수의 개수만큼 반복
try {//정수를 입력해 형변환 오류가 일어나지 않는 경우
sum += Integer.parseInt(args[i]);//공백을 기준으로 문자열을 자른 후, int형으로 변환해 sum에 더함
}
catch(Exception e){//정수가 아닌 경우에 대비, 예외처리 설정
continue;//멈추지 않고 계속 진행
}
}
System.out.println(sum);//정수의 합 출력
}
}
[13번]
반복문을 이용하여 369게임에서 박수를 쳐야 하는 경우를 순서대로 화면에 출력해보자. 1부터 시작하며 99까지만 한다. 실행 사례는 다음과 같다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int ten = 0;//십의 자리 숫자
int one = 0;//일의 자리 숫자
for(int i = 1; i<=99; i++) {//1부터 99까지 반복
ten = i/10;//십의 자리 숫자 저장
one = i%10;//일의 자리 숫자 저장
if(ten==3||ten==6||ten==9||one==3||one==6||one==9) {//십의 자리나 일의 자리 중 하나만 3,6,9인 경우 실행
if((ten==3||ten==6||ten==9)&&(one==3||one==6||one==9)) {//십의 자리와 일의 자리 둘 다 3,6,9인 경우 실행
System.out.println(i+" 박수 짝짝");
}
else {//둘 중 하나만 3,6,9인 경우
System.out.println(i+" 박수 짝");
}
}
}
}
}
실행 결과
[14번]
다음 코드와 같이 과목과 점수가 짝을 이루도록 2개의 배열을 작성하라
String course [] = {"Java", "C++", "HTML5", "컴퓨터구조", "안드로이드"};
int score [] = {95, 88, 76, 62, 55};
그리고 다음 예시와 같이 과목 이름을 입력받아 점수를 출력하는 프로그램을 작성하라. "그만"을 입력받으면 종료한다.
과목 이름>>Jaba
없는 과목입니다.
과목 이름>>Java
Java의 점수는 95
과목 이름>>안드로이드
안드로이드의 점수는 55
과목 이름>>그만
Hint!
문자열을 비교하기 위해서는 String 클래스의 equals() 메소드를 이용해야 한다.
String name;
if(course[i].equals(name)){
int n = score[i];
}
import java.util.*;
public class Main {
public static void main(String[] args) {
String course [] = {"Java", "C++", "HTML5", "컴퓨터구조", "안드로이드"};//배열 작성
int score [] = {95, 88, 76, 62, 55};//배열 작성
int count = 0;//배열 내에 과목 유무를 확인하기 위한 변수 선언
//배열에 입력받은 값이 존재하는 경우 1, 존재하지 않는 경우 0으로 저장
while(true) {//break 전까지 무한 반복
System.out.println("과목 이름>>");
String input = scanner.next();//과목 이름 입력
if(input.equals("그만")) {//그만을 입력한 경우
break;//반복 종료 후 while문 나가기
}
else {//그만을 입력하지 않은 경우
for(int i = 0; i<course.length; i++) {//course 배열에 저장된 값만큼 반복
if(input.equals(course[i])) {//입력받은 값과 배열에 저장된 과목명이 같은 경우
System.out.println(input+"의 점수는 "+score[i]);//점수 출력
count++;//입력받은 값이 배열에 존재하므로 count의 값을 1로 변경
}
}
if(count == 0) {//입력받은 값이 존재하지 않는 경우
System.out.println("없는 과목입니다.");
}
else {//입력받은 값이 존재하는 경우, 1이었던 count 값을 0으로 초기화
count = 0;
}
}
}
}
}
실행 결과
[15번]
다음은 2개의 정수를 입력 받아 곱을 구하는 Multiply 클래스이다.
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을 잘 출력한다.
하지만, 다음과 같이 실수를 입력하였을 때, 예외가 발생한다.
다음과 같이 실수가 입력되면 정수를 다시 입력하도록 하여 예외 없이 정상적으로 처리되도록 예외 처리코드를 삽입하여 Multiply 클래스를 수정하라.
곱하고자 하는 두 수 입력>>2.5 4
실수는 입력하면 안 됩니다.
곱하고자 하는 두 수 입력>> 4 3.5
실수는 입력하면 안 됩니다.
곱하고자 하는 두 수 입력>> 4 3
4x3=12
Hint!
InputMismatchException 예외를 처리할 try-catch 코드를 작성하고
catch 블록에서 Scanner에 이미 입력된 키를 모두 제거하기 위해 Scanner의 nextLine()을 호출하라.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(true) {//break 전까지 무한 반복
System.out.print("곱하고자 하는 두 수 입력>>");
try {//예외처리, 오류가 발생하지 않는 경우
int n = scanner.nextInt();
int m = scanner.nextInt();
System.out.print(n + "x" + m + "=" + n*m);//두 정수를 받아와 결과 출력
break;//while문을 종료하고 벗어남
}
catch(InputMismatchException e) {//예외처리, 오류가 발생한 경우
System.out.println("실수는 입력하면 안 됩니다.");
scanner.nextLine();//Scanner에 이미 입력된 키를 모두 제거하기 위해 호출
continue;//while문 반복
}
}
scanner.close();
}
}
실행 결과
[16번]
컴퓨터와 독자 사이의 가위 바위 보 게임을 만들어보자. 예시는 다음 그림과 같다. 독자부터 먼저 시작한다. 독자가 가위 바위 보 중 하나를 입력하고 <ENTER>키를 치면, 프로그램을 가위 바위 보 중에서 랜덤하게 하나를 선택하고 컴퓨터가 낸 것으로 한다. 독자가 입력한 값과 랜덤하게 선택한 값을 비교하여 누가 이겼는지 판단한다. 독자가 가위 바위 보 대신 "그만"을 입력하면 게임은 끝난다.
컴퓨터와 가위 바위 보 게임을 합니다.
가위 바위 보!>>바위
사용자 = 바위 , 컴퓨터 = 가위, 사용자가 이겼습니다.
가위 바위 보!>>가위
사용자 = 가위 , 컴퓨터 = 가위, 비겼습니다.
가위 바위 보!>>그만
게임을 종료합니다...
Hint!
다음과 같은 문자열 배열을 만든다.
String str[] = {"가위", "바위", "보"};
컴퓨터가 내는 것을 랜덤하게 선택하기 위해서는 다음 코드를 이용한다.
int n = (int)(Math.random()*3+);
컴퓨터가 낸 것이 "바위"인지 비교하는 코드는 다음과 같이 한다.
if(str[n].equals.("바위"));
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str[] = {"가위", "바위", "보"};//배열 생성
int computer = 0;//컴퓨터의 랜덤값 저장을 위한 변수 선언
System.out.println("컴퓨터와 가위 바위 보 게임을 합니다.");
while(true) {//break 전까지 무한 반복
System.out.print("가위 바위 보!>>");
String input = scanner.next();//사용자 입력 저장
if(input.equals("그만")) {//사용자가 그만을 입력한 경우
System.out.print("게임을 종료합니다...");
break;//while문 종료
}
else {//사용자가 그만이 아닌 다른 것을 입력한 경우
computer = (int)(Math.random()*3);//컴퓨터의 값 임의로 지정
if(str[computer].equals(input)) {//컴퓨터의 값과 사용자의 값이 같은 경우
System.out.println("사용자 = "+input+" , 컴퓨터 = "+input+", 비겼습니다.");
}
else if(input.equals("가위")) {//사용자가 가위를 낸 경우
if(str[computer].equals("바위")) //컴퓨터가 바위를 낸 경우, 컴퓨터 승
System.out.println("사용자 = "+input+" , 컴퓨터 = "+str[computer]+", 컴퓨터가 이겼습니다.");
else if(str[computer].equals("보"))//컴퓨터가 보를 낸 경우, 사용자 승
System.out.println("사용자 = "+input+" , 컴퓨터 = "+str[computer]+", 사용자가 이겼습니다.");
}
else if(input.equals("바위")) {//사용자가 바위를 낸 경우
if(str[computer].equals("보")) //컴퓨터가 보를 낸 경우, 컴퓨터 승
System.out.println("사용자 = "+input+" , 컴퓨터 = "+str[computer]+", 컴퓨터가 이겼습니다.");
else if(str[computer].equals("가위"))//컴퓨터가 가위를 낸 경우, 사용자 승
System.out.println("사용자 = "+input+" , 컴퓨터 = "+str[computer]+", 사용자가 이겼습니다.");
}
else if(input.equals("보")) {//사용자가 보를 낸 경우
if(str[computer].equals("가위")) //컴퓨터가 가위를 낸 경우, 컴퓨터 승
System.out.println("사용자 = "+input+" , 컴퓨터 = "+str[computer]+", 컴퓨터가 이겼습니다.");
else if(str[computer].equals("바위"))//컴퓨터가 바위를 낸 경우, 사용자 승
System.out.println("사용자 = "+input+" , 컴퓨터 = "+str[computer]+", 사용자가 이겼습니다.");
}
}
}
scanner.close();
}
}
실행 결과
'YJ > JAVA' 카테고리의 다른 글
[명품 JAVA Programming] 제6장 모듈과 패키지 개념, 자바 기본 패키지 - 실습문제 (0) | 2021.01.07 |
---|---|
[명품 JAVA Programming] 제5장 상속 - 실습문제 (0) | 2021.01.05 |
[명품 JAVA Programming] 제4장 클래스와 객체 - 실습문제 (0) | 2020.12.30 |
[명품 JAVA Programming] 제2장 자바 기본 프로그래밍 - 실습문제 (0) | 2020.12.24 |