bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

標(biāo)準(zhǔn)java代碼樣例 java程序有哪些編碼規(guī)范

java編程規(guī)范!!!

名稱 Java語(yǔ)言編碼規(guī)范(Java Code Conventions)

豐澤網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,豐澤網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為豐澤超過千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的豐澤做網(wǎng)站的公司定做!

 簡(jiǎn)介 本文檔講述了Java語(yǔ)言的編碼規(guī)范,較之陳世忠先生《c++編碼規(guī)范》的浩繁詳盡,此文當(dāng)屬短小精悍了。而其中所列之各項(xiàng)條款,從編碼風(fēng)格,到注意事項(xiàng),不單只Java,對(duì)于其他語(yǔ)言,也都很有借鑒意義。因?yàn)楹?jiǎn)短,所以易記,大家不妨將此作為handbook,常備案頭,逐一對(duì)驗(yàn)。

1 介紹

1.1 為什么要有編碼規(guī)范

1.2 版權(quán)聲明

2 文件名

2.1 文件后綴

2.2 常用文件名

3 文件組織

3.1 Java源文件

3.1.1 開頭注釋

3.1.2 包和引入語(yǔ)句

3.1.3 類和接口聲明

4 縮進(jìn)排版

4.1 行長(zhǎng)度

4.2 換行

5 注釋

5.1 實(shí)現(xiàn)注釋的格式

5.1.1 塊注釋

5.1.2 單行注釋

5.1.3 尾端注釋

5.1.4 行末注釋

5.2 文擋注釋

6 聲明

6.1 每行聲明變量的數(shù)量

6.2 初始化

6.3 布局

6.4 類和接口的聲明

7 語(yǔ)句

7.1 簡(jiǎn)單語(yǔ)句

7.2 復(fù)合語(yǔ)句

7.3 返回語(yǔ)句

7.4 if,if-else,if else-if else語(yǔ)句

7.5 for語(yǔ)句

7.6 while語(yǔ)句

7.7 do-while語(yǔ)句

7.8 switch語(yǔ)句

7.9 try-catch語(yǔ)句

8 空白

8.1 空行

8.2 空格

9 命名規(guī)范

10 編程慣例

10.1 提供對(duì)實(shí)例以及類變量的訪問控制

10.2 引用類變量和類方法

10.3 常量

10.4 變量賦值

10.5 其它慣例

10.5.1 圓括號(hào)

10.5.2 返回值

10.5.3 條件運(yùn)算符"?"前的表達(dá)式"?"前的表達(dá)式

10.5.4 特殊注釋

11 代碼范例

11.1 Java源文件范例

1 介紹(Introduction)

1.1 為什么要有編碼規(guī)范(Why Have Code Conventions)

編碼規(guī)范對(duì)于程序員而言尤為重要,有以下幾個(gè)原因:

- 一個(gè)軟件的生命周期中,80%的花費(fèi)在于維護(hù)

- 幾乎沒有任何一個(gè)軟件,在其整個(gè)生命周期中,均由最初的開發(fā)人員來(lái)維護(hù)

- 編碼規(guī)范可以改善軟件的可讀性,可以讓程序員盡快而徹底地理解新的代碼

- 如果你將源碼作為產(chǎn)品發(fā)布,就需要確任它是否被很好的打包并且清晰無(wú)誤,一如你已構(gòu)建的其它任何產(chǎn)品

為了執(zhí)行規(guī)范,每個(gè)軟件開發(fā)人員必須一致遵守編碼規(guī)范。每個(gè)人。

1.2 版權(quán)聲明(Acknowledgments)

本文檔反映的是Sun MicroSystems公司,Java語(yǔ)言規(guī)范中的編碼標(biāo)準(zhǔn)部分。主要貢獻(xiàn)者包括:Peter King,Patrick Naughton,Mike DeMoney,Jonni Kanerva,Kathy Walrath以及Scott Hommel。

本文檔現(xiàn)由Scott Hommel維護(hù),有關(guān)評(píng)論意見請(qǐng)發(fā)至shommel@eng.sun.com

2 文件名(File Names)

這部分列出了常用的文件名及其后綴。

2.1 文件后綴(File Suffixes)

Java程序使用下列文件后綴:

文件類別 文件后綴

Java源文件 .java

Java字節(jié)碼文件 .class

2.2 常用文件名(Common File Names)

常用的文件名包括:

文件名 用途

GNUmakefile makefiles的首選文件名。我們采用gnumake來(lái)創(chuàng)建(build)軟件。

README 概述特定目錄下所含內(nèi)容的文件的首選文件名

3 文件組織(File Organization)

一個(gè)文件由被空行分割而成的段落以及標(biāo)識(shí)每個(gè)段落的可選注釋共同組成。超過2000行的程序難以閱讀,應(yīng)該盡量避免。"Java源文件范例"提供了一個(gè)布局合理的Java程序范例。

3.1 Java源文件(Java Source Files)

每個(gè)Java源文件都包含一個(gè)單一的公共類或接口。若私有類和接口與一個(gè)公共類相關(guān)聯(lián),可以將它們和公共類放入同一個(gè)源文件。公共類必須是這個(gè)文件中的第一個(gè)類或接口。

Java源文件還遵循以下規(guī)則:

- 開頭注釋(參見"開頭注釋")

- 包和引入語(yǔ)句(參見"包和引入語(yǔ)句")

- 類和接口聲明(參見"類和接口聲明")

3.1.1 開頭注釋(Beginning Comments)

所有的源文件都應(yīng)該在開頭有一個(gè)C語(yǔ)言風(fēng)格的注釋,其中列出類名、版本信息、日期和版權(quán)聲明:

/*

* Classname

*

* Version information

*

* Date

*

* Copyright notice

*/

3.1.2 包和引入語(yǔ)句(Package and Import Statements)

在多數(shù)Java源文件中,第一個(gè)非注釋行是包語(yǔ)句。在它之后可以跟引入語(yǔ)句。例如:

package java.awt;

import java.awt.peer.CanvasPeer;

3.1.3 類和接口聲明(Class and Interface Declarations)

下表描述了類和接口聲明的各個(gè)部分以及它們出現(xiàn)的先后次序。參見"Java源文件范例"中一個(gè)包含注釋的例子。

類/接口聲明的各部分 注解

1 類/接口文檔注釋(/**……*/) 該注釋中所需包含的信息,參見"文檔注釋"

2 類或接口的聲明

3 類/接口實(shí)現(xiàn)的注釋(/*……*/)如果有必要的話 該注釋應(yīng)包含任何有關(guān)整個(gè)類或接口的信息,而這些信息又不適合作為類/接口文檔注釋。

