第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在沒有實現(xiàn)的情況下刪除類之間的重復(fù)代碼?

如何在沒有實現(xiàn)的情況下刪除類之間的重復(fù)代碼?

白衣非少年 2021-12-22 15:26:46
我編寫了許多函數(shù)的實現(xiàn)來計算給定位置的斐波那契數(shù)。Fibonacci Class:這個類幫助我測試每個實現(xiàn)而無需重寫相同的測試代碼。我不想在fibonacci(n - 2).add(fibonacci(n - 1));這里添加“ ”,因為有些實現(xiàn)不使用它(命令式迭代、功能迭代)。public interface Fibonacci {  BigInteger fibonacci(int n);}遞歸斐波那契類public class SimpleRecursiveFibonacci implements Fibonacci{  public BigInteger fibonacci(int n) {    if(n < 2) {      return BigInteger.ONE;                 }    return fibonacci(n - 2).add(fibonacci(n - 1));  }}和 MemorizedRecursiveFibonacci 類public class MemoizedRecursiveFibonacci implements Fibonacci{  private Map<Integer, BigInteger> cache = new HashMap<>();  public BigInteger fibonacci(int n) {    if(n < 2) {      return BigInteger.ONE;    }    if(!cache.containsKey(n)){      BigInteger currentFibonacci = fibonacci(n - 2).add(fibonacci(n - 1));      cache.put(n, currentFibonacci);    }    return cache.get(n);  }}如我所見,MemorizedRecursiveFibonacci 類中有一些重復(fù)的代碼 if(n < 2) {      return BigInteger.ONE;和  BigInteger currentFibonacci = fibonacci(n - 2).add(fibonacci(n - 1));我怎樣才能保持干燥?刪除重復(fù)的代碼?
查看完整描述

2 回答

?
慕后森

TA貢獻(xiàn)1802條經(jīng)驗 獲得超5個贊

該MemorizedRecursiveFibonacci可以委托給一個RecursiveFibonacci實例:


public class MemoizedRecursiveFibonacci implements Fibonacci {

  SimpleRecursiveFibonacci simple = new SimpleRecursiveFibonacci();

  private Map<Integer, BigInteger> cache = new HashMap<>();


  public BigInteger fibonacci(int n) {

    if(!cache.containsKey(n)) {

      BigInteger currentFibonacci = simple.fibonacci(n);

      cache.put(n, currentFibonacci);

    }


    return cache.get(n);

  }

}

或者,更優(yōu)雅地,使用 Java 8 Map#computeIfAbsent:


public class MemoizedRecursiveFibonacci implements Fibonacci {

  SimpleRecursiveFibonacci simple = new SimpleRecursiveFibonacci();

  private Map<Integer, BigInteger> cache = new HashMap<>();


  public BigInteger fibonacci(int n) {

    return cache.computeIfAbsent(n, k -> simple.fibonacci(k));

}


查看完整回答
反對 回復(fù) 2021-12-22
?
白板的微信

TA貢獻(xiàn)1883條經(jīng)驗 獲得超3個贊

那么抽象的公共父級呢?像這樣的東西:


public abstract class ParentFibonacci implements Fibonacci {

    protected BigInteger getFirstValues(int n) {

        if (n < 2) {

            return BigInteger.ONE;

        }

        return BigInteger.ZERO;

    }

}

這樣你的斐波那契實現(xiàn)需要實現(xiàn) Fibonacci.fibonacci(int n) 并且可以使用父方法。


public class SimpleRecursiveFibonacci extends ParentFibonacci {


    public BigInteger fibonacci(int n) {

        if (n < 2) {

            return getFirstValues();

        }

        return fibonacci(n - 2).add(fibonacci(n - 1));

    }

}


查看完整回答
反對 回復(fù) 2021-12-22
  • 2 回答
  • 0 關(guān)注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號