인공지능 4/30

2021. 4. 30. 17:52인공지능 수업(자바)

#인공지능

#자바

#연습

 

ex)

Shape를 추상 클래스로 바꾼 후 나머지 클래스의 오류를 없애 보았다.

ex) 상속

클래스를 통하여 상속을 해보았다.

if문을 통해 size의 크기에 따라 나오는 값이 다르게 설정하였다.

 

영화에 따라 다르게 설정한 후 영화 시작하는 결과창을 뜨게 만들었다.

 

 

 

 

 

게임선수를 표시해줬다.

package com.hb.ch04;

public class GuessGame {
	Player p1;
	Player p2;
	Player p3;

	public void startGame() {
		p1 = new Player();
		p2 = new Player();
		p3 = new Player();
		
		int guessp1 = 0;
		int guessp2 = 0;
		int guessp3 = 0;
		
		boolean p1isRight = false;
		boolean p2isRight = false;
		boolean p3isRight = false;
		
		int targetNumber = (int) (Math.random() * 10);
		System.out.println("I'm thinking of a number between 0 and 9...");
		System.out.println();
		
		while (true) {
			System.out.println("Number to guess is " + targetNumber);

			p1.guess(); //이 부분이 핵심
			p2.guess(); //이 부분이 핵심
			p3.guess(); //이 부분이 핵심

			guessp1 = p1.number;
			System.out.println("Player one guessed " + guessp1);
			
			guessp2 = p2.number;
			System.out.println("Player two guessed " + guessp2);
			
			guessp3 = p3.number;
			System.out.println("Player three guessed " + guessp3);

			if (guessp1 == targetNumber) {
				p1isRight = true;
			}
			
			if (guessp2 == targetNumber) {
				p2isRight = true;
			}
			
			if (guessp3 == targetNumber) {
				p3isRight = true;
			}

			if (p1isRight || p2isRight || p3isRight) {
				System.out.println("We have a winner!");
				System.out.println("Player 1 got it right? " + p1isRight);
				System.out.println("Player 2 got it right? " + p2isRight);
				System.out.println("Player 3 got it right? " + p3isRight);
				System.out.println("Game is over");
				break;
			} else {
				System.out.println("Players will have to try again.");
			}
			
			System.out.println();
		}
	}
	
}

 

게임 실행하는 클래스이다.
게임의 결과 값이다.

 

변수에는 객체 변수라는 것은 없고 reference 변수만 있다.

 

package com.hb.ch04;

class _Dog {
	String name;

	public static void main(String[] args) {
		_Dog dog1 = new _Dog();
		dog1.bark();
		dog1.name = "Bart";

		_Dog[] myDogs = new _Dog[3];
		myDogs[0] = new _Dog();
		myDogs[1] = new _Dog();
		myDogs[2] = dog1;
		myDogs[0].name = "Fred";
		myDogs[1].name = "Marge";

		System.out.println("last dog's name is");
		System.out.println(myDogs[2].name);

		int x = 0;
		while (x < myDogs.length) {
			myDogs[x].bark();
			x = x + 1;

		}

	}

	public void bark() {
		System.out.println(name + " says Ruff!");
	}

	public void eat() {
	}

	public void chaseCat() {
	}

}

위의 코드의 결과값이다.

 

 

메모리 사용영역 (이것이 자바다. p 140)

 

여태까지 설명했던 것은 책(이것이 자바다 11장 p454)을 보면 도움이 되기 때문에 한번 보는 것을 권장한다.

 

 

Get,Set 을 주지 않는 수치스러운 코드이다.

 

Get, Set 을 통해 만들어준 클래스이다.

 

 

Head First java 책에서 아래에 있는 코드는 캡슐화한 코드이다.

위에있는 코드는 수치스러운 코드이며, 우스꽝스럽다고 한다.

 

instance 변수는 private로

getters and setters 변수는 public 으로 해라.

 

 

 

캡슐화 : 관련이 있는 변수와 함수를 하나의 클래스로 묶고 외부에서 쉽게 접근하지 못하도록 은닉하는게 핵심이다.

캡슐화의 가장 큰 장점은 정보은닉(Information Hiding)이다.

접근을 위해 setter와 getter라는 장치를 만들어 내부에서 접근 가능하다.

입력할 때는 set, 가져올 때는 get을 사용하여 작동할 수 있음을 확인한다.

EletricGuitar 클래스 내부에 있는 변수들은 접근제어자가 private으로 선언되어 있기 때문에

EletricGuitar클래스 내부에서만 접근이 가능하다. 

 

 setter : ElectricGuitar클래스내에 있는 변수(brand)에 회원의 아이디값을 저장

	public void setBrand(String brand) {
		this.brand = brand;
	}

public : 어디서든 접근이 가능
void : 리턴값이 없음
setBrand : 메소드이름
String brand : 입력된 매개변수
this.brand : EletricGuitar 클래스 내에 있는 private String brand

setter : 사용하고 싶을 때 void를 사용해야한다. 

 

getter : member클래스내에 있는 변수(brand)에 저장되어 있는 회원의 아이디값을 리턴

public String getBrand() {
return brand;
}

public : 어디서든 접근이 가능
String : 리턴값의 데이터타입
getBrand : 메소드이름
return : 리턴
brand : ElectricGuitar 클래스 내에 있는 private String brand에 저장되어 있는 값

 

 

 

 

Ex)

 

위의 if는 참조 변수를 비교하는 것이고

아래의 if는 안에 있는 변수를 비교하는 것이다.

 

'인공지능 수업(자바)' 카테고리의 다른 글

인공지능 5/5  (0) 2021.05.05
인공지능 5/4  (0) 2021.05.05
인공지능 5/3  (0) 2021.05.03
인공지능 4/29  (0) 2021.04.29
인공지능 4/28  (0) 2021.04.28