JAVA快速入門(mén)練習(xí)2_第1頁(yè)
JAVA快速入門(mén)練習(xí)2_第2頁(yè)
JAVA快速入門(mén)練習(xí)2_第3頁(yè)
JAVA快速入門(mén)練習(xí)2_第4頁(yè)
JAVA快速入門(mén)練習(xí)2_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第2章 實(shí)驗(yàn) JAVA根本語(yǔ)法1(1) 算術(shù)運(yùn)算符、算術(shù)表達(dá)式(2) 布爾及關(guān)系算符和表達(dá)式(3) if/else控制結(jié)構(gòu)(4) while循環(huán)語(yǔ)句(5) 練習(xí)使用對(duì)話框 在上一章的實(shí)驗(yàn)中所看到的程序都是順序執(zhí)行的。本章實(shí)驗(yàn)教程將介紹如何使用JAVA選擇控制語(yǔ)句,使程序能基于條件進(jìn)行判斷,從而選擇執(zhí)行相應(yīng)的邏輯分支。以下的實(shí)驗(yàn)包括4種類型, 每種類型都用括號(hào)里面的字母表示:D - 例程, 表示這是一個(gè)例子, 要求練習(xí)者閱讀指南和代碼; I - 交互式練習(xí), 練習(xí)者完成實(shí)驗(yàn)指定的簡(jiǎn)單任務(wù),如修改局部代碼, 觀察程序運(yùn)行時(shí)的變化等; W - 熱身練習(xí), 練習(xí)者的編程工作量逐漸加大。P - 完整編程

2、,要求練習(xí)者根據(jù)要求,完成完整的JAVA程序。從本實(shí)驗(yàn)教程光盤(pán)中拷貝Lab02文件目錄到本地磁盤(pán), 如C: 盤(pán)。Lab02 文件目錄中將包含本次實(shí)驗(yàn)所需的所有資料。 Lab02的相關(guān)資料也可以從本實(shí)驗(yàn)教程的網(wǎng)站下載。實(shí)驗(yàn)任務(wù)實(shí)驗(yàn): (D)運(yùn)行四個(gè)Java程序在已經(jīng)安裝 的電腦上編譯、運(yùn)行4個(gè)JAVA程序Int、 、 和 ,觀察程序的運(yùn)行結(jié)果。在這四個(gè)程序中,運(yùn)用了另外一種鍵盤(pán)讀入的形式JOptionPane對(duì)話框。這種圖形界面對(duì)用戶來(lái)講比命令行的數(shù)據(jù)輸入方式更友好。用記事本或EditPlus 翻開(kāi)這幾個(gè)程序,比擬程序源代碼。 、 、 和 都是按照這樣的步驟執(zhí)行的:(1) 提示用戶輸入數(shù)字。 這

