類Pascal語言的偽代碼的語法規(guī)則是: 在偽代碼中,每一條指令占一行(else if,例外)。指令后不跟任何符號(Pascal和C中語句要以分號結尾)。
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設,慶云企業(yè)網(wǎng)站建設,慶云品牌網(wǎng)站建設,網(wǎng)站定制,慶云網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,慶云網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
偽代碼實例如下:
IF 九點以前 THEN
do 私人事務;
ELSE 9點到18點 THEN
工作;
ELSE
下班;
END IF
這樣不但可以達到文檔的效果,同時可以節(jié)約時間。更重要的是,使結構比較清晰,表達方式更加直觀。
偽代碼(Pseudocode)是一種算法描述語言。使用偽代碼的目的是為了使被描述的算法可以容易地以任何一種編程語言(Pascal,C,Java,etc)實現(xiàn)。因此,偽代碼必須結構清晰、代碼簡單、可讀性好,并且類似自然語言。 介于自然語言與編程語言之間。
它以編程語言的書寫形式指明算法的職能。相比于程序語言(例如Java, C++,C, Dephi 等等)它更類似自然語言。它是半角式化、不標準的語言。
我們可以將整個算法運行過程的結構用接近自然語言的形式(這里,你可以使用任何一種你熟悉的文字,中文,英文 等等,關鍵是你把你程序的意思表達出來)描述出來。使用偽代碼, 可以幫助我們更好的表述算法,不用拘泥于具體的實現(xiàn)。
提示輸入一個大于2且11的數(shù)字
輸入一整型數(shù)值給Vertices,
if(Vertices 3 || Vertices 11){
提示重新輸入且應輸入
退出程序
}else{
生成一個Vertices * Vertices 大小的數(shù)組Graph,
填充數(shù)組 :行號與列號相同填充0,其余填充10以內隨機數(shù)
交換元素:以[i][j]位置的數(shù)值與[j][i]位置的數(shù)值互換
最后打印數(shù)組各元素
}
.餓漢式單例類
//餓漢式單例類.在類初始化時,已經(jīng)自行實例化
public class Singleton1 {
//私有的默認構造子
private Singleton1() {}
//已經(jīng)自行實例化
private static final Singleton1 single = new Singleton1();
//靜態(tài)工廠方法
public static Singleton1 getInstance() {
return single;
}
}
2.懶漢式單例類
//懶漢式單例類.在第一次調用的時候實例化
public class Singleton2 {
//私有的默認構造子
private Singleton2() {}
//注意,這里沒有final
private static Singleton2 single=null;
//靜態(tài)工廠方法
public synchronized static Singleton2 getInstance() {
if (single == null) {
single = new Singleton2();
}
return single;
}
}
//對懶漢式單例的改進(錯誤的改進)
//實際上,只有在第一次創(chuàng)建對象的時候需要加鎖,之后就不需要了 ,這樣可以提升性能
public synchronized static Singleton2 getInstance() {
if (instance == null) {
synchronized(instance){ //鎖住當前實例對象
if(instance == null){
instance = new Singleton2();
}
}
}
return instance;
}
錯誤原因:
aA、B線程同時進入了第一個if判斷
bA首先進入synchronized塊,由于instance為null,所以它執(zhí)行instance = new Singleton();
c由于JVM內部的優(yōu)化機制,JVM先畫出了一些分配給Singleton實例的空白內存,并賦值給instance成員(注意此時JVM沒有開始初始化這個實例),然后A離開了synchronized塊。
dB進入synchronized塊,由于instance此時不是null,因此它馬上離開了synchronized塊并將結果返回給調用該方法的程序。
e此時B線程打算使用Singleton實例,卻發(fā)現(xiàn)它沒有被初始化,于是錯誤發(fā)生了。
正確改進(使用內部類):
JVM內部的機制能夠保證當一個類被加載的時候,這個類的加載過程是線程互斥的,JVM能夠幫我們保證instance只被創(chuàng)建一次,
并且會保證把賦值給instance的內存初始化完畢,這樣我們就不用擔心上面的問題。
同時該方法也只會在第一次調用的時候使用互斥機制,這樣就解決了低性能問題
public?class?Singleton?{??
??
/*?私有構造方法,防止被實例化?*/??
private?Singleton(){
}
/*?此處使用一個內部類來維護單例?*/??
private?static?class?SingletonFactory?{??
private?static?Singleton?instance?=?new?Singleton();??
}
/*?獲取實例?*/??
public?static?Singleton?getInstance()?{??
return?SingletonFactory.instance;??
}
/*?如果該對象被用于序列化,可以保證對象在序列化前后保持一致?*/??
public?Object?readResolve()?{??
return?getInstance();??
}
}
其實說它完美,也不一定,如果在構造函數(shù)中拋出異常,實例將永遠得不到創(chuàng)建,也會出錯????
第二種改進:
因為我們只需要在創(chuàng)建類的時候進行同步,所以只要將創(chuàng)建和getInstance()分開,
單獨為創(chuàng)建加synchronized關鍵字,也是可以的
public class Singleton {
private static Singleton instance=null;
private Singleton(){}
private static synchronized void Init(){
if(instance==null)
instance=new Singletion();
}
public static Singleton getInstance(){
if(instance==null){
Init();
}
return instance;
}
}
3.登記式單例類
import java.util.HashMap;
import java.util.Map;
//登記式單例類.
//類似Spring里面的方法,將類名注冊,下次從里面直接獲取。
public class Singleton3 {
private static MapString,Singleton3 map = new HashMapString,Singleton3();
static{
Singleton3 single = new Singleton3();
map.put(single.getClass().getName(), single);
}
//保護的默認構造子
protected Singleton3(){}
//靜態(tài)工廠方法,返還此類惟一的實例
public static Singleton3 getInstance(String name) {
if(name == null) {
name = Singleton3.class.getName();
System.out.println("name == null"+"---name="+name);
}
if(map.get(name) == null) {
try {
map.put(name, (Singleton3) Class.forName(name).newInstance());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return map.get(name);
}
//一個示意性的商業(yè)方法
public String about() {
return "Hello, I am RegSingleton.";
}
public static void main(String[] args) {
Singleton3 single3 = Singleton3.getInstance(null);
System.out.println(single3.about());
}
}
arrs[100000][100000];
a[100000];
f(i,zhi){
if(i==4){
arrs[]=a;
return;
}
a[i]=zhi;
f(i+1,zhi+3);
f(i+1,zhi+4);
}
f(0,0)
arrs就是結果,并且是排了序的。
新聞標題:java設計模式的偽代碼 java設計模式視頻教程
URL網(wǎng)址:http://muchs.cn/article46/dohcjhg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供響應式網(wǎng)站、定制網(wǎng)站、、網(wǎng)站制作、定制開發(fā)、網(wǎng)頁設計公司
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)