명품 JAVA Programming 제3강 자바 기본 프로그래밍 실습문제
Programming Language/Java

명품 JAVA Programming 제3강 자바 기본 프로그래밍 실습문제

728x90

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

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

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

  0부터 99까지 짝수를 더하여 출력하는 코드

 

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

public class Chap03_01_WhileTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

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

}

 

(3) for 문을 이용하여 동일하게 실행되는 ForTest 클래스를 작성하라.

public class Chap03_01_ForTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int sum=0;
		for(int i=0;i<100;i+=2)
			sum+=i;
		System.out.println(sum);
	}

}

 

(4) do-while 문을 이용하여 동일하게 실행되는 DoWhileTest 클래스를 작성하라.

public class Chap03_01_DoWhileTest {

	public static void main(String args[]) {
		
		int sum=0, i=0;
		do {
			sum=sum+i;
			i+=2;
		}while(i<100);
		System.out.println(sum);
	}
}

 

2. 다음 2차원 배열 n을 출력하는 프로그램을 작성하라.

public class Chap03_02 {

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

import java.util.Scanner;

public class Chap03_03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scan=new Scanner(System.in);
		
		System.out.print("정수를 입력하시오>>");
		int num=scan.nextInt();
		
		for(int i=num;i>0;i--) {
			for(int j=0;j<i;j++)
				System.out.print("*");
			System.out.println();
		}
	}
}

 

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

import java.util.Scanner;

public class Chap03_04 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scan=new Scanner(System.in);
		
		System.out.print("소문자 알파벳 하나를 입력하시오>>");
		String apb=scan.next();
		char c=apb.charAt(0);
		
		for(char i=c;i>='a';i--) {
			for(char j='a';j<=i;j++)
				System.out.print(j);
			System.out.println();
		}
	}

}

 

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

import java.util.Scanner;

public class Chap03_05 {

	public static void main(String args[]) {
		
		Scanner scan=new Scanner(System.in);
		int arry[]=new int[10];
		System.out.print("양의 정수 10개 입력하시오>>");
		for(int i=0;i<arry.length;i++)
			arry[i]=scan.nextInt();
		
		System.out.print("3의 배수는 ");
		for(int i=0;i<arry.length;i++)
			if ((arry[i]%3)==0)
				System.out.print(arry[i]+" ");
		System.out.println();
	}
}

 

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

import java.util.Scanner;

public class Chap03_06 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scan=new Scanner(System.in);
		int [] unit= {50000,10000,1000,500,100,50,10,1};
		
		System.out.print("금액을 입력하시오>>");
		int price=scan.nextInt();
		
		for(int i=0;i<unit.length;i++) {
			if ((price/unit[i])!=0)
				System.out.println(unit[i]+"원 짜리 : "+(price/unit[i])+"개");
			price%=unit[i];
		}
	}
}

해당 돈 단위가 0개이면 출력하지 않게 했다.

 

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

public class Chap03_07 {

	public static void main(String args[]) {
		
		int array[]=new int[10];
		int sum=0;
		
		System.out.print("랜덤한 정수들 : ");
		for(int i=0;i<array.length;i++) {
			array[i]=(int)(Math.random()*10+1);
			System.out.print(array[i]+" ");
			sum+=array[i];
		}
		System.out.println();
		
		System.out.print("평균은 "+((double)sum/array.length));
		System.out.println();
	}
}

 

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

import java.util.Scanner;
import java.util.Random;