4 類的(靜態(tài))變量 首先是類的公共變量,隨后是保護(hù)變量,再后是包一級(jí)別的變量(沒有訪問修飾符,access modifier),最后是私有變量。

5 實(shí)例變量 首先是公共級(jí)別的,隨后是保護(hù)級(jí)別的,再后是包一級(jí)別的(沒有訪問修飾符),最后是私有級(jí)別的。

6 構(gòu)造器

7 方法 這些方法應(yīng)該按功能,而非作用域或訪問權(quán)限,分組。例如,一個(gè)私有的類方法可以置于兩個(gè)公有的實(shí)例方法之間。其目的是為了更便于閱讀和理解代碼。

4 縮進(jìn)排版(Indentation)

4個(gè)空格常被作為縮進(jìn)排版的一個(gè)單位。縮進(jìn)的確切解釋并未詳細(xì)指定(空格 vs. 制表符)。一個(gè)制表符等于8個(gè)空格(而非4個(gè))。

4.1 行長(zhǎng)度(Line Length)

盡量避免一行的長(zhǎng)度超過80個(gè)字符,因?yàn)楹芏嘟K端和工具不能很好處理之。

注意:用于文檔中的例子應(yīng)該使用更短的行長(zhǎng),長(zhǎng)度一般不超過70個(gè)字符。

4.2 換行(Wrapping Lines)

當(dāng)一個(gè)表達(dá)式無(wú)法容納在一行內(nèi)時(shí),可以依據(jù)如下一般規(guī)則斷開之:

- 在一個(gè)逗號(hào)后面斷開

- 在一個(gè)操作符前面斷開

- 寧可選擇較高級(jí)別(higher-level)的斷開,而非較低級(jí)別(lower-level)的斷開

- 新的一行應(yīng)該與上一行同一級(jí)別表達(dá)式的開頭處對(duì)齊

- 如果以上規(guī)則導(dǎo)致你的代碼混亂或者使你的代碼都堆擠在右邊,那就代之以縮進(jìn)8個(gè)空格。

以下是斷開方法調(diào)用的一些例子:

someMethod(longExpression1, longExpression2, longExpression3,

longExpression4, longExpression5);

var = someMethod1(longExpression1,

someMethod2(longExpression2,

longExpression3));

以下是兩個(gè)斷開算術(shù)表達(dá)式的例子。前者更好,因?yàn)閿嚅_處位于括號(hào)表達(dá)式的外邊,這是個(gè)較高級(jí)別的斷開。

longName1 = longName2 * (longName3 + longName4 - longName5)

+ 4 * longname6; //PREFFER

longName1 = longName2 * (longName3 + longName4

- longName5) + 4 * longname6; //AVOID

以下是兩個(gè)縮進(jìn)方法聲明的例子。前者是常規(guī)情形。后者若使用常規(guī)的縮進(jìn)方式將會(huì)使第二行和第三行移得很靠右,所以代之以縮進(jìn)8個(gè)空格

//CONVENTIONAL INDENTATION

someMethod(int anArg, Object anotherArg, String yetAnotherArg,

Object andStillAnother) {

...

}

//INDENT 8 SPACES TO AVOID VERY DEEP INDENTS

private static synchronized horkingLongMethodName(int anArg,

Object anotherArg, String yetAnotherArg,

Object andStillAnother) {

...

}

if語(yǔ)句的換行通常使用8個(gè)空格的規(guī)則,因?yàn)槌R?guī)縮進(jìn)(4個(gè)空格)會(huì)使語(yǔ)句體看起來(lái)比較費(fèi)勁。比如:

//DON’T USE THIS INDENTATION

if ((condition1 condition2)

|| (condition3 condition4)

||!(condition5 condition6)) { //BAD WRAPS

doSomethingAboutIt(); //MAKE THIS LINE EASY TO MISS

}

//USE THIS INDENTATION INSTEAD

if ((condition1 condition2)

|| (condition3 condition4)

||!(condition5 condition6)) {

doSomethingAboutIt();

}

//OR USE THIS

if ((condition1 condition2) || (condition3 condition4)

||!(condition5 condition6)) {

doSomethingAboutIt();

}

這里有三種可行的方法用于處理三元運(yùn)算表達(dá)式:

alpha = (aLongBooleanExpression) ? beta : gamma;

alpha = (aLongBooleanExpression) ? beta

: gamma;

alpha = (aLongBooleanExpression)

? beta

: gamma;

5 注釋(Comments)

Java程序有兩類注釋:實(shí)現(xiàn)注釋(implementation comments)和文檔注釋(document comments)。實(shí)現(xiàn)注釋是那些在C++中見過的,使用/*...*/和//界定的注釋。文檔注釋(被稱為"doc comments")是Java獨(dú)有的,并由/**...*/界定。文檔注釋可以通過javadoc工具轉(zhuǎn)換成HTML文件。

實(shí)現(xiàn)注釋用以注釋代碼或者實(shí)現(xiàn)細(xì)節(jié)。文檔注釋從實(shí)現(xiàn)自由(implementation-free)的角度描述代碼的規(guī)范。它可以被那些手頭沒有源碼的開發(fā)人員讀懂。

注釋應(yīng)被用來(lái)給出代碼的總括,并提供代碼自身沒有提供的附加信息。注釋應(yīng)該僅包含與閱讀和理解程序有關(guān)的信息。例如,相應(yīng)的包如何被建立或位于哪個(gè)目錄下之類的信息不應(yīng)包括在注釋中。

在注釋里,對(duì)設(shè)計(jì)決策中重要的或者不是顯而易見的地方進(jìn)行說(shuō)明是可以的,但應(yīng)避免提供代碼中己清晰表達(dá)出來(lái)的重復(fù)信息。多余的的注釋很容易過時(shí)。通常應(yīng)避免那些代碼更新就可能過時(shí)的注釋。

注意:頻繁的注釋有時(shí)反映出代碼的低質(zhì)量。當(dāng)你覺得被迫要加注釋的時(shí)候,考慮一下重寫代碼使其更清晰。

注釋不應(yīng)寫在用星號(hào)或其他字符畫出來(lái)的大框里。注釋不應(yīng)包括諸如制表符和回退符之類的特殊字符。

5.1 實(shí)現(xiàn)注釋的格式(Implementation Comment Formats)

程序可以有4種實(shí)現(xiàn)注釋的風(fēng)格:塊(block)、單行(single-line)、尾端(trailing)和行末(end-of-line)。