3、些數(shù)字是以字符串的形式被讀取,而后又被轉(zhuǎn)換成數(shù)字; (2) 適當(dāng)?shù)倪\(yùn)算;(3) 輸出顯示。 見(jiàn)程序清單2-1包括以下的語(yǔ)句:int totalSeconds = Integer.parseInt( JOptionPane.showInputDialog( "Enter total seconds (integer)" ); 這個(gè)語(yǔ)句可以看作是以下兩個(gè)語(yǔ)句的縮寫(xiě):String totalSecondsText = JOptionPane.showInputDialog( "Enter total seconds (integer)" ); int tota

4、lSeconds = Integer.parseInt(totalSecondsText);程序清單2-1: / / 將總秒數(shù)轉(zhuǎn)換為分鐘和剩余秒數(shù) import javax.swing.JOptionPane; public class MinSec public static void main( String args ) JOptionPane.showMessageDialog( null, "將輸入總秒數(shù) n" + "轉(zhuǎn)換為相應(yīng)的 n" + "分鐘數(shù)和秒數(shù) 。" ); / 讀取總秒數(shù) : int totalSeconds =

5、 Integer.parseInt( JOptionPane.showInputDialog( "輸入總秒數(shù) (整數(shù))" ); / 計(jì)算分鐘和秒數(shù) int minutes = totalSeconds / 60; int seconds = totalSeconds % 60; / 顯示結(jié)果 JOptionPane.showMessageDialog( null, totalSeconds + " 秒等于 " + minutes + " 分鐘加 " + seconds + " 秒。" ); System.exit(

6、 0 ); / 結(jié)束程序 / method main / class MinSec 程序清單2-2: / import javax.swing.JOptionPane; public class IntDiv public static void main( String args ) / 從用戶處得到一個(gè)字符串型的數(shù)字 String dividendText = JOptionPane.showInputDialog( "輸入被除數(shù) (整數(shù))" ); / 再?gòu)挠脩籼幦〉靡粋€(gè)字符串型的數(shù)字 String divisorText = JOptionPane.showInput

7、Dialog( "輸入除數(shù) (整數(shù))" ); / 將類型String轉(zhuǎn)換為類型int int dividend = Integer.parseInt( dividendText ); int divisor = Integer.parseInt( divisorText ); / 進(jìn)行除運(yùn)算 int quotient = dividend / divisor; int remainder = dividend % divisor; / 顯示結(jié)果 JOptionPane.showMessageDialog( null, dividend + " 除以 "

8、+ divisor + " 等于n" + quotient + " 再加余數(shù) " + remainder + ".", "結(jié)果", JOptionPane.PLAIN_MESSAGE ); System.exit( 0 ); / 結(jié)束程序 / method main / class IntDiv 程序清單2-3: / / 演示浮點(diǎn)型的浮點(diǎn)數(shù)除法 import javax.swing.JOptionPane; public class FloDiv public static void main( String ar

9、gs ) /從用戶處得到一個(gè)字符串型的數(shù)字 String dividendText = JOptionPane.showInputDialog( "鍵入被除數(shù) (浮點(diǎn)數(shù))" ); /再?gòu)挠脩籼幦〉靡粋€(gè)字符串型的數(shù)字 String divisorText = JOptionPane.showInputDialog( "鍵入除數(shù)(浮點(diǎn)數(shù))" ); /將類型String轉(zhuǎn)換為類型float float dividend = Float.parseFloat( dividendText ); float divisor = Float.parseFloat( d

10、ivisorText ); /進(jìn)行除運(yùn)算 float quotient = dividend / divisor; /顯示結(jié)果 JOptionPane.showMessageDialog( null, dividend + " 除以 " + divisor + " 等于n" + quotient + ".", " 結(jié)果", JOptionPane.PLAIN_MESSAGE ); System.exit( 0 ); /結(jié)束程序 / method main / class FloDiv程序清單2-4: / / 演示d

11、ouble型的浮點(diǎn)數(shù)除法 import javax.swing.JOptionPane; public class DouDiv public static void main( String args ) /從用戶處得到一個(gè)字符串型的數(shù)字 String dividendText = JOptionPane.showInputDialog( "鍵入被除數(shù)(浮點(diǎn)數(shù))" ); /再?gòu)挠脩籼幦〉靡粋€(gè)字符串型的數(shù)字 String divisorText = JOptionPane.showInputDialog( "鍵入除數(shù)(浮點(diǎn)數(shù))" ); / 將類型Stri

12、ng轉(zhuǎn)換為類型double double dividend = Double.parseDouble( dividendText ); double divisor = Double.parseDouble( divisorText ); /進(jìn)行除運(yùn)算 double quotient = dividend / divisor; / 顯示結(jié)果 JOptionPane.showMessageDialog( null, dividend + " 除以 " + divisor + " 等于n" + quotient + ".", "

13、結(jié)果", JOptionPane.PLAIN_MESSAGE ); System.exit( 0 ); / 結(jié)束程序 / method main / class DouDiv實(shí)驗(yàn): (D)if選擇語(yǔ)句編譯MinSecWithIf.java,使用如下命令運(yùn)行程序:java MinSecWithIf 100注意使用的命令不是java MinSecWithIf觀察程序的運(yùn)行結(jié)果,并嘗試用其他的正整數(shù)來(lái)執(zhí)行。在類名MinSecWithIf后面鍵入的數(shù)字被稱做命令行參數(shù)。在這個(gè)程序中,該命令行參數(shù)是總秒數(shù)。試著不使用命令行參數(shù)來(lái)運(yùn)行這個(gè)程序,并觀察運(yùn)行結(jié)果。翻開(kāi)MinSecWithIf.jav

14、a源代碼,與源代碼相比擬。在MinSecWithIf.java中,命令行輸入是由語(yǔ)句:int totalSeconds = Integer.parseInt(args0)實(shí)現(xiàn)的;在中,輸入是通過(guò)JOptionPane 對(duì)話框,而不是命令行參數(shù)實(shí)現(xiàn)的。程序清單2-5:MinSecWithIf.java / MinSecWithIf.java/ 將總秒數(shù)轉(zhuǎn)換為相應(yīng)的分鐘數(shù)和剩余秒數(shù)public class MinSecWithIf public static void main( String args ) if ( args.length = 0 ) / 聲明程序?qū)⒆鍪裁?System.out.

