最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【零基礎(chǔ) 快速學(xué)Java】韓順平 零基礎(chǔ)30天學(xué)會Java

2022-07-13 16:17 作者:MapleCupTea  | 我要投稿

JAVA基礎(chǔ)跟課筆記



JAVA轉(zhuǎn)義字符篇

\t 一個制表位(即一個固定寬度的空格)

1.使用位置:文本處

2.使用效果:

原文本:北京天津上海

修改:北京\t天津\t上海

結(jié)果:北京 天津 上海

3.說明:由于是固定寬度,可以實(shí)現(xiàn)對齊效果

4 補(bǔ)充:可以多次使用\t來加寬(\t\t)

下面類似


\n 換行符

1.注意:不能直接用回車來實(shí)現(xiàn)換行

2.使用位置:文本處

3.使用效果:

原文本:jacksmithmary

修改:jack\nsmith\nmary

結(jié)果:jack

smith

mary

補(bǔ)充:在使用System.out.println("")時,其中l(wèi)n表示輸出后換行,不加ln就不會進(jìn)行換行


\\ 單獨(dú)輸出“ \ "

1.說明:第一個 \ 表示轉(zhuǎn)義命令

第二個 \ 表示要轉(zhuǎn)義的內(nèi)容(即 \ )

2.補(bǔ)充:要輸出兩個 \ 時打: \\\\

其它以此類推


\" 輸出 ”

\' 輸出 ‘

1.說明:由于System.out.println("")自帶一對“

若文本再有“會導(dǎo)致系統(tǒng)無法理解文本范圍而判斷為非法表達(dá)式


\r 表示回車

1.注意:

不同于我們理解的回車(即不是換

行),而是將鼠標(biāo)光標(biāo)回到當(dāng)前行文

本第一個字。這時直接輸入文字會替

換原來文字

2.使用效果:

原文本:韓順平教育北京

修改:韓順平教育\r北京

結(jié)果:北京平教育

3.補(bǔ)充: \r\n可以實(shí)現(xiàn)換行效果


PS:要對文字進(jìn)行如上幾個變換,一般先將所有文本寫完,再來進(jìn)行轉(zhuǎn)義字符的加入



JAVA注釋篇【做一個負(fù)責(zé)的人】

一 為什么要養(yǎng)成寫注釋的習(xí)慣

一曰可以幫助你理清思路,哪怕隔很長時間再回來看,也能快速掌握代碼內(nèi)容與項(xiàng)目目標(biāo)。二曰可以幫助接管你程序的人也能懂你的代碼思路,是一種高情商的表現(xiàn),能防止你被人追殺。


二 三種注釋

單行注釋

1.格式://注釋文字

2.說明:只能在一行內(nèi)實(shí)現(xiàn)注釋,換行就失去注釋功能

多行注釋

1.格式:/* 注釋文字*/

2.說明:可以在注釋范圍內(nèi)任意換行

3.注意:不可以嵌套多行注釋


PS:注釋存在編碼,若注釋有中文要用GBK

注釋不會被JVM執(zhí)行任何命令


文檔注釋

1.說明:注釋內(nèi)容可以被JDK提供的工具javadoc解析,生成一套以網(wǎng)頁文件形式體現(xiàn)的說明文檔

2.基本格式: /**

* javadoc標(biāo)簽1

* javadoc標(biāo)簽2

.......

*/

3.如何生成對應(yīng)的說明文檔:

首先,打開控制臺

其次,輸入javadoc -d 具體文件夾名(包

含路徑) -javadoc標(biāo)簽1 -javadoc標(biāo)簽2 ..... 你所編譯的java文件

最后,回車


4.如何看生成的說明文檔

首先,打開生成的說明文檔所在的文件夾

其次,找到后綴為html的文件

最后,右鍵找打開方式,點(diǎn)瀏覽器即可


5 .常用的javadoc標(biāo)簽



變量篇

一 為何需要變量

放眼你我所處的世界,若嘗試用變量(顧名思義,即能發(fā)生變化的量)的概念去描述這個世界,你便發(fā)現(xiàn)幾乎萬物都脫胎于它。如人的呼吸,晝夜的變化,四季的輪轉(zhuǎn),行星的舞步乃至宇宙的氣息,都能用可“變”的“量”來描述。

程序亦是如此。韓老師言:“一個程序就是一個世界?!笔褂米兞考瓤梢詫?shí)現(xiàn)程序的生命,又可以切實(shí)影響到現(xiàn)實(shí)世界的變量。

變量很抽象,卻又很實(shí)在。


變量是程序的基本組成單位



二 變量的三個基本要素

1.數(shù)據(jù)類型

2.變量名稱

3.變量的值

例如(定義一個變量)

int a = 1

int表示數(shù)據(jù)類型為整型,a表示變量名稱,=表示賦值,1表示變量的值

整體含義即 將1賦值給整型變量a


三 變量是如何體現(xiàn)在計(jì)算機(jī)上的

提要:學(xué)會將變量代碼與計(jì)算機(jī)的工作原理結(jié)合起來,更容易理解與學(xué)習(xí)變量

例如:int a = 1

當(dāng)執(zhí)行時,計(jì)算機(jī)的內(nèi)存部分會分配一定的空間并在其中放置變量的初始值 1 ,之后內(nèi)存會定義一個變量a,并由其作為主體在內(nèi)存中指向該區(qū)域,從而實(shí)現(xiàn)連接變量與值的目的(本質(zhì)上沒有賦值,a還是a,只是將a與該區(qū)域聯(lián)系并統(tǒng)一起來,這樣計(jì)算機(jī)看見a,不僅知道它是變量,而且可以調(diào)動它所連接的區(qū)域內(nèi)的值,對a進(jìn)行替換。這樣運(yùn)算a 其實(shí)對計(jì)算機(jī)來說,即運(yùn)算替換a的數(shù)值。更通俗的來講,就是中學(xué)常用的換元法,幫助簡化式子)

a = 89

當(dāng)執(zhí)行時,計(jì)算機(jī)內(nèi)存會將已經(jīng)與相應(yīng)區(qū)域聯(lián)系好的變量a(說明要先定義一個變量)去改變區(qū)域內(nèi)原本的數(shù)為89


System.out.println(a)

結(jié)合上面理解,計(jì)算機(jī)看見a,就會去找其聯(lián)系的區(qū)域內(nèi)的數(shù)值,最終用數(shù)值替換a,再將替換的輸出到控制臺上


PS:單獨(dú)只有一個變量的輸出不需要“”


誠如韓老師講的變量的概念:變量相當(dāng)與內(nèi)存中一個數(shù)據(jù)存儲空間的表示,你可以把變量看作是一個房間的門牌號,通過門牌號我們就可以找到房間,而通過變量名可以訪問到變量(值)(這里即老師之前說的變量是地址)


補(bǔ)充:int a = 1 其實(shí)是兩個指令

即 定義變量名與數(shù)據(jù)類型:int a

賦值變量:a = 1


四 變量使用的注意事項(xiàng)

說明:

1. 對第三點(diǎn)程序執(zhí)行有順序,可以參考高中數(shù)學(xué)算法一章

2. 對于第四點(diǎn),隱含一個知識: 數(shù)據(jù)類型不可以混用

3 . 對于第五點(diǎn)的作用域,見后面詳細(xì)內(nèi)容。(大致就是在一定的范圍里如在同一個類里,不得有兩個及以上的相同名的變量)


五 JAVA數(shù)據(jù)類型

(一) 分類

