문제
아래의 2개 클래스와 1개의 인터페이스를 작성하고, 실행결과를 출력하시오!
Stack (인터페이스)
StringStack, StringStackExample
Stack(인터페이스)
멤버함수
int length(void) *추상메서드
Object pop(void) *추상메서드
void push(Object s) *추상메서드
StringStack Class(조상클래스)
멤버변수
private String[] s
private int n
멤버함수
public int length(void) *알아서 구현
public Object pop(void) *알아서 구현
public void push(Object s) *알아서 구현
StringStackExample(실행클래스)
결과
스택크기 입력: 5
5개의 스택영역이 생성되었습니다.
1. push 2.pop 3.종료 : 1
저장하고 싶은 문장을 입력하세요: 김용범
김용범이(가) 스택에 저장되었습니다.
김용범문장이 1번째 스택에 저장되었습니다.
1. push 2.pop 3.종료 : 1
저장하고 싶은 문장을 입력하세요: 의 영어이름은
의 영어이름은이(가) 스택에 저장되었습니다.
의 영어이름은문장이 2번째 스택에 저장되었습니다.
1. push 2.pop 3.종료 : 1
저장하고 싶은 문장을 입력하세요: Kim
Kim이(가) 스택에 저장되었습니다.
Kim문장이 3번째 스택에 저장되었습니다.
1. push 2.pop 3.종료 : 1
저장하고 싶은 문장을 입력하세요: Yong
Yong이(가) 스택에 저장되었습니다.
Yong문장이 4번째 스택에 저장되었습니다.
1. push 2.pop 3.종료 : 1
저장하고 싶은 문장을 입력하세요: Bum
Bum이(가) 스택에 저장되었습니다.
Bum문장이 5번째 스택에 저장되었습니다.
1. push 2.pop 3.종료 : 2
5번째 스택에 저장된 문장을 출력합니다.
Bum
1. push 2.pop 3.종료 : 2
4번째 스택에 저장된 문장을 출력합니다.
Yong
1. push 2.pop 3.종료 : 2
3번째 스택에 저장된 문장을 출력합니다.
Kim
1. push 2.pop 3.종료 : 2
2번째 스택에 저장된 문장을 출력합니다.
의 영어이름은
1. push 2.pop 3.종료 : 2
1번째 스택에 저장된 문장을 출력합니다.
김용범
1. push 2.pop 3.종료 : 2
스택이 비었습니다.
1. push 2.pop 3.종료 : 3
종료합니다.
top(n) == -1 인 코드
interface Stack {
int length();
Object pop();
void push(Object s);
}
class StringStack {
private String[] s;
private int n; // top
public StringStack(int size) {
s = new String[size];
n = -1;// this.으로 해도 상관은 없을듯 둘다. 원래 구분해주려고 하는 건데
System.out.println(size + "개의 스택영역이 생성되었습니다.");
}
public int length() {
return n + 1;
}
public Object pop() {
if (n == -1) {
String s = "스택이 비었습니다.";
return s;
}
System.out.println(length() + "번째 스택에 저장된 문장을 출력합니다."); // 클래스 내의 함수는 바로 메소드 명으로 접근
String s = this.s[n]; // **1 꺼내올 때는 받는 쪽에서 캐스팅
n--;
return s;
}
public void push(Object s) {
if (n == this.s.length - 1) { //this.s.length에서 현재 String [size] 기억. 전체 size가 10 이라 할때 0~9중 9==top(n)이면 꽉 참
System.out.println("스택이 꽉 찼습니다.");
System.out.println();
return; // return하면 이 메소드만 끝내고 다시 메인 문의 while(true)로.
}
n++;
this.s[n] = (String) s; // **2 string배열에 넣어야하니까 (String) 타입 캐스팅 ->이런 건 자동으로 안됨. 매개변수 타입을 String으로 바꾸는 방법도 있을듯
System.out.println(s + "이(가) 스택에 저장되었습니다.");
System.out.println(s + " 문장이 " + length() + "번째 " + "스택에 저장되었습니다.");
System.out.println();
}
}
class StringStackExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("스택 크기 입력 : ");
int size = sc.nextInt();
StringStack sstack = new StringStack(size);
while (true) {
System.out.print("1. push 2. pop 3. 종료 : ");
int select = sc.nextInt();
sc.nextLine();
if (select == 1) {
System.out.print("저장하고 싶은 문장을 입력하세요 : ");
String sentence = sc.nextLine();
sstack.push(sentence);
}
else if (select == 2) {
System.out.println(sstack.pop());
System.out.println();
}
else if (select == 3) {
System.out.println("종료합니다");
break;
}
}
}
}
top(n) == 0 인 코드
interface Stack {
int length();
Object pop();
void push(Object s);
}
class StringStack {
private String[] s;
private int n; // top
public StringStack(int size) {
s = new String[size];
n = 0; //this.으로 해도 상관은 없을듯 둘다. 원래 구분해주려고 하는 건데
System.out.println(size + "개의 스택영역이 생성되었습니다.");
}
public int length() {
return n;
}
public Object pop() {
if (n == 0) {
String s = "스택이 비었습니다.";
return s;
}
System.out.println(length() + "번째 스택에 저장된 문장을 출력합니다."); // 클래스 내의 함수는 바로 메소드 명으로 접근
n--;
String s = this.s[n]; // **1 꺼내올 때는 받는 쪽에서 캐스팅
return s;
}
public void push(Object s) {
if (n == this.s.length) { //this.s.length에서 현재 String [size] 기억. 전체 size가 10 이라 할때 10==top(n)이면 꽉 참 (먼저 넣고 ++ 해줘서)
System.out.println("스택이 꽉 찼습니다.");
System.out.println();
return; // return하면 이 메소드만 끝내고 다시 메인 문의 while(true)로.
}
this.s[n] = (String) s; // **2 string배열에 넣어야하니까 (String) 타입 캐스팅 ->이런 건 자동으로 안됨. 매개변수 타입을 String으로 바꾸는 방법도 있을듯
n++;
System.out.println(s + "이(가) 스택에 저장되었습니다.");
System.out.println(s + " 문장이 " + length() + "번째 " + "스택에 저장되었습니다.");
System.out.println();
}
}
class StringStackExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("스택 크기 입력 : ");
int size = sc.nextInt();
StringStack sstack = new StringStack(size);
while (true) {
System.out.print("1. push 2. pop 3. 종료 : ");
int select = sc.nextInt();
sc.nextLine();
if (select == 1) {
System.out.print("저장하고 싶은 문장을 입력하세요 : ");
String sentence = sc.nextLine();
sstack.push(sentence);
}
else if (select == 2) {
System.out.println(sstack.pop());
System.out.println();
}
else if (select == 3) {
System.out.println("종료합니다");
break;
}
}
}
}
'Java' 카테고리의 다른 글
| [Java] (interface 익명 구현 객체) (19-1) (0) | 2023.08.31 |
|---|---|
| [Java] (interface 익명 구현 객체) (0) | 2023.08.31 |
| [Java] (interface) (18-1) (0) | 2023.08.30 |
| [Java] (interface) (17-2) (0) | 2023.08.30 |
| [Java] interface (17-1) (0) | 2023.08.30 |