|
今天參考課本寫了一個(gè)關(guān)于二進(jìn)制與十進(jìn)制轉(zhuǎn)換的程序,程序算法不難,但寫完后測試發(fā)現(xiàn)不論是二轉(zhuǎn)十還是十轉(zhuǎn)二,對(duì)于大于21億即超過整數(shù)范圍的數(shù)不能很好的轉(zhuǎn)換。都會(huì)變成0. 參考書籍發(fā)現(xiàn)使用使用BigInteger可以解決這個(gè)問題。 于是查找了下JDK,然后測試幾次終于寫成功了! 使用心得如下: 1,BigInteger屬于java.math.BigInteger,因此在每次使用前都要import 這個(gè)類。偶開始就忘記import了,于是總提示找不到提示符。 2,其構(gòu)造方法有很多,但現(xiàn)在偶用到的有:
BigInteger(String?val) ??????????將 BigInteger 的十進(jìn)制字符串表示形式轉(zhuǎn)換為 BigInteger。 | BigInteger(String?val, int?radix) ??????????將指定基數(shù)的 BigInteger 的字符串表示形式轉(zhuǎn)換為 BigInteger。 |
如要將int型的2轉(zhuǎn)換為BigInteger型,要寫為BigInteger two=new BigInteger("2"); // 注意2雙引號(hào)不能省略
3,BigInteger類模擬了所有的int型數(shù)學(xué)操作,如add()==“+”,divide()==“-”等,但注意其內(nèi)容進(jìn)行數(shù)學(xué)運(yùn)算時(shí)不能直接使用數(shù)學(xué)運(yùn)算符進(jìn)行運(yùn)算,必須使用其內(nèi)部方法。而且其操作數(shù)也必須為BigInteger型。 如:two.add(2)就是一種錯(cuò)誤的操作,因?yàn)?沒有變?yōu)锽igInteger型。
4,當(dāng)要把計(jì)算結(jié)果輸出時(shí)應(yīng)該使用.toString方法將其轉(zhuǎn)換為10進(jìn)制的字符串,詳細(xì)說明如下: 輸出方法:System.out.print(two.toString());
5,另外說明三個(gè)個(gè)用到的函數(shù)。???
remainder用來求余數(shù)。 negate將操作數(shù)變?yōu)橄喾磾?shù)。 compare的詳解如下:
compareTopublic int compareTo(BigInteger?val) - 將此 BigInteger 與指定的 BigInteger 進(jìn)行比較。對(duì)于針對(duì)六個(gè)布爾比較運(yùn)算符 (<, ==, >, >=, !=, <=) 中的每一個(gè)運(yùn)算符的各個(gè)方法,優(yōu)先提供此方法。執(zhí)行這些比較的建議語句是:(x.compareTo(y) <op> 0),其中 <op> 是六個(gè)比較運(yùn)算符之一。
- 指定者:
- 接口
Comparable<BigInteger> 中的 compareTo
- 參數(shù):
val - 將此 BigInteger 與之比較的 BigInteger。 - 返回:
- 當(dāng)此 BigInteger 在數(shù)值上小于、等于或大于 val 時(shí),返回 -1,0,或 1。
??? 前些時(shí)間總是感到迷茫,不知道該學(xué)什么,也許是快要畢業(yè)的原因吧,我也開始盲目的學(xué)習(xí)開了,看到社會(huì)招聘這個(gè)那個(gè),于是乎就什么都想一股腦學(xué)完,JAVA,JSP,PHP,JS,ASP.NET.Wap.....結(jié)果可想而知,如此只能是什么也學(xué)不成,痛惜過去,現(xiàn)在偶完全確定了今后的學(xué)習(xí)方向---JAVA-->J2EE/ORACLE. ??? 從今天偶會(huì)經(jīng)常到這里來寫下偶的學(xué)習(xí)心的,痛補(bǔ)以前的過失。各位監(jiān)視偶啊! ??? 這里將見證偶從菜鳥變成老鳥的歷史過程! ??? 偶的目標(biāo)---第一流的JAVA程序員!!!--(人首先要自信,堅(jiān)定信念,才能成功!)
這兩天看了java面向?qū)ο缶幊滩糠值脙?nèi)容,感覺有不少需要注意得地方: 重要知識(shí)點(diǎn)總結(jié)如下: 1,抽象,封裝,繼承,多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)中得四個(gè)特點(diǎn). 2,面向?qū)ο蟮密浖_發(fā)大體分為:面向?qū)ο蟮姆治?面向?qū)ο蟮脑O(shè)計(jì),面向?qū)ο蟮膶?shí)現(xiàn). ?? 可概括為如下過程:分析用戶需求,從問題中抽取對(duì)象模型;細(xì)化模型,設(shè)計(jì)類,包括類的屬性和類間的 ???相互關(guān)系,同時(shí)觀察是否有可以直接引用的已有類或部件;選定一種面向?qū)ο蟮木幊陶Z言,具體編碼實(shí)現(xiàn) ??上一階段類的設(shè)計(jì),并在開發(fā)過程中引入測試,完善整個(gè)解決方案. 3,面向?qū)ο蟪绦蛟O(shè)計(jì)方法的優(yōu)點(diǎn)是:可重用性,可擴(kuò)展性,可管理性. 4,類的定義:class前的修飾符分為訪問控制符和非訪問控制符兩大類.訪問控制符包括public和private. ?? 非訪問控制符包括abstract(抽象),final(最終). 5,final類是最終類,是不能有子類的類.abstract和final不能同時(shí)修飾一個(gè)類,因?yàn)槌橄箢惐旧頉]有具體對(duì)象, ??? 需要派生出子類后在創(chuàng)建子類的對(duì)象.而最終類不可能有子類. 6,創(chuàng)建對(duì)象的格式為: 類名 對(duì)象名=new 構(gòu)造方法(參數(shù));注意前面是類名后面是構(gòu)造方法. ??? 注意構(gòu)造方法沒有返回類型,也不能寫void,主要用于完成類對(duì)象的初始化工作,一般不能直接由編程 ??? 直接調(diào)用,而是用new運(yùn)算符來調(diào)用. 7,如果class前面由public修飾符,則默認(rèn)構(gòu)造方法的前面也應(yīng)該有public修飾符. 8,類中有static修飾的域或方法,可用類名或?qū)ο竺L問,否則只能用對(duì)象名訪問. 9,修飾域的訪問控制符可以是:public,private,protected,private protected.非訪問控制符可以是: ??? static,final,volatile(易失域) 10,類變量的最本質(zhì)的特點(diǎn)是:他們是類的域,不屬于任何一個(gè)類的具體對(duì)象實(shí)例.不是保存在某個(gè)對(duì)象實(shí)例的內(nèi)存空間中,而是保存在類的內(nèi)存區(qū)域的公共存儲(chǔ)單元中. 11,局部變量是在方法體內(nèi)聲明的,只有當(dāng)方法被調(diào)用時(shí)他們才存在,因而只能在本方法內(nèi)使用,不存在訪問控制符,也不能聲明為靜態(tài)變量(static),但可以聲明為final變量.局部變量必須初始化. 12,修飾方法的訪問控制符可以是:public,private,protected,private protected,修飾方法的非訪問控制符可以是:static,final,abstract,native(本地方法),synchronized(同步方法)。 13,用static修飾的變量或方法都為類成員,類成員可以用類名或?qū)嵗L問,實(shí)例成員只能用實(shí)例名來訪問。 14,如果一個(gè)類中含有抽象方法,則此類必須為抽象類,如果抽象類的子類不為抽象類,則子類必須實(shí)現(xiàn)父類的所有抽象方法。抽象方法不能用靜態(tài)方法和最終方法。抽想方法只有函數(shù)頭的聲明,而用分號(hào)來替代方法體,沒有大括號(hào)。如abstract void abstractmethod(); 15,this變量用在一個(gè)方法的內(nèi)部,指向當(dāng)前對(duì)象,當(dāng)前對(duì)象指的是調(diào)用當(dāng)前正在執(zhí)行的方法的那個(gè)對(duì)象。super變量是直接指向父類的構(gòu)造方法,用來引用父類種的變量和方法。(由于他們指的是對(duì)象,所以不能通過它來引用類變量和類方法) 16,如果要引用一個(gè)包中的多個(gè)類,可以用星號(hào)來代替。使用星號(hào)只能表示本層次的所有類,而不包括子層次下的類。所以經(jīng)常需要用兩條語句來引入兩個(gè)層次的類:import java.awt.*;import java.awt.event.*; 17,訪問修飾符: --類中限定為public的成員可以被所有的類訪問。 --類中先定位private的成員只能被這個(gè)類本身訪問。同一個(gè)類的不同對(duì)象可以訪問對(duì)方的private域變量或調(diào)用對(duì)方的域方法,這是因?yàn)樵L問保護(hù)控制在類的級(jí)別上,而不是對(duì)象的級(jí)別上。 --類中限定為protected的成員可以被這個(gè)類本身,它的子類(包括同一個(gè)包中和不同包中的子類),以及同一個(gè)包中的其他類訪問。 --用private protected修飾的成員可以被該類本身訪問,也可以被該類的所有子類訪問。 --默認(rèn)訪問控制符規(guī)定只能被同一個(gè)包中的類訪問和引用,而不能被其他包的類訪問。即他的訪問權(quán)限是friendly。 18,注意: ----abstract和private,static,final,native不能并列修飾同一個(gè)方法。 ----abstract類中不能有private修飾的域和方法 ----static方法不能處理非static的域。 19,重載方法的參數(shù)必須不同,或者是參數(shù)個(gè)數(shù)不同,或者是參數(shù)類型不同。重載的多個(gè)方法必須返回相同的數(shù)據(jù)類型。 20,在java中,一個(gè)類獲取某一接口定義的功能并不是通過直接繼承這個(gè)接口的屬性和方法來實(shí)現(xiàn)的。因?yàn)榻涌谥械膶傩远际浅A浚涌诘姆椒ǘ际菦]有方法體的抽象方法,沒有具體定義操作。
java支持在命令行下后面直接跟參數(shù):類似 程序名稱 參數(shù)1 [參數(shù)2] .... 對(duì)于此類的程序,要注意的問題就是判斷后面參數(shù)個(gè)數(shù)和類型是否合法.如果程序需要的參數(shù)個(gè)數(shù)至少是兩個(gè),當(dāng)程序并沒有對(duì)參數(shù)長度進(jìn)行判斷時(shí)如果用戶值輸入一個(gè)參數(shù),則程序運(yùn)行會(huì)返回錯(cuò)誤!因此應(yīng)該加以判斷:方法如下: if(args.length<2){ ???System.out.println("Usage: String1 String2"); ?? System.exit(0); }else{ ???........ }
通過做本章最后得習(xí)題,發(fā)現(xiàn)如下問題需要偶以后注意: 1,注意用戶輸入數(shù)據(jù)得合法性. ???如需要輸入一個(gè)正整數(shù)才有效,如果對(duì)用戶輸入不加判斷,當(dāng)用戶輸入一個(gè)負(fù)數(shù)時(shí)則會(huì)產(chǎn)生錯(cuò)誤得結(jié)果.因此應(yīng)該進(jìn)行簡單的判斷. 如int n=0; ?? while(n<1) ?????????n=讀取用戶輸入的值 這樣即可保證用戶輸入得時(shí)一個(gè)正整數(shù). 2,圖形界面中setText()得內(nèi)容必須時(shí)字符串型,因此在輸出一個(gè)數(shù)字型時(shí)應(yīng)該將其轉(zhuǎn)換成字符串型. ? 用Integer.toString(),Double.toString()方法即可. ? 例,int x=1;aa.setText(Integer.toString(x)); 3,圖形界面中捕獲哪個(gè)按鈕被按下得方法. ? 當(dāng)存在多個(gè)button按鈕時(shí),我們都用actionListener(this)來監(jiān)聽.那么如何判斷用戶點(diǎn)擊了哪個(gè)按鈕呢? ?? 用getSource()方法 ? 例:btn1.addActionListener(this);btn2.addActionListener(this); ????? public void actionPerformed(ActionEvent e){ ????????????if(e.getSource()==btn1) ??????????????????//do anything ??????????? else if(e.getSource==btn2) ???????????????? //do other things ????? }
java數(shù)組對(duì)象有一個(gè)很重要的方法getChars();其方法描述為: public void getChars(int srcBegin,int srcEnd,char dst[],int dstBegin);? 將當(dāng)前字符串的部分字符復(fù)制到目標(biāo)自負(fù)數(shù)組dst中,從srcBegin(包含在內(nèi))到srcEnd(不包含在內(nèi))之間的字符復(fù)制到目標(biāo)字符數(shù)組中的字符從dstBegin位置開始存放. 使用實(shí)例: String?ss="Visual?Basic"; char?dst[]={'a','b','c','d'};
ss.getChars(4,6,dst,2); System.out.println(dst); 輸出結(jié)果為abal; 注意數(shù)組參數(shù)只要寫入數(shù)組名即可,不要帶[],輸出可以直接用數(shù)組名輸出全部內(nèi)容.
今天看了書本上的楊歸三角程序?qū)懛ê?自己試著去寫,但寫完后編譯總是出現(xiàn)一個(gè)錯(cuò)誤. 先看代碼:
?1?public?class?YangHui{ ?2?????public?static?void?main(String?args[]){ ?3?????????final?int?max=10; ?4?????????int?a[][]=new?int[max][]; ?5?????????for(int?i=0;i<a.length;i++){ ?6?????????????int?a[i]=new?int[i+1]; ?7?????????} ?8?????????a[0][0]=1; ?9?????????for(int?i=1;i<a.length;i++){ 10?????????????a[i][0]=1; 11?????????????a[i][a[i].length-1]=1; 12?????????????for(int?j=1;j<a[i-1].length;j++){ 13?????????????????a[i][j]=a[i-1][j-1]+a[i-1][j]; 14?????????????} 15?????????} 16????????? 17?????????for(int?i=0;i<a.length;i++){ 18?????????????for(int?j=0;j<a[i].length;j++) 19?????????????????System.out.print(a[i][j]+"\t"); 20?????????????System.out.println(); 21?????????} 22?????} 23?} JCreator返回如下錯(cuò)誤信息: -------------------------------------------------- D:\Java\JCreator\YangHui.java:6: 需要 ']' ??????????? int a[i]=new int[i+1]; ????????????????? ^ 1 錯(cuò)誤 處理已完成。 --------------------------------------------------- 開始怎么都看不出第六行有什么錯(cuò)誤,郁悶半天之后看了課本,發(fā)現(xiàn)原來多了一個(gè)int.突然醒悟這個(gè)數(shù)組已經(jīng)在前面聲明過了,在這里寫int不是重復(fù)聲明嗎?......真是太粗心了,不過給偶一個(gè)深刻的教訓(xùn),一定注意不要范重復(fù)聲明數(shù)組的錯(cuò)誤. 刪掉int之后編譯通過,正確的程序是這樣的: public?class?YangHui{ ????public?static?void?main(String?args[]){ ????????final?int?max=10; ????????int?a[][]=new?int[max][]; ????????for(int?i=0;i<a.length;i++){ ????????????a[i]=new?int[i+1]; ????????} ????????a[0][0]=1; ????????for(int?i=1;i<a.length;i++){ ????????????a[i][0]=1; ????????????a[i][a[i].length-1]=1; ????????????for(int?j=1;j<a[i-1].length;j++){ ????????????????a[i][j]=a[i-1][j-1]+a[i-1][j]; ????????????} ????????} ???????? ????????for(int?i=0;i<a.length;i++){ ????????????for(int?j=0;j<a[i].length;j++) ????????????????System.out.print(a[i][j]+"\t"); ????????????System.out.println(); ????????} ????} } ?
這算是一個(gè)很簡單的程序,但還是值得我這樣的初學(xué)者去總結(jié)一下,畢竟applet不同于application程序: import?java.applet.*; import?java.awt.*; import?java.awt.event.*;
public?class?LeapyearTest?extends?Applet?implements?ActionListener{ ????Label?result;???//定義一個(gè)輸出結(jié)果的標(biāo)簽對(duì)象 ????TextField?t1;???//定義一個(gè)用于輸入年份的文本框 ????Button?btn;?//定義一個(gè)button對(duì)象 ???? ????int?year; ????boolean?leap; ???? ????public?void?init(){ ????????result=new?Label("請(qǐng)輸入要判斷的年份:"); ????????t1=new?TextField(5); ????????btn=new?Button("判斷"); ???????? ????????add(t1); ????????add(btn); ????????add(result); ???????? ????????btn.addActionListener(this);????//為按鈕注冊(cè)事件,事件的監(jiān)聽者為當(dāng)前類的對(duì)象this ????} ???? ????public?void?actionPerformed(ActionEvent?e){ ????????year=Integer.parseInt(t1.getText()); ???????? ????????if((year%4==0)&&(year%100!=0)){ ????????????leap=true; ????????}else?if(year%400==0){ ????????????leap=true; ????????}else{ ????????????leap=false; ????????} ???????? ????????if(leap==true){ ????????????result.setText("你輸入的年份為閏年!"); ????????}else{ ????????????result.setText("你輸入的年份不是閏年!"); ????????} ???????? ????????t1.setText(""); ????} } 這里有幾點(diǎn)需要說明的: 1,applet程序必須引入java.applet.*; 2,使用文本框,按鈕等控件需要引入java.awt.*; 3,有事件發(fā)生則要引入java.awt.event.*; 4,在類名后加上extends Applet Implements ActionListener 5,添加事件后,當(dāng)事件被激活后會(huì)自動(dòng)調(diào)用actionPerformed函數(shù)執(zhí)行.因此應(yīng)該為事件寫該函數(shù).
偶是一個(gè)java初學(xué)者,看了樹上一個(gè)簡單例子,然后自己試著寫了下,卻發(fā)現(xiàn)了很多問題.... 例子是一個(gè)判斷用戶輸入字母是大寫還是小寫的. 偶開始這樣寫:
import
?java.io.
*
;
public
?
class
?UpLow{ ????
public
?
static
?
void
?main(String?args[])?
{ ????????C
har
?x; ????????System.out.println(
"
請(qǐng)輸入一個(gè)字母:
"
); ????????x
=
(C
har
)System.in.read(); ????????
if
(Character.isUpperCase(x)){ ????????????System.out.println(
"
你輸入了一個(gè)大寫字母!
"
); ????????} ????????
if
(Character.isLowerCase(x)){ ????????????System.out.println(
"
你輸入了一個(gè)小寫字母!
"
); ????????} ????} }
運(yùn)行調(diào)試先后發(fā)現(xiàn)如下問題: 1,Char x和(Char)System.in.read()中的Char中c應(yīng)該小寫. 2,由于用到system.in.read()所以應(yīng)該加上throws IOException. 這么簡單一程序就遇到這么多問題...崩潰... 不過這樣就給了俺比較深刻的印象,以后一定不會(huì)范這些錯(cuò)誤了. 用到輸出語句"System.in.read()"要在main()中加上throws IOException 語句來拋出異常.
??? 到了大學(xué)好像自己就開始浮躁起來,學(xué)什么都不能安安心心的坐下來,現(xiàn)在的學(xué)習(xí)猶如浮沙筑高臺(tái),亂七八糟,什么都沒有系統(tǒng)學(xué)習(xí)過,這學(xué)期開始著手學(xué)習(xí)JAVA,再圖書館借了一些書籍看了不少,不知道時(shí)偶看的少還是什么原因,現(xiàn)在還是感覺什么都不會(huì),哎,郁悶?zāi)亍!!=裉煊衷賵D書館翻了一下java的書,感覺迷茫,圖書館這方面的還真不少,偶都不知道該看什么了,到底怎樣學(xué)下去,才能少走彎路??摸索中。。。也請(qǐng)大家指點(diǎn)一二,謝謝!
|