說明:byte:字節(jié) 占一個字節(jié)

short:短整型 占兩個字節(jié)

int:整數(shù) 占四個字節(jié)

long:長整型 占八個字節(jié)

float:單精度 占四個字節(jié)

double:雙精度 占八個字節(jié)

通過多個分類,節(jié)省內(nèi)存空間

String是引用數(shù)據(jù)類型,屬于類


(二) 整數(shù)類型

用于儲存整數(shù)

說明:當(dāng)所要儲存的值滿足某些類型的范圍時,不同的類型對相同的值有不同的占用空間。例如:10這個值滿足以上四種類型的范圍,用byte的類型,這個值只占1個字節(jié)。而用long的類型,同樣是10,則要占用8個字節(jié)??梢岳斫鉃橥粋€人在不同面積的房間里


(三) 整型細(xì)節(jié)

1.Java的各個整數(shù)類型都是固定的,在不同操作系統(tǒng)都是一樣的


2.整型常量(即給定的具體值)默認(rèn)為int型。在使用long型時,常量的后面需要加字母L(不分大小寫)

注意:在使用其它類型時,不得在其后加L

否則從long型轉(zhuǎn)到其它較小的類型時可能會存在數(shù)據(jù)的丟失(理解為房間太小,東西太多,不得不丟掉一些東西)

在使用long型時,不加L且數(shù)超過int的范圍也是不可以的。盡管相當(dāng)于把int的數(shù)放在更大空間的long中,但數(shù)值本身超過了默認(rèn)數(shù)值類型int的可儲存范圍,導(dǎo)致數(shù)值無法錄入,沒法錄入,何談轉(zhuǎn)到其它空間?由此推知,不加L且數(shù)未超過int的范圍是可以的。此時就是小房間到大房間的轉(zhuǎn)換了。


但對于其它的short,byte時,就只能在相應(yīng)范圍類輸入值了

原因:計(jì)算機(jī)會先判斷數(shù)是否在它們各自的范圍內(nèi),如果是就可以。如果不能先判斷數(shù)的范圍(比如賦值一個變量),此時計(jì)算機(jī)會判斷類型的大小,大轉(zhuǎn)小不行,小轉(zhuǎn)大可以,注意這里只看類型,而不看數(shù)的大小(詳見下文的自動類型轉(zhuǎn)換

例如:

(1)byte a = 10; 編譯成功

(2)int b = 1;

byte c = b ; 編譯失敗


3.整型使用時,一般遵循使用較小空間的整數(shù)類型的原則(節(jié)省空間原則)


4.bit是計(jì)算機(jī)中最小的存儲單位。

1 byte = 8 bit

bit存放 0 1 ,是用來二進(jìn)制的

由此可以用來解釋上文為什么相同值在不同類型所占的空間不同。

例如給定一個整型常量3

在byte中表現(xiàn)為00000011

在short中表現(xiàn)為0000000000000011

在二進(jìn)制的算法上,兩者都表示數(shù)值3,但顯然,在形式上,上面的更簡練。


(四) 浮點(diǎn)數(shù)類型

用于存儲小數(shù)

說明:浮點(diǎn)數(shù)在計(jì)算機(jī)中存放形式為:浮點(diǎn)數(shù)=符號位 + 指數(shù)位 + 尾數(shù)位(這些位可以理解為上面說的bit,都是計(jì)算機(jī)通過二進(jìn)制來還原小數(shù)的一種方式,利用這幾個位,實(shí)現(xiàn)還原)其中尾數(shù)位容易丟失數(shù)據(jù),造成精度的損失,故而稱小數(shù)都是近似值。


(五)浮點(diǎn)數(shù)細(xì)節(jié)

1.Java的各個浮點(diǎn)數(shù)類型都是固定的,在不同操作系統(tǒng)都是一樣的


2.浮點(diǎn)數(shù)常量默認(rèn)為double型。在使用float型時,常量的后面需要加字母F(不分大小寫) 其原因同講整數(shù)細(xì)節(jié)時一樣


3.兩種表示形式:

(1)十進(jìn)制數(shù)形式:5.12 0.23 等常規(guī)形式以及個位為0時另一種表現(xiàn)形式 .154

(2)科學(xué)計(jì)數(shù)法:5.12e2[即5.12*10^2](e不區(qū)分大小寫)但由于是浮點(diǎn)類型,最終答案為512.0而不是512


4.通常,應(yīng)使用double型,其精度更高(高精度原則)

在輸出時,float型會出現(xiàn)小數(shù)不能完全保留情況,且只是粗暴地刪去而非四舍五入。

例如: 在float型儲存一個2.1234567851,結(jié)果在輸出時,只有2.1234567


5.浮點(diǎn)數(shù)使用陷阱

不要對運(yùn)算結(jié)果(不是賦值的)是小數(shù)的進(jìn)行比較

原因:計(jì)算機(jī)運(yùn)算不同于人,在進(jìn)行8.1/3時,對人來講,8.1就是8.1。而對計(jì)算機(jī)來講,由于8.1是小數(shù),則會將其理解為浮點(diǎn)數(shù)并帶上精度。由于帶上了精度,在計(jì)算機(jī)上可能會表現(xiàn)為8.100001...則在計(jì)算時,會計(jì)算出2.6999999997這樣違反常識的值。故在比較2.7與8.1/3時,計(jì)算機(jī)不能給出“相等”的答案

非要比較,那怎樣避免?

答:利用相比較的兩數(shù)差值,根據(jù)差值的大小來判斷

代碼如下:

對math.abs()的補(bǔ)充:

這里涉及JAVA API文檔

API(應(yīng)用程序編程接口)其實(shí)是JAVA設(shè)計(jì)者給程序員提供的編程上的 (用于描述編程對象信息的模子,就好比是B站登錄時,手機(jī)號欄與密碼欄,而對象信息就是你登錄的手機(jī)號與密碼)方法(顧名思義,是用于解決問題的,而要解決這些問題,在程序中是通過一組代碼語句來實(shí)現(xiàn)的。故方法是語句的集合,讓它們一起執(zhí)行一個功能)

API文檔用于告訴開發(fā)者如何使用這些類,以及這些類里包含的方法


這里可以查詢到API文檔:

https://www.matools.com


如何查找到自己想用的類與方法?

首先應(yīng)當(dāng)了解API文檔里是怎樣組織的

之后由此圖來查找

例如:查找ArrayList有哪些方法

法一

第一步:明白了該類在哪個包里(在java.util)

第二步:進(jìn)入API文檔,在左欄上部找到該包

第三步:找到并點(diǎn)擊后,看左欄下部找到“類”

找到所要的類,并點(diǎn)擊

第四步:右邊出現(xiàn)信息,查找“方法”并瀏覽即可


法二(不知道類在哪個包的)

第一步:點(diǎn)工具欄“顯示”

第二步:在“索引”中查找即可


(六) 字符類型char

用于存儲單個字符(多個字符用字符串String)

字符包括:字母,漢字,數(shù)字,轉(zhuǎn)義字符

注意:字符類型可以直接存放一個數(shù)字,故可以寫:char c = 97; 沒有使用英文單引號而其它的必須使用英文單引號。


本質(zhì)上字符,在計(jì)算機(jī)中都會轉(zhuǎn)換成數(shù)字代號,即編碼,且這個編碼都是整數(shù)



由于未加單引號,97在計(jì)算機(jī)中,會被理解為編碼,那么接下來,計(jì)算機(jī)會通過unicode編碼表碼(一個將所有字符用數(shù)字編號的表)轉(zhuǎn)換成所對應(yīng)的字符。在unicode碼中,97對應(yīng)的字符是字母a,故最終輸出其實(shí)為 a。若想輸出數(shù)字本身,則需要加單引號’且為一個數(shù)字



unicode碼查詢:

https://tool.chinaz.com/Tools/Unicode.aspx


(七)字符型細(xì)節(jié)

說明:

(1)用“”的其實(shí)為字符串類型,這里使用會出現(xiàn)不兼容問題

(2)轉(zhuǎn)義字符合起來算作一個字符

(3)對第3點(diǎn),通過加上(int)實(shí)現(xiàn)將字符轉(zhuǎn)換成對應(yīng)的數(shù)字

char c = 'a';

System.out.println((int)c);

最終輸出的是97,而非a

(4)對第5點(diǎn),例子如下

System.out.println('a' + 10);

輸出107(這里說明加上單引號就表示為char類了。而整體未加“”說明不是字符串,是可以進(jìn)行計(jì)算的數(shù)字或變量)

或者

char c = 'a';

System.out.println(c + 10);

輸出107(基本的變量運(yùn)算)

或者

char c = 'a' + 1;

System.out.println(c);

輸出字符 b(不同于上面兩個的原因,是因?yàn)檫@里的運(yùn)算是在變量本身進(jìn)行的,而變量本身是char類,運(yùn)算后的數(shù)字將會轉(zhuǎn)換為相應(yīng)的字符)


