一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - Java教程 - java 將方法作為傳參--多態(tài)的實(shí)例

java 將方法作為傳參--多態(tài)的實(shí)例

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

下面小編就為大家?guī)硪黄猨ava 將方法作為傳參--多態(tài)的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

在前段時(shí)研究智能算法時(shí),發(fā)現(xiàn)如果使用java進(jìn)行實(shí)現(xiàn)的話,往往具體實(shí)現(xiàn)過程差不多,但是適應(yīng)值函數(shù)卻根據(jù)

研究對(duì)象的不同發(fā)生很大的改變,這樣對(duì)代碼的維護(hù)產(chǎn)生很大的阻礙,于是產(chǎn)生的一個(gè)疑問:可不可以將適應(yīng)值函數(shù)

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

性以及難維護(hù)性,效果一般。如果換一種面向?qū)ο蟮乃枷?,可以想設(shè)計(jì)一個(gè)接口I,這個(gè)接口只提供一個(gè)方法,那么相

當(dāng)于可以將接口作為參數(shù)傳入到方法中,調(diào)用時(shí)只需要將設(shè)計(jì)一個(gè)類,實(shí)現(xiàn)接口I,那么就可以將函數(shù)傳入到方法中了。

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

算法如下圖所示:

java 將方法作為傳參--多態(tài)的實(shí)例

1.首先創(chuàng)建一個(gè)接口,這個(gè)接口只有一個(gè)適應(yīng)值的方法:

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

2.創(chuàng)建一個(gè)類,簡(jiǎn)單實(shí)現(xiàn)上面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{/***
 * 黃金分割搜索法,尋找最小值的函數(shù)
 * @param min 搜索上限
 * @param max 搜索下限
 * @param fitness 函數(shù)值
 * @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.在創(chuàng)建一個(gè)類,用來實(shí)現(xiàn)Fitness接口,也就是將自己目標(biāo)函數(shù)寫進(jìn)去,這里以一元二次函數(shù)為例:

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

4.簡(jiǎn)單調(diào)用一下:

?
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);
}

總結(jié),加入傳入的參數(shù)比較多,可以將值傳入到接口實(shí)現(xiàn)類中,那么getFitness這個(gè)方法就可以訪問這個(gè)參數(shù)了。

以上這篇java 將方法作為傳參--多態(tài)的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 情趣内衣在线观看 | 亚洲激情 欧美 | 国产一区二区免费视频 | 女上男下gifxxoo动态视频 | 激情艳妇之性事高h | 午夜dj免费视频观看社区 | 国产在线观看精品 | 挺进白嫩老师下面视频 | 2021小妲己永久回家地址 | 男生和老师一起差差差 | 亚洲午夜久久久久久91 | 四虎在线观看 | 国产日本久久久久久久久婷婷 | 成年人在线视频免费观看 | 韩日一区二区三区 | 美女脱了内裤打开腿让你桶爽 | 久久五月综合婷婷中文云霸高清 | 精品国产精品国产 | 国产午夜免费秋霞影院 | 人成网站在线观看 | 学校女性奴sm训练调教 | 很很草| 国产精品在线 | 麻豆在线md0087免费 | 国产aaa毛片| 美女林柏欣21p人体之仓之梦 | aⅴ视频在线免播放观看 | 男人免费视频 | 青草青青在线 | 亚洲国产成人久久99精品 | 日本性生活大片 | 欧美日本一区视频免费 | 成人在线免费观看视频 | 国产51社区精品视频资源 | 色天使亚洲综合在线观看 | 欧美视频一区二区专区 | 国产理论片在线观看 | 久久精品99国产精品日本 | 国产精品视频一区二区三区 | 东北恋哥在线播放免费播放 | 日本老师xxxxx18 |