15、println( "此程序?qū)⑥D(zhuǎn)換 n" + "一個(gè)總秒數(shù)為 n" + "相應(yīng)的分鐘和剩余秒數(shù) .n" + "總秒數(shù)應(yīng)當(dāng)作為 n" + "命令行參數(shù)輸入 .n" ); System.exit(0); / if / 讀取總秒數(shù) int totalSeconds = Integer.parseInt(args0); / 計(jì)算分鐘和剩余秒數(shù) int minutes = totalSeconds / 60; int seconds = totalSeconds % 60; / 顯示結(jié)果 System.ou

16、t.println( totalSeconds + " 秒等于 " + minutes + " 分鐘加上 " + seconds + " 秒." ); / method main / class MinSecWithIf 對(duì)于這種形式的IF語(yǔ)句,格式為: if (expression) statement(s) 該語(yǔ)句必須以關(guān)鍵字“if開(kāi)始。之后,括號(hào)中為布爾表達(dá)式。該布爾表達(dá)式必須計(jì)算出一個(gè)true或者false值。在本實(shí)驗(yàn)中,我們檢查用戶命令行參數(shù)的輸入。當(dāng)沒(méi)有命令行參數(shù)輸入時(shí),表達(dá)式args.length = 0的運(yùn)算結(jié)果為tr

17、ue,程序執(zhí)行花括號(hào)中的語(yǔ)句(我們把花括號(hào)之間的語(yǔ)句局部稱為塊block),從而打印出一些提示信息,然后程序退出;當(dāng)有命令行參數(shù)輸入時(shí),布爾表達(dá)式的值為false,程序忽略塊中的語(yǔ)句,直接執(zhí)行塊后面的語(yǔ)句。實(shí)驗(yàn): (W)練習(xí)使用if語(yǔ)句在Lab02文件夾里,新建一個(gè)FeetInches.java文件。這個(gè)程序?qū)⒖傆⒋甾D(zhuǎn)化成英尺和英寸1英尺12英寸。和類似,程序FeetInches.java使用一個(gè)輸入對(duì)話框來(lái)提示輸入,結(jié)果的輸出那么使用消息對(duì)話框。 編寫(xiě)的程序請(qǐng)使用恰當(dāng)?shù)淖兞棵⑨尯洼敵觥?qiáng)烈建議讀者一句一句自己編寫(xiě)代碼,而不僅僅是復(fù)制、粘貼和修改變量名以及注釋。通過(guò)這種方式,可以對(duì)Java

18、 程序的根底有一個(gè)全面的熟悉,并增強(qiáng)在今后各種JAVA考試中的信心。注意縮排!JAVA編程標(biāo)準(zhǔn)要求每一個(gè)縮排要留個(gè)空格,不是一個(gè)。用空格鍵(Space Key),而不是制表鍵Tab Key,因?yàn)橹票礞I所表示的空格數(shù)會(huì)因文件編輯器的不同而不同。為了減輕縮排的麻煩,我們通常會(huì)在輸入一個(gè)開(kāi)括號(hào)后立即輸入閉括號(hào),然后輸入括號(hào)里面的語(yǔ)句;而不是等完成括號(hào)里面的語(yǔ)句輸入后再輸入閉括號(hào)。任何使用對(duì)話框的程序都包括語(yǔ)句:System.exit(0);沒(méi)有這條語(yǔ)句,包含對(duì)話框的程序執(zhí)行到末尾時(shí)不會(huì)自動(dòng)結(jié)束。在這種情況下要重新獲得DOS窗口的控制,使用Ctrl-C鍵(按住Ctrl鍵,然后在按住Ctrl鍵的同時(shí)按下

19、C鍵)。實(shí)驗(yàn): (D)更多if語(yǔ)句編譯、運(yùn)行程序BusDialog.java和 ,一定要理解程序是如何實(shí)現(xiàn)的。這兩個(gè)程序分別使用了對(duì)話框和命令行參數(shù),它們都用于計(jì)算運(yùn)送給定數(shù)目的乘客所需的車輛數(shù)。程序首先計(jì)算初步的數(shù)目總?cè)藬?shù)除以每輛汽車的座位數(shù),然后檢查余數(shù)是否為,也就是是否有剩余的乘客。如果是,除了初始估計(jì)外,還多需要一輛車。程序清單2-6:BusDialog.java / BusDialog.java/ 計(jì)算有固定座位數(shù)的車在給定乘客數(shù)的情況下所需的輛數(shù) import javax.swing.JOptionPane; public class BusDialog public static

