第五周课程总结&实验报告(三)
实验报告(三)
1.已知字符串:"this is a test of java".按要求执行以下操作:(要求源代码、结果截图。)
- 统计该字符串中字母s出现的次数。
- 统计该字符串中子串“is”出现的次数。
- 统计该字符串中单词“is”出现的次数。
- 实现该字符串的倒序输出。
(1).实验代码:
package 测试;
import java.util.Scanner;
public class 测试0 {
public static void szimu(String str) {
int count=0;
char c[] = str.toCharArray();
for(int i=0;i<c.length;i++) {
if(c[i]=='s') {
count++;
}
}
System.out.println("该字符串中字母s出现的次数为:"+count);
}
public static void iszichuan(String str) {
int count=0;
char c[] = str.toCharArray();
for(int i=0;i<c.length;i++) {
if(c[i]=='s'&&c[i-1]=='i') {
count++;
}
}
System.out.println("该字符串中子串“is”出现的次数为:"+count);
}
public static void isdanci(String str) {
int count=0;
String s[]=str.split(" ");
for(int i=0;i<s.length;i++) {
if(s[i].contentEquals("is")) {
count++;
}
}
System.out.println("该字符串中单词“is”出现的次数为:"+count);
}
public static void daoxushuchu(String str) {
char c[] = str.toCharArray();
System.out.print("该字符串的倒序输出为:");
for(int i=c.length-1;i>=0;i--) {
System.out.print(c[i]);
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入字符串:");
String str=sc.nextLine();
szimu(str);
iszichuan(str);
isdanci(str);
daoxushuchu(str);
}
}
(2)实验运行结果截图:
(3)实验大致思路:
设立多个方法,对输入的字符串进行分别操作,再分别输出结果
(4)实验中遇到的问题:
用的是对输入的字符串来进行操作,这样很容易修改代码(因为只用更改方法,接下来的题目都是在这个代码模式的基础上改的),在进行字符串的操作的时候toCharArray()方法和split()方法弄混了,给我造成了一定程度的麻烦,后面理清楚了这题就不难了.
2.请编写一个程序,使用下述算法加密或解密用户输入的英文字串。要求源代码、结果截图。
(1).实验代码:
这里题目表述我不是很清楚,有2种情况,一种是让单个字符的ASCII往后3位,一种是移动位置往后3位,所以我都弄了
单个字符的ASCII往后3位:
package 测试;
import java.util.Scanner;
public class 测试0 {
public static void jiami(String str) {
System.out.println("加密的字符串:");
char c[]=str.toCharArray();
for(int i=0;i<c.length;i++) {
c[i]+=3;
System.out.print(c[i]);
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入字符串:");
String str=sc.nextLine();
jiami(str);
}
}
移动位置往后3位:
package 测试;
import java.util.Scanner;
public class 测试0 {
public static void jiami(String str) {
String s[]=str.split("");
int j=str.length();
if(j>3) {
System.out.println("加密的字符串:");
System.out.print(s[j-3]);
System.out.print(s[j-2]);
System.out.print(s[j-1]);
for(int i=0;i<j-3;i++) {
System.out.print(s[i]);
}
}
if(j==1||j==3) {
System.out.println("加密的字符串:");
System.out.print(str);
}
if(j==2) {
System.out.println("加密的字符串:");
System.out.print(s[1]);
System.out.print(s[0]);
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入字符串:");
String str=sc.nextLine();
jiami(str);
}
}
(2)实验运行结果截图:
单个字符的ASCII往后3位:
移动位置往后3位:
(3)实验大致思路:
单个字符的ASCII往后3位:
用toCharArray()方法对字符串进行拆分,在输出之前往后(ASCII)移动3位再输出
移动位置往后3位:
用split()方法拆分字符串,对于字符串长度大于3的,先输出最后面3位的字符,然后再按顺序输出其他的字符,如果字符串长度等于1或3就原样输出,等于2就倒序输出
(4)实验中遇到的问题:
就是没清楚题目的意思,所以就弄了2个,都不是很复杂,和第一题差不多,都是运用String的操作方法来做题,弄清楚toCharArray()方法和split()方法就很简单
3.已知字符串“ddejidsEFALDFfnef2357 3ed”。输出字符串里的大写字母数,小写英文字母数,非英文字母数。
(1).实验代码:
package 测试;
import java.util.Scanner;
public class 测试0 {
public static void chazhao(String str) {
int daxie=0,xiaoxie=0,qita=0;
char c[]=str.toCharArray();
for(int i=0;i<c.length;i++) {
if(c[i]>='A'&&c[i]<='Z') {
daxie++;
}
else if(c[i]>='a'&&c[i]<='z') {
xiaoxie++;
}
else {
qita++;
}
}
System.out.println("大写字母为:"+daxie);
System.out.println("小写字母为:"+xiaoxie);
System.out.println("其他非字母为:"+qita);
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入字符串:");
String str=sc.nextLine();
chazhao(str);
}
}
(2)实验运行结果截图:
(3)实验大致思路:
用.toCharArray()方法对输入的字符串进行拆分,再一个个进行判断最后输出结果
(4)实验中遇到的问题:
在学习C语言的时候做过类似的题目,所以很快就做出来了,和C语言不一样的就是要用toCharArray()方法来拆分,而不是在输入的时候直接就输入进字符数组(虽然java好像也可以这么做,但是比较复杂就不如这样了)
第五周课程总结
从开学到现在已经进行了5周的学习,从对java的一无所知,到现在的初窥门径.在只知道C语言的情况下,现在通过学习也能够做出java的题目了,java和C语言的相似之处还是很多的,有些甚至就是在C语言做过,需要做的只是将其用java表示出来就行了
这周学习的内容:
1.继承:
继承就是可以实现直接将父类中的操作直接拿到子类中使用的方式,继承是面向对象三大特征之一.
类继承的格式
class 父类{} //定义父类
class 子类 extends 父类{} //使用extends关键字实现继承
当然,子类也可以定义自己的属性和方法.
注意:在java中只允许单继承,不能使用多重继承,允许进行多层继承.即:一个子类只能继承一个父类,但是一个父类还可以有另一个父类.
2.方法的重载和覆写的区别
重载:
单词:Overloading
定义:方法名称相同,参数的类型或个数不同,对权限没有要求
范围:发生在一个类中
覆写:
单词:Overriding
定义:方法名称,参数类型,返回值类型全部相同,被覆写的方法不能拥有更严格的权限
范围:发生在继承类中
3.this关键字和与super关键字的区别
this关键字:
概念:访问本类中的属性和方法
查找范围:先查找本类,如果本类没有则查找父类.
构造:this调用本类构造,必须放在构造方法的首行.
其他:表示当前对象.
super关键字:
概念:访问父类中的属性和方法
查找范围:不查找本类,直接调用父类定义.
构造:super调用父类构造,必须放在子类构造方法首行.
其他:不能表示当前对象.
4.final关键字:
final在Java中表示的意思是最终的意思,也可以称为完结器.可以使用final关键词声明,属性,方法,在声明的时候要注意以下几点:
(1)使用final声明的类不能有子类
(2)使用final声明的方法不能被子类覆写
(3)使用final声明变量即成为常量,常量不可以修改
5.抽象类
抽象类的作用就是比普通类多了一些抽象方法,其他地方和普通类的组成基本一样
抽象类的定义格式
abstract class 抽象类名称{
属性;
访问权限 返回值类型 方法名称(参数){ //普通方法
[return 返回值];
}
访问权限 abstract 返回值类型 方法名称(参数); //抽象方法
}
6.多态性
对象的多态性主要分为以下两种类型
(1)向上转型:子类对象--->父类对象
(2)向下转型:父类对象--->子类对象
对于向上转型,程序会自动完成,而对于向下转型时,必须明确地指明要转型的子类类型,如下所示
对象向上转型:父类 父类对象 = 子类实例;
对象向下转型:子类 子类对象 = (子类)父类实例;
注意:在进行对象的向下转型前,必须首先发生对象向上转型,否则将出现对象转换异常.