public class Chap03_08 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scan=new Scanner(System.in);
		Random r= new Random();
		int array[];
		int i=0;
		int j=0;
		int turn=0;
		
		while(true) {
			System.out.print("정수 몇개?");
			int length=scan.nextInt();
			if ((length>=1)&&(length<100)) { //받은 배열 길이가 적당한지 검사 
				array=new int [length]; //적당하면 배열 생성
				break;
			}
			else //범위 초과하면 배열 길이 계속 확인
				System.out.println("범위 초과. 다시 입력");
		}
		
		for(i=0;i<array.length;i++) {
			int num=r.nextInt(100)+1;
			turn=i;
			for (j=0;j<turn;j++) { //이미 정해진 수와 같은 수가 할당 되면 i를 1 줄임으로써 다시 할당.
				if (array[j]==num)
					i--;
			}
			if (j==turn) //위의 for문 안의 if문에 걸리지 않고 잘 통과하면(같은 수가 없으면)
				array[i]=num;
		}
		
		for(i=0;i<array.length;i++) { //배열에 할당된 수 출력
			System.out.print(array[i]+ "\t");
			if (((i+1)%10)==0) //한 줄에 10개씩만 출력
				System.out.println();
		}
		
	}

}

 

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

public class Chap03_09 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int array[][]=new int [4][4];
		for(int i=0;i<array.length;i++) {
			for(int j=0;j<array[i].length;j++) {
				array[i][j]=(int)(Math.random()*10+1);
				System.out.print(array[i][j]+"\t");
			}
			System.out.println();
		}
	}

}
728x90

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

/*
1. 1~16 중 랜덤으로 10개 숫자 고르고(중복 시 다시 고름) ran[10]에 넣음.
2. 고른 수 array[ran[i]/4][ran[i]%4]에 랜덤 수 넣음
3. 출력
 */

import java.util.Random;

public class Chap03_10 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Random r=new Random();
		int num=0;
		int turn=0;
		int i=0;
		int j=0;
		
		int array [][]=new int [4][4];
		int ran[]=new int [10];
		
		for (i=0;i<ran.length;i++) { //1. 1~16 중 랜덤으로 10개 숫자 고르고(중복 시 다시 고름) ran[10]에 넣음.
			num=r.nextInt(16)+1;
			turn=i;
			for (j=0;j<turn;j++)
				if (ran[j]==num) {
					i--;
					break;
				}
			if (j==turn)
				ran[i]=num;
		}
		
		for(i=0;i<ran.length;i++) { //2. 고른 수 array[ran[i]/4][ran[i]%4]에 랜덤 수 넣음
			int first=ran[i]/4;
			int second=ran[i]%4;
			array[first][second]=(int)(Math.random()*10+1);
		}
		
		for(i=0;i<array.length;i++) { //3. 출력
			for (j=0;j<array[i].length;j++)
				System.out.print(array[i][j]+"\t");
			System.out.println();
		}
	}

}

 

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

public class Chap03_11 {

	public static void main(String args[]) {
		
		int sum=0;
		double averg=0;
		for(int i=0;i<args.length;i++)
			sum+=Integer.parseInt(args[i]);
		averg=(double)sum/args.length;
		System.out.println(averg);
	}
}

 

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

public class Chap03_12 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int num=0;
		int sum=0;

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

}

 

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

public class Chap03_13 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int first=0;
		int second=0;;
		int c=0;

		for (int i=1;i<100;i++) {
			c=0;
			first=i%10;
			second=i/10;
			
			if ((first==3)||(first==6)||(first==9))
				c++;
			if ((second==3)||(second==6)||(second==9))
				c++;
			
			if (c==1)
				System.out.println(i+" 박수 짝");
			else if (c==2)
				System.out.println(i+" 박수 짝짝");
			else;
		}
	}

}

 

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

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

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

import java.util.Scanner;

public class Chap03_14 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scan=new Scanner(System.in);
		String course []= {"Java", "C++", "HTML5", "컴퓨터구조", "안드로이드" };
		int score []= {95, 88, 76, 62, 55};
		
		while(true) {
			System.out.print("과목 이름>>");
			String name=scan.next();
			
			if (name.equals("그만"))
				break;
			else {
				for (int i=0; i<course.length;i++) {
					if (course[i].equals(name)) {
						System.out.println(course[i]+"의 점수는 "+score[i]);
						break;
					}
					if (i==(course.length-1))
						System.out.println("없는 과목입니다.");
				}
			}
		}
	}

}

 

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=scan.nextInt();
		int m=scan.nextInt();
		System.out.println(n+"x"+m+"="+n*m);
		scan.close();
	}

}

