명품자바프로그래밍 3장 실습문제
반복문과 배열 그리고 예외 처리
1. 다음 프로그램에 대해 물음에 답하라. #명품자바프로그래밍3장1번실습문제
int sum=0, i=0;
while (i<100){
sum=sum+i;
i+=2;
}
System.out.println(sum);
(1) 무엇을 계산하는 코드이며 실행 결과 출력되는 내용은?
☞ 100보다 작은 짝수의 합. 2450
(2) 위의 코드를 main()메소드로 만들고 WhileTest 클래스로 완성하라.
package Luxuryjava03;
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 클래스를 작성하라.
package Luxuryjava03;
public class ForTest {
public static void main(String[] args) {
int sum=0, i=0;
for(i=0; i<100; i+=2) {
sum=sum+i;
}
System.out.println(sum);
}
}
(4) do-while 문을 이용하여 동일하게 실행되는 DowhileTest 클래스를 작성하라.
package Luxuryjava03;
public class 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을 출력하는 프로그램을 작성하라. #명품자바프로그래밍3장2번실습문제
int n[][] = {{1}, {1,2,3}, {1}, {1,2,3,4}, {1,2}} ;
1
1 2 3
1
1 2 3 4
1 2
※ 1*5 배열. n.length : 줄의 개수, n[i].length : i번째 줄의 배열 갯수
※ length() : 문자의 길이 / length : 배열의 길이
package Luxuryjava03;
public class h0302 {
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();
}
}
}
※ 각 행별의 평균을 구하려면?
package Luxuryjava03;
public class h0302 {
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++) {
int sum = 0;
for (int j = 0; j < n[i].length; j++) {
System.out.print(n[i][j] + "\t");
sum += n[i][j];
}
System.out.println((double) sum / n[i].length);
}
}
}
3. Scanner를 이용하여 정수를 입력받고 다음과 같이 *를 출력하는 프로그램을 작성하라. 다음은 5를 입력받았을 경우이다. #명품자바프로그래밍3장3번실습문제 #자바별찍기 #자바역삼각형만들기
정수를 입력하시오 >> 5
*****
****
***
**
*
※ for문, 변수 2개
package Luxuryjava03;
import java.util.Scanner;
public class h0303 {
public static void main(String[] args) {
System.out.println("정수를 입력하시오>>");
Scanner s=new Scanner(System.in);
int n=s.nextInt();
for(int i=0; i<n; i++) {
for(int j=0; j<n-i; j++) {
System.out.print("*");
}
System.out.println();
}
s.close();
}
}
※ 응용 - 반대로 별을 찍을 때
package Luxuryjava03;
import java.util.Scanner;
public class h0303 {
public static void main(String[] args) {
System.out.print("정수를 입력하시오>>");
Scanner s=new Scanner(System.in);
int n=s.nextInt();
for(int i=0; i<n; i++) {
for(int j=0; j<=i; j++) {
System.out.print('*');
}
System.out.println();
}
s.close();
}
}
※ 응용 - 자바 피라미드 그리기 #자바피라미드찍기
package Luxuryjava03;
import java.util.Scanner;
public class h0303 {
public static void main(String[] args) {
System.out.print("정수를 입력하시오>>");
Scanner s=new Scanner(System.in);
int n=s.nextInt();
for(int i=0; i<n; i++) {
for(int j=1; j<n-i; j++) {
System.out.print(" ");
}
for(int k=0; k<i*2+1; k++) {
System.out.print("*");
}
System.out.println();
}
s.close();
}
}
package Luxuryjava03;
import java.util.Scanner;
public class h03032 {
public static void main(String[] args) {
System.out.print("정수를 입력하시오>>");
Scanner s=new Scanner(System.in);
int n=s.nextInt();
System.out.println();
for (int i=0; i<n; i++) { // i=0,1,2,3,4
for (int j=n-1; j>i; j--) {
// i=0 j=4,3,2,1 / i=1 j=4,3,2 / i=2 j=4,3 / i=3 j=4 / i=4 (i=j 므로 제외)
// j는 4부터 시작하여 i보다 클때까지 -
System.out.print(" ");
}
for (int k = 1; k <= i*2+1; k++) { //k는 1부터 시작
System.out.print("*"); // i 가 0 -->0*2+1 1 1 = 1
// i 가 1 -->1*2+1 3 3 <= 1,2,3
// i 가 2 -->2*2+1 5 5 <= 1,2,3,4,5
// i 가 3 -->3*2+1 7 7 <= 1,2,3,4,5,6,7
// i 가 4 -->4*2+1 9 9 <= 1,2,3,4,5,6,7,8,9
}
System.out.println();
}
package Luxuryjava03;
import java.util.Scanner;
public class h03032 {
public static void main(String[] args) {
System.out.print("정수를 입력하시오>>");
Scanner s=new Scanner(System.in);
int n=s.nextInt();
System.out.println();
for(int i=0; i<n; i++){ // 0, 1, 2, 3, 4
for(int j=1; j<n-i; j++){ // i=0 2<
System.out.print(" ");
}
for(int k=0; k<i*2+1; k++){ // +1: 홀수. 홀수여야 양쪽 동일.
System.out.print("*");
}
System.out.println(" ");
}
s.close();
}
}
※ 응용 - 자바 역피라미드 그리기 #자바역피라미드만들기 #자바역삼각형찍기
https://dpdpwl.tistory.com/5 참고하기
※ 응용 - 자바 다이아몬드 그리기 #자바다이아몬드찍기 #자바다이아몬드만들기
4. Scanner를 이용하여 소문자 알파벳을 하나 입력받고 다음과 같이 출력하는 프로그램을 작성하라. 다음은 e를 입력받았을 경우이다.
소문자 알파벳 하나를 입력하시오 >> e
abcde
abcd
abc
ab
a
※ Scanner는 문자를 입력받는 기능이 없으므로 문자열을 입력받아야 한다.
String s=scanner.next(); ----문자열 읽기 char c=s.charAt(0); -------문자열의 첫 번째 문자
5. 양의 정수 10개 입력받아 배열에 저장하고, 배열에 있는 정수 중에서 3의 배수만 출력하는 프로그램을 작성하라.
6. 배열과 반목문을 이용하여 프로그램을 작성해보자. 키보드에서 정수로 된 돈의 액수를 입력받아 오만 원권, 만 원권, 천 원 권, 500원, 100원, 50원, 10원, 1원짜리 동전이 각 몇 개로 변환되는지 예시와 같이 출력하라. 이 때 반드시 다음 배열을 이용하고 반복문으로 작성하라.
int []unit={50000, 10000, ....};
7. 정수를 10개 저장하는 배열을 만들고 1에서 10까지 범위의 정수를 랜덤하게 생성하여 배열에 저장하라. 그리고 배열에 든 숫자들과 평균을 출력하라. #명품자바3장7번실습문제
int i = (int)(Math.random()*10+1);
8. 정수를 몇 개 저장할 지 키보드로부터 100보다 작은 갯수를 입력받아 정수 배열을 생성하고, 이곳에 1에서 100까지 범위의 정수를 랜덤하게 삽입하라. 배열에는 같은 수가 없도록 하여 배열을 출력하라. #명품자바3장8번실습문제
정수 몇 개 ? 24
48 33 74 94 17 39 55 8 59 81
... (랜덤한 정수가 24개 출력)
9. 4x4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 랜덤하게 생성하여 정수 16개를 배열에 저장하고, 2차원 배열을 화면에 출력하라. #명품자바3장9번실습문제
6 10 1 8
1 3 7 2
8 4 5 1
1 8 4 4
10. 4x4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 10개만 랜덤하게 생성하여 임의의 위치에 삽입하라. 동일한 정수가 있어도 상관없다. 나머지 6개의 숫자는 모두 0이다. 만들어진 2차원 배열을 화면에 출력하라. #명품자바3장10번실습문제
5 0 8 6
0 7 9 5
2 4 0 8
0 0 0 8
11. 다음과 같이 작동하는 Average.java를 작성하라. 명령행 인자는 모두 정수만 사용되며 정수들의 평균을 출력한다. 다음 화면은 컴파일된 Average.class파일을 c:\Temp 디렉토리에 복사한 뒤 실행한 경우이다. 원본 Average.class파일은 이클립스의 프로젝트 폴더 밑 bin폴더에 있다.
C: \Temp>java Average 2 3 4
3 ------- 2 3 4의 평균
C :\Temp>
12. 다음과 같이 작동하는 Add.java를 작성하라. 명령행 인자 중에서 정수만을 골라 합을 구하라. 다음 화면은 명령프롬프트에서 Add.class파일을 c:\Temp 디렉토리에 복사한 뒤 실행한 경우이다. 원본 Add.class파일은 이클립스 폴더 밑 bin폴더에 있다.
C: \Temp>java Add 2 3 aa 5 6.5 ---- 이 중 정수만 더하여 출력
10
C :\Temp>java Add Heaven 3 4 4.3 c
7
C :\Temp>
※ 문자열을 정수로 변환할 때 다음 코드를 이용하라.
int i = Integer.parseInt("10"); // i는 10
13. 반복문을 이용하여 369게임에서 박수를 쳐야 하는 경우를 순서대로 화면에 출력해보자. 1부터 시작하며 99까지만 한다.
ㅁ
14. 다음 코드와 같이 과목과 점수가 짝을 이루도록 2개의 배열을 작성하라.
String course[]={"Java", "C++", "HTML5", "컴퓨터구조", "안드로이드"};
int course[]={95, 88, 76, 62, 55};
그리고 다음 예시와 같이 과목 이름을 입력받아 점수를 출력하는 프로그램을 작성하라. "그만"을 입력받으면 종료한다. ※ 문자열을 비교하기 위해서는 String 클래스의 equals()메소드를 이용해야 한다.
과목 이름 >> Jaba
없는 과목입니다.
과목 이름 >> Java
Java의 점수는 95
과목 이름 >> C++
C++의 점수는 88
과목 이름 >> 그만
15. 다음은 2개 정수를 입력받아 곱을 구하는 Multiply 클래스이다.
import java.util.Scanner;
public class Multiply{
public static void main(String[]args){
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int m=scanner.nextInt();
System.out.print(n+"x"+m+"="+n*m);
scanner.close();
}
}
다음과 같이 실행할 때 프로그램은 10과 5를 곱해 50을 잘 출력한다. 하지만 실수를 입력하면 예외가 발생하는데, 실수가 입력되면 정수를 다시 입력하도록 하여 예외 없이 정상적으로 처리되도록 예외 처리 코드를 삽입하여 Multiply 클래스를 수정하라.
곱하고자 하는 두 수 입력 >> 10 5
10x5=50
※ InputMismatchException 예외를 처리할 try-catch 코드를 작성하고, catch 블록에서 Scanner에 이미 입력된 키를 모두 제거하기 위해 Scanner의 nextLine()을 호출하라.
곱하고자 하는 두 수 입력 >> 2.5 4
실수는 입력하면 안됩니다.
곱하고자 하는 두 수 입력 >> 4 3
4x3=12
16. 컴퓨터와 독자 사이의 가위바위보 게임을 만들어보자. 예시는 다음 그림과 같다. 독자부터 먼저 시작하여 가위 바위 보 중 하나를 입력하고 <Enter>키를 치면, 프로그램은 가위 바위 보 중에서 랜덤하게 하나를 선택하고 컴퓨터가 낸 것으로 한다. 독자가 입력한 값과 랜덤하게 선택한 값을 비교하여 누가 이겼는지 판단한다. 독자가 가위 바위 보 대신 "그만"을 입력하면 게임Over.
컴퓨터와 가위 바위 보 게임을 합니다.
가위 바위 보! >> 바위
사용자 = 바위, 컴퓨터 = 가위, 사용자가 이겼습니다
가위 바위 보! >> 그만
게임을 종료합니다...
※ 랜덤숫자 함수 : Math.random()
※ 비교 : str[n].equals()
ㅁ
'Java Friends > Java' 카테고리의 다른 글
명품자바프로그래밍 4장 연습문제 (0) | 2019.06.08 |
---|---|
명품자바프로그래밍 4장 요약, 예제 (0) | 2019.06.08 |
명품자바프로그래밍 3장 연습문제 (0) | 2019.06.08 |
명품자바프로그래밍 3장 요약, 예제 (0) | 2019.06.08 |
명품자바프로그래밍 2장 실습문제 (5) | 2019.06.08 |