第五周课程总结&试验报告(三)
实验三 String类的应用
- 实验目的
- 掌握类String类的使用;
- 学会使用JDK帮助文档;
- 实验内容
- 1.已知字符串:"this is a test of java".按要求执行以下操作:(要求源代码、结果截图。)
-
- 统计该字符串中字母s出现的次数。
- 统计该字符串中子串“is”出现的次数。
- 统计该字符串中单词“is”出现的次数。
- 实现该字符串的倒序输出。
实验代码:
package main; class Person{ String str="This is a test of java"; public void test1(){ int count=0,i=0; while(str.indexOf("s",i)!=-1){ count++; i=str.indexOf("s",i)+1; } System.out.println("字母s出现的次数:"+count); } public void test2(){ int count=0,i=0; while(str.indexOf("is",i)!=-1){ count++; i=str.indexOf("is",i)+1; } System.out.println("子串“is”出现的次数:"+count); } public void test3(){ int count=0,i=0; while(str.indexOf(" is",i)!=-1||str.indexOf("is ",i)!=-1){ count++; i=str.indexOf(" is",i)+1; i=str.indexOf("is ",i)+1; } System.out.println("单词“is”出现的次数:"+count); } public void test4(){ char s[]=str.toCharArray(); System.out.print("字符串的倒序输出结果:"); for(int i=str.length()-1;i>=0;i--) { System.out.print(s[i]); } } } public class Main1 { public static void main (String[] args){ Person per=new Person(); per.test1(); per.test2(); per.test3(); per.test4(); } }
实验结果截图:
实验过程和问题:
这道题的的前三个问题老师在课堂上讲过,也并不难,但用加空格的方式查找单词“is”虽然这道题可以,但在“is”位于尾部或首部时查找不到,于是我同时用了“is ”和“ is”来查找才解决了问题。而第四题则用toCharArray方法来将字符串变为字符数组来储存起来,再从尾到头输出出来。在实验过程遇到了上周同样的问题“方法 main 不能声明为 static;只能在静态类型或顶级类型中才能声明静态方法”,用快速修正也修复不了,最后找到了原因:少了一个大括号,导致大括号不匹配,从而使得静态的方法或属性在类外定义了。仔细查找后找到了错误并改正了,看来写代码要细心呀。
2.请编写一个程序,使用下述算法加密或解密用户输入的英文字串。要求源代码、结果截图。
实验代码:
package main; import java.util.*; public class Main1 { public static void main (String[] args){ System.out.println("输入一个字符串:"); Scanner sc=new Scanner(System.in); char a[]=sc.nextLine().toCharArray(); char b[]= new char [100] ; int j=0; for(int i=a.length-3;i<a.length;i++){ b[j]=a[i]; j++; } for(int i=0;i<a.length-3;i++){ b[j]=a[i]; j++; } System.out.println(b); } }
实验结果截图:
实验过程和问题:
刚开始没有看懂题意,明白后其实也还好,关键是用 nextLine()对输入的数据进行读取,再用toCharArray()方法将字符串存进一个字符串数组。之后用一个字符数组先存储字符串数组的后三个字符串,再从头到尾将余下的字符串存进去,最后输出。
3.已知字符串“ddejidsEFALDFfnef2357 3ed”。输出字符串里的大写字母数,小写英文字母数,非英文字母数。
实验代码:
package main; public class Main1 { public static void main (String[] args){ String str="ddejidsEFALDFfnef2357 3ed"; char s[]=str.toCharArray(); int sum1=0,sum2=0,sum3=0; for(int i=0;i<s.length;i++){ if(s[i]>='A'&&s[i]<='Z'){ sum1++; } else if(s[i]>='a'&&s[i]<='z'){ sum2++; } else { sum3++; } } System.out.println("大写字母数:"+sum1+" "+"小写英文字母数:"+sum2+" "+"非英文字母数:"+sum3+" "); } }
实验结果截图:
实验过程:这道题首先用toCharArray方法来将字符串变为字符数组用数组储存,之后就可以逐个找出来并计数,用C语言做过没有很大的差别,没有花多少时间也没有出错。
课程总结:
方法的重载和覆写的区别:
重载 | 覆写 |
方法名称相同,参数的个数及类型不同 | 方法名称,返回值类型,参数的个数,参数的类型均相同 |
对权限没有要求 | 被覆写的方法不能拥有比父类更严格的访问控制权限 |
发生在一个类中 | 发生在继承类中 |
方法的重载:方法名称相同,参数的个数或类型不同。不能有两个名字相同,参数类型也相同却返回值不同的方法。
方法的覆写:子类定义了与父类方法名称,返回值类型、参数类型及个数完全相同的方法。被覆写不能够拥有比父类更为严格的控制权限。public>default(不加任何说明 包访问权限)>private(只能在本类中使用)
继承:子类可以继承父类非private的属性、方法。子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。子类可以用自己的方式实现父类的方法。Java的继承是单继承,不可以多重继承,允许进行多重继承。
super关键字:使用super可以从子类中调用父类的方法、属性。super()和this()均需放在构造方法内第一行,因此与this不能同时出现,main方法不能使用this和super.
学习总结:写了几周的代码后发现java的学习要多写才行,因为有时会忘记关键字、方法的作用,一些方法概念也不清楚意思,要查看帮助文档,不过java写起代码来感觉不错,格式的要求没那么严格,在软件的帮助下代码基本上不会有错误,效率要高很多。