(八) 常用編碼

除了上文的unicode碼,還有許多其它編碼


1.ASCII碼:歷史上最早的編碼。由美國制定的,實(shí)現(xiàn)了將英語字符用數(shù)字編號的功能(數(shù)字可以轉(zhuǎn)換為二進(jìn)制形式,故又可以稱二進(jìn)制位)。該碼用一個字節(jié)表示,一共編碼了128個字符(實(shí)際上一個字節(jié)可以表示256個字符)

2.Unicode碼:該碼用兩個字節(jié)表示,實(shí)現(xiàn)了字母與漢字的編碼統(tǒng)一(但缺點(diǎn)就是容易浪費(fèi)空間)。該碼是第二個編碼,是適應(yīng)中國用戶而編創(chuàng)的,可以認(rèn)為它是ASCII碼的拓展。實(shí)際上,該碼將世界上所有常用符號都納入其中了。因此,使用該碼一般不會出現(xiàn)亂碼

3.utf-8碼:該碼其實(shí)是Unicode碼的改進(jìn),字母由于數(shù)量少,字節(jié)數(shù)要求少,故字母使用1個字節(jié)。而漢字?jǐn)?shù)量多,字節(jié)數(shù)要求多,故漢字使用3個字節(jié)(表示更多的漢字)。從而節(jié)約了內(nèi)存空間。

4.gbk碼:該碼可謂是為漢字而生,在utf-8碼的基礎(chǔ)上,再次壓縮,漢字僅占兩個字節(jié),且范圍更加廣泛(但兩個字節(jié)并沒有完全囊括所有漢字)

5.gb2312碼:也是為漢字而生,但表示的漢字比較少,較為少用

6.big5碼:該碼實(shí)現(xiàn)了對繁體漢字編碼,方便了港澳臺地區(qū)的使用(但只支持繁體字的存儲)



(九) 布爾類型

只能用于存儲 真[true] 假[false]



六 基本數(shù)據(jù)類型轉(zhuǎn)換

(一) 自動類型轉(zhuǎn)換

例如:

int a = ' c ' ;

該語句中,變量a被定義為整型int,但賦值了一個字符型char。由于自動類型轉(zhuǎn)換機(jī)制的存在,字符型 c字母根據(jù)編碼表轉(zhuǎn)換為了整型,故編譯時沒有報(bào)錯

PS:轉(zhuǎn)換可以跨越,不一定要相鄰轉(zhuǎn)換

例如:

double d = 80

變量d是雙精度,賦的值80是整型。由于符合精度大小排序,盡管之間間隔了long型,float型,但仍一步到位,在計(jì)算機(jī)中變量d的存儲其實(shí)為80.0


(二) 自動類型轉(zhuǎn)換注意與細(xì)節(jié)

說明:

1.第一點(diǎn)與第六點(diǎn)本質(zhì)相同,可以合在一起講。其中這里容量最大的類型不光要看定義變量時的數(shù)據(jù)類型,還要看數(shù)值在默認(rèn)狀態(tài)下的數(shù)據(jù)類型。例如1.1數(shù)值出現(xiàn)時,默認(rèn)為double類型,10數(shù)值出現(xiàn)時,默認(rèn)為int


2.在進(jìn)行計(jì)算時,一定要牢記自動類型轉(zhuǎn)換的變換鏈,不得出現(xiàn)大轉(zhuǎn)小情況

例如: float a = 10 + 1.1 該表達(dá)式錯誤的原因是因?yàn)樽兞縜是單精度類型,而10 + 1.1根據(jù)第一點(diǎn)與第六點(diǎn),這里的運(yùn)算結(jié)果是雙精度double類型,根據(jù)這條賦值語句,出現(xiàn)了大類型轉(zhuǎn)小類型的情況,故表達(dá)式錯誤

改: double a = 10 + 1.1 或 float a = 10 + 1.1F


3.對三四點(diǎn),可以類比上面講的內(nèi)容


(三) 強(qiáng)制類型轉(zhuǎn)換

用于逆自動類型轉(zhuǎn)換,往往是大轉(zhuǎn)小

注意:強(qiáng)制轉(zhuǎn)換,是可能造成數(shù)據(jù)部分丟失,其類型往往表現(xiàn)為精度缺失與數(shù)據(jù)溢出

強(qiáng)制轉(zhuǎn)換的方法:在要強(qiáng)制轉(zhuǎn)換的數(shù)值或變量前加 (數(shù)據(jù)類型)

例如: int a = (int)1.9;

或: int b = 100;

byte c = (byte) b;


(四) 強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換的細(xì)節(jié)說明


說明:

1.對第二點(diǎn)可以理解為就近原則與整體思想。就近原則即強(qiáng)制轉(zhuǎn)換的數(shù)值是與強(qiáng)轉(zhuǎn)代碼最近的那一個。

例如: int a = (int)10 + 1.1 該式子報(bào)錯的原因是因?yàn)榫徒瓌t,強(qiáng)制轉(zhuǎn)換的是10而不是10 + 1.1 ,而10 + 1.1的結(jié)果是double類型,出現(xiàn)了大轉(zhuǎn)小的情況。整體思想是指的強(qiáng)轉(zhuǎn)代碼最近的哪一個可以使用()來整體化,從而實(shí)現(xiàn)整體的強(qiáng)轉(zhuǎn)。由此上面的式子可以改為int a = (int)(10 + 1.1)


(五) 基本數(shù)據(jù)類型轉(zhuǎn)字符串String

語法:在基本類型的值或變量后加上 + “”即可

例如: int a = 100;

String b = a + "" ;

PS:1.敲擊空格鍵來輸出 空 也是一種字符

2.字符串使用雙引號


(六) String類型轉(zhuǎn)基本類型

語法:

通過在 基本類型包裝類 里調(diào)用一個叫parseXX的方法 的語句

類型:

1.轉(zhuǎn)整型:Integer.parseInt("字符串")

2.轉(zhuǎn)雙精度:Double.parseDouble("")

3.轉(zhuǎn)單精度:Float.parseFloat("")

4.轉(zhuǎn)短整型:Short.parseShort("")