5.1.1 塊注釋(Block Comments)

塊注釋通常用于提供對(duì)文件,方法,數(shù)據(jù)結(jié)構(gòu)和算法的描述。塊注釋被置于每個(gè)文件的開始處以及每個(gè)方法之前。它們也可以被用于其他地方,比如方法內(nèi)部。在功能和方法內(nèi)部的塊注釋應(yīng)該和它們所描述的代碼具有一樣的縮進(jìn)格式。

塊注釋之首應(yīng)該有一個(gè)空行,用于把塊注釋和代碼分割開來(lái),比如:

/*

* Here is a block comment.

*/

塊注釋可以以/*-開頭,這樣indent(1)就可以將之識(shí)別為一個(gè)代碼塊的開始,而不會(huì)重排它。

/*-

* Here is a block comment with some very special

* formatting that I want indent(1) to ignore.

*

* one

* two

* three

*/

注意:如果你不使用indent(1),就不必在代碼中使用/*-,或?yàn)樗丝赡軐?duì)你的代碼運(yùn)行indent(1)作讓步。

參見"文檔注釋"

5.1.2 單行注釋(Single-Line Comments)

短注釋可以顯示在一行內(nèi),并與其后的代碼具有一樣的縮進(jìn)層級(jí)。如果一個(gè)注釋不能在一行內(nèi)寫完,就該采用塊注釋(參見"塊注釋")。單行注釋之前應(yīng)該有一個(gè)空行。以下是一個(gè)Java代碼中單行注釋的例子:

if (condition) {

/* Handle the condition. */

...

}

5.1.3 尾端注釋(Trailing Comments)

極短的注釋可以與它們所要描述的代碼位于同一行,但是應(yīng)該有足夠的空白來(lái)分開代碼和注釋。若有多個(gè)短注釋出現(xiàn)于大段代碼中,它們應(yīng)該具有相同的縮進(jìn)。

以下是一個(gè)Java代碼中尾端注釋的例子:

if (a == 2) {

return TRUE; /* special case */

} else {

return isPrime(a); /* works only for odd a */

}

5.1.4 行末注釋(End-Of-Line Comments)

注釋界定符"http://",可以注釋掉整行或者一行中的一部分。它一般不用于連續(xù)多行的注釋文本;然而,它可以用來(lái)注釋掉連續(xù)多行的代碼段。以下是所有三種風(fēng)格的例子:

if (foo 1) {

// Do a double-flip.

...

}

else {

return false; // Explain why here.

}

//if (bar 1) {

//

// // Do a triple-flip.

// ...

//}

//else {

// return false;

//}

5.2 文檔注釋(Documentation Comments)

注意:此處描述的注釋格式之范例,參見"Java源文件范例"

若想了解更多,參見"How to Write Doc Comments for Javadoc",其中包含了有關(guān)文檔注釋標(biāo)記的信息(@return, @param, @see):

若想了解更多有關(guān)文檔注釋和javadoc的詳細(xì)資料,參見javadoc的主頁(yè):

文檔注釋描述Java的類、接口、構(gòu)造器,方法,以及字段(field)。每個(gè)文檔注釋都會(huì)被置于注釋定界符/**...*/之中,一個(gè)注釋對(duì)應(yīng)一個(gè)類、接口或成員。該注釋應(yīng)位于聲明之前:

/**

* The Example class provides ...

*/