20、 void main( String args ) / 聲明此程序的作用: JOptionPane.showMessageDialog( null, "計(jì)算有固定座位數(shù)的車n" + "在給定乘客數(shù)的情況下,n" + "所需的輛數(shù)." ); / 從用戶處得到輸入數(shù)據(jù) int totalPeople = Integer.parseInt( JOptionPane.showInputDialog( "鍵入總?cè)藬?shù) (整數(shù))" ); int seatsPerBus = Integer.parseInt( JOptionPan

21、e.showInputDialog( "鍵入每輛車的座位數(shù) (整數(shù))" ); / 計(jì)算所需車輛數(shù) int bussesNeeded = totalPeople / seatsPerBus; if ( totalPeople % seatsPerBus > 0 ) bussesNeeded = bussesNeeded + 1; / 顯示結(jié)果 JOptionPane.showMessageDialog( null, bussesNeeded + " 輛座位為 " + seatsPerBus + " 的車 n" + "可以

22、運(yùn)送 " + totalPeople + " 個(gè)人" ); System.exit( 0 ); / 終止程序 / method main / class Busses程序清單2-7: / /計(jì)算有固定座位數(shù)的車在給定命令行參數(shù)個(gè)乘客數(shù)的情況下所需的輛數(shù) public class Bus public static void main( String args ) if ( args.length < 2 ) /聲明此程序的作用: System.out.println( "計(jì)算有固定座位數(shù)的車n" + "在給定乘客數(shù)的情況下,n&

23、quot; + "所需的輛數(shù)." ); System.out.println( "運(yùn)行此程序請(qǐng)鍵入 n" + "作為命令行參數(shù)的 n" + "總?cè)藬?shù)和每輛車座位數(shù) "); System.exit(0); /從用戶處得到輸入數(shù)據(jù) int totalPeople = Integer.parseInt(args0); int seatsPerBus = Integer.parseInt(args1); / 計(jì)算所需的車輛數(shù) int bussesNeeded = totalPeople / seatsPerBus; if

24、( totalPeople % seatsPerBus > 0 ) bussesNeeded = bussesNeeded + 1; / 顯示結(jié)果 System.out.println( bussesNeeded + " 輛座位為 " + seatsPerBus + " 的車可以 n" + "運(yùn)送 " + totalPeople + " 的人 。" ); System.exit( 0 ); / 終止程序 / method main / class Bus實(shí)驗(yàn): (W)練習(xí)使用if語(yǔ)句在Lab02文件夾里面,新

25、建一個(gè)NearYuan.java的文件,它會(huì)以對(duì)話框的形式提示用戶輸入一個(gè)數(shù)字,這個(gè)數(shù)字表示分,程序會(huì)計(jì)算出與分價(jià)值最接近的整數(shù)元。例如:350分最接近4元,而249分最接近2元。實(shí)驗(yàn): (D)否認(rèn)條件編譯Compare.java,使用兩個(gè)命令行參數(shù)運(yùn)行程序:java Compare 4 7該程序的條件語(yǔ)句中使用了否認(rèn)條件Negation。一個(gè)條件的否認(rèn)條件總是:1正確的,如果原條件是錯(cuò)誤的; 2錯(cuò)誤的,如果原條件是正確的。例如, number1 >= number2是 number1 < number2 的否認(rèn)條件。注意,條件number1 > number2不是上面第二個(gè)

26、條件的否認(rèn)條件, 因?yàn)楫?dāng)number1和number2相等時(shí)這兩個(gè)條件都是錯(cuò)誤的。類似的,條件number1 >= number2不是條件 number1 <= number2的否認(rèn)條件,因?yàn)楫?dāng)兩個(gè)數(shù)字相等時(shí)這兩個(gè)條件都是正確的。對(duì)于條件number1 = number2,兩個(gè)等號(hào)符號(hào)表示簡(jiǎn)單的“等于,我們使用雙等號(hào)符號(hào)來(lái)檢驗(yàn)兩個(gè)表達(dá)式是否相等,而一個(gè)等號(hào)是給一個(gè)變量賦值。對(duì)于條件 number1 != number2,驚嘆號(hào)后面接一個(gè)等號(hào)的意思是“不等于,很明顯,這個(gè)條件否認(rèn)了前一個(gè)條件number1 = number2。用不同的整數(shù)對(duì)運(yùn)行這個(gè)程序,這幾個(gè)整數(shù)對(duì)包括以下情形:1第

