第一章 基礎(chǔ)(1.1基礎(chǔ)編程模型)

算法:一種有限、確定、有效的并適合用計(jì)算機(jī)程序來實(shí)現(xiàn)的解決問題的方法。

最大公約數(shù):

a/b ? ? a叫做被除數(shù) b叫做除數(shù) ?a除以b

如果數(shù)a能被數(shù)b整除,a就叫做b的倍數(shù),b就叫做a的約數(shù)。

歐幾里德算法:

計(jì)算兩個(gè)非負(fù)整數(shù)p和q的最大公約數(shù)。若q=0,則最大公約數(shù)為p。否則,將p除以q得到余數(shù)r,p和q的最大公約數(shù)即為q和r的最大公約數(shù)。

描述和實(shí)現(xiàn)算法所用到的語言特性、軟件庫和操作系統(tǒng)特性總稱為基礎(chǔ)編程模型

2.原始數(shù)據(jù)類型與表達(dá)式

java語言最基本的原始數(shù)據(jù)類型:1.整型,及其算數(shù)運(yùn)算符(int)

2.浮點(diǎn)型,及其算數(shù)運(yùn)算符(double)

3.布爾型,它的值為{true,false},及其邏輯運(yùn)算(boolean)

4.字符型,它的值是你能夠輸入的英文字母數(shù)字字符和符號(hào)(char)

浮點(diǎn)轉(zhuǎn)換為整型將會(huì)截?cái)嘈?shù)部分而非四舍五入。


2.4其它原始類型

其它五種原始數(shù)據(jù)類型:64位整數(shù),及其算數(shù)運(yùn)算符(long)

16位整數(shù),及其算數(shù)運(yùn)算符(short)

16位字符,及其算數(shù)運(yùn)算符(char)

8位整數(shù),及其算數(shù)運(yùn)算符(byte)

32位單精度實(shí)數(shù),及其算數(shù)運(yùn)算符(float)


4.簡便寫法

4.1聲明并且初始化

int i = 1;


4.2隱式賦值

++i 等價(jià)于 i=i+1;

i/=2 等價(jià)于 i=i/2;


5.4起別名

如果將一個(gè)數(shù)組變量賦予另一個(gè)變量,那么兩個(gè)變量將會(huì)指向同一個(gè)數(shù)組。

int[] a = new int[N];

a[i] = 1234;

int[] b = a;

b[i] = 5678;

這種情況有時(shí)可能會(huì)導(dǎo)致難以察覺的問題。如果是想將數(shù)組復(fù)制一份,那么應(yīng)該聲明、創(chuàng)建并初始化一個(gè)新的數(shù)組,然后將原數(shù)組中的元素zhi挨個(gè)復(fù)制到新數(shù)組。


6.1靜態(tài)方法

計(jì)算平方根(牛頓迭代法)

publicstaticdoublesqrt(doublec)

{

if(c<0)returnDouble.NaN;//NaN: not a number

doubleerr = 1e-15;//極小值

doublet = c;

while(Math.abs(t-c/t) > err*t)//t^2接近c(diǎn), 防止小數(shù)

t = (c/t + t)/2.0;

returnt;

}

1e-15:1x10的-15次方

Double.NaN ?NaN是Double的一個(gè)成員變量,用來指示一個(gè)Double不是合法的

Math.abs() 返回參數(shù)的絕對(duì)值


6.4遞歸

方法調(diào)用自己

編寫遞歸代碼時(shí)重要的三點(diǎn):1.遞歸總有一個(gè)最簡單的情況——方法的第一條語句總是一個(gè)包含return的條件語句。

2.遞歸調(diào)用總是去嘗試解決一個(gè)規(guī)模更小的子問題,這樣遞歸才能收斂到最簡單的情況。

3.遞歸調(diào)用的父問題和嘗試解決的子問題之間不應(yīng)該有交集


6.6模塊化編程

以功能塊為單位進(jìn)行程序設(shè)計(jì),實(shí)現(xiàn)其求解算法的方法稱為模塊化

這個(gè)模型的最重要之處在于通過靜態(tài)方法庫實(shí)現(xiàn)了模塊化編程。我們可以構(gòu)造許多個(gè)靜態(tài)方法庫(模塊),一個(gè)庫中的靜態(tài)方法也能夠調(diào)用另一個(gè)庫中定義的靜態(tài)方法。

優(yōu)點(diǎn):程序整體的代碼量很大時(shí),每次處理的模塊大小仍然適中。

可以共享和重用代碼

縮小調(diào)試范圍

可以為解決編程問題建立合適的抽象模型


答疑

什么是Java的字節(jié)碼?

它是程序的一種低級(jí)表示,可以運(yùn)行于JVM中。將程序抽象為字節(jié)碼可以保證Java程序員的代碼能夠運(yùn)行在各種設(shè)備上。

Math.abs(-2147483648)的返回值是什么?

-2147483648。這個(gè)奇怪的結(jié)果(但的確是真的)就是整數(shù)溢出的典型例子。

負(fù)數(shù)的補(bǔ)碼是取反加一

byte的取值范圍為-128~127,占用1個(gè)字節(jié)(-2的7次方 到2的7次方 -1)

short的取值范圍為-32768~32767,占用2個(gè)字節(jié)(-2的15次方 到 2的15次方 -1)

int的取值范圍為(-2147483648~2147483647),占用4個(gè)字節(jié)(-2的31次方 到 2的31次方 -1)

long的取值范圍為(-9223372036854774808~9223372036854774807),占用8個(gè)字節(jié)(-2的63次方? 到 2的63次方 -1),

如何才能讓一個(gè)double變量初始化為無窮大?

可以使用Java的內(nèi)置函數(shù):Double.POSITIVE_INFINITY和Double.NEGATIVE_INFINITY。

Java表達(dá)式1/0和1.0/0.0的值是什么?

第一個(gè)會(huì)產(chǎn)生除零異常,第二個(gè)為Infinity(無窮大)

為什么數(shù)組的起始索引是0而不是1?

這個(gè)習(xí)慣來源于機(jī)器語言,那時(shí)要計(jì)算一個(gè)數(shù)組元素的地址需要將數(shù)組的起始地址加上該元素的索引。將起始索引設(shè)為1要么會(huì)浪費(fèi)數(shù)組的第一個(gè)元素的空間,要么會(huì)花費(fèi)額外的時(shí)間來將索引減1。(可以把下標(biāo)看成偏移量)

在Java中,一個(gè)靜態(tài)方法能夠?qū)⒘硪粋€(gè)靜態(tài)方法作為參數(shù)嗎?

不行,但有很多語言可以這么做


練習(xí)題

1.給出以下表達(dá)式的值

2.0e-6 * 100000000.1200.0000002

1 + 2 +?“3”?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?? ? 33

2.下列語句會(huì)打印出什么結(jié)果?給出解釋

System.out.println(‘b’ +?‘c’)?? ??? ??? ??? ??? ??? ??? ??? ??? ?? ? 197

System.out.println((char)(‘a(chǎn)’ + 4))?? ??? ??? ??? ??? ??? ??? ?? ? e

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容