实验四 实现字符串类.docx
《实验四 实现字符串类.docx》由会员分享,可在线阅读,更多相关《实验四 实现字符串类.docx(12页珍藏版)》请在冰点文库上搜索。
实验四实现字符串类
中南大学
Java实验报告
学生姓名
学生学号
题目实验四实现字符串类
专业班级
完成时间2014年1月7日
目录
1.问题描述3
一、实验目的3
二、实验开发环境和工具3
三、实验内容3
2.设计简要描述4
3.程序清单5
4.结果分析10
5.调试报告11
实验四实现字符串类
1.问题描述
一、实验目的
1.了解和掌握String类的实现原理
二、实验开发环境和工具
可以在Linux或者Windows操作系统上搭建开发环境,可使用集成开发环境Eclipse,使用Java语言,工具包使用JDK1.8。
三、实验内容
String是Java类库提供的类,为了了解String类的实现原理,采用字符数组来实现字符串类(可命名为MyString),实现字符串类的如下方法:
publicMyString(char[]chars);
publiccharcharAt(intindex);
publicintlength();
publicMyStringsubstring(intbegin,intend);
publicMyStringtoLowerCase();
publicbooleanequals(MyStrings);
publicstaticMyStringvalueOf(inti);
publicintcompare(Strings);
publicMyStringsubstring(intbegin);
publicMyStringtoUpperCase();
publicchar[]toChars();
publicstaticMyStringvalueOf(booleanb);
2.设计简要描述
本实验主要包含两个类:
publicclassMyString//新字符串类
publicclasstest//测试类
stringChar:
char[]//私有字符串数组
MyString(char[]chars)//构造函数
showMyString():
void//显示字符串
charAt(index:
int):
char//返回指定位置的char值
length():
int//返回字符串长度
substring(begin:
int,end:
int):
MyString//将字符串begin——end位置的字符换成新的字符串
toLowerCase():
MyString//将所有字符串都换成小写
equals(s:
MyString):
boolean//判断两个字符串是否相等
staticvalueOf(inti):
MyString//返回表示int值的字符串表示
compare(Strings):
int//比较字符串大小
substring(begin:
int):
MyString//求冲begin开始的子串
toUpperCase():
MyString//将字符串小写换成大写
toChars():
char[]//返回字符串数组
staticvalueOf(b:
boolean):
MyString//将b换成字符串
3.程序清单
package字符串;
classtest{
publicstaticvoidmain(String[]args)
{
char[]tschar1={'c','a','v','e'};
char[]tschar2={'S','T','R','O','N','G'};
Strings1="STRING";
MyStringstring1=newMyString(tschar1);
MyStringstring2=newMyString(tschar2);
MyStringa;
System.out.println("string1=");string1.showMyString();
System.out.println("string2=");string2.showMyString();
System.out.println("thelengthofstring1"+string1.length());
System.out.println("thelengthofstring2"+string2.length());
System.out.println("将string2换成小写");
a=string2.toLowerCase();
a.showMyString();
System.out.println("将string1换成大写");
a=string1.toUpperCase();
a.showMyString();
System.out.println("比较string1和s1大小"+pare(s1));
System.out.println("求string2的子串:
string2.substring(4)");
a=string2.substring(4);
a.showMyString();
System.out.println("求string2的子串:
string2.substring(2,6)");
a=string2.substring(2,6);
a.showMyString();
System.out.println("判断string1,string2是否相等"+string1.equals(string2));
System.out.println("MyString.valueof(false)=");
a=MyString.valueOf(false);
a.showMyString();
System.out.println("MyString.valueof
(1)");
a=MyString.valueOf
(1);
a.showMyString();
}
}
classMyString{
privatechar[]stringChar;
publicMyString(char[]chars)//构造函数
{
stringChar=chars;
}
publicvoidshowMyString()//显示字符串
{
inta=0;
for(a=0;a{
System.out.print(this.stringChar[a]);
}
System.out.println();
}
publiccharcharAt(intindex)//返回指定位置的char值
{
returnstringChar[index-1];
}
publicintlength()//返回字符串长度
{
returnstringChar.length;
}
publicMyStringsubstring(intbegin,intend)//将字符串begin——end位置的字符换成新的字符串
{
char[]string=newchar[end-begin+1];
inta=0;
intb=0;
for(a=begin-1;a{
string[b]=this.stringChar[a];
b++;
}
MyStringnewString=newMyString(string);
returnnewString;
}
publicMyStringtoLowerCase()//将所有字符串都换成小写
{
inta=0;
intb=((int)'a'-(int)'A');//大小写之间的差值(a>A)
char[]newString=newchar[(int)this.length()];
for(a=0;a{
if((int)stringChar[a]>=(int)'A'&&(int)stringChar[a]<=(int)'Z')
{
newString[a]=(char)((int)this.stringChar[a]+b);
}
else
{
newString[a]=stringChar[a];
}
}
MyStringstring0=newMyString(newString);
returnstring0;
}
publicbooleanequals(MyStrings)//判断两个字符串是否相等
{
inta=0;
for(a=1;a<=s.length();a++)
{
if(s.charAt(a)!
=this.charAt(a))
{returnfalse;}
}
returntrue;
}
publicstaticMyStringvalueOf(inti)//返回表示int值的字符串表示
{
char[]newchar=newchar[1];
newchar[0]=(char)(i+(int)'0');
MyStringnewString=newMyString(newchar);
returnnewString;
}
publicintcompare(Strings)//比较字符串大小
{
inta=0;
for(a=1;a<=s.length();a++)
{
if((int)stringChar[a-1]>(int)s.charAt(a))
{
return1;//大于s
}
if((int)s.charAt(a)>(int)stringChar[a-1])
{
return-1;//小于s
}
}
return0;//等于s
}
publicMyStringsubstring(intbegin)//求冲begin开始的子窜(begin《this。
length())
{
char[]newchar=newchar[1+this.length()-begin];
inta=0;
for(a=0;a<=this.length()-begin;a++)
{
newchar[a]=stringChar[a+begin-1];
}
MyStringnewString=newMyString(newchar);
returnnewString;
}
publicMyStringtoUpperCase()//将字符串小写换成大写
{
inta=0;
intb=(int)'a'-(int)'A';//大小写之间的差值(a>A)
char[]newString=newchar[(int)this.length()];
for(a=0;a{
if((int)stringChar[a]>=(int)'a'&&(int)stringChar[a]<=(int)'z')
{
newString[a]=(char)((int)stringChar[a]-b);
}
else
{
newString[a]=stringChar[a];
}
}
MyStringstring0=newMyString(newString);
returnstring0;
}
publicchar[]toChars()//返回字符串数组
{
returnthis.stringChar;
}
publicstaticMyStringvalueOf(booleanb)//将b换成字符串
{
if(b)
{
char[]newchar={'t','r','u','e'};
MyStringnewString=newMyString(newchar);
returnnewString;
}
else
{
char[]newchar={'f','a','l','s','e'};
MyStringnewString=newMyString(newchar);
returnnewString;
}
}
}
4.结果分析
如图,运行程序后可得到如下结果。
可知,程序是正确的。
5.调试报告
本次实验是对String类型的重写,目的是加强我们对java中Sting类型的理解。
虽然String类型在java作为一个基本类型,java已经提供了很成熟的操作函数,但是这次实验的目的不是让我们去如何改进String类型,而是让我们更加深入的了解String类型的实现原理。
在上机实习完成课程设计的过程中,遇到了不少的问题,一是有一些东西接触得不深,平时的练习不够,到了实践环节就有些手忙脚乱;二是在编写的过程中由于思路不清晰以及自己的粗心给自己制造了一些麻烦,还有就是会产生一些异常。
但是在经过自己和老师、同学的交流,以及自己查阅资料和API文档,针对性的对不懂得问题进行查询,自己没有学过但是又要用到得逐渐的得到解决,再经过自己反复的理清思路和反复的检查由思路不清晰和粗心带来的麻烦也慢慢得到了解决。
我有以下几点感想:
首先,java作为一种计算机语言,它具备语言的特性,就是我们在课堂上认真听取了老师的指导之后,还得自己回去认真看书写程序,并且上机实习才能发现问题及时解决问题。
就像我们学习语言一样要通过和同学之间的交流才能提高我们的实际应用能力。
所以,我们在自己认真刻苦学习的同时,一定要多和同学老师交流,从他们那里吸取好的思维方式、好的学习方法。
在上机实习的时候,我现在回顾自己一学期的学习,觉得首先应该熟悉java的概念,明白程序开发的基本思想,熟悉开发环境之后马上进行自主学习,自己学习的步伐千万不能落于老师讲课授课的速度。
如果这样的话,我们很可能处于一种被动学习的劣势,失去对java学习的热情,以至于恶性循环,到最终的无可救药。
在平时的训练和刚刚结束的上机实习中我深刻的体会到了学习好java我们就要一定要掌握好java的基本语句,包括条件语句和循环语句。
这些就是我们编写程序这棵大树的必要组成枝叶。
建立起关键语句的之后,我们才能有更强的功能和实用性。
Java是一个面向对象的编程语言,我们一定要学会如何编写多个类和方法,在不断地摸索中培养我们自身设计面向对象解决方案的能力。
作为学生的我们,是一个学习的过程,我们应该学习如何写好程序。
而好的程序不仅仅是一系列语句的拼凑,我们要联系自身实际,用编程语言解决问题和实施解决问题的方案。
在学习java的这一段时间当中,图形激发了我学习的巨大热情。
所以,我觉得我自己一定要在打好坚实的基础的情况下,对图形学进行认真学习。
在学习图形和图形用户接口的时候,觉得变得吃力起来。
因为随着课程的加重,发现自己动手能力越来越若,在事件处理和图形用户接口的使用中,出现了知识点模棱两可的情况。
当然,任何的困难挫折在不断地努力中都会变得脆弱,只是暂时的阴影。
在以后的日子里,我要不断地学习这个博大精深的语言,继续不断的深化自己的实际动手能力。