5.轉(zhuǎn)長整型:Long.parseLong("")

6.轉(zhuǎn)布爾型:Boolean.parseBoolean("")

7.轉(zhuǎn)字節(jié)型:Byte.parseByte("")

8.轉(zhuǎn)字符型:“字符串”.charAt(數(shù)字N)

注意:字符串轉(zhuǎn)字符其實(shí)只取字符串的第N+1個字符


(七) 有關(guān)String類型轉(zhuǎn)換的細(xì)節(jié)




運(yùn)算符篇

一 什么是運(yùn)算符

運(yùn)算符是一種特殊的符號,可以用于數(shù)據(jù)的運(yùn)算、賦值、比較等


二 運(yùn)算符類型


(一) 算術(shù)運(yùn)算符

定義:用于運(yùn)算數(shù)值的符號

類型:

說明:

1.加號與減號在不同含義中有不同的語法,要注意區(qū)別


2.在計(jì)算時,仍然要滿足上文講的自動類型轉(zhuǎn)換原則。例如在計(jì)算 10 / 4時,由于最高精度是int,故計(jì)算結(jié)果用int表示,故答案是2而不是2.5。要想得到2.5,則需要在計(jì)算時用上double類型的數(shù)值


3.模%的使用運(yùn)用了數(shù)學(xué)上取余數(shù)的公式

a % b = a - [a/b] * b

[]表示取整,且a/b中a若是小數(shù),則會強(qiáng)轉(zhuǎn)為int型


4.++與-- 是在原來的數(shù)上加或減1。

如果只是單獨(dú)的++或--,那放前放后,結(jié)果都是一樣的

例如: int a = 10; int a = 10;

a ++ ; //結(jié)果為11 ++ a ; //結(jié)果為11

如果是用于表達(dá)式,則在前是先自增后運(yùn)行其它(賦值,比較等),在后則是先運(yùn)行其它再自增

例如: int b = 8;

int c = ++b //等價于 b=b+1;c=b;

int d = b++ //等價于 d=b;b=b+1;


補(bǔ)充:運(yùn)算中的疑難問題

(1) int i = 1

i = i++

計(jì)算機(jī)對此的處理順序?yàn)椋?/p>

第一步:將變量 i 賦值給計(jì)算機(jī)給的臨時變量temp,即temp = i

第二步:i 進(jìn)行自加,即 i = i + 1

第三步:將temp變量賦給變量 i = temp

故結(jié)果仍然為 1 (自加了個寂寞)

(2) int i = 1

i = ++i

計(jì)算機(jī)對此的處理順序?yàn)椋?/p>

第一步:i 進(jìn)行自加

第二步:將變量 i 賦值給臨時變量 temp

第三步:將temp 賦值回 i

故結(jié)果為 2

(3) 設(shè)計(jì)程序三部曲:

序章:了明目標(biāo)需求

主奏:根據(jù)需求找思路(怎么定變量,用什么代碼,用什么公式)

尾聲:寫代碼,跑代碼


(二)關(guān)系運(yùn)算符

比較數(shù)值,輸出boolean型。由于其特性,往往用于if結(jié)構(gòu)的條件中或循環(huán)結(jié)構(gòu)的條件中


類型:

說明:

1.一個 = 表示賦值。只有兩個 = 時才表示相等

2.instanceof將會在后面講類時會具體說明

3.字符串的比較不可用 == ,而是用【要判斷的字符串】.equals("要比較的字符串 ")

或者,將兩者調(diào)換位置【要比較的字符串】.equals("要判斷的字符串 ")。其中后者可以避免要判斷的字符串為空而報(bào)錯


(三) 邏輯運(yùn)算符

用于連接多個條件(即多個關(guān)系表達(dá)式),和關(guān)系運(yùn)算符一樣,運(yùn)算結(jié)果仍為boolean值


類型:

說明:

  1. a和b是兩個可含變量的條件語句
  2. &或&&可以理解為是否全為真(即高中的∩);|或||可以理解為是否有真(即高中的∪);!可以理解為高中的非;^可以理解為是否不同,如果相同則取反
  3. 相關(guān)名稱:&……邏輯與

|……邏輯或

^……邏輯異或

&&……短路與

||……短路或

!……取反

4.短路與邏輯的區(qū)別:短路不同于平常理解的短路,而是字面意思上的“短”。計(jì)算機(jī)在執(zhí)行時,若在判斷第一個條件時就已經(jīng)能夠得出最終結(jié)果時,就會直接跳過第二個條件的判斷,從而實(shí)現(xiàn)縮短執(zhí)行,使得代碼運(yùn)行更快。而邏輯的則是兩個都要進(jìn)行判斷,相對來說代碼運(yùn)行較慢。當(dāng)然,當(dāng)?shù)谝粋€不能得出結(jié)果,則仍然要判斷第二個

例如:

由于使用了短路與,在第一個條件不成立時就已經(jīng)可以得到false的的答案,故不再執(zhí)行對第二變量的判斷與運(yùn)算。故結(jié)果為:不輸出ok300,其中a=4,b仍然為9

(四) 賦值運(yùn)算符

用于將數(shù)值(包括運(yùn)算后的)賦給指定變量


類型與含義:

細(xì)節(jié)與特點(diǎn):

說明:對第四點(diǎn),對b += 2 若是理解為b = b + 2時,則會由于b是byte類型,而b + 2 的結(jié)果是int類型而報(bào)錯。然而并非如此,計(jì)算機(jī)對此的真正理解為 b = (byte) (b + 2),故不會報(bào)錯。同理b ++也有如此轉(zhuǎn)化


(五) 三元運(yùn)算符

可以理解為簡化的if語句

語法:條件表達(dá)式 ?表達(dá)式1 :表達(dá)式2;

說明:當(dāng)條件表達(dá)式為true,則執(zhí)行表達(dá)式1,反之執(zhí)行表達(dá)式2。由于往往涉及變量,則需要充分掌握變量中的易錯點(diǎn)(數(shù)據(jù)的轉(zhuǎn)化,數(shù)據(jù)類型等)。三元運(yùn)算符一般要配合其它語句一起使用。在理解語句時,往往先判斷,再把判斷出的表達(dá)式保留,其它的忽略,重新組合出一個整體的表達(dá)式

例如: int a = 10;

int b = 5;

int c = a > b ? a : b ;

在理解時,發(fā)現(xiàn)a>b成立,則只看表達(dá)式1,忽略其它,則重新組合的為 int c = a;


補(bǔ)充:

1.運(yùn)算符優(yōu)先級

說明:

(1)上一行運(yùn)算符總先于下一行,大致概括為

(2)單目運(yùn)算是對一個數(shù)或一個變量進(jìn)行運(yùn)算,例如++ 。而賦值運(yùn)算即表中最后一類

(3) 逗號的使用:例如int a = 1 , b = 2 ;實(shí)現(xiàn)了前后化整體的作用

(4)>> << >>>是位移運(yùn)算符(也稱移位運(yùn)算符)會在之后 位運(yùn)算符 章節(jié)講解


2.標(biāo)識符的規(guī)則與規(guī)范

(1)概念:即對各種變量、方法和類等命名時用的字符序列。例如 int a = 10 中 a 就是標(biāo)識符,對變量命名

(2)規(guī)則(必須遵守):

說明:所謂關(guān)鍵字,其實(shí)就是java中已經(jīng)存在的代碼名稱,具有特殊用途的字符串,比如class、public等。而保留字是java中將會加入的代碼名稱。而“包含”其實(shí)就是在一串字符中可以出現(xiàn)這些詞

