프로그래밍 언어/javastudy

명품 Java Essential 5단원 실습문제 #1

fladi 2021. 7. 14. 02:56
728x90

교재: 명품 자바 에센셜

 

 

<1. NamedCircle클래스>

class Circle {
	private int radius;
	public Circle(int radius) {
		this.radius = radius;
	}
	public int getRadius() {
		return radius;
	}
}

public class NamedCircle extends Circle {
	private String name;
	
	public NamedCircle(int radius, String name) {
		super(radius);
		this.name = name;
	}
	
	public void show() {
		System.out.println(name + ", 반지름 = " + getRadius());
	}
	
	public static void main(String[] args) {
		NamedCircle w = new NamedCircle(5, "Waffle");
		w.show();
	}
}

 

 

 

<2. MyAdder클래스>

interface AdderInterface {
	int add(int x, int y);
	int add(int n);
}

class MyAdder implements AdderInterface {
	@Override
	public int add(int x, int y) {
		return x + y;
	}
	@Override 
	public int add(int n) {
		int sum = 0;
		
		for (int i=1; i<=n; i++)
			sum += i;
		
		return sum;
	}	
}

public class Main{
	public static void main(String[] args) {
		MyAdder adder = new MyAdder();
		System.out.println(adder.add(5, 10));
		System.out.println(adder.add(10));
	}
}

 

 

 

<3. Adder Subtracter 클래스>

import java.util.Scanner;

abstract class Calculator {
	protected int a, b;
	abstract protected int calc();
	protected void input() {
		Scanner scanner = new Scanner(System.in);
		System.out.print("정수 2개를 입력하세요 >> ");
		a = scanner.nextInt();
		b = scanner.nextInt();
	}
	public void run() {
		input();
		int res = calc();
		System.out.println("계산된 값은 " + res);
	}
}

class Adder extends Calculator {
	@Override
	public int calc() {
		return a+b;
	}
}

class Subtracter extends Calculator {
	@Override
	public int calc() {
		return a-b;
	}
}

public class App {
	public static void main(String args[]) {
		Adder adder = new Adder();
		Subtracter sub = new Subtracter();
		
		adder.run();
		sub.run();
	}
}

Scanner를 안닫아줘도 실행은 잘 되는데, 그래도 되는지 모르겠네요.

추상클래스 안에서 닫아버리면 다시 호출할 때 오류가 나버리니까..ㅜㅜ

문제 자체는 어렵지 않았습니다!

 

 

 

<4. ColorPoint 클래스>

class Point {
	private int x, y;
	public Point(int x, int y) {
		this.x = x; this.y = y;
	}
	public int getX() { return x; }
	public int getY() { return y; }
	protected void move(int x, int y) {
		this.x = x; this.y = y;
	}
}

public class ColorPoint extends Point {
	private String color;
	public ColorPoint(int x, int y, String color) {
		super(x, y);
		this.color = color;
	}
	public void setPoint(int x, int y) { move(x, y); }
	public void setColor(String color) { this.color = color; }
    
	public void show() {
		System.out.println(color +"색으로 ("+ getX() +", " + getY() + ")");
	}

	public static void main(String[] args) {
		ColorPoint cp = new ColorPoint(5,5,"Yellow");
		cp.setPoint(10, 20);
		cp.setColor("Green");
		cp.show();
	}
}

교수님은 public클래스에 main만 포함하도록 만들고, 다른 건 따로 클래스를 만드는 게 좋다고 하셨습니다.

그런데 이 책의 예제는 항상 main을 포함하는 클래스를 만들도록 되어있네요. 왜 그럴까요?.?

코딩 경험이 많이 없어서 잘 모르겠네요ㅜㅜ

 

 

 

 

<5. StringStack 클래스>

package lulu;

import java.util.Scanner;

interface StackInterface {
	int length();
	String pop();
	boolean push(String ob);
}

class StringStack implements StackInterface {
	String[] stack;
	private int length;
	private int top;
	
	public StringStack() {
		stack = new String[5];
		length = 5;
		top = - 1;
	}
	
	private boolean stackEmpty() {
		if (top == -1)
			return true;
		else
			return false;
	}

	private boolean stackfull() {
		if (top == length - 1)
			return true;
		else
			return false;
	}

	@Override
	public int length() { return length; }

	@Override
	public String pop() {
		if (!stackEmpty()) {
			int temp = top;
			top--;
			return stack[temp];
		}
		else
			return "666@@";
	}

	@Override
	public boolean push(String ob) {
		if (!stackfull()) {
			top++;
			stack[top] = ob;
			return true;
		} 
		else
			return false;
	}
}

public class StackManager {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		StringStack ss = new StringStack();
		
		System.out.print(">>");
		for (int i = 0; i < 5; i++) {
			String s = scanner.next();
			ss.push(s);
		}
		for (int i =0; i<5; i++) {
			System.out.print(ss.pop() + " ");
		}
	}
}

stack자료구조에서 배열을 이용한다면 push pop함수는 항상 empty와 full을 검사해줘야하죠. 

그래서 메소드 2개를 더 추가해줬습니다.

728x90