명품자바프로그래밍 Chapter6_Lab05
실습2| Circle 클래스 작성
public class Circle {
private int x;
private int y;
private int radius;
Circle(int x, int y, int radius) { // 3개의 인자를 받아 생성자 생성해 필드를 초기화
this.x = x;
this.y = y;
this.radius = radius;
}
@Override
public String toString() { //toString()은 출력 결과에 맞게 재정의한다.
return "Circle (" + x + "," + y + ") 반지름" + radius;
}
//Object 클래스 : 모든 클래스의 수퍼 클래스
public boolean equals(Object o) { //Object 클래스로 업캐스팅된 상태 o는 모든 멤버에 접근 불가능
Circle p = (Circle)o; //circle 클래스로 다운 캐스팅
if (x==p.x && y==p.y) // 해당 원과 매개변수로 받아온 원의 중심이 같으면
return true; //true를 반환
else
return false; //하나라도 다를 경우 false 반환
}
}
실습4| app 패키지에 분리하여 클래스 작성 (Shape, Circle2, GraphicEditor)
package base;
public class Shape {
public void draw() {
System.out.println("Shape");
}
}
package derived;
import base.Shape;
public class Circle2 extends Shape{
public void draw() {
System.out.println("Circle");
}
}
package app;
import base.Shape;
import derived.Circle2;
public class GraphicEditor {
public static void main(String[] args) {
Shape shape = new Circle2();
shape.draw();
}
}
실습8| 문자열 회전 프로그램
import java.util.Scanner;
public class StringRotate {
public static void main(java.lang.String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("문자열을 입력하세요. 빈 칸이나 있어도 되고 영어 한글 모두 됩니다.");
String letter = scanner.nextLine(); // nextLine()메소드 사용해 Enter를 쓰기 전 문자열을 받는다. 공백도 포함
for(int i =0; i<letter.length();i++) { //입력한 문자열만큼 반복해서 rotate
String first = letter.substring(0,1); // letter의 첫번째(0번)문자 1개를 문자열 first에 저장 (0번부터 가져오는데 1개 가져온다.)
String last = letter.substring(1); //letter의 두번째(1번)문자 부터 마지막 문자까리 문자열 last에 저장 (1번부터 가져오는데, 다 가져온다.)
// substring(읽어드릴 문자열의 시작번호, 읽어들일 문자열의 개수) 문자열의 개수는 생략 가능하며, 생략하는 경우 문자열 마지막까지 읽는다는 뜻이다.
letter = last + first; //letter에 각 추출된 문자열이 rotate되도록 last와 first를 붙여준다.
System.out.println(letter);
}
scanner.close();
}
}
실습10 | 갬블링 게임
import java.util.Scanner;
public class GamblingGame {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("1번째 선수 이름>> "); // 첫번째 Person객체 생성
Person user1= new Person(scan.next()); //scan.next()메소드 이용
System.out.print("2번째 선수 이름>> "); // 두번째 Person객체 생성
Person user2= new Person(scan.next()); //scan.next()메소드 이용
while(true)
{
if (user1.Play()) { // if문을 판단하려면 user1.play()를 호출해와서 진행해야한다.
System.out.println (user1.getUser() + "님이 이겼습니다!"); //Person객체의 접근자를 사용해 출력
break;
}
System.out.println("아쉽군요!"); //if user1.Play() 가 false일 경우 출력
if (user2.Play()) { //다음으로 두번째 user의 user2.Play()를 호출해서 진행한다.
System.out.println (user2.getUser() + "님이 이겼습니다!"); //Person객체의 접근자를 사용해 출력
break;
}
System.out.println("아쉽군요!");//if user2.Play() 가 false일 경우 출력
//두개의 if문을 차례로 진행하면서 break가 나오지 않았으므로 while문이 계속 반복된다.
}
scan.close();
}
}
실습12 | 갬블링게임 2
import java.util.Scanner;
public class GamblingGame2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("갬블링 게임에 참여할 선수 숫자>>");
int user_num = scan.nextInt(); //참여할 선수를 정수형으로 받는다.
Person [] p = new Person[user_num]; //참여하는 선수 숫자 만큼 Person객체 배열 생성
for(int i =0 ;i<user_num; i++) { //입력받은 선수 명수 만큼 이름을 입력받는다.
System.out.print((i+1)+"번째 선수 이름>>"); //인덱스는 0부터 시작하지만 사람들이 볼때는 1번째 선수인거처럼 i+1을 해서 출력한다.
p[i] = new Person(scan.next()); //해당 번째 선수의 이름을 각각 해당 인덱스의 user로 생성.
}
int j =0; // 참여하는 선수 가 rotaion이 필요하기 때문에 j 선언
while(true) {
if (p[j].Play()) { //if문 실행을 위해 p[j].Play() 호출해서 실행. 그 값이 true면
System.out.println (p[j].getUser() + "님이 이겼습니다!"); //게임 끝 , Person객체의 접근자를 사용해 출력
break; //While문 탈출
}
else { //호출결과 false면
System.out.println("아쉽군요!"); //게임 계속 진행
j++; //j++를통해 다음번째 선수가 진행되도록 인덱스를 증가 시킨다.
j = j % user_num; //j가 끊임없이 증가하면 roatation이 불가함으로, 번갈아 가면서 게임이 진행되도록 j = j % user_num을 해준다.
}
}
scan.close();
}
}
'Programming > JAVA' 카테고리의 다른 글
입출력 스트림과 파일 입출력 (0) | 2020.10.16 |
---|---|
제너릭과 컬렉션 (0) | 2020.10.16 |
상속 (0) | 2020.10.16 |
클래스와 객체 (0) | 2020.10.16 |
반복문과 배열 그리고 예외 처리 (0) | 2020.09.08 |
댓글