27、一個(gè)數(shù)小于第二個(gè)數(shù);2第一個(gè)數(shù)大于第二個(gè)數(shù);3第一個(gè)數(shù)等于第二個(gè)數(shù)。在每種情況中,程序都會(huì)顯示正確的比擬結(jié)果。程序清單2-8:Compare.java public class Compare public static void main( String args ) if ( args.length < 2 ) System.out.print("此程序?qū)@示兩個(gè) "); System.out.println("作為命令行參數(shù)輸入的 "); System.out.print("整數(shù)的比擬結(jié)果 "); System.out.p

28、rintln("運(yùn)行此程序鍵入 :"); System.out.println(" java Compare int1 int2"); System.out.print("使用整數(shù)值來(lái)替換 "); System.out.println("int1 和 int2."); System.exit(0); / if int number1, / 第一個(gè)比擬的數(shù) number2; /第二個(gè)比擬的數(shù) String result; / 存儲(chǔ)輸出的字符串 / 將String 型轉(zhuǎn)換為int型 number1 = Integer.

29、parseInt( args0 ); number2 = Integer.parseInt( args1 ); / 初始化輸出為空字符串 result = "" / 進(jìn)行比擬 if ( number1 = number2 ) result = number1 + " = " + number2; if ( number1 != number2 ) result = number1 + " != " + number2; if ( number1 < number2 ) result = result + "n"

30、; + number1 + " < " + number2; if ( number1 >= number2 ) result = result + "n" + number1 + " >= " + number2; if ( number1 > number2 ) result = result + "n" + number1 + " > " + number2; if ( number1 <= number2 ) result = result + &qu

31、ot;n" + number1 + " <= " + number2; / 顯示結(jié)果 System.out.println("比擬結(jié)果:n" + result); / method main / class Compare實(shí)驗(yàn): (D)if/else語(yǔ)句 編譯、運(yùn)行OddEven.java并測(cè)試不同的命令行參數(shù)奇數(shù)和偶數(shù)。程序清單2-9:OddEven.java / OddEven.java/ 測(cè)試數(shù)字是為奇數(shù)還是偶數(shù) public class OddEven public static void main(String args) if

32、 ( args.length = 0 ) System.out.print("此程序?qū)⑴袛嘁徽麛?shù) "); System.out.println("是奇數(shù)還是偶數(shù) ."); System.out.print("鍵入作為命令行參數(shù) "); System.out.println("的數(shù)字 ."); System.exit(0); / if int number = Integer.parseInt(args0); if ( number % 2 = 0 ) / 如果數(shù)字為偶數(shù) System.out.println(nu

33、mber + " 為偶數(shù) ."); else System.out.println(number + " 為奇數(shù) ."); / method main / class OddEven 對(duì)于這種形式的條件語(yǔ)句,格式為: if (expression) statements1 else statements2 該條件語(yǔ)句的布爾表達(dá)式為true時(shí)執(zhí)行語(yǔ)句statements1,布爾表達(dá)式為false時(shí)執(zhí)行語(yǔ)句statements2。不同于if語(yǔ)句,else語(yǔ)句不包含條件。通常,在Java程序中,else語(yǔ)句與前面離它最近的if語(yǔ)句相匹配。如OddEven.ja

34、va程序中: if ( number % 2 = 0 ) / 如果數(shù)字為偶數(shù) System.out.println(number + " 為偶數(shù) ."); else System.out.println(number + " 為奇數(shù) ."); 這個(gè)程序用一個(gè)數(shù)字是否可以被2整除來(lái)判斷該數(shù)的奇偶性。被2除后,余數(shù)為0的數(shù)為偶數(shù);余數(shù)為1的數(shù)那么為奇數(shù)。程序中使用了if/else結(jié)構(gòu),根據(jù)if后面括號(hào)里的條件的真值來(lái)選擇兩種可能的行為。如果條件number%2 = 0是正確的, 即該數(shù)被2除后,余數(shù)為0,那么條件后的陳述語(yǔ)句被執(zhí)行;否那么, else后面的陳

