0

このメソッドは、ターゲットで始まる最初の文字列のインデックスを返す必要があります。

ターゲットで始まる文字列がない場合は -1 を返します。

私の実装は機能しますが、すべてのバリエーションをカバーしているわけではありません。

コード:

public int getIndex(ArrayList<String> text, String target)
    {
        int i = 0;
        int index = -1;
        boolean found = false;

        while (!found && i < text.size()) //supply condition
        {           
            for (String s : text) {
                if (s.contains(target)) {                    
                    found = true;
                } else {
                    i++;
                }

                if (found) index = i;
            }  
        }

        return index;
    }

テスト部分:

public static void main(String[] args)
   {
       ArrayList<String> cities = new ArrayList<String>();
       cities.add("Chicago");
       cities.add("Houston");
       cities.add("San Jose");
       cities.add("Seattle");  
       cities.add("Denver");     

       Finder finder = new Finder();

       System.out.println(finder.getIndex(cities, "C"));
       System.out.println("Expected: 0");

       System.out.println(finder.getIndex(cities, "S"));
       System.out.println("Expected: 2");

       System.out.println(finder.getIndex(cities, "D"));
       System.out.println("Expected: 4");

       System.out.println(finder.getIndex(cities, "X"));
       System.out.println("Expected: -1");
   }

このコードにはカバレッジ50/50 入力があります。

  4
- Expected: 0
  3
- Expected: 2
  4
+ Expected: 4
  -1
+ Expected: -1

この問題を解決するには?

4

4 に答える 4

1
public int getIndex(ArrayList<String> text, String target)
    {

        for(int i=0;i < text.size();i++) 
        {           
           if(text.get(i).indexOf(target) == 0)
                return i;
        }

        return -1;
    }
于 2013-07-05T15:17:06.033 に答える
1

次の変更を行います。

  • 不要なfound変数を取り除く
  • containsと置き換えますstartsWith
  • - ループを削除します。削除しforないと、データを数回通過します
  • while-loop を -loop にfor変更する

私はこれに行き着き、うまくいくようです:

public int getIndex(ArrayList<String> text, String target)
{
    int index = -1;

    for (int i = 0; index == -1 && i < text.size(); i++)
    {
       if (text.get(i).startsWith(target))
       {
           index = i;
       }
    }

    return index;
}

もちろん、さらに改善することもできます。

于 2013-07-05T15:28:17.277 に答える
0

getIndex メソッドを次のように変更します。

public int getIndex(ArrayList<String> text, String target)
{
    int i = 0;         

    for (String s : text) {
        // Use startsWith if you want to check if the string starts with target...
        // Use contains if you want to check if contains target... 
        if (s.startsWith(target)) {
            return i;
         }

        i++;
    }  

    return -1;
}
于 2013-07-05T15:27:13.027 に答える