public class Example { ...

注意頂層(top-level)的類和接口是不縮進(jìn)的,而其成員是縮進(jìn)的。描述類和接口的文檔注釋的第一行(/**)不需縮進(jìn);隨后的文檔注釋每行都縮進(jìn)1格(使星號(hào)縱向?qū)R)。成員,包括構(gòu)造函數(shù)在內(nèi),其文檔注釋的第一行縮進(jìn)4格,隨后每行都縮進(jìn)5格。

若你想給出有關(guān)類、接口、變量或方法的信息,而這些信息又不適合寫在文檔中,則可使用實(shí)現(xiàn)塊注釋(見5.1.1)或緊跟在聲明后面的單行注釋(見5.1.2)。例如,有關(guān)一個(gè)類實(shí)現(xiàn)的細(xì)節(jié),應(yīng)放入緊跟在類聲明后面的實(shí)現(xiàn)塊注釋中,而不是放在文檔注釋中。

文檔注釋不能放在一個(gè)方法或構(gòu)造器的定義塊中,因?yàn)镴ava會(huì)將位于文檔注釋之后的第一個(gè)聲明與其相關(guān)聯(lián)。

6 聲明(Declarations)

6.1 每行聲明變量的數(shù)量(Number Per Line)

推薦一行一個(gè)聲明,因?yàn)檫@樣以利于寫注釋。亦即,

int level; // indentation level

int size; // size of table

要優(yōu)于,

int level, size;

不要將不同類型變量的聲明放在同一行,例如:

int foo, fooarray[]; //WRONG!

注意:上面的例子中,在類型和標(biāo)識(shí)符之間放了一個(gè)空格,另一種被允許的替代方式是使用制表符:

int level; // indentation level

int size; // size of table

Object currentEntry; // currently selected table entry

6.2 初始化(Initialization)

盡量在聲明局部變量的同時(shí)初始化。唯一不這么做的理由是變量的初始值依賴于某些先前發(fā)生的計(jì)算。

6.3 布局(Placement)

只在代碼塊的開始處聲明變量。(一個(gè)塊是指任何被包含在大括號(hào)"{"和"}"中間的代碼。)不要在首次用到該變量時(shí)才聲明之。這會(huì)把注意力不集中的程序員搞糊涂,同時(shí)會(huì)妨礙代碼在該作用域內(nèi)的可移植性。

void myMethod() {

int int1 = 0; // beginning of method block

if (condition) {

int int2 = 0; // beginning of "if" block

...

}

}

該規(guī)則的一個(gè)例外是for循環(huán)的索引變量

for (int i = 0; i maxLoops; i++) { ... }

避免聲明的局部變量覆蓋上一級(jí)聲明的變量。例如,不要在內(nèi)部代碼塊中聲明相同的變量名:

int count;

...

myMethod() {

if (condition) {

int count = 0; // AVOID!

...

}

...

}

6.4 類和接口的聲明(Class and Interface Declarations)

當(dāng)編寫類和接口是,應(yīng)該遵守以下格式規(guī)則:

- 在方法名與其參數(shù)列表之前的左括號(hào)"("間不要有空格

- 左大括號(hào)"{"位于聲明語(yǔ)句同行的末尾

- 右大括號(hào)"}"另起一行,與相應(yīng)的聲明語(yǔ)句對(duì)齊,除非是一個(gè)空語(yǔ)句,"}"應(yīng)緊跟在"{"之后

class Sample extends Object {

int ivar1;

int ivar2;

Sample(int i, int j) {

ivar1 = i;

ivar2 = j;

}

int emptyMethod() {}

...

}

- 方法與方法之間以空行分隔

7 語(yǔ)句(Statements)

7.1 簡(jiǎn)單語(yǔ)句(Simple Statements)

每行至多包含一條語(yǔ)句,例如:

argv++; // Correct

argc--; // Correct

argv++; argc--; // AVOID!

7.2 復(fù)合語(yǔ)句(Compound Statements)

復(fù)合語(yǔ)句是包含在大括號(hào)中的語(yǔ)句序列,形如"{ 語(yǔ)句 }"。例如下面各段。

- 被括其中的語(yǔ)句應(yīng)該較之復(fù)合語(yǔ)句縮進(jìn)一個(gè)層次

- 左大括號(hào)"{"應(yīng)位于復(fù)合語(yǔ)句起始行的行尾;右大括號(hào)"}"應(yīng)另起一行并與復(fù)合語(yǔ)句首行對(duì)齊。

- 大括號(hào)可以被用于所有語(yǔ)句,包括單個(gè)語(yǔ)句,只要這些語(yǔ)句是諸如if-else或for控制結(jié)構(gòu)的一部分。這樣便于添加語(yǔ)句而無(wú)需擔(dān)心由于忘了加括號(hào)而引入bug。

7.3 返回語(yǔ)句(return Statements)

一個(gè)帶返回值的return語(yǔ)句不使用小括號(hào)"()",除非它們以某種方式使返回值更為顯見。例如:

return;

return myDisk.size();

return (size ? size : defaultSize);

7.4 if,if-else,if else-if else語(yǔ)句(if, if-else, if else-if else Statements)

if-else語(yǔ)句應(yīng)該具有如下格式:

if (condition) {

statements;

}

if (condition) {

statements;

} else {

statements;

}

if (condition) {

statements;

} else if (condition) {

statements;

} else{

statements;

}

注意:if語(yǔ)句總是用"{"和"}"括起來(lái),避免使用如下容易引起錯(cuò)誤的格式:

if (condition) //AVOID! THIS OMITS THE BRACES {}!

statement;

7.5 for語(yǔ)句(for Statements)

一個(gè)for語(yǔ)句應(yīng)該具有如下格式:

for (initialization; condition; update) {

statements;

}

一個(gè)空的for語(yǔ)句(所有工作都在初始化,條件判斷,更新子句中完成)應(yīng)該具有如下格式:

for (initialization; condition; update);

當(dāng)在for語(yǔ)句的初始化或更新子句中使用逗號(hào)時(shí),避免因使用三個(gè)以上變量,而導(dǎo)致復(fù)雜度提高。若需要,可以在for循環(huán)之前(為初始化子句)或for循環(huán)末尾(為更新子句)使用單獨(dú)的語(yǔ)句。

7.6 while語(yǔ)句(while Statements)

一個(gè)while語(yǔ)句應(yīng)該具有如下格式

while (condition) {

statements;

}

一個(gè)空的while語(yǔ)句應(yīng)該具有如下格式:

while (condition);

7.7 do-while語(yǔ)句(do-while Statements)

一個(gè)do-while語(yǔ)句應(yīng)該具有如下格式:

do {

statements;

} while (condition);

7.8 switch語(yǔ)句(switch Statements)

一個(gè)switch語(yǔ)句應(yīng)該具有如下格式:

switch (condition) {

case ABC:

statements;

/* falls through */

case DEF:

statements;

break;

case XYZ:

statements;

break;

default:

statements;

break;

}

每當(dāng)一個(gè)case順著往下執(zhí)行時(shí)(因?yàn)闆]有break語(yǔ)句),通常應(yīng)在break語(yǔ)句的位置添加注釋。上面的示例代碼中就包含注釋/* falls through */。

7.9 try-catch語(yǔ)句(try-catch Statements)

一個(gè)try-catch語(yǔ)句應(yīng)該具有如下格式:

try {

statements;

} catch (ExceptionClass e) {

statements;

}

一個(gè)try-catch語(yǔ)句后面也可能跟著一個(gè)finally語(yǔ)句,不論try代碼塊是否順利執(zhí)行完,它都會(huì)被執(zhí)行。

try {

statements;

} catch (ExceptionClass e) {

statements;

} finally {

statements;

}

8 空白(White Space)

8.1 空行(Blank Lines)

空行將邏輯相關(guān)的代碼段分隔開,以提高可讀性。

下列情況應(yīng)該總是使用兩個(gè)空行:

- 一個(gè)源文件的兩個(gè)片段(section)之間

- 類聲明和接口聲明之間

下列情況應(yīng)該總是使用一個(gè)空行:

- 兩個(gè)方法之間

- 方法內(nèi)的局部變量和方法的第一條語(yǔ)句之間

- 塊注釋(參見"5.1.1")或單行注釋(參見"5.1.2")之前

- 一個(gè)方法內(nèi)的兩個(gè)邏輯段之間,用以提高可讀性

8.2 空格(Blank Spaces)

下列情況應(yīng)該使用空格:

- 一個(gè)緊跟著括號(hào)的關(guān)鍵字應(yīng)該被空格分開,例如:

while (true) {

...

}

注意:空格不應(yīng)該置于方法名與其左括號(hào)之間。這將有助于區(qū)分關(guān)鍵字和方法調(diào)用。

- 空白應(yīng)該位于參數(shù)列表中逗號(hào)的后面

- 所有的二元運(yùn)算符,除了".",應(yīng)該使用空格將之與操作數(shù)分開。一元操作符和操作數(shù)之間不因該加空格,比如:負(fù)號(hào)("-")、自增("++")和自減("--")。例如:

a += c + d;

a = (a + b) / (c * d);

while (d++ = s++) {

n++;

}

printSize("size is " + foo + "\n");

- for語(yǔ)句中的表達(dá)式應(yīng)該被空格分開,例如:

for (expr1; expr2; expr3)

- 強(qiáng)制轉(zhuǎn)型后應(yīng)該跟一個(gè)空格,例如:

myMethod((byte) aNum, (Object) x);

myMethod((int) (cp + 5), ((int) (i + 3)) + 1);

9 命名規(guī)范(Naming Conventions)

