[英]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.