(3)規(guī)范(更加專業(yè)):


3.鍵盤輸入語句

介紹:要實(shí)現(xiàn)計(jì)算機(jī)接收用戶的輸入信息,則需要使用鍵盤輸入語句

語法步驟:

在鍵盤輸入語句中需要一個掃描器(Scanner)及其包含的功能代碼。由于一般情況下,編程的代碼中并沒有一開始就加載上掃描器。這就需要我們?nèi)藶榧虞d。加載的原則是從包開始,再到類,最后到其它(如方法等)。而Scanner是一個類,它包含在一個包里,故我們要按照這個順序來一步步讓計(jì)算機(jī)找到這個類,從而實(shí)現(xiàn)加載(路徑的找法見上文java API文檔)。只有我們加載好類后,才可以調(diào)用該類里包含的方法,從而實(shí)現(xiàn)我們想要的功能

綜上,步驟如下:

第一步:導(dǎo)入包含Scanner的包

import java.util.Scanner;

第二步:創(chuàng)建該類的對象(即聲明變量)

??Scanner 變量 = new Scanner(System.in);

其中new就表示創(chuàng)建的意思

第三步:調(diào)用Scanner里的功能

??String name = myscanner.next();

接收輸入的字符串

??int name = myscanner.nextInt();

接收輸入的int

………


4.四種進(jìn)制

(1)類型與表示方式

例如:

二進(jìn)制……0b1010

八進(jìn)制……01234567

十進(jìn)制……123456789(輸出時的默認(rèn)進(jìn)制)

十六進(jìn)制……0x123456789ABCDEF

(2)進(jìn)制的轉(zhuǎn)換

i.二、八、十六進(jìn)制與十進(jìn)制的相互轉(zhuǎn)換聯(lián)系高中算法一章

ii.二進(jìn)制轉(zhuǎn)八進(jìn)制:從右開始,每三個一組,轉(zhuǎn)成十進(jìn)制即可(在二進(jìn)制中,每三個表示的數(shù)的范圍為0~7,故可以實(shí)現(xiàn)。在分組時,不夠三位的可以補(bǔ)充0在前即可)。同理轉(zhuǎn)十六進(jìn)制,每四個一組

iii.八進(jìn)制轉(zhuǎn)二進(jìn)制:從左開始,把每個數(shù)轉(zhuǎn)換為三位二進(jìn)制數(shù)(不足位的在前補(bǔ)充0)。十六進(jìn)制的,則是每個數(shù)轉(zhuǎn)換位四位的二進(jìn)制數(shù)



(六) 位移運(yùn)算符

1.引子:位移運(yùn)算中的“位”其實(shí)是計(jì)算機(jī)最底層的存儲數(shù)值的bit。bit里存儲1與0,是二進(jìn)制的算法。而這些1與0的共同組合出的整體叫“碼”,每個1與0占據(jù)的不同地方就是不同的“位”。為了計(jì)算機(jī)能直接利用這些碼,并用二進(jìn)制的方式運(yùn)算。人們將這些碼分為了原碼、反碼與補(bǔ)碼,方便識別負(fù)數(shù),從而方便計(jì)算加減乘除(在人算二進(jìn)制中,直接轉(zhuǎn)換往往只能得到正數(shù),故為了表達(dá)負(fù)數(shù)就出現(xiàn)了符號位。但是仍然用的1與0,對計(jì)算機(jī)來講,非常難以辨別。于是人們又創(chuàng)造出原碼、反碼與補(bǔ)碼,從而成功幫助計(jì)算機(jī)識別出符號位)。在進(jìn)行運(yùn)算時,一個數(shù)轉(zhuǎn)換成帶符號位的二進(jìn)制(即原碼),之后再轉(zhuǎn)換成反碼,最后轉(zhuǎn)換為補(bǔ)碼。計(jì)算機(jī)只有通過補(bǔ)碼才能實(shí)現(xiàn)正確的運(yùn)算。而我們?nèi)丝催\(yùn)算結(jié)果時,是看的原碼。

詳細(xì)內(nèi)容見知乎:

https://zhuanlan.zhihu.com/p/371184302

其中幾條重點(diǎn)知識:


2.位運(yùn)算符類型與運(yùn)算規(guī)則:


說明:

(1)注意區(qū)分邏輯運(yùn)算符,位運(yùn)算符是針對一個數(shù)的二進(jìn)制補(bǔ)碼,而邏輯運(yùn)算符針對是條件語句

(2)在運(yùn)算時,計(jì)算機(jī)是看的補(bǔ)碼,結(jié)果輸出是原碼

(3)運(yùn)算方法:

例如已知兩個補(bǔ)碼:10010001 與 11110010

首先將補(bǔ)碼豎著排列,依次對齊。在通過位運(yùn)算符規(guī)則,一個一個位比較得結(jié)果

10010001

11110010

------------- (按位與)

10010000

注意:計(jì)算機(jī)在存儲補(bǔ)碼時,要按照字符類型進(jìn)行存儲且第一個位為符號位,故一般不會出現(xiàn)位數(shù)不相等的情況

下面是編程時的推導(dǎo):

說明:這里2與3是int類型,4個字節(jié),32個位(bit)

(4)

算術(shù)右移>>運(yùn)算規(guī)則:

例如: int a = 1 >> 2

其中1表示要執(zhí)行操作的數(shù),2表示1轉(zhuǎn)換后的補(bǔ)碼整體向右移動兩位,溢出部分刪去,空出部分補(bǔ)符號位

| 00000001 |

| 0 00000 | 01

| 00000000 |

本質(zhì)為原來的數(shù)除多少個2

算術(shù)左移<<運(yùn)算規(guī)則:

例如:int b = 1 << 2

| 00000001 |

00 | 000001 |

| 00000100 |

本質(zhì)為原來的數(shù)乘多少個2

邏輯右移>>>運(yùn)算規(guī)則:

例如:int c = 1 >>> 2

| 00000001 |

| 000000 | 01

| 00000000 |



程序流程控制結(jié)構(gòu)篇

一 什么叫程序流程

程序中執(zhí)行代碼的順序。它包括三種基本流程:順序、分支、循環(huán)


二、順序控制

程序從上至下逐步執(zhí)行的一種流程,中間沒有任何判斷和跳轉(zhuǎn)

程序框圖如下:

注意:在調(diào)用變量時,只能用之前所定義的,即前向引用


三 分支控制

(一) if-else

1.單分支型

基本語法:

if(條件表達(dá)式){

代碼塊;

}

說明:當(dāng)且僅當(dāng)條件表達(dá)為ture時才會執(zhí)行代碼塊


2.雙分支型

基本語法:

if(條件表達(dá)式){

代碼塊1;

}

else {

代碼塊2;

}

說明:當(dāng)條件表達(dá)式成立執(zhí)行代碼塊1,否則執(zhí)行代碼塊2


3.多分支型

基本語法:

if(條件表達(dá)式1){

代碼塊1;

}

else if(條件表達(dá)式2) {

代碼塊2;

}

else if(條件表達(dá)式3) {

代碼塊3;

}

…………

else {

代碼塊N;

}

流程圖:

說明:可以省略最后的else部分。當(dāng)省略它時,若所有條件都不滿足,則沒有任何代碼塊執(zhí)行。反之,當(dāng)不省略時,若所有條件都不滿足,則只會執(zhí)行else所包含的代碼塊


4.嵌套分支型

