算法:一種有限、確定、有效的并適合用計(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