[문제 1] 다음 실행결과가 나오도록 ArrayList를 사용하여 동물(Dog Cat)을 추가하고, doWork() 메소드를 프로그래밍 하시오.

[Animal.java]
public interface Animal {
	String sound();
}

[Dog.java]
public class Dog implements Animal {
	private String name;
	
	public Dog(String name) {
		this.name = name;
	}

	@Override
	public String sound() {
		return "멍멍";
	}
	
	public String getName() {
		return name;
	}
}

[Cat.java]
public class Cat implements Animal {
	private String name;
	
	public Cat(String name) {
		this.name = name;
	}

	@Override
	public String sound() {
		return "야옹";
	}
	
	public String getName() {
		return name;
	}
}

[ListExample.java]
import java.util.ArrayList;
import java.util.List;

public class ListExample {
	public static void main(String[] args) {
		List<Animal> list = new ArrayList<Animal>();
		// 작성 위치 (1)
		// 1. 뚜루를 추가
		// 2. 나비를 추가
		
		doWork(list);
	}

	private static void doWork(List<Animal> list) {
		// 작성 위치 (2)
		// 실행결과와 같이 출력이 되어야 한다. (enhance for문 사용)

	}
}

[실행결과]
뚜루가 멍멍 소리를 낸다.
나비가 야옹 소리를 낸다.

[답안] list에 저장된 것은 interface Animal이며, 구현 객체의 이름을 꺼내기 위해서는 구현객체로 형변환을 해야 한다.

(1)에서 ArrayList에 추가한 것은 Dog, Cat 객체이므로 list에 저장된 Animal 타입을 Dog이나 Cat으로 강제 타입 변환을 해주면 이름(name)에 접근할 수 있다.

(1)
list.add(new Dog("뚜루"));
list.add(new Cat("나비"));

(2)
for(Animal animal : list) {
    if(animal instanceof Dog) {
        Dog dog = (Dog) animal;
        System.out.println(dog.getName() + "가 " + animal.sound() + " 소리를 낸다.");
    } else if(animal instanceof Cat) {
        Cat cat = (Cat) animal;
        System.out.println(cat.getName() + "가 " + animal.sound() + " 소리를 낸다.");
    }
}
Posted by 세상을 살아가는 사람
,

자바의 정석에 나오는 연습문제 4-12를 풀어본다. 답이 복잡한데, 나는 다르게 풀어서 공유를 한다. 문제는 아래와 같다.

나는 아래와 같이 3개의 반복문을 중첩해서 풀었다. 해결방법은 여러가지 이다.

public class Ex4_12 {

	public static void main(String[] args) {
		int i, k;
		for(k = 0;k < 3;k++) {
			for(int j = 1;j <= 3;j++) {
				int end = (4 + 3 * k) > 9 ? 9 : 4 + 3 * k;
				for(i = 2 + 3 * k;i < end;i++) {
					System.out.print(i + "*" + j + "=" + i * j + "\t");
				}
				System.out.println(i + "*" + j + "=" + i * j);
			}
			System.out.println();
		}
	}

}

실행결과는 아래와 같다.

아래 소스코드를 참조하면 좀더 이해가 될수 있다.

package chap04;

/*
2*1=2 3*1=3 4*1=4
2*2=4 3*2=6 4*2=8
2*3=6 3*3=9 4*3=12

5*1=5 6*1=6 7*1=7
5*2=10 6*2=12 7*2=14
5*3=15 6*3=18 7*3=21

8*1=8 9*1=9
8*2=16 9*2=18
8*3=24 9*3=27
 */
public class Ex4_12 {

	public static void main(String[] args) {
		int i, k;	// 반복문이 3개를 사용하므로 i, j, k
		for(k = 0;k < 3;k++) {	// k : 0~2 3번 반복
			for(i = 1;i <= 3;i++) {
				int j;
				int end = 4 + 3 * k;	// 종료조건
				if(end > 9)
					end = 9;
				for(j = 2 + 3 * k;j < end;j++) {	// (2,4), (5,7), (8,9)
					System.out.print(j + "*" + i + "=" + j*i + "\t");
				}
				System.out.println(j + "*" + i + "=" + j*i);
			}
			System.out.println();	// 줄 바꾸기
		}

		/*
		2*1=2 3*1=3 4*1=4
		2*2=4 3*2=6 4*2=8
		2*3=6 3*3=9 4*3=12
		*/
//		for(i = 1;i <= 3;i++) {
//			int j;
//			for(j = 2;j < 4;j++) {
//				System.out.print(j + "*" + i + "=" + j*i + "\t");
//			}
//			System.out.println(j + "*" + i + "=" + j*i);
//		}
//		System.out.println();	// 줄 바꾸기
//		/*
//		5*1=5 6*1=6 7*1=7
//		5*2=10 6*2=12 7*2=14
//		5*3=15 6*3=18 7*3=21
//		*/
//		for(i = 1;i <= 3;i++) {
//			int j;
//			for(j = 5;j < 7;j++) {
//				System.out.print(j + "*" + i + "=" + j*i + "\t");
//			}
//			System.out.println(j + "*" + i + "=" + j*i);
//		}
//		System.out.println();
//		/*
//		8*1=8 9*1=9
//		8*2=16 9*2=18
//		8*3=24 9*3=27
//		*/
//		for(i = 1;i <= 3;i++) {
//			int j;
//			for(j = 8;j < 9;j++) {
//				System.out.print(j + "*" + i + "=" + j*i + "\t");
//			}
//			System.out.println(j + "*" + i + "=" + j*i);
//		}
	}

}

여러가지 방법으로 풀 수 있으니 자신의 방법으로 풀어본다...

Posted by 세상을 살아가는 사람
,

이 문제는 풀이 방법이 다양한 것 같다. 이전에 기술한 것과 다르게 풀이를 해 보았다.

[문제] 구구단의 일부분을 다음과 같이 출력하시오.

[실행결과]

2*1=2 3*1=3 4*1=4

2*2=4 3*2=6 4*2=8

2*3=6 3*3=9 4*3=12

5*1=5 6*1=6 7*1=7

5*2=10 6*2=12 7*2=14

5*3=15 6*3=18 7*3=21

8*1=8 9*1=9

8*2=16 9*2=18

8*3=24 9*3=27

package practice;

public class Exercise4_12 {

	public static void main(String[] args) {
		for(int i = 2;i < 9;i += 3) {  // 크게 3부분으로 나누고
		cont:	for(int j = 1;j < 4;j++) {  // 각 부분을 풀되
				int k = 0;
				for(;k < 2;k++) {  // 탭을 출력하는 부분과
					System.out.print((i+k) + "*" + j + "=" + (i+k)*j);
					if(i+k == 9) {  // 마지막 9단일 경우는 별도로 처리를 해 보았다.
						System.out.println();
						continue cont;
					}
					else {
						System.out.print("\t");
					}
				}
				System.out.println((i+k) + "*" + j + "=" + (i+k)*j);  // \n을 출력하는 부분으로 나누고
			}
			System.out.println();
		}
	}
}

깨끗한 것 같지는 않다...

Posted by 세상을 살아가는 사람
,