顧名思義,在分支流程中再分支,如同樹枝一樣(為了可讀性強(qiáng),建議不要超過3層嵌套分支)


基本語法(舉例一種):

if(條件1){

if(條件1.1){

if(條件1.1.1){

代碼塊;

}else

代碼塊;

}else

代碼塊;

}


(二)switch

基本語法:

switch(表達(dá)式){

case 常量1:

代碼塊1;

break;

case 常量:

代碼塊2;

break;

………

case 常量N:

代碼塊N;

break;

default:

代碼塊;

break;

}

說明:表達(dá)式對應(yīng)一個值(其實(shí)只要有值返回,表達(dá)式為變量都可以),只可以為int,byte,short,char,enum(枚舉),String。當(dāng)表達(dá)式的值符合下方哪個常量(是從上往下依次檢索),就執(zhí)行哪個常量所對應(yīng)的代碼塊,一直運(yùn)行到break后跳出整個switch分支。若一個都不匹配,則執(zhí)行default處的代碼塊


注意:

1.匹配的常量數(shù)據(jù)類型應(yīng)當(dāng)與表達(dá)式數(shù)值一致,或者可以自動轉(zhuǎn)成可以相互比較的類型(例如char可以轉(zhuǎn)換為int)

2.default可以省略

3.break未寫,將不會跳出switch,而是順序執(zhí)行下一個代碼塊,一直運(yùn)行到結(jié)尾或下一個的break(即穿透情況)


四 循環(huán)控制

(一) for

基本語法:;

for(循環(huán)變量初始化;循環(huán)條件;循環(huán)變量迭代){

循環(huán)執(zhí)行的代碼塊;

}

例如:

for( int i = 1 ; i <= 10 ; i++){

System.out.println("你好,韓順平教育");

}

說明:

(1)執(zhí)行流程聯(lián)系高中算法中的當(dāng)型循環(huán),流程圖如下:

值得注意的是,迭代在循環(huán)執(zhí)行代碼塊后進(jìn)行

(2)括號內(nèi)的初始化與變量迭代可以寫在括號外的其它地方,但循環(huán)條件不可以,且循環(huán)條件兩頭的分號不可以省

(3)處于括號內(nèi)的新定義的變量不能在for循環(huán)外的代碼中使用

(4) for(;;)是死循環(huán)。利用cral + c實(shí)現(xiàn)終止程序退出

(5)可以初始化,迭代多個變量,變量間用逗號隔開


(二)while

基本語法:

while(循環(huán)條件){

循環(huán)代碼塊;

循環(huán)變量迭代;

}

說明:與for基本一致,只是基本要素位置不同而已。流程圖如下:

值得注意的是,未寫循環(huán)變量迭代,將會進(jìn)行死循環(huán)



(三) dowhile

基本語句:

do{

循環(huán)代碼塊;

循環(huán)變量迭代;

}while(循環(huán)條件);

說明:與for、while一樣,有循環(huán)語句的四要素(這里省略了變量初始化),只是位置不一樣。但與這兩個不一樣的是,該語句無論如何都要先執(zhí)行一遍,再進(jìn)行循環(huán)。流程圖如下:

與while一樣,未寫循環(huán)變量迭代,將會進(jìn)行死循環(huán)


(四) 多重循環(huán)

介紹:在一個循環(huán)體中嵌套另一個循環(huán)體(一般嵌套使用兩層,最多不要超過三層)

執(zhí)行流程概要:可以采取換元法,把內(nèi)層循環(huán)當(dāng)作整體作為外層循環(huán)的代碼塊,從而簡化思路。比如說,若外層的循環(huán)次數(shù)為m次,內(nèi)層 的循環(huán)數(shù)為n次,則外層每進(jìn)行一次,則內(nèi)循環(huán)要完整進(jìn)行n次,故總體內(nèi)循環(huán)執(zhí)行m*n次



五 跳轉(zhuǎn)控制

(一) break

用于終止最近某個語句塊的執(zhí)行,一般用在switch或循環(huán)語句中

基本語法:

……

break;

……

為了能控制break語句的發(fā)生,往往搭配If語句使用。例如:


補(bǔ)充:

break語句可以配合標(biāo)簽(在break后面加上標(biāo)簽名稱)來針對性地終止某一個代碼塊。標(biāo)簽的使用方法:在一個{}整體前面加上"【標(biāo)簽名稱】: "即可。但由于使用標(biāo)簽會使代碼的可讀性變差,故實(shí)際開發(fā)中盡量不要使用標(biāo)簽。例如:

說明:當(dāng)執(zhí)行到break時,由于標(biāo)簽的存在,使得lable1標(biāo)簽所指的代碼塊終止,即外循環(huán)終止,從而直接跳出到最外層


(二) continue

用于結(jié)束本次循環(huán),進(jìn)行下一個循環(huán)

基本語法結(jié)果與break一樣,也可以使用if來控制與使用標(biāo)簽來針對


(三) return

用于跳出方法,如果使用在主方法main中,將會直接退出程序

與上面的一樣,基本語法不變

有關(guān)方法,將在之后講解



數(shù)組篇

一 什么叫數(shù)組

顧名思義,數(shù)值的組合,可以理解為高中里的集合。通過使用數(shù)組,可以實(shí)現(xiàn)多個數(shù)值,多個變量的批量操作或者針對操作,從而簡化代碼。數(shù)組是一種數(shù)據(jù)類型,屬于引用類型,故也會涉及基本數(shù)據(jù)類型等相關(guān)知識

二 數(shù)組的基本使用方法

(一)定義數(shù)組

基本語法:

數(shù)據(jù)類型 數(shù)組名稱[] = new 數(shù)據(jù)類型 [大小];

例如:

int a[] = new int[5];

創(chuàng)建一個名為a的可包含5個int數(shù)值的數(shù)組

或者可以把[]放在第一個數(shù)據(jù)類型的后面

補(bǔ)充:可以只寫 數(shù)據(jù)類型 數(shù)組名稱[] 來聲明,之后再創(chuàng)建new語句。注意此時內(nèi)存并沒有分配空間給數(shù)組,若沒有new語句就直接賦值會報(bào)錯


(二)針對性調(diào)用

當(dāng)定義完數(shù)組并存儲了一定數(shù)量的數(shù)值時,可以類似于變量一樣,通過 數(shù)組名稱[n] 表示調(diào)用某一個數(shù)組里的單獨(dú)某個數(shù)值,其中[n]表示下標(biāo)。注意n表示第n+1個數(shù)值,也就是說,第一個數(shù)值其實(shí)是第零個[0]


(三)賦值數(shù)值

基本語法

1.數(shù)組名稱[n] = .......其中[n]表示下標(biāo)

2.數(shù)據(jù)類型 數(shù)組名稱[] = {a , b , c, ... };該方法又稱為靜態(tài)初始化

3.數(shù)據(jù)類型 數(shù)組名稱[] = new 數(shù)據(jù)類型[]{……};該方法[]不可以填任何數(shù)字


(四) 調(diào)用數(shù)組元素個數(shù)

基本語法:類似變量,利用 數(shù)組名稱.length 來表示


三 數(shù)組的使用細(xì)節(jié)

(一)數(shù)值與數(shù)組的數(shù)據(jù)類型要一致或能夠進(jìn)行自動轉(zhuǎn)換或能夠把小轉(zhuǎn)大才行

(二)數(shù)組創(chuàng)建后,如果沒有賦值,則計(jì)算機(jī)會以默認(rèn)值賦值給所有元素。分別如下:

int……0

short……0

byte……0

long……0

float……0.0