다음과 같이 실행할 때 프로그램은 10과 5를 곱해 50을 잘 출력한다. 하지만, 다음과 같이 실수를 입력하였을 때, 예외가 발생한다. 다음과 같이 실수가 입력되면 정수를 다시 입력하도록 하여 예외 없이 정상적으로 처리되도록 예외 처리 코드를 삽입하여 Multiply 클래스를 수정하라.

import java.util.Scanner;
import java.util.InputMismatchException;

public class Chap03_15 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

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

}

 

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

import java.util.Scanner;

public class Chap03_16 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scan=new Scanner(System.in);
		String str[]= {"가위","바위","보"};
		int winner=0;
		System.out.println("컴퓨터와 가위 바위 보 게임을 합니다.");
		
		while(true) {
			System.out.print("가위 바위 보!>>");
			String user=scan.next();
			if (user.equals("그만")) {
				System.out.println("게임을 종료합니다...");
				break;
			}
			int n=(int)(Math.random()*3);
			
			switch (user) {
			case "가위":
				if (str[n].equals("가위"))
					winner=1;
				else if (str[n].equals("바위"))
					winner=2;
				else
					winner=3;
				break;
			case "바위":
				if (str[n].equals("가위"))
					winner=3;
				else if (str[n].equals("바위"))
					winner=1;
				else
					winner=2;
				break;
			case "보":
				if (str[n].equals("가위"))
					winner=2;
				else if (str[n].equals("바위"))
					winner=3;
				else
					winner=1;
				break;
			}
			
			if (winner==1)
				System.out.println("사용자 = "+user+" , 컴퓨터 = "+str[n]+", 비겼습니다.");
			else if (winner==2)
				System.out.println("사용자 = "+user+" , 컴퓨터 = "+str[n]+", 컴퓨터가 이겼습니다.");
			else
				System.out.println("사용자 = "+user+" , 컴퓨터 = "+str[n]+", 사용자가 이겼습니다.");
		}
	}

}

 

Open Challenge 숨겨진 카드의 수를 맞추는 게임을 만들어보자. 0에서 99까지의 임의의 수를 가진 카드를 한 장 숨기고 이 카드의 수를 맞추는 게임이다. 아래의 화면과 같이 카드 속의 수가 77인 경우를 보자. 수를 맞추는 사람이 55라고 입력하면 "더 높게", 다시 70을 입력하면 "더 높게"라는 식으로 범위를 좁혀가면서 수를 맞춘다. 게임을 반복하기 위해 y/n을 묻고, n인 경우 종료된다.

import java.util.Random;
import java.util.Scanner;

public class Chap03_OpenChallenge {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Random r=new Random();
		Scanner scan=new Scanner(System.in);
		int start=0;
		int end=99;
		int i=0;
		
		while(true) { //text가 n이 입력될 때까지 반복
			start=0; //매번 시작과 끝을 1과 99로 초기화
			end=99;
			i=1; //매번 횟수 초기화
			int k=r.nextInt(100); //랜덤으로 수 결정
			System.out.println("수를 결정하였습니다. 맞추어 보세요");
			while(true) { //답이 나올 때까지 반복
				System.out.println(start+"-"+end);
				System.out.print(i+">>");
				i++;
				int num=scan.nextInt();
			
				if (k==num) { //맞았을 경우
					System.out.println("맞았습니다.");
					break;
				}
				else if (k<num) {
					end=num;
					System.out.println("더 낮게");
				}
				else {
					start=num;
					System.out.println("더 높게");
				}
			}
			System.out.print("다시하시겠습니까(y/n)");
			String text=scan.next();
			if (text.equals("n"))
				break;
		}
		System.out.println("프로그램이 종료됩니다.");
	}
}
728x90