2016-11-27 19 views
0

にCシャープコードを変換しようとは配列に最も類似した文字列を検索してみてください、と私は、この1問題私はjavaの

public static int LevenshteinDistance(string s, string t) 
    { 
     int n = s.Length; 
     int m = t.Length; 
     int[,] d = new int[n + 1, m + 1]; 
     if (n == 0) 
     { 
      return m; 
     } 
     if (m == 0) 
     { 
      return n; 
     } 

     for (int i = 1; i <= n; i++) 
     { 
      for (int j = 1; j <= m; j++) 
      { 
       int cost = (t[j - 1] == s[i - 1]) ? 0 : 1; 
       Console.WriteLine(cost); 
       d[i, j] = Math.Min(
        Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1), 
        d[i - 1, j - 1] + cost); 


      } 
     } 
     return d[n, m]; 
    } 

であると私は変換しようとしているシャープなCのコードを見つけましたジャワにそれますが、私は、コード int型のコスト=(T [J - 1] == S [I - 1])のこの行でエラーが出るこれはjavaの

public static int LevenshteinDistance(String s, String t) 
     { 
     int n = s.length(); 
     int m = t.length(); 
     int[][] d = new int[n + 1][ m + 1]; 
     if (n == 0) 
     { 
      return m; 
     } 
     if (m == 0) 
     { 
      return n; 
     } 



     for (int i = 1; i <= n; i++) 
     { 
      for (int j = 1; j <= m; j++) 
      { 


      int cost = (t[j - 1] == s[i - 1])? 0 : 1; 

       d[i][ j] = Math.min(
        Math.min(d[i - 1][ j] + 1, d[i][ j - 1] + 1), 
        d[i - 1][ j - 1]+cost); 
      } 
     } 
     return d[n] [m]; 
    } 

で私のコードである1つのエラーが発生します? 0:1;私が持っている エラーは、「アレイが必要ですが、文字列が見つかっ」で、これは私は持っているものである私のメインの私は任意の助けをいただければ幸いです

  String []ray ={"food","drinks","stuffs"}; 
     String fa="drink"; 
     for (int i = 0; i < ray.length; i++) 
     { 

     System.out.print(LevenshteinDistance(fa, ray[i])); 
     } 

+2

文字列内の文字(文字)にアクセスするにはt.charAt(j-1)== s.charAt(i-1)を使用する必要があります。インデックス(角括弧[])で直接アクセスすることはできません。 – Tatranskymedved

+0

ありがとう、それは動作する<3私は別の質問が何を意味するのですか? 0:1; – RonaldB

+0

3次演算子(3値= 3) - [Wikipedia](https://en.wikipedia.org/wiki/%3F:#Java)をチェックしてください。それは次のことを意味します:(条件)?(DoIfTrue):(DoIfFalse); – Tatranskymedved

答えて

0

使用t.charAt(J-1)= = s.charAt(i-1)文字列中の文字(文字)にアクセスする場合index(括弧[])で直接アクセスすることはできません。

int cost = (t.charAt(j - 1) == s.charAt(i - 1))? 0 : 1; 
+0

ありがとう、それは私は別の質問が何を意味するのですか? 0:1; – RonaldB

+0

三項演算子(三項=三) - [Wikipedia](https://en.wikipedia.org/wiki/%3F:#Java)をチェックする。それは次のことを意味します:(条件)?(DoIfTrue):(DoIfFalse); – Tatranskymedved

0

あなたは、[]配列オペレータとここで配列として文字列にアクセスしている。代わりに、この場合にそう.charAt(N) を使用し、文字列のn番目の文字を取得する

t[j - 1] == s[i - 1] 

t.charAt(j - 1) == s.charAt(i - 1) 

他のコードにも同じことが適用されます。