본문 바로가기
Language/Java

[명품 Java Programming]3장 연습문제

by DEV Lee 2020. 7. 11.

이론문제

 

실습문제

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

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

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

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

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

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

 

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

int n[][]={{1},{1,2,3},{1},{1,2,3,4},{1,2}};

>>

public class EX02 {
	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를 이용하여 정수를 입력받고 다음과 같이 *를 출력하는 프로그램을 작성하라.

>>

import java.util.Scanner;

public class EX03 {
	public static void main(String[]args) {
		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를 이용하여 소문자 알파벳을 하나 입력받고 다음과 같이 출력하는 프로그램을 작성하라.

>>

import java.util.Scanner;

public class EX04 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		System.out.print("소문자 알파벳 하나를 입력하시오>>");
		char ch=scan.next().charAt(0);//scanner를 이용해 char형 입력받는 방법. next는 String형.
		for(char i=ch;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 EX05 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		System.out.print("양의 정수 10개를 입력하시오>>");
		
		int arr[]=new int[10];
		for(int i=0;i<10;i++) {
			arr[i]=scan.nextInt();
		}
		
		System.out.print("3의 배수는 ");
		for(int i=0;i<arr.length;i++) {
			if(arr[i]%3==0)
				System.out.print(arr[i]+" ");
		}
	}
}

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

int []unit={50000,10000,5000,1000,500,100,50,10,1};//환산할 돈의 종류

>>

import java.util.Scanner;

public class EX06 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		int []unit= {50000,10000,1000,500,100,50,10,1};
		System.out.print("금액을 입력하시오>>");
		int money=scan.nextInt();
		
		int i=0;
		int num;
		while(money>0) {
			num=money/unit[i];
			if(num==0) {
				i++;
				continue;
			}
			System.out.println(unit[i]+"원 짜리: "+num+"개");
			money=money-num*unit[i];
			i++;
		}
	}
}

 

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

>>

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

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

>>

import java.util.Scanner;

public class EX08 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		
		System.out.print("정수 몇 개?");
		int num=scan.nextInt();
		int arr[]=new int[num];
		
		int i=0;
		int sameNum=0;//같은 수가 있는지 판별하는 변수
		while(i<num) {
			int randNum=(int)(Math.random()*100+1);
			for(int j=0;j<arr.length;j++)
				if(arr[j]==randNum) {
					sameNum=1;
					break;
				}
			if(sameNum==1) {//배열에서 같은 수가 발견되었다면
				sameNum=0;//다시 sameNum을 초기화하고
				continue;//반복문 다시 시작
			}
			arr[i++]=randNum;
		}
		for(int n=0;n<arr.length;n++)
			System.out.print(arr[n]+" ");
	}
}

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

>>

public class EX09 {
	public static void main(String[]args) {
		int arr[][]=new int[4][4];
		for(int i=0;i<4;i++)
			for(int j=0;j<4;j++)
				arr[i][j]=(int)(Math.random()*10+1);
		for(int i=0;i<4;i++) {
			for(int j=0;j<4;j++)
				System.out.print(arr[i][j]+" ");
			System.out.println();
		}
		
	}
}

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

>>

public class EX10 {
	public static void main(String[]args) {
		int arr[][]=new int[4][4];//숫자 저장할 배열
		int isFull[]=new int[6];//[i][j]번째에 0인지 확인할 배열
		
		int cnt=0;
		int sameNum=0;
		while(cnt<6) {
			int i=(int)(Math.random()*3);//0~3의 랜덤한 수 생성
			int j=(int)(Math.random()*3);//0~3
			int num=i*10+j;
			for(int n=0;n<isFull.length;n++)//이미 같은 수가 있는지 확인
				if(isFull[n]==num) {
					sameNum=1;
					break;
				}
			if(sameNum==1) {//확인되면
				sameNum=0;//바꾸고
				continue;//for문 다시 시작
			}
			arr[i][j]=1;//배열에 1삽입하고->기본적으로 0 들어가기 때문에 0 들어갈 자리를 1로 표시
			isFull[cnt++]=num;//건너뛴다.
		}
		
		for(int i=0;i<4;i++) {
			for(int j=0;j<4;j++) {
				if(arr[i][j]==1) {//1이 있는 자리를
					arr[i][j]=0;//0으로 바꾸고
					continue;
				}
				arr[i][j]=(int)(Math.random()*10+1);
			}
		}
		
		for(int i=0;i<4;i++) {
			for(int j=0;j<4;j++)
				System.out.print(arr[i][j]+" ");
			System.out.println();
		}
	}
}

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

>>

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

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

>>

public class EX12 {
	public static void main(String[]args) {
		int num[]=new int[args.length];
		for(int i=0;i<args.length;i++) {
			try {
				num[i]=Integer.parseInt(args[i]);
			}catch(NumberFormatException e) {
				
			}
		}
		int sum=0;
		for(int i=0;i<num.length;i++)
			sum+=num[i];
		System.out.println(sum);
	}
}

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

>>

public class EX13 {
	public static void main(String[]args) {
		int cnt=0;
		for(int i=1;i<100;i++) {
			cnt=0;
			if(i%10==3 || i%10==6 || i%10==9)
				cnt++;
			if(i/10==3 || i/10==6 || i/10==9)
				cnt++;
			
			if(cnt==1)
				System.out.println(i+"박수 짝");
			else if(cnt==2)
				System.out.println(i+"박수 짝짝");
		}
	}
}

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

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

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

>>

import java.util.Scanner;

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

 

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

>>

import java.util.Scanner;

public class EX16 {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		System.out.println("컴퓨터와 가위 바위 보 게임을 합니다.");
		
		String str[]= {"가위","바위","보"};
		String user;
		do {
			System.out.print("가위 바위 보!>>");
			user=scan.next();
			if(user.equals("그만")) {
				System.out.println("게임을 종료합니다...");
				break;
			}
			
			
			int n=(int)(Math.random()*3);
			int user_num=3;
			for(int i=0;i<str.length;i++)
				if(str[i].equals(user))
					user_num=i;
			
			if(user_num==0) {
				if(n==0)
					System.out.println("사용자="+str[user_num]+", 컴퓨터="+str[n]+" 비겼습니다.");
				else if(n==1)
					System.out.println("사용자="+str[user_num]+", 컴퓨터="+str[n]+" 컴퓨터가 이겼습니다.");
				else
					System.out.println("사용자="+str[user_num]+", 컴퓨터="+str[n]+" 사용자가 이겼습니다.");
			}else if(user_num==1) {
				if(n==0)
					System.out.println("사용자="+str[user_num]+", 컴퓨터="+str[n]+" 사용자가 이겼습니다.");
				else if(n==1)
					System.out.println("사용자="+str[user_num]+", 컴퓨터="+str[n]+" 비겼습니다.");
				else
					System.out.println("사용자="+str[user_num]+", 컴퓨터="+str[n]+" 컴퓨터가 이겼습니다.");
			}else if(user_num==2) {
				if(n==0)
					System.out.println("사용자="+str[user_num]+", 컴퓨터="+str[n]+" 컴퓨터가 이겼습니다.");
				else if(n==1)
					System.out.println("사용자="+str[user_num]+", 컴퓨터="+str[n]+" 사용자가 이겼습니다.");
				else
					System.out.println("사용자="+str[user_num]+", 컴퓨터="+str[n]+" 비겼습니다.");
			}else {
				System.out.println("다시 입력해주세요.");
			}
			
		}while(user!="그만");
	}
}

댓글