초보 개발자의 이야기, 릿허브

[명품 JAVA Programming] 6. 모듈과 패키지 개념 실습문제 풀이 본문

코딩테스트/📕 기타(ETC)

[명품 JAVA Programming] 6. 모듈과 패키지 개념 실습문제 풀이

릿99 2022. 11. 15. 20:33
728x90
반응형
명품 JAVA Programming 실습 문제풀이 & 정답

 

 JAVA (IDE : Eclipse) 로 풀이했으며, 모든 문제에 대한 풀이방법을 제공하지 않을 수 있습니다.

각 문제에 대한 풀이방법은 여러가지가 있을 수 있으며, 해당 방법이 최선의 풀이방법이라고는 할 수 없습니다.

문제에 대한 질문, 오류에 대한 지적은 언제나 환영입니다.😊

 

 


1.

다음 main()이 실행되면 아래 예시와 같이 출력되도록 MyPoint 클래스를 작성하라.

 

public static void main(String [] args) {
	MyPoint p = new MyPoint(3, 50);
	MyPoint q = new MyPoint(4, 50);
	System.out.println(p);
	if(p.equals(q)) System.out.println("같은 점");
	else System.out.println("다른 점");
}
Point(3,50)
다른점

 

 

< 정답 >

package example6_1;

class MyPoint {
	int a;
	int b;
	
	// 2개의 인자를 받는 생성자
	public MyPoint(int a, int b) {
		this.a = a;
		this.b = b;
	}
	
	public String toString() {
		return "Point("+a+","+b+")";
	}
	
	public boolean equals(Object obj) {
		MyPoint mp = (MyPoint)obj;
		if(a==mp.a && b==mp.b) {
			return true;
		}
		else 
			return false;
	}
}


public class Point {
	public static void main(String [] args) {
		MyPoint p = new MyPoint(3, 50);
		MyPoint q = new MyPoint(4, 50);
		System.out.println(p);
		if(p.equals(q)) {
			System.out.println("같은 점");
		}
		else {
			System.out.println("다른 점");
		}
	}
}

 


2.

중심을 나타내는 정수 x, y와 반지름 radius 필드를 가지는 Circle 클래스를 작성하고자 한다.

생성자는 3개의 인자(x, y, raidus)를 받아 해당 필드를 초기화하고,

equals() 메소드는 두 개의 Circle 객체의 중심이 같으면 같은 것으로 판별하도록 한다.

 

public static void main(String[] args) {
    Circle a = new Circle(2, 3, 5); // 중심 (2, 3)에 반지름 5인 원
    Circle b = new Circle(2, 3, 30); // 중심 (2, 3)에 반지름 30인 원
    System.out.println("원 a : " + a);
    System.out.println("원 b : " + b);
    if(a.equals(b))
    System.out.println("같은 원");
    else
    System.out.println("서로 다른 원");
}
원 a : Circle(2,3)반지름5
원 b : Circle(2,3)반지름30
같은 원

 

<정답>

package example6_2;

import example6_1.MyPoint;

class Circle {
	int x, y, radius;
	
	public Circle(int x, int y, int radius) {
		this.x = x;
		this.y = y;
		this.radius = radius;
	}
	
	public String toString() {
		return "Circle("+x+","+y+") 반지름" + radius;
	}
	
	public boolean equals(Object obj) {
		Circle c = (Circle)obj;
		// 중심이 같으면 같은 원으로 판별
		if(x==c.x && y==c.y) {
			return true;
		}
		else 
			return false;
	}
	
}

public class CircleEx {
	public static void main(String[] args) {
	    Circle a = new Circle(2, 3, 5); // 중심 (2, 3)에 반지름 5인 원
	    Circle b = new Circle(2, 3, 30); // 중심 (2, 3)에 반지름 30인 원
	    System.out.println("원 a : " + a);
	    System.out.println("원 b : " + b);
	    if(a.equals(b))
	    System.out.println("같은 원");
	    else
	    System.out.println("서로 다른 원");
	}
}

 


7.

Scanner를 이용하여 한 라인을 읽고, 공백으로 분리된 어절이 몇 개 들어 있는지 "그만"을 입력할 때까지 반복하는 프로그램을 작성하라.

[Hint] Scanner.nextLine()을 이용하면 빈칸을 포함하여 한 번에 한 줄을 읽을 수 있다.

