繁体   English   中英

Rabin Karp 算法代码从 double 到 int 的有损转换

[英]lossy conversion from double to int for Rabin Karp Algorithm Code

我指的是 Rabin karp 算法的代码。 但是在 while 循环中它给出了一个错误

从 double 到 int 的可能有损转换。 谁能帮我解决这个错误。

import java.util.Scanner;

public class Main {
    static boolean rabinKarp(String text, String pattern) {
        int pLength= pattern.length();
        int n=pLength-1;
        int res=0, curr=0;
        int i=0;
        for(;i<pLength;i++)
            res+= (pattern.charAt(i)-'a'+1)*Math.pow(10,n--);
        
        n=pLength-1;  
        for(i=0;i<pLength;i++)
            curr+= (text.charAt(i)-'a'+1)*Math.pow(10,n--);
        if(res==curr)
            return true;
        n=pLength-1;
        while(i<text.length()){
            int p= Math.pow(10,n);
            int sub= (text.charAt(i-pLength)-'a'+1)*p;
            int add= (text.charAt(i)-'a'+1);
            curr= (curr-sub)*10+add;
            if(res==curr)
                return true;
            i++;
        }
        return false;    
        
    }
    
   public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    String text = "abcbab";
    String pattern = "bab";
    System.out.println(rabinKarp(text,pattern));
  }

}

Math 中的 pow 方法会给你一个 double,你必须手动转换它: int p= (int) Math.pow(10,n); 另见计算整数的幂

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM