-1

ユーザー名データベースの文字列一致アルゴリズムを実装しています。私の方法は、既存のユーザー名データベースと、その人が望む新しいユーザー名を取得し、ユーザー名が使用されているかどうかを確認します。それが取得された場合、メソッドはデータベースで取得されていない番号でユーザー名を返すことになっています。

例:

「ジャスティン」、「ジャスティン1」、「ジャスティン2」、「ジャスティン3」

「ジャスティン」と入力

return: "Justin4" は、1 から 3 までの数字を持つ Justin と Justin が既に使用されているためです。

以下のコード サンプルでは、newMember​​Justin1 が既に存在するにもかかわらず返されます。どこが間違っているのでしょうか。

public class UserName {

    static int j = 0;

    static String newMember(String[] existingNames, String newName){
        boolean match = false;

        for(int i = 0; i < existingNames.length; i++){
            if(existingNames[i] == (newName)){
                match = true;
            }

        }
        if(match){
            j++;
            return newMember(existingNames, newName + j);
        }
        else{
            return newName; 
        }
    }

    public static void main(String[] args){

        String[] userNames = new String[9];
        userNames[0] = "Justin1";
        userNames[1] = "Justin2";
        userNames[2] = "Justin3";
        userNames[3] = "Justin";

        System.out.println(newMember(userNames, "Justin"));

        // I don't understand why it returns Justin1 when the name is already taken 
        // in the array.
    }
}
4

9 に答える 9

0

アプリケーションのどこかに、ユーザー名が既に存在する場合に応答する関数があると思います。これをusernameExists(String username)返すtrueまたはfalse.

String getOkUsername (String wantedUsername) {
  //if it's free, return it!
  if(!usernameExists(wantedUsername)) {
      return wantedUsername;
  };

  //OK, already taken, check for next available username 
  int i=1;
  while(usernameExists(wantedUsername+Integer.toString(i))) {
      i++;}
  return wantedUsername + Integer.toString(i);
}
于 2013-08-15T19:31:38.737 に答える
0

文字列で使用==すると、基になるオブジェクトではなく、参照が比較されます。を使用しstr.equals()ます。

于 2013-08-15T19:26:04.137 に答える