java .net做網(wǎng)站能打開任何網(wǎng)站瀏覽器
1.需求:(1)機票價格按照淡季旺季、頭等艙和經(jīng)濟艙收費、輸入機票原價、原價、月份和頭等艙或經(jīng)濟艙;(2)按照如下規(guī)則計算機票價格:旺季(5-10月)頭等艙9折,經(jīng)濟艙8.5折,淡季(11月到來年4月)頭等艙7折,經(jīng)濟艙6.5折
import java.util.Scanner;public class demo {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 提示用戶輸入機票原價System.out.print("請輸入機票原價:");double originalPrice = scanner.nextDouble();// 提示用戶輸入月份System.out.print("請輸入出行月份(1 - 12):");int month = scanner.nextInt();// 提示用戶輸入艙位類型System.out.print("請輸入艙位類型(頭等艙/經(jīng)濟艙):");String cabinClass = scanner.next();// 調(diào)用 calculatePrice 方法計算最終機票價格double finalPrice = calculatePrice(originalPrice, month, cabinClass);// 輸出最終機票價格System.out.println("最終機票價格為:" + finalPrice + " 元");scanner.close();}/*** 計算機票最終價格的方法* @param originalPrice 機票原價* @param month 出行月份* @param cabinClass 艙位類型* @return 最終機票價格*/public static double calculatePrice(double originalPrice, int month, String cabinClass) {double discount = 1.0;// 判斷是否為旺季(5 - 10 月)if (month >= 5 && month <= 10) {if ("頭等艙".equals(cabinClass)) {discount = 0.9; // 旺季頭等艙 9 折} else if ("經(jīng)濟艙".equals(cabinClass)) {discount = 0.85; // 旺季經(jīng)濟艙 8.5 折}} else {if ("頭等艙".equals(cabinClass)) {discount = 0.7; // 淡季頭等艙 7 折} else if ("經(jīng)濟艙".equals(cabinClass)) {discount = 0.65; // 淡季經(jīng)濟艙 6.5 折}}// 計算最終價格return originalPrice * discount;}
}
?
2.判斷101~200之間有多少個素數(shù),并輸出所有素數(shù)
public class demo {public static void main(String[] args) {int count = 0; // 用于統(tǒng)計素數(shù)的個數(shù)// 遍歷 101 到 200 之間的所有數(shù)for (int i = 101; i <= 200; i++) {if (isPrime(i)) { // 判斷當(dāng)前數(shù)是否為素數(shù)System.out.print(i + " "); // 輸出素數(shù)count++; // 素數(shù)個數(shù)加 1}}System.out.println("\n101~200 之間共有 " + count + " 個素數(shù)。");}// 判斷一個數(shù)是否為素數(shù)public static boolean isPrime(int num) {if (num <= 1) {return false; // 小于等于 1 的數(shù)不是素數(shù)}else if (num == 2) {return false; // 等于 2 的數(shù)不是素數(shù)}else if (num % 2==0) {return false; // 偶數(shù)不是素數(shù)}// 判斷是否能被 3 到 sqrt(num) 之間的數(shù)整除for (int i = 3; i <= Math.sqrt(num); i++) {if (num % i == 0) {return false; // 如果能被整除,則不是素數(shù)}}return true; // 否則是素數(shù)}
}
?
3.需求:(1)定義方法實現(xiàn)隨機產(chǎn)生一個5位的驗證碼;(2)驗證碼格式:(a)長度為5;(b)前四位是大寫字母或者小寫字母;(c)最后一位是數(shù)字
import java.util.Random;public class demo {public static void main(String[] args) {String code = generateVerificationCode(); // 生成驗證碼System.out.println("生成的驗證碼是: " + code); // 輸出驗證碼}// 生成驗證碼的方法public static String generateVerificationCode() {Random random = new Random();StringBuilder code = new StringBuilder();// 生成前四位字母for (int i = 0; i < 4; i++) {// 隨機選擇大寫字母或小寫字母boolean isUpperCase = random.nextBoolean(); // 隨機決定是否大寫char letter;if (isUpperCase) {letter = (char) (random.nextInt(26) + 'A'); // 生成大寫字母} else {letter = (char) (random.nextInt(26) + 'a'); // 生成小寫字母}code.append(letter); // 將字母添加到驗證碼中}// 生成最后一位數(shù)字char digit = (char) (random.nextInt(10) +'0'); // 生成數(shù)字字符code.append(digit); // 將數(shù)字添加到驗證碼中return code.toString(); // 返回生成的驗證碼}
}
代碼說明
-
generateVerificationCode
?方法:-
使用?
Random
?類生成隨機數(shù)。 -
使用?
StringBuilder
?來構(gòu)建驗證碼字符串。 -
前四位是隨機生成的大寫字母或小寫字母:
-
random.nextBoolean()
?隨機決定生成大寫字母還是小寫字母。 -
random.nextInt(26)
?生成 0 到 25 的隨機數(shù),加上?'A'
?或?'a'
?的 ASCII 值,得到隨機字母。
-
-
最后一位是隨機生成的數(shù)字:
-
random.nextInt(10)
?生成 0 到 9 的隨機數(shù),加上?'0'
?的 ASCII 值,得到數(shù)字字符。
-
-
-
主程序:
-
調(diào)用?
generateVerificationCode
?方法生成驗證碼。 -
輸出生成的驗證碼。
-
?char digit = (char) (random.nextInt(10) + '0') 如果這一句不加'0',會怎么樣
如果去掉?'0'
,代碼會變成:
char digit = (char) (random.nextInt(10));
這行代碼的作用是將?random.nextInt(10)
?生成的隨機整數(shù)(0 到 9)強制轉(zhuǎn)換為?char
?類型。但是,這樣的轉(zhuǎn)換會導(dǎo)致?數(shù)字字符?變成?ASCII 控制字符,而不是我們期望的?'0'
?到?'9'
?的數(shù)字字符。
為什么需要加?'0'
?
-
random.nextInt(10)
:生成一個 0 到 9 的隨機整數(shù)。 -
'0'
:是字符?'0'
?的 ASCII 值(48)。 -
random.nextInt(10) + '0'
:-
將隨機整數(shù)加上?
'0'
?的 ASCII 值,得到?'0'
?到?'9'
?的 ASCII 值。 -
例如:
-
如果?
random.nextInt(10)
?生成?0
,則?0 + '0'
?等于?48
,對應(yīng)字符?'0'
。 -
如果生成?
5
,則?5 + '0'
?等于?53
,對應(yīng)字符?'5'
。 -
如果生成?
9
,則?9 + '0'
?等于?57
,對應(yīng)字符?'9'
。
-
-
-
強制轉(zhuǎn)換為?
char
:將 ASCII 值轉(zhuǎn)換為對應(yīng)的字符。
如果不加?'0'
?會發(fā)生什么?
如果不加?'0'
,代碼會直接將 0 到 9 的整數(shù)轉(zhuǎn)換為對應(yīng)的 ASCII 字符。ASCII 表中,0 到 9 的整數(shù)值對應(yīng)的是?控制字符,而不是數(shù)字字符。
-
ASCII 表部分內(nèi)容:
整數(shù)值 字符 描述 0 '\u0000'
空字符(NULL) 1 '\u0001'
標(biāo)題開始(SOH) 2 '\u0002'
文本開始(STX) ... ... ... 9 '\u0009'
水平制表符(TAB) -
結(jié)果:
-
如果?
random.nextInt(10)
?生成?0
,則?(char) 0
?是空字符('\u0000'
)。 -
如果生成?
5
,則?(char) 5
?是控制字符('\u0005'
)。 -
這些字符是不可見的,或者顯示為亂碼。
-
示例代碼
import java.util.Random;public class Test {public static void main(String[] args) {Random random = new Random();// 不加 '0'char digit1 = (char) (random.nextInt(10));System.out.println("不加 '0' 的結(jié)果: " + digit1);// 加 '0'char digit2 = (char) (random.nextInt(10) + '0');System.out.println("加 '0' 的結(jié)果: " + digit2);} }
-
輸出結(jié)果:
不加 '0' 的結(jié)果: (不可見字符或亂碼) 加 '0' 的結(jié)果: 5
總結(jié)
-
加?
'0'
:將 0 到 9 的整數(shù)轉(zhuǎn)換為對應(yīng)的數(shù)字字符('0'
?到?'9'
)。 -
不加?
'0'
:將 0 到 9 的整數(shù)轉(zhuǎn)換為 ASCII 控制字符,這些字符不可見或顯示為亂碼。
?
Random random = new Random();?
在 Java 中,Random random = new Random();
?這行代碼的作用是創(chuàng)建一個?Random
?類的對象,用于生成偽隨機數(shù)。下面詳細解釋這行代碼涉及的各個部分:
1.?Random
?類
Random
?類是 Java 標(biāo)準(zhǔn)庫中?java.util
?包下的一個類,它提供了多種方法用于生成不同類型的偽隨機數(shù)。所謂偽隨機數(shù),是指這些數(shù)看起來是隨機的,但實際上是由一個確定的算法根據(jù)初始種子(seed)生成的,只要種子相同,生成的隨機數(shù)序列就是相同的。
2.?new Random()
new
?是 Java 中用于創(chuàng)建對象的關(guān)鍵字。當(dāng)使用?new
?時,Java 會在內(nèi)存中為對象分配空間,并調(diào)用相應(yīng)類的構(gòu)造函數(shù)來初始化對象。Random()
?是?Random
?類的一個構(gòu)造函數(shù)。如果使用無參構(gòu)造函數(shù)?Random()
?來創(chuàng)建?Random
?對象,Java 會使用當(dāng)前系統(tǒng)時間的毫秒數(shù)作為種子來初始化隨機數(shù)生成器,這樣每次運行程序時,由于系統(tǒng)時間不同,生成的隨機數(shù)序列通常也會不同。
3.?Random random
這部分聲明了一個名為?random
?的變量,其類型為?Random
。變量就像是一個容器,用于存儲對象的引用。通過這個變量?random
,我們可以調(diào)用?Random
?類提供的各種方法來生成隨機數(shù)。
總結(jié)
Random random = new Random();
?這行代碼創(chuàng)建了一個?Random
?對象,通過這個對象可以方便地調(diào)用?Random
?類的方法來生成各種類型的偽隨機數(shù),滿足不同的編程需求,比如模擬隨機事件、生成隨機密碼等。
?boolean isUpperCase = random.nextBoolean();
在 Java 中,boolean isUpperCase = random.nextBoolean();
?這行代碼主要完成了兩件事:一是調(diào)用?Random
?類的?nextBoolean()
?方法生成一個隨機的布爾值;二是將這個隨機布爾值存儲到一個名為?isUpperCase
?的布爾類型變量中。下面詳細解釋這行代碼:
1.?Random
?對象
在執(zhí)行這行代碼之前,通常會有類似?Random random = new Random();
?的代碼,它創(chuàng)建了一個?Random
?類的對象?random
。Random
?類是 Java 標(biāo)準(zhǔn)庫?java.util
?包中的一個類,用于生成偽隨機數(shù)。借助這個對象,可以調(diào)用?Random
?類提供的各種方法來生成不同類型的隨機數(shù)。
2.?nextBoolean()
?方法
nextBoolean()
?是?Random
?類中的一個方法,其作用是生成一個隨機的布爾值。該方法會等概率地返回?true
?或者?false
,也就是說,返回?true
?和?false
?的可能性均為 50%。
3.?boolean isUpperCase
這部分聲明了一個名為?isUpperCase
?的變量,其類型為?boolean
。在 Java 里,boolean
?類型的變量只能存儲兩個值:true
?或者?false
。
4. 代碼整體含義
整行代碼?boolean isUpperCase = random.nextBoolean();
?的意思是:調(diào)用?random
?對象的?nextBoolean()
?方法生成一個隨機的布爾值,然后將這個布爾值賦值給變量?isUpperCase
。此后,就可以在代碼中使用?isUpperCase
?變量進行條件判斷等操作。
letter = (char) (random.nextInt(26) + 'A');?
letter = (char) (random.nextInt(26) + 'A');
?這行代碼的主要目的是生成一個隨機的大寫英文字母,并將其賦值給變量?letter
。下面我們逐步拆解這行代碼,詳細解釋其具體含義:
1.?random
?對象
在執(zhí)行這行代碼之前,通常會有類似?Random random = new Random();
?的代碼,它創(chuàng)建了一個?Random
?類的對象?random
。Random
?類是 Java 標(biāo)準(zhǔn)庫?java.util
?包中的一個類,用于生成偽隨機數(shù)。通過這個對象,我們可以調(diào)用?Random
?類提供的各種方法來生成不同類型的隨機數(shù)。
2.?random.nextInt(26)
nextInt(int bound)
?是?Random
?類的一個方法,它的作用是生成一個大于等于 0 且小于指定邊界?bound
?的隨機整數(shù)。在這行代碼中,bound
?的值為 26,所以?random.nextInt(26)
?會生成一個范圍在 0(包含)到 26(不包含)之間的隨機整數(shù),即可能的取值為 0、1、2、...、25。
3.?'A'
在 Java 中,字符類型?char
?本質(zhì)上是一個 16 位的無符號整數(shù),它可以表示 Unicode 字符集中的字符。每個字符都對應(yīng)一個唯一的 Unicode 碼點。字符?'A'
?的 Unicode 碼點是 65,'B'
?是 66,以此類推,'Z'
?是 90。
4.?random.nextInt(26) + 'A'
將?random.nextInt(26)
?生成的隨機整數(shù)(范圍是 0 - 25)與字符?'A'
?的 Unicode 碼點(65)相加。這樣得到的結(jié)果范圍是 65(即?'A'
?的碼點)到 90(即?'Z'
?的碼點)之間的整數(shù)。例如,如果?random.nextInt(26)
?生成的隨機數(shù)是 0,那么?0 + 'A'
?就等于 65;如果生成的隨機數(shù)是 25,那么?25 + 'A'
?就等于 90。
5.?(char)
這是一個強制類型轉(zhuǎn)換操作符。由于?random.nextInt(26) + 'A'
?的結(jié)果是一個?int
?類型的整數(shù),而我們需要的是一個字符,所以使用?(char)
?將這個整數(shù)強制轉(zhuǎn)換為?char
?類型。這樣,得到的就是一個對應(yīng)的大寫英文字母。
StringBuilder code = new StringBuilder();??
在 Java 中,StringBuilder code = new StringBuilder();
?這行代碼的作用是創(chuàng)建一個?StringBuilder
?類的對象,并將其引用賦值給名為?code
?的變量。下面詳細解釋這行代碼涉及的各個部分:
1.?StringBuilder
?類
StringBuilder
?是 Java 標(biāo)準(zhǔn)庫中?java.lang
?包下的一個類,用于處理可變的字符序列。與?String
?類不同,String
?對象是不可變的,一旦創(chuàng)建,其內(nèi)容就不能被修改,如果對?String
?進行拼接、刪除等操作,實際上是創(chuàng)建了一個新的?String
?對象;而?StringBuilder
?對象的內(nèi)容是可以動態(tài)改變的,在進行字符串拼接、插入、刪除等操作時,不會創(chuàng)建新的對象,而是直接在原對象的基礎(chǔ)上進行修改,因此在需要頻繁修改字符串內(nèi)容的場景下,使用?StringBuilder
?效率更高。
2.?new StringBuilder()
new
?是 Java 中用于創(chuàng)建對象的關(guān)鍵字。當(dāng)使用?new
?時,Java 會在內(nèi)存中為對象分配空間,并調(diào)用相應(yīng)類的構(gòu)造函數(shù)來初始化對象。StringBuilder()
?是?StringBuilder
?類的無參構(gòu)造函數(shù),使用這個構(gòu)造函數(shù)創(chuàng)建的?StringBuilder
?對象初始容量為 16 個字符,初始內(nèi)容為空。
3.?StringBuilder code
這部分聲明了一個名為?code
?的變量,其類型為?StringBuilder
。變量就像是一個容器,用于存儲對象的引用。通過這個變量?code
,我們可以調(diào)用?StringBuilder
?類提供的各種方法來對其內(nèi)部的字符序列進行操作,例如追加字符、插入字符、刪除字符等。
return code.toString();?
return code.toString();
?這行代碼在 Java 里是一個方法返回語句,它主要做了兩件事:一是調(diào)用?code
?對象的?toString()
?方法,把?code
?對象轉(zhuǎn)換為字符串;二是將轉(zhuǎn)換后的字符串作為方法的返回值返回。下面詳細解釋這行代碼:
1.?code
?對象
從前面的代碼可知,code
?通常是一個?StringBuilder
?類型的對象。StringBuilder
?是 Java 標(biāo)準(zhǔn)庫中用于處理可變字符序列的類,在需要頻繁修改字符串內(nèi)容(如拼接、插入、刪除字符等)時,使用?StringBuilder
?能比直接使用?String
?類獲得更高的性能。
2.?toString()
?方法
toString()
?是?StringBuilder
?類從?Object
?類繼承并進行了重寫的方法。Object
?類是 Java 中所有類的基類,每個類都有?toString()
?方法,不過不同類對其有不同的實現(xiàn)。在?StringBuilder
?類中,toString()
?方法的作用是將?StringBuilder
?對象內(nèi)部存儲的字符序列轉(zhuǎn)換為一個不可變的?String
?對象。這是因為在很多場景下,我們最終需要的是一個標(biāo)準(zhǔn)的?String
?類型的數(shù)據(jù),例如將結(jié)果輸出、傳遞給其他只接受?String
?類型參數(shù)的方法等。
3.?return
?語句
return
?是 Java 中的一個關(guān)鍵字,用于從方法中返回一個值,并終止方法的執(zhí)行。當(dāng)程序執(zhí)行到?return
?語句時,會將?return
?后面表達式的值作為方法的返回值返回給調(diào)用該方法的地方。
?