tostring(), equals(), substring() append(), setCharAt() 등의 메소드들에 대한 기능을 설명하기 위한 소스인듯 하다.
질문)
class Test2 {
static class StrangeStringBuffer
{
StringBuffer sb;
StrangeStringBuffer(String s) {
sb = new StringBuffer(s);
}
void setCharAt(int n,char x) {
sb.setCharAt(n,(char)(x+1));
}
void append(char c) {
sb.append("X");
}
void substring() {
String s = sb.substring(sb.length()-3);
sb = new StringBuffer(s);
}
public boolean equals(Object o) {
return true;
}
public String toString() {
return "Strange" + sb.toString();
}
}
public static void main(String args[])
{
int data[] = { 2, 1, 4, 3, 5 };
String x = "";
String y = "";
for(int i = 0; i < 5; i++) {
x = x + " " + data[i];
y = y + " " + data[4-i];
}
StrangeStringBuffer s1 = new StrangeStringBuffer(x);
StrangeStringBuffer s2 = new StrangeStringBuffer(y);
s1.setCharAt(x.length()-2,'X'); s2.setCharAt(x.length()-2,'X');
s1.append('A'); s2.append('A');
s1.substring(); s2.substring();
if (s1.equals(s2) == true) {
System.out.println("A"+s2);
} else {
System.out.println("B"+s1);
}
}
}
이거결과랑 이유좀 자세히 제발 상세히 적어주세요 부탁드립니다.
답변)
s1과 s2를 주석부분을 확인하기 좋게 구별해서 뒀습니다.
각각의 메소드의 기능을 출력문을 통해 볼수 있게 만들었습니다.
실행결과와 주석은 2. RUN 을 참고하세요.
1. CLASS
public class Test2 {
static class StrangeStringBuffer {
StringBuffer sb;
StrangeStringBuffer(String s) {
sb = new StringBuffer(s);
}
void setCharAt(int n, char x) {
System.out.print("과 두번째 값 " + x);
sb.setCharAt(n, (char)(x+1));
System.out.println("에 'x+1' 을 하면 '" + (char)(x+1) + "'가 된다.");
System.out.print("해당메소드(setCharAt)은 첫번째값 문자열의 '" + n + "'번째 자릿수에 '" + (char)(x+1) + "' 를 대입해서 '");
System.out.print(sb + "' 를 만들어 준다.");
}
void append(char c) {
System.out.print("가 되고 append 메소드에서 넘겨준 인자 '" + c + "' 는 \n별다른 기능을 하지않고, '" + sb + "' 에 X 만 붙여서 '");
sb.append("X");
System.out.println(sb + "' 가 된다.");
}
void substring() {
System.out.println("그리고 마지막으로 " + sb + " 문자열에 앞의 " + (sb.length()-3) + " 자리를 뺀 값을 버퍼에 담는다.");
String s = sb.substring(sb.length()-3);
sb = new StringBuffer(s);
}
public boolean equals(Object o) {
return true;
}
public String toString() {
System.out.println("toString() 메소드에서 'Strange'에 sb값 '" + sb.toString() + "' 가 합쳐진 값이 들어있다.");
return "Strange" + sb.toString();
}
}
public static void main(String[] args){
int data[] = { 2, 1, 4, 3, 5 };
String x = "";
String y = "";
System.out.println("0. x 와 y 의 값을 누적한다.");
for(int i = 0; i < 5; i++) {
x = x + " " + data[i];
y = y + " " + data[4-i];
if(i < 2){
System.out.println("0-" + i + ". 번째 각각 --> x : " + x + "\t\t y : " + y + "");
}else{
System.out.println("0-" + i + ". 번째 각각 --> x : " + x + "\t y : " + y + "");
}
}
System.out.println("0-5. x 문자열의 길이 : " + x.length() + " / y 문자열의 길이 : " + y.length());
System.out.println();
System.out.println();
System.out.print("1. 버퍼에 들어간 s1의 값 : ");
StrangeStringBuffer s1 = new StrangeStringBuffer(x);
System.out.println("--> " + s1);
System.out.println();
System.out.print("1-1. setCharAt 에 들어갈 첫번째 값 : " + (x.length()-2));
s1.setCharAt(x.length()-2,'X');
System.out.println();
System.out.print("\n1-2. 결론은 's1' 은 " + s1);
s1.append('A');
s1.substring();
System.out.println();
System.out.println();
System.out.print("2. 버퍼에 들어간 s2의 값 : ");
StrangeStringBuffer s2 = new StrangeStringBuffer(y);
System.out.println("--> " + s2);
System.out.println();
System.out.print("2-1. setCharAt 에 들어갈 첫번째 값 : " + (x.length()-2));
s2.setCharAt(x.length()-2,'X');
System.out.println();
System.out.print("\n2-2. 결론은 's2' 는 " + s2);
s2.append('A');
s2.substring();
System.out.println();
System.out.println();
System.out.println("s1 과 s2를 비교한다.");
if (s1.equals(s2) == true) {
System.out.println("\ns1과 s2가 같으면 A : "+s2);
} else {
System.out.println("\ns1과 s2가 다르면 B : "+s1);
}
}
}
2. RUN
0. x 와 y 의 값을 누적한다.
0-0. 번째 각각 --> x : 2 y : 5
0-1. 번째 각각 --> x : 2 1 y : 5 3
0-2. 번째 각각 --> x : 2 1 4 y : 5 3 4
0-3. 번째 각각 --> x : 2 1 4 3 y : 5 3 4 1
0-4. 번째 각각 --> x : 2 1 4 3 5 y : 5 3 4 1 2
0-5. x 문자열의 길이 : 10 / y 문자열의 길이 : 10
1. 버퍼에 들어간 s1의 값 : toString() 메소드에서 'Strange'에 sb값 ' 2 1 4 3 5' 가 합쳐진 값이 들어있다.
--> Strange 2 1 4 3 5
1-1. setCharAt 에 들어갈 첫번째 값 : 8과 두번째 값 X에 'x+1' 을 하면 'Y'가 된다.
해당메소드(setCharAt)은 첫번째값 문자열의 '8'번째 자릿수에 'Y' 를 대입해서 ' 2 1 4 3Y5' 를 만들어 준다.
toString() 메소드에서 'Strange'에 sb값 ' 2 1 4 3Y5' 가 합쳐진 값이 들어있다.
1-2. 결론은 's1' 은 Strange 2 1 4 3Y5가 되고 append 메소드에서 넘겨준 인자 'A' 는
별다른 기능을 하지않고, ' 2 1 4 3Y5' 에 X 만 붙여서 ' 2 1 4 3Y5X' 가 된다.
그리고 마지막으로 2 1 4 3Y5X 문자열에 앞의 8 자리를 뺀 값을 버퍼에 담는다.
2. 버퍼에 들어간 s2의 값 : toString() 메소드에서 'Strange'에 sb값 ' 5 3 4 1 2' 가 합쳐진 값이 들어있다.
--> Strange 5 3 4 1 2
2-1. setCharAt 에 들어갈 첫번째 값 : 8과 두번째 값 X에 'x+1' 을 하면 'Y'가 된다.
해당메소드(setCharAt)은 첫번째값 문자열의 '8'번째 자릿수에 'Y' 를 대입해서 ' 5 3 4 1Y2' 를 만들어 준다.
toString() 메소드에서 'Strange'에 sb값 ' 5 3 4 1Y2' 가 합쳐진 값이 들어있다.
2-2. 결론은 's2' 는 Strange 5 3 4 1Y2가 되고 append 메소드에서 넘겨준 인자 'A' 는
별다른 기능을 하지않고, ' 5 3 4 1Y2' 에 X 만 붙여서 ' 5 3 4 1Y2X' 가 된다.
그리고 마지막으로 5 3 4 1Y2X 문자열에 앞의 8 자리를 뺀 값을 버퍼에 담는다.
s1 과 s2 를 비교한다.
toString() 메소드에서 'Strange'에 sb값 'Y2X' 가 합쳐진 값이 들어있다.
s1과 s2가 같으면 A : StrangeY2X
도움이 되셨기를~
'course > 지식인' 카테고리의 다른 글
[자바] try에서 finally 와 exception의 관계. (0) | 2016.05.13 |
---|---|
[자바스크립트] 여러가지 방법으로 숫자를 해당 영문자에 대입. (0) | 2016.04.12 |
[자바] 양손으로 가위,바위,보 를 낸 뒤 하나 빼기. (0) | 2016.04.06 |