2016-11-23 17 views
-3

メソッドを書きましたが、メソッドがiの値を返すことができません。私に何ができる ?私のメソッドは値を返すことができません?

public static int contain(String s1,String s2){ //I want wrote a method similar contain 

    if(s1.length() == s2.length() || s1.length() > s2.length()){ 

     for(int i = 0; i < s1.length(); i++){ 
      char s = s1.charAt(i); 
      String s3 = "s3+s"; 
      if(s3.equals(s2)){ 

      } 

     } 

    } 
    if(s2.length() > s1.length()){ 
     System.out.println("-1"); 

    } 
    return i; 
} 

int contains(String s1, String s2) 2つの文字列、およびs2は敏感s1場合であるか否か チェックを受けます。 s2s1にある場合、の最後の出現のインデックス を返します。それ以外の場合は-1を返します。

+7

'i'は' return'なステートメントの範囲ではありません。 –

+2

変数 'i'はforループのスコープ内にのみ存在します。 –

+1

@AndyTurner良いキャッチ。 – Maroun

答えて

1

なぜ機能しないのですか?


あなたは(それがスコープ外の)を外部からアクセスすることはできませんので、あなただけの内側のforループvariable iの生活を見ることができるように。

ループの内部で作成された変数はすべてループのローカルです。つまり、ループを終了すると、変数にアクセスできなくなります。これには、ループ署名で作成されたすべての変数が含まれます。

続きを読む:多くの可能な解決策のhttp://www.java-made-easy.com/variable-scope.html#ixzz4QqXWdYAa

ワン:


public static int contain(String s1, String s2){ 

    //local variable 
    int variable = 0; 

    if(s1.length() >= s2.length()){ 

     for(int i = 0; i < s1.length(); i++){ 
      variable = i; 
      char s = s1.charAt(i); 
      String s3 = "s3+s"; 
      if(s3.equals(s2)){ 
       //some code here 
      } 
     }  
    }else 
     System.out.println("-1"); 


    //Return the local variable 
    return variable; 
} 
+0

これは 'variable'が値で初期化されない限りコンパイルされません。 – David

+0

@David Ops編集中、ここにコードを直接書きました... – GOXR3PLUS

+0

ローカル変数の変数が初期化されていない可能性がありますか? –

関連する問題