第五周课程总结实验报告(三)
?
實(shí)驗(yàn)三 String類的應(yīng)用
一、實(shí)驗(yàn)?zāi)康?/p>
(1) 掌握類String類的使用;
(2) 學(xué)會使用JDK幫助文檔;
二、實(shí)驗(yàn)內(nèi)容
1.已知字符串:"this is a test of java".按要求執(zhí)行以下操作:(要求源代碼、結(jié)果截圖。)
① 統(tǒng)計(jì)該字符串中字母s出現(xiàn)的次數(shù)。
② 統(tǒng)計(jì)該字符串中子串“is”出現(xiàn)的次數(shù)。
③ 統(tǒng)計(jì)該字符串中單詞“is”出現(xiàn)的次數(shù)。
④ 實(shí)現(xiàn)該字符串的倒序輸出。
三、實(shí)驗(yàn)過程(請自己調(diào)整格式)
代碼:
1 package com.company; 2 3 public class Main 4 { 5 public static void main(String[] args) 6 { 7 String sent ="this is a test of java"; //實(shí)例化String 對象 8 int sSum=sum("s",sent); 9 int isSum=sum("is",sent); 10 int _is_Sum=sum(" is ",sent); 11 12 StringBuffer str=new StringBuffer(sent); //聲明StringBuffer對象 13 str=str.reverse(); //reverse()方法表示將一個(gè)輸入流倒敘輸出 14 System.out.println(sSum); 15 System.out.println(isSum); 16 System.out.println(_is_Sum); 17 System.out.println(str); 18 } 19 20 static int sum(String sent,String Sent) 21 { 22 int Sum=0,number=0,i=0; 23 24 while(number!=-1) //元素在數(shù)組中的位置,如果沒有搜素到則返回-1 25 { 26 number=Sent.indexOf(sent,i); //indexOf() 方法可返回?cái)?shù)組中某個(gè)指定的元素位置 27 //array.indexOf(item,start);(item:查找元素;start規(guī)定在數(shù)組中開始檢索的位置) 28 if(number==-1) 29 { 30 return Sum; 31 } 32 else 33 { 34 Sum++; 35 i=number+1; 36 } 37 } 38 return Sum; 39 } 40 }運(yùn)行中的錯(cuò)誤:
?
?第一個(gè)錯(cuò)誤:類StringBuffer拼寫錯(cuò)誤;
第二個(gè)錯(cuò)誤: 在句的后面我手賤的打了一個(gè)“;”
?
第三個(gè)錯(cuò)誤:求的Sum的首字母我忘記大寫了;?
運(yùn)行結(jié)果截圖:
?
?
2.請編寫一個(gè)程序,使用下述算法加密或解密用戶輸入的英文字串。要求源代碼、結(jié)果截圖。
?
?
代碼:(加密)
1 package com.company; 2 3 import java.util.Scanner; 4 5 public class Main 6 { 7 8 public static void main(String[] args) 9 { 10 Scanner input = new Scanner(System.in); //新創(chuàng)建一個(gè)輸入的Scanner對象,然后賦值給in 11 System.out.print("輸入要加密的字符:"); 12 String str = "" ; 13 String str1 = ""; 14 int CD = 0,i ; 15 str =input.nextLine(); //接受輸入的數(shù)據(jù) 16 CD = str.length(); 17 char JM = 0; 18 for(i = 0; i < CD; i++) 19 { 20 if((str.charAt(i)>64&&str.charAt(i)<88)||(str.charAt(i)>96&&str.charAt(i)<120)) //str.charAt(i)的意思是第i個(gè)字符在字符串str中所占的位置,輸出的是數(shù)字 21 { //a-w和A-W往后移三位就是把它們的ASCII值減3 22 JM = (char) (str.charAt(i) + 3); //強(qiáng)制轉(zhuǎn)換成char 23 } 24 else if((str.charAt(i)>87&&str.charAt(i)<91)||(str.charAt(i)>119&&str.charAt(i)<123)) 25 { //而x、y、z、X、Y、Z,他們的ASCII值減23,得重新回到字母首字母 26 JM = (char) (str.charAt(i) - 23); 27 } 28 str1 = str1 + JM; 29 30 } 31 System.out.println("加密后的字符串是:"+str1); 32 } 33 }遇到的問題:
?
?沒有給str和str1設(shè)定初始化
?
?輸入不了加密字符,后來通過百度知道,要運(yùn)用“str =input.nextLine(); ”表示:讀取一行輸入,并存到str中
運(yùn)行結(jié)果:(加密)
?代碼:(解密)
1 package com.company; 2 3 import java.util.Scanner; 4 5 public class Main { 6 7 public static void main(String[] args) 8 { 9 Scanner input = new Scanner(System.in); //新創(chuàng)建一個(gè)輸入的Scanner對象,然后賦值給in 10 System.out.print("輸入要解密的字符:"); 11 String str = "" ; 12 String str1 = ""; 13 int CD = 0,i ; 14 str =input.nextLine(); //接受輸入的數(shù)據(jù) 15 CD = str.length(); 16 char JM = 0; 17 for(i = 0; i < CD; i++) 18 { 19 if((str.charAt(i)>99&&str.charAt(i)<123)||(str.charAt(i)>67&&str.charAt(i)<90)) //str.charAt(i)的意思是第i個(gè)字符在字符串str中所占的位置,輸出的是數(shù)字 20 { 21 JM = (char) (str.charAt(i) - 3); //強(qiáng)制轉(zhuǎn)換成char 22 } 23 else if((str.charAt(i)>64&&str.charAt(i)<68)||(str.charAt(i)>96&&str.charAt(i)<100)) 24 { 25 JM = (char) (str.charAt(i) + 23); 26 } 27 str1 = str1 + JM; 28 29 } 30 System.out.println("解密后的字符串是:"+str1); 31 } 32 }?
?
遇到的問題:
?
?解密不出來,然后發(fā)現(xiàn)是判斷條件出現(xiàn)錯(cuò)誤,我只考慮了abc大小寫和xyz大小寫,中間的字母沒有考慮進(jìn)去
運(yùn)行結(jié)果:(解密)
?
?
?
3.已知字符串“ddejidsEFALDFfnef2357 3ed”。輸出字符串里的大寫字母數(shù),小寫英文字母數(shù),非英文字母數(shù)。
?代碼:
1 package com.company; 2 3 public class Main 4 { 5 6 public static void main(String[] args) 7 { 8 9 String str = "ddejidsEFALDFfnef2357 3ed"; 10 char [] c = str.toCharArray(); //public char[] toCharArray()將字符串轉(zhuǎn)成char字符數(shù) 11 //字符串轉(zhuǎn)為二進(jìn)制數(shù)組,二進(jìn)制轉(zhuǎn)回字符串 12 int i, sumDX = 0, sumXX = 0, sumQT = 0; 13 14 for(i=0;i<c.length;i++) 15 { 16 if(c[i]>='A'&&c[i]<='Z') 17 { 18 sumDX = sumDX + 1; 19 } 20 else if(c[i]>='a'&&c[i]<='z') 21 { 22 sumXX = sumXX + 1; 23 } 24 else 25 { 26 sumQT = sumQT + 1; 27 } 28 } 29 30 System.out.println("大寫字母數(shù)為:"+sumDX); 31 System.out.println("小寫字母數(shù)為:"+sumXX); 32 System.out.println("非英文字母數(shù)為:"+sumQT); 33 } 34 }?
1 package com.company; 2 3 public class Main 4 { 5 6 public static void main(String[] args) 7 { 8 9 String str = "ddejidsEFALDFfnef2357 3ed"; 10 char [] c = str.toCharArray(); //public char[] toCharArray()將字符串轉(zhuǎn)成char字符數(shù) 11 //字符串轉(zhuǎn)為二進(jìn)制數(shù)組,二進(jìn)制轉(zhuǎn)回字符串 12 int i, sumDX = 0, sumXX = 0, sumQT = 0; 13 14 for(i=0;i<c.length;i++) 15 { 16 if(c[i]>='A'&&c[i]<='Z') 17 { 18 sumDX = sumDX + 1; 19 } 20 else if(c[i]>='a'&&c[i]<='z') 21 { 22 sumXX = sumXX + 1; 23 } 24 else 25 { 26 sumQT = sumQT + 1; 27 } 28 } 29 System.out.println("大寫字母數(shù)為:"+sumDX); 30 for(i=0;i<c.length;i++) 31 { 32 if (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') { 33 System.out.print(str.charAt(i)); 34 } 35 } 36 37 System.out.println("\n"+"小寫字母數(shù)為:"+sumXX); 38 for(i=0;i<c.length;i++) 39 { 40 if (str.charAt(i) >= 'a' && str.charAt(i) <= 'z') { 41 System.out.print(str.charAt(i)); 42 } 43 } 44 45 System.out.println("\n"+"非英文字母數(shù)為:"+sumQT); 46 for(i=0;i<c.length;i++) 47 { 48 if(str.charAt(i)<'A'||str.charAt(i)>'z') 49 { 50 System.out.print(str.charAt(i)); 51 } 52 } 53 54 55 } 56 }?
遇到的問題:
不會把字符串分解,后來通過翻書P111【例5.25】中有我想要的操作,找到了public char[] to CharArray(),然后依葫蘆畫瓢
?
?
?運(yùn)行結(jié)果:
?
?
?
四、 總結(jié):
?一、為什么要繼承:
代碼存在重復(fù),導(dǎo)致后果就是代碼量大且臃腫,,而且維護(hù)性不高(維護(hù)性主要是后期需要修改的時(shí)候,就需要修改很多的代碼,容易出錯(cuò))。
二、繼承類型:
Java 不支持多繼承,但支持多重繼承。
| 單繼承 | public classA { ? ? ? ? ...... } public class B extends A { } |
| 多重繼承 | public class A{.........} public class B extends A{.........} public class C extends B{.........} |
| 不同類繼承同一個(gè)類 | public class A{.............} public class B extends A {.............} public class C extends A {.............}? |
| 多繼承 | public class A {...........} public class B {...........} public class C extends A,B{.............} |
三、繼承的特性
1、子類擁有父類非private的屬性、方法
2、子類可以擁有自己的屬性和方法,即子類可以對父類進(jìn)行擴(kuò)展
3、子類可以用自己的方法實(shí)現(xiàn)父類的方法
4、Java 的繼承是單繼承,但是可以多重繼承,單繼承就是一個(gè)子類只能繼承一個(gè)父類,多重繼承就是,例如 A 類繼承 B 類,B 類繼承 C 類,所以按照關(guān)系就是 C 類是 B 類的父類,B 類是 A 類的父類,這是 Java 繼承區(qū)別于 C++ 繼承的一個(gè)特性。
5、提高了類之間的耦合性(繼承的缺點(diǎn):耦合性高就會造成代碼之間的聯(lián)系越緊密,代碼獨(dú)立性越差)
四、繼承的關(guān)鍵字
繼承可以使用 extends 和 implements 這兩個(gè)關(guān)鍵字來實(shí)現(xiàn)繼承,而且所有的類都是繼承于 java.lang.Object,當(dāng)一個(gè)類沒有繼承的兩個(gè)關(guān)鍵字,則默認(rèn)繼承object(這個(gè)類在 java.lang 包中,所以不需要 import )祖先類。
(1)extends ? ? ?? 只能繼承一個(gè)類
(2)implements ?使用范圍為類繼承接口的情況,可以同時(shí)繼承多個(gè)接口(接口跟接口之間采用逗號分隔)
(3)super ? ? ? ? ?? 實(shí)現(xiàn)對父類成員的訪問,用來引用當(dāng)前對象的父類
(4)this ? ? ? ? ? ? ?? 指向自己的引用
(5)final ? ? ? ? ? ? ??可以把類定義為不能繼承的,或者用于修飾方法,該方法不能被子類重寫
注意:實(shí)例變量也可以被定義為 final,被定義為 final 的變量不能被修改。被聲明為 final 類的方法自動(dòng)地聲明為 final,但是實(shí)例變量并不是 final
五、本次作業(yè)中學(xué)到的知識點(diǎn)
1、charAt(i) 函數(shù) 是獲取字符串中i位置的字符 ? ? str.charAt(i)的意思是第i個(gè)字符在字符串str中所占的位置,輸出的是數(shù)字
2、“importjava.util.*;”和“importjava.util.Scanner;”的區(qū)別:(*表示的是通配符,包括util的所有類,而Scanner表示的是一個(gè)具體的類。實(shí)際開發(fā)中都采用“importjava.util.Scanner;”這種用法,因?yàn)槌绦蛑袥]用到的包導(dǎo)入的話只會影響程序效率。)
(1)“importjava.util.*;”表示的是把util這個(gè)包下的全部類導(dǎo)入到程序中;而“importjava.util.Scanner;”表示的是只把util包下的Scanner類導(dǎo)入到程序中;
(2)導(dǎo)入“importjava.util.*;”后程序中后面如果要用到util包里面的別的類都不需要再重新導(dǎo)入包了,而如果導(dǎo)入“importjava.util.Scanner;”的話,程序中后面如果要用到util包的別的類,都要再次導(dǎo)入這個(gè)類對應(yīng)的包才能使用;
3、reverse()方法表示的是將一個(gè)輸入流倒敘輸出。(此方法針對的是io流,不能針對字符串。)
轉(zhuǎn)載于:https://www.cnblogs.com/TheMatrixOfTYY/p/11558744.html
總結(jié)
以上是生活随笔為你收集整理的第五周课程总结实验报告(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring入门与常用配置
- 下一篇: 合并两个链表,去掉重复元素