35、述語(yǔ)句被執(zhí)行。 把 statements1 和 statements2 括在花括號(hào) () 內(nèi)通常是一個(gè)好習(xí)慣,這樣更清楚,并可以防止無(wú)意中造成錯(cuò)誤。這里對(duì)于if 和else的陳述語(yǔ)句可以不需要大括號(hào),因?yàn)楫?dāng)條件正確時(shí)只有一條執(zhí)行語(yǔ)句,而當(dāng)條件錯(cuò)誤時(shí)也只有另一條執(zhí)行語(yǔ)句。假設(shè)在一種情況下要執(zhí)行多于一條的語(yǔ)句,那么需要用花括號(hào)括起來(lái)組成語(yǔ)句塊block。實(shí)驗(yàn): (W)練習(xí)if/else語(yǔ)句為Compare.java 保存一個(gè)副本,命名為MyCompare.java。在后一個(gè)文件里,相應(yīng)地修改類名和注釋。然后修改MyCompare.java,使用3個(gè)if/else結(jié)構(gòu)代替6個(gè)if結(jié)構(gòu)來(lái)實(shí)現(xiàn)和Comp

36、are.java一樣的效果。編譯MyCompare.java,用幾組不同的數(shù)字對(duì)進(jìn)行測(cè)試,這些數(shù)字對(duì)包括以下情形:1第一個(gè)數(shù)小于第二個(gè)數(shù);2第一個(gè)數(shù)大于第二個(gè)數(shù);3第一個(gè)數(shù)等于第二個(gè)數(shù)。在每種情況中,程序都要顯示正確的比擬結(jié)果。實(shí)驗(yàn): (P)編寫(xiě)程序Hou程序要求使用命令行參數(shù)來(lái)讀取一個(gè)正整數(shù),這個(gè)整數(shù)表示總秒數(shù),編寫(xiě)程序輸出與總秒數(shù)相等的時(shí)-分-秒。如果程序無(wú)命令行參數(shù)輸入,DOS窗口將顯示一個(gè)用戶友好的提示信息。提示:用整數(shù)除法和模運(yùn)算,1小時(shí)=3600秒。實(shí)驗(yàn): (P)編寫(xiě)程序DigitPart程序要求使用命令行參數(shù)來(lái)讀取一個(gè)三位數(shù),然后把這個(gè)三位數(shù)別離成單個(gè)的數(shù)字,最后把這些數(shù)字用空格

37、別離的形式顯示出來(lái)。例如,數(shù)字123 會(huì)被顯示成 1 2 3。提示:用整數(shù)除法和模運(yùn)算來(lái)別離數(shù)位上的數(shù)字。 運(yùn)行結(jié)果例如如圖圖2.1 實(shí)驗(yàn)運(yùn)行結(jié)果例如實(shí)驗(yàn): (P)編寫(xiě)程序DigitParts為DigitParts.java 保存一個(gè)副本,命名為DigitPart。在后一個(gè)文件里,相應(yīng)地修改類名和注釋。修改DigitPart,當(dāng)用戶的輸入不是三位數(shù)時(shí)如45,4258,程序會(huì)顯示用戶友好的錯(cuò)誤提示信息。當(dāng)然,如果用戶沒(méi)有正確輸入命令行參數(shù),這個(gè)程序也應(yīng)該顯示用戶友好的的錯(cuò)誤提示信息。實(shí)驗(yàn): (W)JAVA中符號(hào)“+的使用 編譯并運(yùn)行Plus.java,然后用記事本翻開(kāi)它,這個(gè)程序在DOS窗口輸出

38、:68 366 7852程序清單2-10:Plus.java / Plus.java/ 演示加法和字符串連接 public class Plus public static void main(String args) System.out.println(23 + 45 + " 366 " + 78 + 52); / method main / class PlusJAVA語(yǔ)言中,加號(hào)“+可以用做加法運(yùn)算當(dāng)它出現(xiàn)在兩個(gè)數(shù)字之間,也可以用做字符串的連接當(dāng)它出現(xiàn)在兩個(gè)字符串之間,或者在一個(gè)字符串和一個(gè)數(shù)字之間。在這種情況下,數(shù)字會(huì)被自動(dòng)轉(zhuǎn)換成字符串然后和另一個(gè)字符串連接。 P

