簡體   English   中英

如何避免在 Java 中多次調用一個函數?

[英]How to avoid calling a function multiple times in Java?

我正在調用具有不同值的函數以獲得特定結果。 有什么方法可以減少這樣的調用函數以提高 Java 的性能和可靠性?

func(1,6);
func(4,0);
func(2,7);
func(5,0);
func(3,0);


private static void func(int printer,int printing){
        if(printing == 0){
            for(int j=1;j<=7;j++){
                if(j!=printer){
                    arrayOdd.add(j);
                }
            }
        }else{
            for(int j=1;j<=7;j++){
                if(j!=printer && j!=printing)
                    arrayOdd.add(j);
            }
        }
    }

我的第一個注意事項是您可以將您的功能替換為

private static void func(int printer,int printing){
    for(int j=1;j<=7;j++){
        if(j!=printer && j!=printing)
            arrayOdd.add(j);
    }
}

它的行為是一樣的。

我的第二個注意事項是,除非您使用遞歸,否則重復調用函數不會對性能或可靠性產生任何影響,在這種情況下,您可能會遇到經典的堆棧溢出錯誤。 為什么您想要/需要更少地調用該函數?

如果上述函數可以是冪等的(相同的輸入總是產生完全相同的輸出),我會建議記憶化( https://java2blog.com/memoization-example-java/ )。
在查看函數輸出時,您似乎只是從 7 位數字的固定數組中刪除傳遞的值。 如果這就是您要查找的全部內容,只需從數組中刪除元素並記住函數即可。 這樣,該函數將僅執行 64 次最壞情況(0,1,2 3,4 ,5,6,7 2 位組合的 64 種不同組合)

您可以將打印機的值和打印的值放在列表或數組中,但您需要手動放置參數,只要沒有邏輯保持輸入即可。 我的意思是這樣的

int final static THE_TIMES_YOU_CALLED_THE_FUNC=5;

List<int[]> list =new ArrayList<>(THE_TIMES_YOU_CALLED_THE_FUNC);
        list.add(new int []{1,6});
        list.add(new int []{4,0});
        list.add(new int []{2,7});
        list.add(new int []{5,0});
        list.add(new int []{3,0});

        for(int i=0;i<list.size();i++){
            funk(list.get(i)[0],list.get(i)[]);
        }
    }

    private static void func(int printer,int printing){
        if(printing == 0){
            for(int j=1;j<=7;j++){
                if(j!=printer){
                    arrayOdd.add(j);
                }
            }
        }else{
            for(int j=1;j<=7;j++){
                if(j!=printer && j!=printing)
                    arrayOdd.add(j);
            }
        }
    }

最后編譯器會調用func 5次,我沒有看到我的soultion的優勢,但你最終想寫一次func。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM