我正在嘗試計算 2 個字串之間的 Levenshteine 距離。
我得到了運行良好的 Java 代碼,如下所示
static int compute_Levenshtein_distance(String str1,
String str2)
{
if (str1.isEmpty()) {
return str2.length();
}
if (str2.isEmpty())
{
return str1.length();
}
int replace = compute_Levenshtein_distance(
str1.substring(1), str2.substring(1))
NumOfReplacement(str1.charAt(0),str2.charAt(0));
int insert = compute_Levenshtein_distance(
str1, str2.substring(1)) 1;
int delete = compute_Levenshtein_distance(
str1.substring(1), str2) 1;
return minm_edits(replace, insert, delete);
}
static int NumOfReplacement(char c1, char c2)
{
return c1 == c2 ? 0 : 1;
}
static int minm_edits(int... nums)
{
return Arrays.stream(nums).min().orElse(
Integer.MAX_VALUE);
}
public static void main(String args[])
{
String s1 = "glomax";
String s2 = "folmax";
System.out.println(compute_Levenshtein_distance(s1, s2));
}
現在我已經將上面的代碼轉換為如下的 scala 代碼,但是得到了一個低于 2 的錯誤,我已經評論了
def compute_Levenshtein_distance(str1: String, str2: String): Int = {
if (str1.isEmpty) return str2.length
if (str2.isEmpty) return str1.length
val replace = compute_Levenshtein_distance(str1.substring(1), str2.substring(1)) NumOfReplacement(str1.charAt(0), str2.charAt(0))
val insert = compute_Levenshtein_distance(str1, str2.substring(1)) 1
val delete = compute_Levenshtein_distance(str1.substring(1), str2) 1
minm_edits(replace.toInt, insert.toInt, delete.toInt) // **Error1:- return type expected is INt but found Any**
}
def NumOfReplacement(c1: Char, c2: Char) = {
if (c1 == c2) 0
else 1
}
def minm_edits(nums: Int*) = {
Arrays.stream(nums).min.orElse(Integer.MAX_VALUE) // **Error2:- Cannot resolve overloaded method 'Stream'**
}
def main(args: Array[String]) = {
val s1 = "glomax"
val s2 = "folmax"
System.out.println(compute_Levenshtein_distance(s1, s2))
}
因為我在 scala 中處于非常初級的水平......我不明白我該如何解決它。
有人請幫我解決這個問題嗎?
uj5u.com熱心網友回復:
出現錯誤 #2 的原因是您試圖將 scala 傳遞給不接受 scala 集合Seq[Int]的 java 標準庫函式。Array.streams
因此,回傳型別minm_edits不會被推斷為Int錯誤 #1 告訴您,盡管您已將回傳型別宣告compute_Levenshtein_distance為 int,但 scala 編譯器無法判斷minm_edits回傳 int。
通過修復minm_edits(使用 scala 標準庫而不是 Java 標準庫)這兩個錯誤都會消失。
def minm_edits(nums: Int*) = {
nums.minOption.getOrElse(Integer.MAX_VALUE)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/424393.html