39、lus.java程序中System.out.println語(yǔ)句里的四個(gè)加號(hào)按照從左到右的順序被依次定義。最左端的加號(hào)是加法運(yùn)算,因?yàn)樗霈F(xiàn)在兩個(gè)整數(shù)之間;第二個(gè)加號(hào)是字符串連接運(yùn)算,因?yàn)樗霈F(xiàn)在一個(gè)數(shù)學(xué)表達(dá)式 23 + 45 和字符串 “ 366 ”之間;第三個(gè)加號(hào)是字符串連接運(yùn)算,因?yàn)樗霈F(xiàn)在字符表達(dá)式23 + 45 + “ 366 ” 也就是“68 366”和正整數(shù)78之間。最右邊的加號(hào)是字符串連接運(yùn)算,因?yàn)樵谒筮吽械谋磉_(dá)式在第四個(gè)加號(hào)未定義之前已經(jīng)運(yùn)算并生成了字符串“68 366 78” 。最終生成的字符串為“68 366 7852 “。和代數(shù)運(yùn)算一樣, 在表達(dá)式中加括號(hào)可以改變運(yùn)算

40、的順序。 為Plus.java 保存一個(gè)副本,命名為MyPlus.java,在源代碼中只插入兩個(gè)括號(hào),使程序輸出成為: 68 366 130 除了參加兩個(gè)括號(hào)之外,代碼不要做任何其他的修改。實(shí)驗(yàn): (I)浮點(diǎn)數(shù)的比擬1. 編譯和運(yùn)行程序,使用三個(gè)浮點(diǎn)數(shù)類型的命令行參數(shù),這個(gè)程序會(huì)找出這三個(gè)數(shù)中最大的那個(gè)數(shù)。程序清單2-11: / public class Comp3Flo public static void main( String args ) if ( args.length < 3 ) System.out.print("此程序?qū)⒄页?quot;); System.ou

41、t.println("3個(gè)作為命令行參數(shù)輸入"); System.out.println("的浮點(diǎn)數(shù)中的最大值."); System.out.println("運(yùn)行此程序鍵入: "); System.out.println(" java Comp3Flo num1 num2 num3"); System.out.print("用數(shù)字值替代"); System.out.println("num1, num2, 和num3."); System.exit(0); / if flo

42、at number1 = new Float(args0).floatValue(); float number2 = new Float(args1).floatValue(); float number3 = new Float(args2).floatValue(); float largest; if ( number1 > number2 ) largest = number1; else largest = number2; if ( number3 > largest ) largest = number3; System.out.println("數(shù)字&q

43、uot; + number1 + ", " + number2 + ", 和" + number3 + " 的最大數(shù)為 " + largest + "."); / method main / class Comp3Flo 如果輸入沒(méi)有小數(shù)點(diǎn)的命令行參數(shù),這些參數(shù)會(huì)被自動(dòng)的轉(zhuǎn)換成浮點(diǎn)數(shù),然后用小數(shù)點(diǎn)的形式顯示出來(lái)。例如,C:Lab02>java Comp3Flo 6 1 4.2數(shù)字 6.0, 1.0, 和 的最大數(shù)為 . 用不同的輸入測(cè)試這個(gè)程序。測(cè)試3個(gè)不同數(shù)字的6種不同組合:(1) 最小的數(shù),中間的數(shù),最大

44、的數(shù)(2) 最小的數(shù),最大的數(shù),中間的數(shù)(3) 中間的數(shù),最小的數(shù),最大的數(shù)(4) 中間的數(shù),最大的數(shù),最小的數(shù)(5) 最大的數(shù),最小的數(shù),中間的數(shù)(6) 最大的數(shù),中間的數(shù),最小的數(shù)即使三個(gè)數(shù)字中有兩個(gè)或兩個(gè)以上的數(shù)字相等時(shí),程序也可以正確地找出最大的數(shù)字。仔細(xì)閱讀這個(gè)程序,理解程序中每一行代碼的意義。 找出三個(gè)數(shù)字中最大數(shù)的關(guān)鍵代碼如下:float largest;if ( number1 > number2 )largest = number1;elselargest = number2;if ( number3 > largest )largest = number3;第一

45、行代碼只聲明declare了變量largest,并沒(méi)有給largest變量賦初始值。largest變量的初始值是由if/else結(jié)構(gòu)中條件number1 > number2 決定的。如果number1大于number2,執(zhí)行初始賦值語(yǔ)句 largest = number1, 變量largest的初始值等于number1;反之,變量largest的初始值等于number2。2. 為 保存一個(gè)副本,命名為My。修改My源碼的類名和注釋,編譯程序,確保程序正確運(yùn)行。修改My源碼。在變量largest聲明前加上注釋/,在if/else結(jié)構(gòu)中聲明變量并同時(shí)對(duì)其賦初值。修改后的代碼段如下:/ flo

46、at largest;if ( number1 > number2 )float largest = number1;elsefloat largest = number2;試著編譯修改后的程序。 顯然,編譯不會(huì)通過(guò)。這是由于變量largest在賦初值前只能聲明一次。3. 修改My源碼,使之能正確編譯。程序編譯通過(guò)后,進(jìn)一步修改源碼。用一對(duì)if結(jié)構(gòu)代替if/else結(jié)構(gòu),修改后的代碼段如下:float largest;if ( number1 > number2 )largest = number1;if ( number1 <= number2 )largest = num

47、ber2;重新編譯程序,將得到的錯(cuò)誤提示信息寫(xiě)在下面:Comp3Flo.java:29: 可能尚未初始化變量 largest if ( number3 > largest ) 1 錯(cuò)誤 編譯錯(cuò)誤的原因在于編譯器Compiler無(wú)法識(shí)別條件number1 > number2 是條件 number1 <=number2的否認(rèn)條件。因此,編譯器認(rèn)為可能在某種情況下,這兩個(gè)布爾表達(dá)式都為false。當(dāng)變量largest 在if ( number3 > largest ) 語(yǔ)句中使用時(shí),兩個(gè)初始賦值語(yǔ)句可能都沒(méi)有執(zhí)行,變量largest可能尚未初始化。4. 目前對(duì)變量初始化問(wèn)題的

48、討論只局限于方法里的局部變量。在完成的實(shí)驗(yàn)中,main方法里定義的變量都是局部變量。對(duì)于這種類型的變量,必須明確地進(jìn)行初始化。如果在沒(méi)有初始化之前就試圖使用它,程序就無(wú)法編譯。如果初始化的語(yǔ)句在if塊中,必須要讓變量在第一次使用前能夠得到賦值。也就是說(shuō),把初始化語(yǔ)句放在只有if塊的條件判斷語(yǔ)句中編譯不能通過(guò),因?yàn)閳?zhí)行的時(shí)候可能不符合if后面的判斷條件,如此一來(lái)初始化語(yǔ)句就不會(huì)被執(zhí)行了,從而違反了局部變量使用前必須初始化的規(guī)定。但如果使用if/else結(jié)構(gòu)并且在每個(gè)分支中都有初始化語(yǔ)句,程序就可以通過(guò)編譯,因?yàn)闊o(wú)論如何,總有至少一條初始化語(yǔ)句會(huì)被執(zhí)行,不會(huì)發(fā)生使用前未被初始化的情況。實(shí)驗(yàn): (P

49、)編寫(xiě)程序Comp4Flo.java程序使用四個(gè)浮點(diǎn)數(shù)為命令行參數(shù),并找出這四個(gè)數(shù)中的最大數(shù)和最小數(shù)。程序的執(zhí)行和輸出如下:C;Lab02>java Comp4Flo 4 3 1 2在數(shù)字 4.0, 3.0, 1.0, 和 2.0中, 最大值為 4.0, 最小值為 1.0.如果用戶輸入的參數(shù)少于四個(gè),程序?qū)⑤敵鲇脩粲押玫腻e(cuò)誤提示信息。由于4個(gè)不同數(shù)字的排列組合方式有24種可能。為了便于程序的測(cè)試,使用批處理文件Comp4Flo.bat。擴(kuò)展名為.bat的文件是批處理文件,它是無(wú)格式的文本文件,包含一條或多條命令。在DOS命令提示窗口中鍵入批處理文件的名稱,系統(tǒng)就會(huì)按照該文件中各個(gè)命令出現(xiàn)

50、的順序來(lái)逐個(gè)運(yùn)行它們。使用批處理文件也被稱為批處理程序或腳本,可以簡(jiǎn)化日常或重復(fù)性任務(wù)。Comp4Flo.bat批處理文件位于Lab02目錄下,在DOS命令提示窗口中,執(zhí)行:C:Lab02>Comp4Flo程序清單2-12:Comp4Flo.bat java Comp4Flo 1 2 3 4java Comp4Flo 1 2 4 3java Comp4Flo 1 3 2 4pausejava Comp4Flo 1 3 4 2java Comp4Flo 1 4 2 3java Comp4Flo 1 4 3 2pausejava Comp4Flo 2 1 3 4java Comp4Flo 2 1 4 3java Comp4Flo 2 3 1 4pausejava Comp4Flo 2 3 4 1java Comp4Flo 2 4 1 3java Comp4Flo 2 4 3 1pausejava Comp4Flo 3 1 2 4java Comp4Flo 3 1 4 2java Comp4Flo 3 2 1 4pausejava Comp4Flo 3 2 4 1java Comp4Flo 3 4 1 2java Comp4Flo 3 4

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論