1

配列内の文字列を検索し、その文字列をインデックスと共に出力するメソッドを作成する方法を見つけようとしています。メソッドのシグネチャは正しいと思いますが、メソッドで文字列値を返す方法がわかりません。

String name = search(array,"Dog"); //the method implementation in main
System.out.println(name);

.

public static int search(String[] array, String key)
{
    for (int i= 0; i< array.length; i++)
        {
         if ( array[i] == key ) 
         return i;  
        }
     return ("Name cannot be found in array);
}
4

7 に答える 7

5

Stringreturnと宣言されているメソッドから a を返すことはできませんint。失敗を示す最も一般的な方法は、範囲外の値を返すことです。

return -1;

または例外をスローするには:

throw new NameNotFoundException("Name cannot be found in array");

また、次の行は機能しません。

if ( array[i] == key ) 

文字列はではなくと比較equals()==する必要があります。==演算子は、文字列が同じオブジェクトであることを確認しますが、内容が同一であることは確認しません。

if (key == null && array[i] == null ||
    key != null && key.equals(array[i]))

.equals()また、null 参照を呼び出さないようにしてください。上記のコードは、この可能性をチェックします。

于 2012-12-07T21:02:34.653 に答える
4

なぜ文字列を返したいのですか?このメソッドを呼び出す人は誰でも、そもそも文字列を提供する必要があったため、文字列が何であるかを既に知っています。(そうでなければ、あなたが探していたものをどのように知ることができますか:P)

あなたもやっているはずですarray[i].equals(key)

==オブジェクトの等価性のためです。 .equals()価値の平等のためです。

于 2012-12-07T21:02:25.453 に答える
1

を返したい場合はString、...戻り値の型はStringではなく にする必要がありintます。

また、s またはほとんどのオブジェクトで使用==しないでください。代わりに使用してください。Stringarray[i].equals(key)

于 2012-12-07T21:02:23.240 に答える
1

最大の問題は、Java がすでに実装しているのに、なぜ検索を実装するのかということです。

 String[] array;
 String val = "Dog";

 if( Arrays.asList(array).contains(val) ){
      System.out.println("your string is found");
 } else {
      System.out.println("your string is found");
 }

または、さらに良いことに、実装に忠実です

 String[] array;
 String val = "Dog";
 String name = ( Arrays.asList(array).contains(val) ) ? val : "Name cannot be found in array";

Arrays.asList はコピーしないことに注意してください。配列は列挙可能として扱うことができるように単に List 構造にラップするだけです。このメソッドのパフォーマンスは、提供されたものとほぼ同じです。

于 2012-12-07T21:08:16.887 に答える
0

最初に比較を修正して、equalsメソッドを次のように使用します。

  if (array[i].equals(key)) 

また、最後の return ステートメントを次のように変更します。

  return -1; //string not found

次に、次のようにします (文字列を取得するには、array[searchIndex] を使用します)。

int searchIndex = search(array,"Dog");
if(i >= 0){
  System.out.println("String="+array[searchIndex] + ", Array Index="+searchIndex);
 }else{
   System.out.println("String not found");
 }
于 2012-12-07T21:02:48.967 に答える
0

あなたはこれを試すことができます........

import java.util.*;  
public class xyz {  
 public static void main(String [] args){  
    String [] sa = {"abc","def","ghi"};  
    Arrays.asList(sa);  
    Arrays.sort(sa);  
    for(String s : sa){  
        System.out.println(s);  
    }  
}  

}

于 2012-12-07T21:12:27.510 に答える
0

検索している文字列値はすでにあります。なぜあなたはそれを返す必要があるのですか?インデックスを返すだけ

int index = search(array,"Dog");
于 2012-12-07T21:03:02.627 に答える