激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java 將方法作為傳參--多態的實例

java 將方法作為傳參--多態的實例

2021-01-10 11:44bufferflies Java教程

下面小編就為大家帶來一篇java 將方法作為傳參--多態的實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在前段時研究智能算法時,發現如果使用java進行實現的話,往往具體實現過程差不多,但是適應值函數卻根據

研究對象的不同發生很大的改變,這樣對代碼的維護產生很大的阻礙,于是產生的一個疑問:可不可以將適應值函數

作為參數傳入到方法中,根據C/C++的習慣的話,由于指針的存在,可以將函數作為指針傳入,由于指針使用的復雜

性以及難維護性,效果一般。如果換一種面向對象的思想,可以想設計一個接口I,這個接口只提供一個方法,那么相

當于可以將接口作為參數傳入到方法中,調用時只需要將設計一個類,實現接口I,那么就可以將函數傳入到方法中了。

下面以0.618黃金搜索法為例,由于目標函數的不同,滿足上面所敘述的,注意這種搜索只能時單峰的函數才可行,

算法如下圖所示:

java 將方法作為傳參--多態的實例

1.首先創建一個接口,這個接口只有一個適應值的方法:

?
1
2
3
public interface Fitness {
 public double getFitness(double X);
}

2.創建一個類,簡單實現上面0.618搜索的方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class stationUtils{/***
 * 黃金分割搜索法,尋找最小值的函數
 * @param min 搜索上限
 * @param max 搜索下限
 * @param fitness 函數值
 * @return
 */
 public double goldenSearch(double min,double max,Fitness fitness){
  /*double X1=min+0.382*(max-min);*/
  double a=doubleOperation.substract(max,min);
  double X1=doubleOperation.add(min,doubleOperation.multiply(0.382,a));
  /*double X2=min+0.618*(max-min);*/
  double X2=doubleOperation.add(min,doubleOperation.multiply(0.618,a));
  double F1=fitness.getFitness(X1);
  double F2=fitness.getFitness(X2);
  while(Math.abs(doubleOperation.substract(X1,X2))>delt){
   if(F1<F2){
   max=X2;
   X2=X1;
   F2=F1;
   X1=min+0.382*(max-min);
   F1=fitness.getFitness(X1);
   }else{
   min=X1;
   X1=X2;
   F1=F2;
   X2=min+0.618*(max-min);
   F2=fitness.getFitness(X2);
   }
  }
  return doubleOperation.divide(doubleOperation.add(max,min),2);
 
 }
}

3.在創建一個類,用來實現Fitness接口,也就是將自己目標函數寫進去,這里以一元二次函數為例:

?
1
2
3
4
5
6
public class Func implements Fitness{
 @Override
 public double getFitness(double X) {
  return X*X- 3 * X + 1;
 }
}

4.簡單調用一下:

?
1
2
3
4
5
6
@Test
public void run1(){
 Func func=new Func();
 double result=stationUtils.goldenSearch(-2.00,4.00,func);
 System.out.println(result);
}

總結,加入傳入的參數比較多,可以將值傳入到接口實現類中,那么getFitness這個方法就可以訪問這個參數了。

以上這篇java 將方法作為傳參--多態的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/bufferflies/archive/2017/09/25/7593866.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: h视频在线观看免费 | 日韩午夜片 | sesee99| 欧美成人免费一区二区三区 | 欧美成人一区二区视频 | 免费黄色成人 | 超碰在线97国产 | 成人一级黄色 | 国产精品视频一区二区三区四区国 | 懂色av懂色aⅴ精彩av | 日本一区视频在线观看 | 日本精品久久久一区二区三区 | 日韩av片网站 | 一级观看免费完整版视频 | 综合在线一区 | 91九色丨porny丨国产jk | www.guochan | 91福利在线观看 | 国产成人精品免高潮在线观看 | 中文字幕在线观看1 | 49vv看片免费| 精品一区二区久久久久久按摩 | 蜜桃91麻豆 | 久久精品亚洲国产奇米99 | 日韩黄色免费观看 | 高清国产午夜精品久久久久久 | 日本在线不卡免费 | 国产电影精品久久 | 久久精品欧美电影 | 蜜桃视频在线观看视频 | 免费一级特黄欧美大片勹久久网 | 欧美一级色片 | 在线天堂中文在线资源网 | 久久久久久久亚洲精品 | 国产一区日韩一区 | 日本羞羞的午夜电视剧 | 九九热视频这里只有精品 | 国产小视频一区 | 蜜桃视频观看麻豆 | 欧洲成人一区 | 91精品国产网站 |