第五周课程总结&试验报告(三)
试验报告
1.已知字符串:"this is a test of java".按要求执行以下操作:(要求源代码、结果截图。)
·统计该字符串中字母s出现的次数。
·统计该字符串中子串“is”出现的次数。
·统计该字符串中单词“is”出现的次数。
·实现该字符串的倒序输出。
代码
package text3;
//字符串中字母s出现的次数
public class Characters {
public static void main(String[] args) {
String str = "this is a test of java";
int count=0;
int i;
char[] ch = str.toCharArray();
for(i=0;i<ch.length;i++)
{
if(ch[i]=='s')
count++;
}
System.out.println("s个数是:"+count);
}
}
//字符串中子串“is”出现的次数
public class Characteriscount {
public static void main(String[] args) {
String str = "this is a test of java";
int count=0;
int i;
int j;
String ch="is";
j=0;
for(i=0;i<str.length();i++)
{
if(str.indexOf(ch,j)==-1)
break;
else
{
count++;
j=str.indexOf(ch,j)+1;
}
}
System.out.println("is个数是:"+count);
}
}
//字符串中单词“is”出现的次数
public class Characterisword {
public static void main(String[] args) {
String str = "this is a test of java";
int count=0;
int i;
String[] ch= str.split(" ");
for(i=0;i<ch.length;i++)
{
if(ch[i].equals("is"))
count++;
}
System.out.println("单词is个数是:"+count);
}
}
//字符串的倒序输出
//单词倒序输出
public class Characterinvertprint {
public static void main(String[] args) {
String str = "this is a test of java";
int i;
String[] ch = str.split(" ");
for(i=ch.length-1;i>=0;i--)
{
System.out.print(ch[i]+" ");
}
}
}
//字母倒序输出
public class Characterprint {
public static void main(String[] args) {
String str = "this is a test of java";
int i;
char[] ch = str.toCharArray();
for(i=ch.length-1;i>=0;i--)
{
System.out.print(ch[i]);
}
}
}
遇到的问题
1.统计该字符串中字母s出现的次数 时输出结果错误;
解决办法:不使用substring方法,改为使用indexOf方法查找到指定字符串就会返回字符串的最后的位置。
2.实现该字符串的倒序输出 时报错,字符串数组的最后字符串下标是长度减一;
解决办法:把i=ch.lenght;改为i=lenght-1。
运行结果
1.1
1.2
1.3
1.4
2.请编写一个程序,使用下述算法加密或解密用户输入的英文字串。要求源代码、结果截图。
代码
package Encrypt;
import java.util.*;
public class Encryptstr {
private String str;
public Encryptstr() {
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
//输入字符串
public void Inputstr() {
Scanner pw = new Scanner(System.in);
String str = pw.next();
this.str = str;
pw.close();
}
//加密过程
public String encrystr() {
char[] ch = str.toCharArray();
int i;
for(i=0;i<str.length();i++) //后移3位
{
ch[i]=(char)(ch[i]+3);
}
//重新连成字符串
String str = new String(ch);
this.str = str;
return str;
}
//解密
public String deciphering() {
char[] ch = str.toCharArray();
int i;
for(i=0;i<str.length();i++) //后移3位
{
ch[i]=(char)(ch[i]-3);
}
//重新连成字符串
String str = new String(ch);
this.str = str;
return str;
}
//测试
public static void main(String args[]) {
Encryptstr str1 = new Encryptstr();
System.out.println("请输入需加(解)密内容:");
str1.Inputstr();
System.out.println("加密后:"+str1.encrystr());
System.out.println("解密后:"+str1.deciphering());
}
}
遇到的问题
无。
运行结果
更正
代码
package Encrypt;
import java.util.*;
public class Encryptstr {
private String str;
public Encryptstr() {
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
//输入字符串
public void Inputstr() {
Scanner pw = new Scanner(System.in);
String str = pw.next();
this.str = str;
pw.close();
}
//加密过程
public String encrystr() {
char[] ch = str.toCharArray();
char[] st = null;
st = new char[str.length()];
int i;
for(i=0;i<str.length();i++) //后移3位
{
if(i>str.length()/2)
{
st[i+3-str.length()]=ch[i];
}
else
st[i+3]=ch[i];
}
//重新连成字符串
String str = new String(st);
this.str = str;
return str;
}
//解密
public String deciphering() {
char[] ch = str.toCharArray();
char[] st = null;
st = new char[str.length()];
int i;
for(i=0;i<str.length();i++) //后移3位
{
if(i<3)
{
st[i-3+str.length()]=ch[i];
}
else
st[i-3]=ch[i];
}
//重新连成字符串
String str = new String(st);
this.str = str;
return str;
}
public static void main(String args[]) {
Encryptstr str1 = new Encryptstr();
System.out.println("请输入需加(解)密内容:");
str1.Inputstr();
//System.out.println("加密后:"+str1.encrystr());
System.out.println("解密后:"+str1.deciphering());
}
}
运行结果
3.已知字符串“ddejidsEFALDFfnef2357 3ed”。输出字符串里的大写字母数,小写英文字母数,非英文字母数。
代码
package Count;
public class Countchar {
public static void main(String args[]) {
String str = "ddejidsEFALDfnef2357 3ed";
int i;
int countcapitals=0; //大写英文字母数
int countsmall=0; //小写英文字母数
int countnoletter=0; //非英文字母数
for(i=0;i<str.length();i++)
{
if(str.charAt(i)>='A'&& str.charAt(i)<='Z')
countcapitals++;
else if(str.charAt(i)>='a'&& str.charAt(i)<='z')
countsmall++;
else
countnoletter++;
}
System.out.println("大写英文字母数:"+countcapitals);
System.out.println("小写英文字母数:"+countsmall);
System.out.println("非英文字母数:"+countnoletter);
}
}
遇到的问题
无。
运行结果
课程总结
本周学习了
继承
概念
类的继承方式:class 父类{}
class 子类 extends 父类{}
继承的实现:通过继承的功能可以直接把父类中的操作直接拿到子类中使用,子类也可以定义自己的属性或方法。
注意:只可多层继承,不可多重继承;子类不能直接访问父类中的私有成员,可以调用父类中的非私有方法,但不能直接调用父类中的私有成员。
方法覆写:指子类定义了与父类中同名的方法。
super()可以从子类中调用父类中的构造方法、普通方法、属性。
super调用父类的构造方法:语句必须放在子类构造方法的首行,父类没有构造方法时,会在父类中自动生成一个空的构造方法,然后通过在子类中用super();调用,若父类中构造了非空的构造方法,则不会再自动生成空构造方法,此时子类中调用父类的构造方法super();括号中要带参数。
this与super的区别
抽象类
定义及使用:
(1)包含一个抽象方法的类必须是抽象类;
(2)抽象类和抽象方法都要用abstract声明;
(3)抽象方法只需声明而不需实现;
(4)抽象类必须被子类继承,如果子类不是抽象类,必须覆写抽象类的全部抽象方法。
final关键字
声明时注意:
(1)final声明的类不能有子类;
(2)final声明的方法不能被子类覆写;
(3)final声明的变量会成为常量。
对象的多态性
(1)子类对象->父类对象 (向上转型)
(2)父类对象->子类对象 (向下转型)
注:向上转型是自动的,向下转型是强制的,必须明确指明要转型的子类的类型,(为保证转型成功)向下转型之前必须先有对象向上转型。
格式:
向上 父类 父类对象 = 子类实例;
向下 子类 子类对象 = (子类)父类实例;