>>I love Java.
어절 개수는 3
>>자바는 객체 지향 언어로서 매우 좋은 언어이다.
어절 개수는 7
>>그만
종료합니다...

 

 

(1) StringTokenizer 클래스를 이용하여 작성하라.

 

<정답>

package example6_7;
import java.util.*;

public class FindToken {
	public static void main(String [] args) {
		Scanner sc = new Scanner(System.in);
		
		while (true) {
			System.out.print(">> ");
			String s = sc.nextLine();
			if (s.equals("그만")) {
				System.out.println("종료합니다...");
				return;
			}
			StringTokenizer st = new StringTokenizer(s," ");
			int token = st.countTokens();
			System.out.println("어절 개수는 "+ token);
		}
	}
}
 
 

(2) String 클래스의 split() 메소드를 이용하여 작성하라.

 

<정답>

package example6_7;
import java.util.*;

public class FindToken {
	public static void main(String [] args) {
		Scanner sc = new Scanner(System.in);
		
		while (true) {
			System.out.print(">> ");
			String s = sc.nextLine();
			if (s.equals("그만")) {
				System.out.println("종료합니다...");
				return;
			}
			
			String str[] = s.split(" ");
			System.out.println("어절 개수는 "+ str.length);
		}
	}
}

 


10.

갬블링 게임을 만들어보자. 두 사람이 게임을 진행한다.
이들의 이름을 키보드로 입력 받으며 각 사람은 Person 클래스로 작성하라.
그러므로 프로그램에는 2개의 Person 객체가 생성되어야 한다.
두 사람은 번갈아 가면서 게임을 진행하는데 각 사람이 자기 차례에서 <Enter> 키를 입력하면,
3개의 난수가 발생되고 이 숫자가 모두 같으면 승자가 되고 게임이 끝난다.
난수의 범위를 너무 크게 잡으면 3개의 숫자가 일치하게 나올 가능성이 적기 때문에 숫자의 범위는 1~3까지로 한다.

1번째 선수 이름>>수희
2번째 선수 이름>>연수
[수희]:
	3  1  1  아쉽군요!
[연수]:
	3  1  3  아쉽군요!
[수희]:
	2  2  1  아쉽군요!
[연수]:
	1  1  2  아쉽군요!
[수희]:
	3  3  3  수희님이 이겼습니다!


<정답>

package example6_10;
import java.util.*;

class Person {
	String name;
	int num1, num2, num3;
	
	// 생성자
	public Person(String name) {
		this.name = name;
	}
	
	// 게임 실행. 난수를 발생시키고, 해당 난수들이 모두 같으면 이김(true) 아니면 (false) 반환
	public boolean game() {
		num1 = (int)((Math.random()*3)+ 1);
		num2 = (int)((Math.random()*3)+ 1);
		num3 = (int)((Math.random()*3)+ 1);	
		
		if ((num1==num2) && (num2== num3)) {
			return true;
		}
		else {
			return false;
		}
	}
	
}

public class GamblingGame {
	public static void main(String [] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("1번째 선수 이름 >> ");
		String name1 = sc.nextLine();
		System.out.print("2번째 선수 이름 >> ");
		String name2 = sc.nextLine();
		
		// 2개의 Person 객체 생성
		Person p1 = new Person(name1);
		Person p2 = new Person(name2);
		
		while(true) {
			// person1
			System.out.print("["+p1.name+"]: ");
			String buffer = sc.nextLine();
			
			if(p1.game()== true) {
				System.out.print(p1.num1 + " " +  p1.num2 + " " +p1.num3);
				System.out.println(p1.name + "님이 이겼습니다!");
				break;
			}
			else {
				System.out.print(p1.num1 + " " +  p1.num2 + " " +p1.num3);
				System.out.println("아쉽군요!");
			}
			
			// person2
			System.out.print("["+p2.name+"]: ");
			buffer = sc.nextLine();
			
			if(p2.game()== true) {
				System.out.print(p2.num1 + " " +  p2.num2 + " " +p2.num3);
				System.out.println(p2.name + "님이 이겼습니다!");
				break;
			}
			else {
				System.out.print(p2.num1 + " " +  p2.num2 + " " +p2.num3);
				System.out.println("아쉽군요!");
			}
		}
	}
}

 

728x90
반응형