命名規(guī)范使程序更易讀,從而更易于理解。它們也可以提供一些有關(guān)標(biāo)識(shí)符功能的信息,以助于理解代碼,例如,不論它是一個(gè)常量,包,還是類。

標(biāo)識(shí)符類型 命名規(guī)則 例子

包(Packages) 一個(gè)唯一包名的前綴總是全部小寫的ASCII字母并且是一個(gè)頂級(jí)域名,通常是com,edu,gov,mil,net,org,或1981年ISO 3166標(biāo)準(zhǔn)所指定的標(biāo)識(shí)國(guó)家的英文雙字符代碼。包名的后續(xù)部分根據(jù)不同機(jī)構(gòu)各自內(nèi)部的命名規(guī)范而不盡相同。這類命名規(guī)范可能以特定目錄名的組成來(lái)區(qū)分部門(department),項(xiàng)目(project),機(jī)器(machine),或注冊(cè)名(login names)。 com.sun.eng

com.apple.quicktime.v2

edu.cmu.cs.bovik.cheese

類(Classes) 命名規(guī)則:類名是個(gè)一名詞,采用大小寫混合的方式,每個(gè)單詞的首字母大寫。盡量使你的類名簡(jiǎn)潔而富于描述。使用完整單詞,避免縮寫詞(除非該縮寫詞被更廣泛使用,像URL,HTML) class Raster;

class ImageSprite;

接口(Interfaces) 命名規(guī)則:大小寫規(guī)則與類名相似 interface RasterDelegate;

interface Storing;

方法(Methods) 方法名是一個(gè)動(dòng)詞,采用大小寫混合的方式,第一個(gè)單詞的首字母小寫,其后單詞的首字母大寫。 run();

runFast();

getBackground();

變量(Variables) 除了變量名外,所有實(shí)例,包括類,類常量,均采用大小寫混合的方式,第一個(gè)單詞的首字母小寫,其后單詞的首字母大寫。變量名不應(yīng)以下劃線或美元符號(hào)開頭,盡管這在語(yǔ)法上是允許的。

變量名應(yīng)簡(jiǎn)短且富于描述。變量名的選用應(yīng)該易于記憶,即,能夠指出其用途。盡量避免單個(gè)字符的變量名,除非是一次性的臨時(shí)變量。臨時(shí)變量通常被取名為i,j,k,m和n,它們一般用于整型;c,d,e,它們一般用于字符型。 char c;

int i;

float myWidth;

實(shí)例變量(Instance Variables) 大小寫規(guī)則和變量名相似,除了前面需要一個(gè)下劃線 int _employeeId;

String _name;

Customer _customer;

常量(Constants) 類常量和ANSI常量的聲明,應(yīng)該全部大寫,單詞間用下劃線隔開。(盡量避免ANSI常量,容易引起錯(cuò)誤) static final int MIN_WIDTH = 4;

static final int MAX_WIDTH = 999;

static final int GET_THE_CPU = 1;

10 編程慣例(Programming Practices)

10.1 提供對(duì)實(shí)例以及類變量的訪問控制(Providing Access to Instance and Class Variables)

若沒有足夠理由,不要把實(shí)例或類變量聲明為公有。通常,實(shí)例變量無(wú)需顯式的設(shè)置(set)和獲取(gotten),通常這作為方法調(diào)用的邊緣效應(yīng) (side effect)而產(chǎn)生。

一個(gè)具有公有實(shí)例變量的恰當(dāng)例子,是類僅作為數(shù)據(jù)結(jié)構(gòu),沒有行為。亦即,若你要使用一個(gè)結(jié)構(gòu)(struct)而非一個(gè)類(如果java支持結(jié)構(gòu)的話),那么把類的實(shí)例變量聲明為公有是合適的。

java代碼示例

importjava.awt.*;importjava.awt.event.*;classShopFrameextendsFrameimplementsActionListener{Labellabel1,label2,label3,label4;Buttonbutton1,button2,button3,button4,button5;TextAreatext;Panelpanel1,panel2;staticfloatsum=0.0f;ShopFrame(Strings){super(s);setLayout(newBorderLayout());label1=newLabel("面紙:3元",Label.LEFT);label2=newLabel("鋼筆:5元",Label.LEFT);label3=newLabel("書:10元",Label.LEFT);label4=newLabel("襪子:8元",Label.LEFT);button1=newButton("加入購(gòu)物車");button2=newButton("加入購(gòu)物車");button3=newButton("加入購(gòu)物車");button4=newButton("加入購(gòu)物車");button5=newButton("查看購(gòu)物車");text=newTextArea("商品有:"+"\n",5,10);text.setEditable(false);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});button1.addActionListener(this);button2.addActionListener(this);button3.addActionListener(this);button4.addActionListener(this);button5.addActionListener(this);panel1=newPanel();panel2=newPanel();panel1.add(label1);panel1.add(button1);panel1.add(label2);panel1.add(button2);panel1.add(label3);panel1.add(button3);panel1.add(label4);panel1.add(button4);panel2.setLayout(newBorderLayout());panel2.add(button5,BorderLayout.NORTH);panel2.add(text,BorderLayout.SOUTH);this.add(panel1,BorderLayout.CENTER);this.add(panel2,BorderLayout.SOUTH);setBounds(100,100,350,250);setVisible(true);validate();}publicvoidactionPerformed(ActionEvente){if(e.getSource()==button1){text.append("一個(gè)面紙、");sum=sum+3;}elseif(e.getSource()==button2){text.append("一只鋼筆、");sum=sum+5;}elseif(e.getSource()==button3){text.append("一本書、");sum=sum+10;}elseif(e.getSource()==button4){text.append("一雙襪子、");sum=sum+8;}elseif(e.getSource()==button5){text.append("\n"+"總價(jià)為:"+"\n"+sum);}}}publicclassShopping{publicstaticvoidmain(String[]args){newShopFrame("購(gòu)物車");}}我沒用Swing可能顯示不出來(lái)你的效果。不滿意得話我在給你編一個(gè)。

依次輸入五句話,然后將它逆序輸出! 求標(biāo)準(zhǔn)java語(yǔ)言代碼!

最簡(jiǎn)單的寫法:

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

String[] str = new String[5];

int i = 0;

while (istr.length) {

str[i] = in.next();

i++;

}

for (int j = str.length-1; j = 0; j--) {

System.out.println(str[j]);

}

}

java編程的冒泡等排序示例

Java排序算法

1)分類:

1)插入排序(直接插入排序、希爾排序)

2)交換排序(冒泡排序、快速排序)

3)選擇排序(直接選擇排序、堆排序)

