[JAVA]プログラマー第一段階:ソウルで金の婿を探す

3000 ワード


https://programmers.co.kr/learn/courses/30/lessons/12919

質問する


String型配列seoulの要素でKimの位置xを見つけ,金婿はxでStringの関数を返し,解を完了する.seoulではKimは一度しか現れず,誤った値は入力されなかった.

せいげんじょうけん

  • seoulは、長さが1より大きく、1000未満の配列です.
  • seoulの要素の長さは1より大きく、20より小さい.
  • KIMはきっとソウルに含まれています

  • に答える

  • ArrayListを使用して、indexof()を使用して対応するインデックス番号を取得します.
  • 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;
    	}
      }
    eclipseではよく実行されましたが、プログラマーでは通過しませんでした.理由は何ですか.

    問題を発見!


    1)文字列間の比較には,equalsメソッドを用いるべきである.
    Pythonやjsとは異なり、==を使用して文字列の比較はできません.したがって、==の場合、アドレス値が比較されます.
    整理する
  • equalsメソッドターゲットコンテンツ自体の比較
  • ==演算子比較対象アドレス値
  • 2)=と+=の違い
    Stringは、上に入力したnull文字列に従って接続されます.
    だから結果は零金相公が1にいた.になりました.
    答えを簡単な「」に変える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;
    	}
    }