Java 方法需要很长时间才能运行?

标签 java methods

我有这个方法:

public static String captainCrunch(String s){
        int i = 0;
        char hat = ' ';

        while(i < s.length()){
            if(s.charAt(i) >= 'a' && s.charAt(i) <= 'm'){
                hat = (char)(s.charAt(i) + 13);
            }else if(s.charAt(i) > 'm' && s.charAt(i) <= 'z'){
                hat = (char)(s.charAt(i) - 13);
            }else if(s.charAt(i) == ' '){
                hat = ' ';
            }
            s = s + hat;
            i++;
        }
        return s;
    }

每当我运行它时,即使对于非常小的字符串,也需要像 ferver 一样花费太多时间才能完成......有什么帮助吗?

最佳答案

您的方法花费如此长的时间的原因是您在每次迭代中都向 s 添加字符。因此,每当循环检查其条件时,它几乎总是true

换句话说,每次迭代时,s.length()i 都会加 1。

这不太好吧?解决此问题的一种方法是先将 s.length() 放入变量中,这样当您将新字符附加到 s 时,它就不会改变。

public static String captainCrunch(String s){
    int i = 0;
    char hat = ' ';

    int length = s.length();
    while(i < length){
        if(s.charAt(i) >= 'a' && s.charAt(i) <= 'm'){
            hat = (char)(s.charAt(i) + 13);
        }else if(s.charAt(i) > 'm' && s.charAt(i) <= 'z'){
            hat = (char)(s.charAt(i) - 13);
        }else if(s.charAt(i) == ' '){
            hat = ' ';
        }
        s = s + hat;
        i++;
    }
    return s;
}

但我怀疑你是否想要这种方式,因为我认为你的方法试图混淆传入的字符串,而不是向其中附加字符。如果我的猜测是正确的,您可能会想要这样的东西:

public static String captainCrunch(String s){
    int i = 0;
    StringBuilder builder = new StringBuilder(s);

    while(i < s.length()){
        if(s.charAt(i) >= 'a' && s.charAt(i) <= 'm'){
            builder.setCharAt(i, (char)(s.charAt(i) + 13));
        }else if(s.charAt(i) > 'm' && s.charAt(i) <= 'z') {
            builder.setCharAt(i, (char) (s.charAt(i) - 13));
        }
        i++;
    }
    return builder.toString();
}

关于Java 方法需要很长时间才能运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39223553/

相关文章:

python - Python中如何动态加载类并调用方法?

c# - 传递函数作为参数

java - 接口(interface)方法中的最终参数 - 有什么意义?

java - Spring PropertyPlaceholderConfigurer 默认值覆盖实际属性值

java - 与 JMeter 相比,Blazemeter 结果是否正确?

java - OkHttp:与 http://example.com/的连接被泄露。您是否忘记关闭响应主体?

.net - 非泛型声明中不允许有约束

java - 无法使用 pdfbox 打印任何内容

java - 我把 stub 放在哪里?

javascript - 我可以创建一个可供所创建对象的每个属性使用的类方法吗?