4)歸并排序

5)分配排序(箱排序、基數(shù)排序)

所需輔助空間最多:歸并排序

所需輔助空間最少:堆排序

平均速度最快:快速排序

不穩(wěn)定:快速排序,希爾排序,堆排序。

1)選擇排序算法的時(shí)候

1.數(shù)據(jù)的規(guī)模 ; 2.數(shù)據(jù)的類型 ; 3.數(shù)據(jù)已有的順序

一般來(lái)說(shuō),當(dāng)數(shù)據(jù)規(guī)模較小時(shí),應(yīng)選擇直接插入排序或冒泡排序。任何排序算法在數(shù)據(jù)量小時(shí)基本體現(xiàn)不出來(lái)差距。 考慮數(shù)據(jù)的類型,比如如果全部是正整數(shù),那么考慮使用桶排序?yàn)樽顑?yōu)。 考慮數(shù)據(jù)已有順序,快排是一種不穩(wěn)定的排序(當(dāng)然可以改進(jìn)),對(duì)于大部分排好的數(shù)據(jù),快排會(huì)浪費(fèi)大量不必要的步驟。數(shù)據(jù)量極小,而起已經(jīng)基本排好序,冒泡是最佳選擇。我們說(shuō)快排好,是指大量隨機(jī)數(shù)據(jù)下,快排效果最理想。而不是所有情況。

3)總結(jié):

——按平均的時(shí)間性能來(lái)分:

1)時(shí)間復(fù)雜度為O(nlogn)的方法有:快速排序、堆排序和歸并排序,其中以快速排序?yàn)樽詈茫?/p>

2)時(shí)間復(fù)雜度為O(n2)的有:直接插入排序、起泡排序和簡(jiǎn)單選擇排序,其中以直接插入為最好,特 別是對(duì)那些對(duì)關(guān)鍵字近似有序的記錄序列尤為如此;

3)時(shí)間復(fù)雜度為O(n)的排序方法只有,基數(shù)排序。

當(dāng)待排記錄序列按關(guān)鍵字順序有序時(shí),直接插入排序和起泡排序能達(dá)到O(n)的時(shí)間復(fù)雜度;而對(duì)于快速排序而言,這是最不好的情況,此時(shí)的時(shí)間性能蛻化為O(n2),因此是應(yīng)該盡量避免的情況。簡(jiǎn)單選擇排序、堆排序和歸并排序的時(shí)間性能不隨記錄序列中關(guān)鍵字的分布而改變。

——按平均的空間性能來(lái)分(指的是排序過程中所需的輔助空間大小):

1) 所有的簡(jiǎn)單排序方法(包括:直接插入、起泡和簡(jiǎn)單選擇)和堆排序的空間復(fù)雜度為O(1);

2) 快速排序?yàn)镺(logn ),為棧所需的輔助空間;

3) 歸并排序所需輔助空間最多,其空間復(fù)雜度為O(n );

4)鏈?zhǔn)交鶖?shù)排序需附設(shè)隊(duì)列首尾指針,則空間復(fù)雜度為O(rd )。

——排序方法的穩(wěn)定性能:

1) 穩(wěn)定的排序方法指的是,對(duì)于兩個(gè)關(guān)鍵字相等的記錄,它們?cè)谛蛄兄械南鄬?duì)位置,在排序之前和 經(jīng)過排序之后,沒有改變。

2) 當(dāng)對(duì)多關(guān)鍵字的記錄序列進(jìn)行LSD方法排序時(shí),必須采用穩(wěn)定的排序方法。

3) 對(duì)于不穩(wěn)定的排序方法,只要能舉出一個(gè)實(shí)例說(shuō)明即可。

4) 快速排序,希爾排序和堆排序是不穩(wěn)定的排序方法。

4)插入排序:

包括直接插入排序,希爾插入排序。

直接插入排序: 將一個(gè)記錄插入到已經(jīng)排序好的有序表中。

1, sorted數(shù)組的第0個(gè)位置沒有放數(shù)據(jù)。

2,從sorted第二個(gè)數(shù)據(jù)開始處理:

如果該數(shù)據(jù)比它前面的數(shù)據(jù)要小,說(shuō)明該數(shù)據(jù)要往前面移動(dòng)。

首先將該數(shù)據(jù)備份放到 sorted的第0位置當(dāng)哨兵。

然后將該數(shù)據(jù)前面那個(gè)數(shù)據(jù)后移。

然后往前搜索,找插入位置。

找到插入位置之后講 第0位置的那個(gè)數(shù)據(jù)插入對(duì)應(yīng)位置。

O(n*n), 當(dāng)待排記錄序列為正序時(shí),時(shí)間復(fù)雜度提高至O(n)。

希爾排序(縮小增量排序 diminishing increment sort):先將整個(gè)待排記錄序列分割成若干個(gè)子序列分別進(jìn)行直接插入排序,待整個(gè)序列中的記錄基本有序時(shí),再對(duì)全體記錄進(jìn)行一次直接插入排序。

面試穿什么,這里找答案!

插入排序Java代碼:

public class InsertionSort {

// 插入排序:直接插入排序 ,希爾排序

public void straightInsertionSort(double [] sorted){

int sortedLen= sorted.length;

for(int j=2;jsortedLen;j++){

if(sorted[j]sorted[j-1]){

sorted[0]= sorted[j];//先保存一下后面的那個(gè)

sorted[j]=sorted[j-1];// 前面的那個(gè)后移。

int insertPos=0;

for(int k=j-2;k=0;k--){

if(sorted[k]sorted[0]){

sorted[k+1]=sorted[k];

}else{

insertPos=k+1;

break;

}

}

sorted[insertPos]=sorted[0];

}

}

}

public void shellInertionSort(double [] sorted, int inc){

int sortedLen= sorted.length;

for(int j=inc+1;jsortedLen;j++ ){

if(sorted[j]sorted[j-inc]){

sorted[0]= sorted[j];//先保存一下后面的那個(gè)

int insertPos=j;

for(int k=j-inc;k=0;k-=inc){

if(sorted[k]sorted[0]){

sorted[k+inc]=sorted[k];

//數(shù)據(jù)結(jié)構(gòu)課本上這個(gè)地方?jīng)]有給出判讀,出錯(cuò):

if(k-inc=0){

insertPos = k;

}

}else{

insertPos=k+inc;

break;

}

}

sorted[insertPos]=sorted[0];

}

}

}

public void shellInsertionSort(double [] sorted){

int[] incs={7,5,3,1};

int num= incs.length;

int inc=0;

for(int j=0;jnum;j++){

inc= incs[j];

shellInertionSort(sorted,inc);

}

}

public static void main(String[] args) {

Random random= new Random(6);

int arraysize= 21;

double [] sorted=new double[arraysize];

System.out.print("Before Sort:");

for(int j=1;jarraysize;j++){

sorted[j]= (int)(random.nextDouble()* 100);

System.out.print((int)sorted[j]+" ");

}

System.out.println();

InsertionSort sorter=new InsertionSort();

// sorter.straightInsertionSort(sorted);

sorter.shellInsertionSort(sorted);

System.out.print("After Sort:");

for(int j=1;jsorted.length;j++){

System.out.print((int)sorted[j]+" ");

}

System.out.println();

}

}

