具體如下:
創(chuàng)新互聯(lián)2013年開(kāi)創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元鶴慶做網(wǎng)站,已為上家服務(wù),為鶴慶各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
連連看的小源碼
package Lianliankan;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class lianliankan implements ActionListener
{
JFrame mainFrame; //主面板
Container thisContainer;
JPanel centerPanel,southPanel,northPanel; //子面板
JButton diamondsButton[][] = new JButton[6][5];//游戲按鈕數(shù)組
JButton exitButton,resetButton,newlyButton; //退出,重列,重新開(kāi)始按鈕
JLabel fractionLable=new JLabel("0"); //分?jǐn)?shù)標(biāo)簽
JButton firstButton,secondButton; //
分別記錄兩次62616964757a686964616fe59b9ee7ad9431333335326239被選中的按鈕
int grid[][] = new int[8][7];//儲(chǔ)存游戲按鈕位置
static boolean pressInformation=false; //判斷是否有按鈕被選中
int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戲按鈕的位置坐標(biāo)
int i,j,k,n;//消除方法控制
代碼(code)是程序員用開(kāi)發(fā)工具所支持的語(yǔ)言寫(xiě)出來(lái)的源文件,是一組由字符、符號(hào)或信號(hào)碼元以離散形式表示信息的明確的規(guī)則體系。
對(duì)于字符和Unicode數(shù)據(jù)的位模式的定義,此模式代表特定字母、數(shù)字或符號(hào)(例如 0x20 代表一個(gè)空格,而 0x74 代表字符“t”)。一些數(shù)據(jù)類型每個(gè)字符使用一個(gè)字節(jié);每個(gè)字節(jié)可以具有 256 個(gè)不同的位模式中的一個(gè)模式。
在計(jì)算機(jī)中,字符由不同的位模式(ON 或 OFF)表示。每個(gè)字節(jié)有 8 位,這 8 位可以有 256 種不同的 ON 和 OFF 組合模式。對(duì)于使用 1 個(gè)字節(jié)存儲(chǔ)每個(gè)字符的程序,通過(guò)給每個(gè)位模式指派字符可表示最多 256 個(gè)不同的字符。2 個(gè)字節(jié)有 16 位,這 16 位可以有 65,536 種唯一的 ON 和 OFF 組合模式。使用 2 個(gè)字節(jié)表示每個(gè)字符的程序可表示最多 65,536 個(gè)字符。
單字節(jié)代碼頁(yè)是字符定義,這些字符映射到每個(gè)字節(jié)可能有的 256 種位模式中的每一種。代碼頁(yè)定義大小寫(xiě)字符、數(shù)字、符號(hào)以及 !、@、#、% 等特殊字符的位模式。每種歐洲語(yǔ)言(如德語(yǔ)和西班牙語(yǔ))都有各自的單字節(jié)代碼頁(yè)。
雖然用于表示 A 到 Z 拉丁字母表字符的位模式在所有的代碼頁(yè)中都相同,但用于表示重音字符(如"é"和"á")的位模式在不同的代碼頁(yè)中卻不同。如果在運(yùn)行不同代碼頁(yè)的計(jì)算機(jī)間交換數(shù)據(jù),必須將所有字符數(shù)據(jù)由發(fā)送計(jì)算機(jī)的代碼頁(yè)轉(zhuǎn)換為接收計(jì)算機(jī)的代碼頁(yè)。如果源數(shù)據(jù)中的擴(kuò)展字符在接收計(jì)算機(jī)的代碼頁(yè)中未定義,那么數(shù)據(jù)將丟失。
如果某個(gè)數(shù)據(jù)庫(kù)為來(lái)自許多不同國(guó)家的客戶端提供服務(wù),則很難為該數(shù)據(jù)庫(kù)選擇這樣一種代碼頁(yè),使其包括所有客戶端計(jì)算機(jī)所需的全部擴(kuò)展字符。而且,在代碼頁(yè)間不停地轉(zhuǎn)換需要花費(fèi)大量的處理時(shí)間。
在JAVA平臺(tái) 實(shí)現(xiàn)異步調(diào)用的角色有如下三個(gè)角色:調(diào)用者 提貨單 真實(shí)數(shù)據(jù)一個(gè)調(diào)用者在調(diào)用耗時(shí)操作 不能立即返回?cái)?shù)據(jù)時(shí) 先返回一個(gè)提貨單 然后在過(guò)一斷時(shí)間后憑提貨單來(lái)獲取真正的數(shù)據(jù) 去蛋糕店買蛋糕 不需要等蛋糕做出來(lái)(假設(shè)現(xiàn)做要很長(zhǎng)時(shí)間) 只需要領(lǐng)個(gè)提貨單就可以了(去干別的事情) 等到蛋糕做好了 再拿提貨單取蛋糕就可以了 public class Main { public static void main(String[] args) {
System out println( main BEGIN );
Host host = new Host();
Data data = host request( A );
Data data = host request( B );
Data data = host request( C );
System out println( main otherJob BEGIN );
try {
Thread sleep( );
} catch (InterruptedException e) {
}
System out println( main otherJob END );
System out println( data = + data getContent());
System out println( data = + data getContent());
System out println( data = + data getContent());
System out println( main END );
}
}
這里的main類就相當(dāng)于 顧客 host就相當(dāng)于 蛋糕店 顧客向 蛋糕店 定蛋糕就相當(dāng)于 發(fā)請(qǐng)求request 返回的數(shù)據(jù)data是FutureData的實(shí)例 就相當(dāng)于提貨單 而不是真正的 蛋糕 在過(guò)一段時(shí)間后(sleep一段時(shí)間后) 調(diào)用data getContent() 也就是拿提貨單獲取執(zhí)行結(jié)果
下面來(lái)看一下 顧客定蛋糕后 蛋糕店做了什么
public class Host {
public Data request(final int count final char c) {
System out println( request( + count + + c + ) BEGIN );
// ( ) 建立FutureData的實(shí)體
final FutureData future = new FutureData();
// ( ) 為了建立RealData的實(shí)體 啟動(dòng)新的線程
new Thread() {
public void run() {
//在匿名內(nèi)部類中使用count future c
RealData realdata = new RealData(count c);
future setRealData(realdata);
}
} start();
System out println( request( + count + + c + ) END );
// ( ) 取回FutureData實(shí)體 作為傳回值
return future;
}
}
host( 蛋糕店 )在接到請(qǐng)求后 先生成了 提貨單 FutureData的實(shí)例future 然后命令 蛋糕師傅 RealData去做蛋糕 realdata相當(dāng)于起個(gè)線程去做蛋糕了 然后host返回給顧客的僅僅是 提貨單 future 而不是蛋糕 當(dāng)?shù)案庾龊煤?蛋糕師傅才能給對(duì)應(yīng)的 提貨單 蛋糕 也就是future setRealData(realdata)
下面來(lái)看看蛋糕師傅是怎么做蛋糕的
建立一個(gè)字符串 包含count個(gè)c字符 為了表現(xiàn)出犯法需要花費(fèi)一些時(shí)間 使用了sleep
public class RealData implements Data { private final String content;
public RealData(int count char c) {
System out println( making RealData( + count + + c + ) BEGIN );
char[] buffer = new char[count];
for (int i = ; i count; i++) {
buffer[i] = c;
try {
Thread sleep( );
} catch (InterruptedException e) {
}
}
System out println( making RealData( + count + + c + ) END );
ntent = new String(buffer);
}
public String getContent() {
return content;
}
}
現(xiàn)在來(lái)看看 提貨單 future是怎么與蛋糕 content 對(duì)應(yīng)的:
public class FutureData implements Data { private RealData realdata = null;
private boolean ready = false;
public synchronized void setRealData(RealData realdata) {
if (ready) {
return; // 防止setRealData被調(diào)用兩次以上
}
this realdata = realdata;
this ready = true;
notifyAll();
}
public synchronized String getContent() {
while (!ready) {
try {
wait();
} catch (InterruptedException e) {
}
}
return realdata getContent();
}
}
顧客做完自己的事情后 會(huì)拿著自己的 提貨單 來(lái)取蛋糕
System out println( data = + data getContent());
這時(shí)候如果蛋糕沒(méi)做好 就只好等了
while (!ready) { try {
wait();
} catch (InterruptedException e) {
}
//等做好后才能取到
return realdata getContent();
程序分析
對(duì)于每個(gè)請(qǐng)求 host都會(huì)生成一個(gè)線程 這個(gè)線程負(fù)責(zé)生成顧客需要的 蛋糕 在等待一段時(shí)間以后 如果蛋糕還沒(méi)有做好 顧客還必須等待 直到 蛋糕被做好 也就是
future setRealData(realdata); 執(zhí)行以后 顧客才能拿走蛋糕
每個(gè)線程只是專門負(fù)責(zé)制作特定顧客所需要的 蛋糕 也就是顧客A對(duì)應(yīng)著蛋糕師傅A(chǔ) 顧客B對(duì)應(yīng)著蛋糕師傅B 即使顧客B的蛋糕被先做好了 顧客A也只能等待蛋糕師傅A(chǔ)把蛋糕做好 換句話說(shuō) 顧客之間沒(méi)有競(jìng)爭(zhēng)關(guān)系
lishixinzhi/Article/program/Java/gj/201311/27425
用*號(hào)打印的生日蛋糕或玫瑰百合?
。。。。println("* * ****");
就這樣打出來(lái)??