https://programmers.co.kr/learn/courses/30/lessons/12919
String형 배열 seoul의 element중 Kim의 위치 x를 찾아, 김서방은 x에 있다는 String을 반환하는 함수, solution을 완성하세요. seoul에 Kim은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
import java.util.ArrayList;
public class Soultion1 {
public String solution(String[] seoul) {
String answer = null;
String lname = "Kim";
ArrayList<String> list = new ArrayList<String>();
for(String s : seoul) {
list.add(s);
}
for(int i=0; i<seoul.length; i++) {
if(lname == list.get(i).toString()) {
answer += "김서방은 "+i+"에 있다";
}
}
return answer;
}
}
이클립스에서는 실행결과가 잘나오는데, 프로그래머스에서는 다음과 같이 통과되지 못했다.이유가 뭘까?
1) 문자열끼리 비교할 땐 equals 메소드를 활용해야 한다
파이썬이나 js와 다르게 ==을 이용한 문자열 비교가 불가능하다. 그래서 ==을 할 경우 주소값을 비교하게 된다.
정리
- equals 메소드는 비교하고자 하는 대상의 내용 자체를 비교
- == 연산자는 비교하고자 하는 대상의 주소값을 비교
2) =과 +=의 차이
String은 위에서 넣어준 null 문자열을 보고 이어붙이기를 한다.
그래서 결과가 null김서방은 1에 있다. 가 되어버린다.
answer를 초기화 할 떼 단순 " "로 바꿔
answer += "김서방은 "+i+"에 있다."
(x)
answer = "김서방은 "+i+"에 있다."
(o)
로 해서 넣어주면 될 것 같다.
import java.util.ArrayList;
class Solution {
public String solution(String[] seoul) {
String answer = "";
String lname = "Kim";
ArrayList<String> list = new ArrayList<String>();
for(String s : seoul) {
list.add(s);
}
for(int i=0; i<seoul.length; i++) {
if(lname.equals(list.get(i).toString())) {
answer = "김서방은 "+i+"에 있다";
}
}
return answer;
}
}