double……0.0

char……\u0000 [十六進(jìn)制]

boolean……false

String……null

(三)數(shù)組的下標(biāo)從0開始且只能在范圍內(nèi)使用

(四)由于數(shù)組的數(shù)據(jù)類型為引用類型,故其數(shù)據(jù)實(shí)則為 對象。但數(shù)組[n]是基本數(shù)據(jù)類型,要涉及基本數(shù)據(jù)類型中的使用細(xì)節(jié)


四 數(shù)組的賦值機(jī)制

數(shù)組在默認(rèn)情況下是引用傳遞,賦值的值本質(zhì)是地址。不同于基本數(shù)據(jù)類型的賦值(值傳遞),在這里,一個值賦值給另一個會影響到本身。例如:

int[] arr1 = {1,2,3};

int[] arr2 = arr1;

arr2[0] = 10;

執(zhí)行完后,不光是arr2第一個元素改變了,arr1也發(fā)生了變化

這里我們將詳細(xì)講解引用傳遞與值傳遞在計(jì)算機(jī)內(nèi)存上的具體體現(xiàn):

java在計(jì)算機(jī)上的內(nèi)存也可以稱為jvm的內(nèi)存。在這里,內(nèi)存大致可以分出三個區(qū)域:棧、堆、方法區(qū)。其中變量、數(shù)值(基本數(shù)值類型的)、地址在棧中存儲。堆中存儲地址所連接的詳細(xì)數(shù)據(jù)。(這里的地址可以理解為路牌,它只起到指引作用,不能起到存儲內(nèi)容的作用。而它指引的目的地,才是引用數(shù)據(jù)類型的內(nèi)容的集中處)


值傳遞:基本數(shù)據(jù)類型的一種賦值方式。它是在棧中進(jìn)行的。例如:

int a = 10;

int b = a;

此時a賦值給b的操作實(shí)際為:a變量在棧中分得空間,由變量a指向該空間,該空間中存儲int數(shù)值10。之后a將該空間數(shù)值復(fù)制給b變量指向的空間中。注意,復(fù)制的是數(shù)值本身。故此時改變b中數(shù)值,只在b指向的空間中執(zhí)行,并不會影響a變量指向的空間。


引用傳遞:引用數(shù)據(jù)類型的一種賦值方式,變量在棧中分得一定空間來存儲地址并在堆中一定空間中存儲實(shí)在的數(shù)值內(nèi)容。而地址作為索引,使計(jì)算機(jī)與堆中該空間聯(lián)系。例如之前的例子:

int[] arr1 = {1,2,3};

int[] arr2 = arr1;

arr2[0] = 10;

數(shù)組arr1在棧中與堆中分別獲得一定空間,在前者存儲地址,后者存儲數(shù)組中的數(shù)值(存儲的數(shù)值在該區(qū)域中會被分到更小的區(qū)域,互不干擾,從而實(shí)現(xiàn)了下標(biāo)功能)。之后地址與堆相聯(lián)系。在arr1賦值給arr2時,arr1在棧中復(fù)制地址給arr2(注意,賦值的是地址!),使得arr2所指向的地址又與堆中相同空間聯(lián)系(路牌內(nèi)容一樣,目的地只有一個,故兩者都會來到同一個地方)。若改變arr2中的數(shù)值,其實(shí)是計(jì)算機(jī)通過arr2中的地址找到堆中相應(yīng)位置后,再改變數(shù)值。故改變后,arr1也跟著改變。

注意:若出現(xiàn)這樣的賦值:

int[] arr1 = {1,2,3};

int[] arr2 = {1,2,3,4};

arr1 = arr2;

此時,由于arr2直接賦值給arr1,使得arr1原先地址替換,導(dǎo)致原來的數(shù)組arr1由于沒有地址聯(lián)系而被計(jì)算機(jī)清除


五 數(shù)組的拷貝

由于數(shù)組的賦值的不同,需要靠其它方式進(jìn)行像值傳遞一樣的復(fù)制方式

基本方法:在堆中開辟出新的數(shù)組區(qū)域,將原來的數(shù)組所含數(shù)值復(fù)制到該新區(qū)域,并讓新的數(shù)組建立出聯(lián)系該區(qū)域的地址

基本語法:

int[] arr1 = {……};

int[] arr2 = new int[arr1.length];

//開辟出新的數(shù)組區(qū)域

for(int i = 0;i < arr1.length;i++){

arr2[ i ] = arr1[ i ];

}

//將數(shù)組arr1中的數(shù)依次復(fù)制到arr2中


六 數(shù)組的反轉(zhuǎn)

將數(shù)組中的數(shù)值根據(jù)下標(biāo)倒置過來

效果例如:

{10,20,30,40} >>>>{40,30,20,10}

基本思路1:

基本代碼1:

說明:temp變量是用于交換數(shù)值的中間變量,就如同倒水一樣,把兩個杯子里的水互換時,必須要第三個杯子幫助。而temp就是這第三個杯子。


基本思路2:通過創(chuàng)建新的數(shù)組來存儲倒序后的數(shù)值,再把這個數(shù)組復(fù)制到目標(biāo)數(shù)組

基本代碼2:

說明:由于要逆序復(fù)制,數(shù)組1復(fù)制到數(shù)組2時要倒著進(jìn)行,這也是 i-- 的原因。但到數(shù)組2時要正著導(dǎo)入,這便是 j++ 的原因


七 數(shù)組的擴(kuò)容與縮減

能夠?qū)崿F(xiàn)動態(tài)地增加或減少數(shù)組中的元素個數(shù)的方法

基本思路與代碼:

說明:縮減的方法,就是在擴(kuò)容的思路上,大致上把加改減即可


八 基本排序

用于將多個數(shù)據(jù)按照指定的順序進(jìn)行排列的方法

(一)分類

1.內(nèi)部排序:所需要排序的數(shù)據(jù)可以全部加載到內(nèi)存處理器中來進(jìn)行排序(包括:交換式排序法、選擇式排序法和插入式排序法)

2.外部排序:所需要排序的數(shù)據(jù)不能完全加載到內(nèi)存處理器中,需要在外部存儲來進(jìn)行排序(包括:合并排序法和直接合并排序法)


(二) 冒泡排序法

基本思路:對待排序的數(shù)按照序號從后往前依次比較相鄰數(shù)的大小,改變相鄰數(shù)的順序使得較大的數(shù)從前移向后部,實(shí)現(xiàn)將數(shù)從小到大排列

說明:每次比較時,都是從前往后依次兩個兩個比較。第一次比較24與69,第二次比較69與80,依次類推。然后逐漸將大的數(shù)通過兩兩交換,排到后面去。


過程特點(diǎn):

說明:

1.第2點(diǎn)與第3點(diǎn)說明是一個雙層循環(huán)結(jié)構(gòu)

2.第4點(diǎn)涉及的代碼為常見的交換數(shù)值代碼

3. 外循環(huán)次數(shù)與內(nèi)循環(huán)次數(shù)有相同的值(即4),說明可以套用相同的變量,且4又恰好等于數(shù)組元素個數(shù)減1,可以方便實(shí)現(xiàn)“先死后活”

4.每次比較時,內(nèi)循環(huán)次數(shù)再逐漸變少,涉及 減法的計(jì)算


參考代碼:



九 順序查找

一種按照從前往后的順序在數(shù)組中找到目標(biāo)數(shù)值的方法

基本語法:


說明:利用index變量紀(jì)錄是否找到所需要的值,若找到則index變量原來的值會改變,否則將保持原來的值。這時,只用判斷index是否變化就可以判斷是否找到