面試穿什么,這里找答案!

5)交換排序:

包括冒泡排序,快速排序。

冒泡排序法:該算法是專門針對(duì)已部分排序的數(shù)據(jù)進(jìn)行排序的一種排序算法。如果在你的數(shù)據(jù)清單中只有一兩個(gè)數(shù)據(jù)是亂序的話,用這種算法就是最快的排序算法。如果你的數(shù)據(jù)清單中的數(shù)據(jù)是隨機(jī)排列的,那么這種方法就成了最慢的算法了。因此在使用這種算法之前一定要慎重。這種算法的核心思想是掃描數(shù)據(jù)清單,尋找出現(xiàn)亂序的兩個(gè)相鄰的項(xiàng)目。當(dāng)找到這兩個(gè)項(xiàng)目后,交換項(xiàng)目的位置然后繼續(xù)掃描。重復(fù)上面的操作直到所有的項(xiàng)目都按順序排好。

快速排序:通過一趟排序,將待排序記錄分割成獨(dú)立的兩個(gè)部分,其中一部分記錄的關(guān)鍵字均比另一部分記錄的關(guān)鍵字小,則可分別對(duì)這兩部分記錄繼續(xù)進(jìn)行排序,以達(dá)到整個(gè)序列有序。具體做法是:使用兩個(gè)指針low,high, 初值分別設(shè)置為序列的頭,和序列的尾,設(shè)置pivotkey為第一個(gè)記錄,首先從high開始向前搜索第一個(gè)小于pivotkey的記錄和pivotkey所在位置進(jìn)行交換,然后從low開始向后搜索第一個(gè)大于pivotkey的記錄和此時(shí)pivotkey所在位置進(jìn)行交換,重復(fù)知道low=high了為止。

交換排序Java代碼:

public class ExchangeSort {

public void BubbleExchangeSort(double [] sorted){

int sortedLen= sorted.length;

for(int j=sortedLen;j0;j--){

int end= j;

for(int k=1;kend-1;k++){

double tempB= sorted[k];

sorted[k]= sorted[k]sorted[k+1]?

sorted[k]:sorted[k+1];

if(Math.abs(sorted[k]-tempB)10e-6){

sorted[k+1]=tempB;

}

}

}

}

public void QuickExchangeSortBackTrack(double [] sorted,

int low,int high){

if(lowhigh){

int pivot= findPivot(sorted,low,high);

QuickExchangeSortBackTrack(sorted,low,pivot-1);

QuickExchangeSortBackTrack(sorted,pivot+1,high);

}

}

public int findPivot(double [] sorted, int low, int high){

sorted[0]= sorted[low];

while(lowhigh){

while(lowhigh sorted[high]= sorted[0])--high;

sorted[low]= sorted[high];

while(lowhigh sorted[low]=sorted[0])++low;

sorted[high]= sorted[low];

}

sorted[low]=sorted[0];

return low;

}

public static void main(String[] args) {

Random random= new Random(6);

int arraysize= 21;

double [] sorted=new double[arraysize];

System.out.print("Before Sort:");

for(int j=1;jarraysize;j++){

sorted[j]= (int)(random.nextDouble()* 100);

System.out.print((int)sorted[j]+" ");

}

System.out.println();

ExchangeSort sorter=new ExchangeSort();

// sorter.BubbleExchangeSort(sorted);

sorter.QuickExchangeSortBackTrack(sorted, 1, arraysize-1);

System.out.print("After Sort:");

for(int j=1;jsorted.length;j++){

System.out.print((int)sorted[j]+" ");

}

System.out.println();

}

}

6)選擇排序:

分為直接選擇排序, 堆排序

直接選擇排序:第i次選取 i到array.Length-1中間最小的值放在i位置。

堆排序:首先,數(shù)組里面用層次遍歷的順序放一棵完全二叉樹。從最后一個(gè)非終端結(jié)點(diǎn)往前面調(diào)整,直到到達(dá)根結(jié)點(diǎn),這個(gè)時(shí)候除根節(jié)點(diǎn)以外的所有非終端節(jié)點(diǎn)都已經(jīng)滿足堆得條件了,于是需要調(diào)整根節(jié)點(diǎn)使得整個(gè)樹滿足堆得條件,于是從根節(jié)點(diǎn)開始,沿著它的兒子們往下面走(最大堆沿著最大的兒子走,最小堆沿著最小的兒子走)。 主程序里面,首先從最后一個(gè)非終端節(jié)點(diǎn)開始調(diào)整到根也調(diào)整完,形成一個(gè)heap, 然后將heap的根放到后面去(即:每次的樹大小會(huì)變化,但是 root都是在1的位置,以方便計(jì)算兒子們的index,所以如果需要升序排列,則要逐步大頂堆。因?yàn)楦?jié)點(diǎn)被一個(gè)個(gè)放在后面去了。 降序排列則要建立小頂堆)

代碼中的問題: 有時(shí)候第2個(gè)和第3個(gè)順序不對(duì)(原因還沒搞明白到底代碼哪里有錯(cuò))

選擇排序Java代碼:

public class SelectionSort {

public void straitSelectionSort(double [] sorted){

int sortedLen= sorted.length;

for(int j=1;jsortedLen;j++){

int jMin= getMinIndex(sorted,j);

exchange(sorted,j,jMin);

}

}

public void exchange(double [] sorted,int i,int j){

int sortedLen= sorted.length;

if(isortedLen jsortedLen ij i=0 j=0){

double temp= sorted[i];

sorted[i]=sorted[j];

sorted[j]=temp;

}

}

public int getMinIndex(double [] sorted, int i){

int sortedLen= sorted.length;

int minJ=1;

double min= Double.MAX_VALUE;

for(int j=i;jsortedLen;j++){

if(sorted[j]min){

min= sorted[j];

minJ= j;

}

}

return minJ;

}

public void heapAdjust(double [] sorted,int start,int end){

if(startend){

double temp= sorted;

// 這個(gè)地方j(luò)end與課本不同,j=end會(huì)報(bào)錯(cuò):

for(int j=2*start;jend;j *=2){

if(j+1end sorted[j]-sorted[j+1]10e-6){

++j;

}

if(temp=sorted[j]){

break;

}

sorted=sorted[j];

start=j;

}

sorted=temp;

}

}

public void heapSelectionSort(double [] sorted){

int sortedLen = sorted.length;

for(int i=sortedLen/2;i0;i--){

heapAdjust(sorted,i,sortedLen);

}

for(int i=sortedLen;i1;--i){

exchange(sorted,1,i);

heapAdjust(sorted,1,i-1);

}

}

public static void main(String [] args){

Random random= new Random(6);

int arraysize=9;

double [] sorted=new double[arraysize];

System.out.print("Before Sort:");

for(int j=1;jarraysize;j++){

sorted[j]= (int)(random.nextDouble()* 100);

System.out.print((int)sorted[j]+" ");

}

System.out.println();

SelectionSort sorter=new SelectionSort();

// sorter.straitSelectionSort(sorted);

sorter.heapSelectionSort(sorted);

System.out.print("After Sort:");

for(int j=1;jsorted.length;j++){

System.out.print((int)sorted[j]+" ");

}

System.out.println();

}

}

面試穿什么,這里找答案!

7)歸并排序:

將兩個(gè)或兩個(gè)以上的有序表組合成一個(gè)新的有序表。歸并排序要使用一個(gè)輔助數(shù)組,大小跟原數(shù)組相同,遞歸做法。每次將目標(biāo)序列分解成兩個(gè)序列,分別排序兩個(gè)子序列之后,再將兩個(gè)排序好的子序列merge到一起。

歸并排序Java代碼:

public class MergeSort {

private double[] bridge;//輔助數(shù)組

public void sort(double[] obj){

if (obj == null){

throw new NullPointerException("

The param can not be null!");

}

bridge = new double[obj.length]; // 初始化中間數(shù)組

mergeSort(obj, 0, obj.length - 1); // 歸并排序

bridge = null;

}

private void mergeSort(double[] obj, int left, int right){

if (left right){

int center = (left + right) / 2;

mergeSort(obj, left, center);

mergeSort(obj, center + 1, right);

merge(obj, left, center, right);

}

}

private void merge(double[] obj, int left,

int center, int right){

int mid = center + 1;

int third = left;

int tmp = left;

while (left = center mid = right){

// 從兩個(gè)數(shù)組中取出小的放入中間數(shù)組

if (obj[left]-obj[mid]=10e-6){

bridge[third++] = obj[left++];

} else{

bridge[third++] = obj[mid++];

}

}

// 剩余部分依次置入中間數(shù)組

while (mid = right){

bridge[third++] = obj[mid++];

}

while (left = center){

bridge[third++] = obj[left++];

}

// 將中間數(shù)組的內(nèi)容拷貝回原數(shù)組

copy(obj, tmp, right);

}

private void copy(double[] obj, int left, int right)

{

while (left = right){

obj[left] = bridge[left];

left++;

}

}

public static void main(String[] args) {

Random random = new Random(6);

int arraysize = 10;

double[] sorted = new double[arraysize];

System.out.print("Before Sort:");

for (int j = 0; j arraysize; j++) {

sorted[j] = (int) (random.nextDouble() * 100);

System.out.print((int) sorted[j] + " ");

}

System.out.println();

MergeSort sorter = new MergeSort();

sorter.sort(sorted);

System.out.print("After Sort:");

for (int j = 0; j sorted.length; j++) {

System.out.print((int) sorted[j] + " ");

}

System.out.println();

}

}

面試穿什么,這里找答案!

8)基數(shù)排序:

使用10個(gè)輔助隊(duì)列,假設(shè)最大數(shù)的數(shù)字位數(shù)為 x, 則一共做 x次,從個(gè)位數(shù)開始往前,以第i位數(shù)字的大小為依據(jù),將數(shù)據(jù)放進(jìn)輔助隊(duì)列,搞定之后回收。下次再以高一位開始的數(shù)字位為依據(jù)。

以Vector作輔助隊(duì)列,基數(shù)排序的Java代碼:

public class RadixSort {

private int keyNum=-1;

private VectorVectorDouble util;

public void distribute(double [] sorted, int nth){

if(nth=keyNum nth0){

util=new VectorVectorDouble();

for(int j=0;j10;j++){

Vector Double temp= new Vector Double();

util.add(temp);

}

for(int j=0;jsorted.length;j++){

int index= getNthDigit(sorted[j],nth);

util.get(index).add(sorted[j]);

}

}

}

public int getNthDigit(double num,int nth){

String nn= Integer.toString((int)num);

int len= nn.length();

if(len=nth){

return Character.getNumericValue(nn.charAt(len-nth));

}else{

return 0;

}

}

public void collect(double [] sorted){

int k=0;

for(int j=0;j10;j++){

int len= util.get(j).size();

if(len0){

for(int i=0;ilen;i++){

sorted[k++]= util.get(j).get(i);

}

}

}

util=null;

}

public int getKeyNum(double [] sorted){

double max= Double.MIN_VALUE;

for(int j=0;jsorted.length;j++){

if(sorted[j]max){

max= sorted[j];

}

}

return Integer.toString((int)max).length();

}

public void radixSort(double [] sorted){

if(keyNum==-1){

keyNum= getKeyNum(sorted);

}

for(int i=1;i=keyNum;i++){

distribute(sorted,i);

collect(sorted);

}

}

public static void main(String[] args) {

Random random = new Random(6);

int arraysize = 21;

double[] sorted = new double[arraysize];

System.out.print("Before Sort:");

for (int j = 0; j arraysize; j++) {

sorted[j] = (int) (random.nextDouble() * 100);

System.out.print((int) sorted[j] + " ");

}

System.out.println();

RadixSort sorter = new RadixSort();

sorter.radixSort(sorted);

System.out.print("After Sort:");

for (int j = 0; j sorted.length; j++) {

System.out.print((int) sorted[j] + " ");

}

System.out.println();

}

}

//copy而來(lái)

分享文章:標(biāo)準(zhǔn)java代碼樣例 java程序有哪些編碼規(guī)范
鏈接URL:http://vcdvsql.cn/article22/hejscc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)營(yíng)銷型網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航商城網(wǎng)站服務(wù)器托管網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)