十 二維數(shù)組

如果將之前學(xué)的那一列數(shù)組當(dāng)作一維數(shù)組,則二維數(shù)組則是將多個一維數(shù)組組合起來。

例如:

數(shù)組1: 1,0,5,8

數(shù)組2: 4,5,8,6

數(shù)組3: 1,6,9,0

那么二維數(shù)組為:

1,0,5,8

4,5,8,6

1,6,9,0


(一) 二維數(shù)組的內(nèi)存存放方式

類似于一維數(shù)組的地址操作,在這里,不同在于在堆中又存放了一個地址來連接一維數(shù)組


(二)創(chuàng)建二維數(shù)組

基本語法1:

數(shù)據(jù)類型[] [] 數(shù)組名稱 = new 數(shù)據(jù)類型[大小1] [大小2]

(類比一維數(shù)組的創(chuàng)建方式)

說明:

大小1表示二維數(shù)組中包含了多少個一維數(shù)組,大小2表示一個一維數(shù)組包含多少元素。在賦值時,[][]也表示相同的指代。例如:arr[1][2] = 1;表示把下標(biāo)為1的一維數(shù)組中的下標(biāo)為2的元素賦值為1

同一維數(shù)組,也可以先聲明,再new。而且二維數(shù)組也有相同的默認(rèn)賦值


補(bǔ)充:

二維數(shù)組可以出現(xiàn)“列數(shù)不確定”現(xiàn)象。即二維數(shù)組中的一維數(shù)組中的元素不一定要相同。例如:

1 ,

2,1

1,0,0

那么此時創(chuàng)建方式略有不同:

數(shù)據(jù)類型[] [] 數(shù)組名稱 = new 數(shù)據(jù)類型[大小1] []

(注意:沒有填 大小2 ,就導(dǎo)致了一維數(shù)組其實(shí)并沒有new一個實(shí)際的空間出來,此時里面全為空null)

之后要單獨(dú)地為每個一維數(shù)組開(new)空間:

數(shù)組名稱[下標(biāo)] = new int[大小]

最后依次賦值


基本語法2:

數(shù)據(jù)類型 數(shù)組名稱[][] = {{值1,值2...},{值...}}

說明:

[][]位置可以直接放在數(shù)據(jù)類型的后面,也可以像這樣:int[] y[] = ……

該方法可以免去賦值的代碼


(三)遍歷二維數(shù)組的方法

基本語法

說明:

(注意關(guān)注循環(huán)部分)

對二維數(shù)組來說,arr.length得到的是有多少個一維數(shù)組。arr[i].length才是得到的某個一維數(shù)組中有多少個元素

arr[ i ][ j ]是遍歷二維數(shù)組的關(guān)鍵,而嵌套循環(huán)的主要作用就是幫助改變i與j的值


楊輝三角作業(yè)參考:

評價:未考慮到只有1行或2行的情況,這里少了if去判斷。未能簡化思路:除了首末就是中間元素,剛好可以分別賦值,由此考慮if-else并使用邏輯條件

老師思路(更簡潔):



面向?qū)ο缶幊唐ɑA(chǔ))

一 類與對象

(一) 什么是對象與類

一個程序就是一個世界,在這個世界中存在許多的事物(如樹,貓,狗,人……)。而這些事物又存在許多特征 ,包括外貌的特征,心理的特征,行為的特征等等。我們把這些事物稱為對象,一個對象主要具備屬性,行為的特征(就像寫個人信息表一樣,屬性就是指那些如身高、體重、年齡一樣的數(shù)據(jù),而行為就像是指你喜歡做什么,口頭禪是什么一樣的數(shù)據(jù))。每個對象都是獨(dú)一無二的(就像人一樣),但存在一些對象具有一些某方面上的相似性,我們就把這些對象統(tǒng)一起來,分門別類,把他們整體稱為類(就好比生物中的界門綱目科屬種一樣)


(二)類在編程中解決的問題

如上文說到,類中包含的對象具有一些方面的相似性,或者說這些對象都有同樣的可描述的方面,比如說人這個類里,每個人都有性別,年齡,身高,體重等等可描述的方面。而類就是以這些個方面來歸納的。如果我們創(chuàng)建一個類,那么這些個類中就有這些個描述對象的方面,就像是一個對象生成器一樣,一個特征編譯器的模子,只要按照這個類,就能輕松創(chuàng)造出具有一定屬性,行為的對象,方便管理對象的數(shù)據(jù)

類是一種自定義的數(shù)據(jù)類型,可以添加多種屬性,行為來歸納數(shù)據(jù),這些數(shù)據(jù)實(shí)際上就是對象。

由于類其優(yōu)越的數(shù)據(jù)管理能力,可以幫助我們在創(chuàng)建,調(diào)用對象時,可以一下子動用整個對象的全部數(shù)據(jù)來實(shí)現(xiàn)某些功能且不會出現(xiàn)混亂情況(在傳統(tǒng)的直接定義法定義某個對象時如int name = ....;int age = ....會使數(shù)據(jù)特別分散,尤其是要用到多個對象時,如果不好好命名變量名稱,是極容易弄亂的。利用數(shù)組法雖然可以整理數(shù)據(jù),但在調(diào)用數(shù)據(jù)時不是很直觀,比如int[] dog = {1,5,45};由于調(diào)用其中單獨(dú)數(shù)據(jù)時只能用dog[下標(biāo)]表示,如果我不提前記憶{}內(nèi)每個數(shù)據(jù)代表什么含義時,誰知道誰是誰?而且數(shù)組往往只能整合一種數(shù)據(jù)類型,比如我想添加狗的姓名時,由于是字符串類型,就無可奈何。而類則是解決了上面兩者情況的問題,并且整合了兩者的優(yōu)點(diǎn))


(三) 創(chuàng)建類與對象

1.創(chuàng)建類:

基本語法:

class 類名 {

數(shù)據(jù)類型 屬性1;

數(shù)據(jù)類型 屬性2;

數(shù)據(jù)類型 屬性3;

.........

}

注意:

要在主類main的{}外定義新的類;

數(shù)據(jù)類型可以有數(shù)組

例如(一個描述貓的類):

2.創(chuàng)建一個對象

基本語法:

類名 對象名 = new 類名();

對象名.屬性1 = ...;

對象名.屬性2 = ....;

……

例如:

注意:對象的創(chuàng)建一般放在主類里


(四) 對象與類在內(nèi)存的存在形式

由于類是引用數(shù)據(jù)類型,故基本原理與數(shù)組一樣,這里不再贅余(結(jié)合之前的知識來理解圖即可)


(超2w字了。。。可惡(#-.-))

(等以后筆記可以拓展了再更新)





【零基礎(chǔ) 快速學(xué)Java】韓順平 零基礎(chǔ)30天學(xué)會Java的評論 (共 條)

分享到微博請遵守國家法律
青岛市| 北票市| 海口市| 宁安市| 神木县| 洛南县| 华安县| 德保县| 吉林市| 杭锦后旗| 友谊县| 德庆县| 平原县| 太和县| 宁晋县| 称多县| 陆河县| 肇州县| 湖南省| 崇义县| 泌阳县| 晋城| 改则县| 无棣县| 偏关县| 普安县| 临海市| 鸡西市| 黎川县| 南漳县| 肥乡县| 文成县| 故城县| 宾阳县| 太仆寺旗| 施秉县| 崇州市| 云林县| 莆田市| 榆社县| 夏津县|