java 练习题.docx
《java 练习题.docx》由会员分享,可在线阅读,更多相关《java 练习题.docx(13页珍藏版)》请在冰豆网上搜索。
![java 练习题.docx](https://file1.bdocx.com/fileroot1/2022-11/22/53ed88f8-e9fb-406c-8cde-3749c928e1b0/53ed88f8-e9fb-406c-8cde-3749c928e1b01.gif)
java练习题
学习使人进步
问答:
1.写出String类的特点,构造函数及其他成员函数。
并对各函数的功能进行详细说明。
答:
String类的特点:
为不可变对象,一旦被创建,就不能修改它的值.对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String类的构造函数和其他函数
String(charchars[])
从字符数组生成字符串
String(charchars[],intstartIndex,intnumChars)
从字符数组指定的字符生成字符串StartIndex和numChars指明字符串在数组中的起始索引以及它包含的字符数。
String((byteascii[],inthiByte)
从字节数组生成字符串,hiByte用来指定每个字符的高位字节。
String(byteascii[],inthyByte,intstartIndex,intnumChars)
从字节数组指定字符数生成字符串,hiByte用来指定每个字符的高位字节。
StartIndex和numChars指明字符串在数组中的起始索引以及它包含的字符数。
length()
返回字符串的字符个数
charAt()
charAt(intindex)返回字符串中index位置上的字符
indexOf()和lastIndexOf
在给定的字符串中检索特定字符和子串;
(1)indexOf(intch),lastIndexOf(intch)分别返回ch在字符串中出现的第一个位置和最后一个位置。
(2)indexOf(stringstr),lastIndexOf(Stringstr)分别返回子串str在字符串中出现的第一个位置和最后一个位置。
(3)indexOf(intch,intfromIndex),lastIndexOf(intch,intfromInex)分别返回字符ch在字符串中位置fromIndex以后出现的始末位置。
(4)indexOf(Stringstr,intfromIndex),lastIndexOf(Stringstr,intfromInex)分别返回字符ch在字符串中位置fromIndex以后出现的始末位置。
getChars()
从字符串中提取多个字符,publicvoidgetChars(intsrcbegint,intend,charc[],intoffset)该方法的作用是将当前字符串从srcbegint到end-1位置上的字符复制到字符数组c中,并从c的offset处开始存放.
getBytes()
与getChars()类似,区别在于字符串的字符均用8位表示。
concat()
publicStringreplace(Stringstr);用来将当前字符串对象与给定的字符串str连接起来。
replace()
replace(charoldchar,charnewchar)把字符串oldchar替换成newchar.
Substring()
Substring(intbegin,intstop)获取从begin位置到stop位置的子串
toUpperCase()
将字符串中所有字符变为大写字母
toLowerCase()
将字符串中所有字符变为小写字母
2.写出StringBuffer类的特点,构造函数及其他成员函数。
并对各函数的功能进行详细说明。
答:
StringBuffer类的特点:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立。
StringBuffer的构造函数
StringBuffer()
系统为字符串分配16个字符大小的缓冲区
StringBuffer(intlen)
Len指明字符串缓冲区的长度
StringBuffer(Strings)
参数s是字符串的初始值,同时系统为字符串分配16个字符大小的缓冲区
StringBuffer类除了具有String类的函数外,新增的函数:
Capacity()
用来得到字符缓冲区的容量
append(stringstr)
在已有的字符末尾加上一个字符str
insert(intoffset,Stringstr)
在字符串offset处插入一个字符串str
setCharAt(intindex,charch)
用来设置指定索引index位置的字符值
3.写出java中数组的概念和定义,并说明java中数组类型与C++中的区别。
答:
数组的概念:
数组是一种复合数据类型,也是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用统一的数组名和相应的下标来唯一地确定数组中的元素。
数组的定义:
一维数组的定义:
typeArrayName[];二维数组:
typeArrayName[][].
与C++中的区别:
在Java中定义数组时并不为数组元素分配内存空间,定义之后经过初始化之后才能引用数组中的元素。
Java中还提供另外一种定义方式:
type[]ArrayName.
4.写出一维数组的定义格式和实例化方法。
答:
定义格式:
typearrayName[]或是type[]arrayName.type(类型)可以是Java中任意的数据类型,包括复合数据类型。
实例化方法:
1、静态初始化:
typearrayName[]={elements1[,elements2.....]}
2、动态初始化:
(1)简单数据类型arrayName=newtype[arraySize];
例如:
intintArray[];
intArray=newint[5]
(2)复合数据类型首先为数组开辟每个元素的引用空间:
arrayName=newtype[arraySize]然后再为每个元素开辟内在空间:
arrayName[0]=newtype(paramList)...arrayName[arraySize-1]=newtype(paramList).
5.写出二维数组的定义格式和实例化方法。
答:
定义格式:
typearrayName[][]或是type[][]arrayname
实例化方法:
1、静态初始化例:
intintArray[][]={{1,2},{2,3}}
2、动态初始化
(1)直接为每一维分配内存空间例:
inta[][]=newint[2][3];
(2)从最高维开始,分别为每一维分配内存空间,格式如下:
arrayName=newtype[arrayLenth1][];
arrayName[0]=newtype[arrayLenth20]....
arrayName[arraylenth-1]=newtype[arrayenth2(n-1)]
实验:
第一题:
用数组实现一个char队列类(CharList),该类的构造函数传递一个int类型的参数,确定队列的大小。
成员方法包括put和get,队列为満时再put要提示“队列满,无法put”,队列为空时再get要提示“队列空,无法get”。
另写一个演示类(CharListDemo)测试该队列类,分别构造大小两个队列,大的容量为100个char, 小的容量为4个char。
用put操作将26个字母加入大队列,再用get操作取出并输出到屏幕; 将ZYXWV五个字母加入到小队列,再从队列中取出并输出。
classCharList{
intarraySize,i=0;//arraySize表示数组的大小,i表示数组下标
chararray[];//定义一个一维数组当作队列
CharList(intsz)//构造函数动态为数组初始化
{
arraySize=sz;
array=newchar[arraySize];
}
booleanput(charelement)//把字符存入数组中
{
if(i>=arraySize)
{
System.out.println("队列满,无法put");
returnfalse;
}
array[i]=element;
i++;
returntrue;
}
booleanget(chararray[])//把字符输出在屏幕上
{
intcnt=0;
for(inti=0;i{
if(array[i]=='')
{
System.out.println("队列空,无法get");
returnfalse;
}
System.out.print(array[i]);
cnt++;
if(cnt%10==0)
System.out.println();
}
returntrue;
}
}
publicclassCharListDemo{//测试类
publicstaticvoidmain(Stringargs[])
{
CharLista=newCharList(100);//为大队列分配100个空间
for(inti=0;i<26;i++)
{
a.put((char)('A'+i));//调用put()函数,把“ABCD...”等输入到数组中
}
a.get(a.array);//调用get()函数,输出“ABCDEFG....”
charch[]={'Z','Y','X','W','V'};
CharListb=newCharList(4);//为小队列分配空间4个
for(inti=0;i<4;i++)
{
b.put(ch[i]);//把ch[]输入到数组array.
}
b.get(b.array);//输出ch[].
}
}
运行结果:
ABCDEFGHIJ
KLMNOPQRST
UVWXYZ
ZYXW
第二题
(1)下列哪个可以正确创建一个int类型的二维数组?
C、D
A. inta[][]=newint[][];
B. inta[10][10]=newint[][];
C. inta[][]=newint[10][10];
D. int[][]a=newint[10][10];
E. int[]a[]=newint[10][10];
(2) 编译和运行下程序段,会有什么结果?
D
classArray{
publicstaticvoidmain(String[]args){
intlength=100;
int[]d=newint[length];
for(intindex=0;indexSystem.out.println(d[index]);
}
}
A 代码不能编译,因为数组声明不正确;
B 代码不能编译,因为数组元素没有初始化;
C 在标准输出中显示数字0~99;
D 在标准输出中显示100个0;
第三题:
编写程序计算下列矩阵的乘积:
程序代码:
publicclassCh3_2{
publicstaticvoidmain(Stringargs[])
{
inti,j,k;
inta[][]={{2,3,4},{7,8,9}};
intb[][]={{5,7,9,11},{6,8,19,14},{8,4,9,3}};
intc[][]=newint[2][4];//用来表示a*b
intd[][]={{23,45},{78,22},{88,99},{43,66}};
inte[][]=newint[2][2];//存放最终结果
for(i=0;i<2;i++)
{
for(j=0;j<4;j++)
{
for(k=0;k<3;k++)
c[i][j]+=a[i][k]*b[k][j];
}
}
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
for(k=0;k<4;k++)
e[i][j]+=c[i][k]*d[k][j];
}
}
System.out.println("***resultMatrix***");
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
System.out.print(e[i][j]+"");
System.out.println();
}
}
}
运算结果:
***resultMatrix***
1862819893
5052353813
第四题:
请从下面一段文字中,找出所有名称为“COM”的字符串并统计该字符串出现的次数,注意不要统计名称为“DCOM”的字符串。
“解决DCOM的问题主要是解决程序配置和部署的问题。
由于DCOM涉及到在多台计算机上运行的程序,所以潜在的问题比在单机上使用COM时要大。
其他可能需要解决的问题包括程序和网络协议之间的安全机制。
因为在默认情况下COM安全是打开的,所以只要试图访问COM对象的COM程序或客户程序启动COM对象,就会开始进行安全检查。
”
方法一,程序代码:
publicclassCh3_3{
publicstaticvoidmain(String[]args)
{
Stringstr1="解决DCOM的问题主要是解决程序配置和部署的问题。
由于DCOM涉及到在多台计算机上运行的程序,所以潜在的问题比在单机上使用COM时要大。
其他可能需要解决的问题包括程序和网络协议之间的安全机制。
因为在默认情况下COM安全是打开的,所以只要试图访问COM对象的COM程序或客户程序启动COM对象,就会开始进行安全检查。
";
Stringstr2="COM";
Stringstr3="DCOM";
intcnt1=0,cnt2=0,i=0;//cnt1表示查询到COM的个数,cnt2表示查询到DCOM的个数
while(i{
if(str1.indexOf(str2,i)!
=-1)
{
i=str1.indexOf(str2,i);
i=i+str2.length();
cnt1++;
}
else
break;
}
i=0;
while(i{
if(str1.indexOf(str3,i)!
=-1)
{
i=str1.indexOf(str3,i);
i=i+str3.length();
cnt2++;
}
else
break;
}
System.out.println("COM的个数为:
"+(cnt1-cnt2));//cnt1-cnt2表示不包括DCOM的COM的个数
}
}
运行结果:
COM的个数为:
5
方法二,程序代码:
importjava.util.regex.*;
publicclassch3_5{
publicstaticvoidmain(Stringargs[])
{
Stringstr1="解决DCOM的问题主要是解决程序配置和部署的问题。
由于DCOM涉及到在多台计算机上运行的程序,所以潜在的问题比在单机上使用COM时要大。
其他可能需要解决的问题包括程序和网络协议之间的安全机制。
因为在默认情况下COM安全是打开的,所以只要试图访问COM对象的COM程序或客户程序启动COM对象,就会开始进行安全检查。
";
Stringstr2="COM";
Stringstr3="DCOM";
Patternp1=Ppile(str2);//编译成模式
Stringr1[]=p1.split(str1);//以COM为标志分割
Patternp2=Ppile(str3);
Stringr2[]=p2.split(str1);//以DCOM为标志分割
System.out.println("COM的个数为:
"+(r1.length-r2.length));//以COM为标志的分割段数与以DCOM为标志分割的段数之差就是COM出现的次数;
}
}
编译结果:
COM的个数为:
5
第五题:
请从下面一段文字中,找出所有名称为“COM”的字符串并将它替换为“DCOM”,注意名称本来为“DCOM”的字符串不要改变。
“解决DCOM的问题主要是解决程序配置和部署的问题。
由于DCOM涉及到在多台计算机上运行的程序,所以潜在的问题比在单机上使用COM时要大。
其他可能需要解决的问题包括程序和网络协议之间的安全机制。
因为在默认情况下COM安全是打开的,所以只要试图访问COM对象的COM程序或客户程序启动COM对象,就会开始进行安全检查。
”
程序代码:
importjava.lang.*;
publicclassCh3_5{
publicstaticvoidmain(String[]args)
{
Stringstr1="解决DCOM的问题主要是解决程序配置和部署的问题。
由于DCOM涉及到在多台计算机上运行的程序,所以潜在的问题比在单机上使用COM时要大。
其他可能需要解决的问题包括程序和网络协议之间的安全机制。
因为在默认情况下COM安全是打开的,所以只要试图访问COM对象的COM程序或客户程序启动COM对象,就会开始进行安全检查。
";
Stringstr2="COM";
Stringstr3="DCOM";
Stringstr6="DDCOM";
Stringstr4=str1.replaceAll(str2,str3);//调用replace函数将所有的COM换成DCOM
Stringstr5=str4.replaceAll(str6,str3);//调用replace函数将DDCOM换成DCOM
System.out.println(str5);//输出替换之后的字符串
}
}
运行结果:
解决DCOM的问题主要是解决程序配置和部署的问题。
由于DCOM涉及到在多台计算机上运行的程序,所以潜在的问题比在单机上使用DCOM时要大。
其他可能需要解决的问题包括程序和网络协议之间的安全机制。
因为在默认情况下DCOM安全是打开的,所以只要试图访问DCOM对象的DCOM程序或客户程序启动DCOM对象,就会开始进行安全检查。
第六题:
请在下面一段文字后面,追加一段文字;然后再将所有的大写的英文字母变成小写形式,最后显示到屏幕上。
(要求使用StringBuffer类)
初始的一段文字:
“解决DCOM的问题主要是解决程序配置和部署的问题。
由于DCOM涉及到在多台计算机上运行的程序,所以潜在的问题比在单机上使用COM时要大。
其他可能需要解决的问题包括程序和网络协议之间的安全机制。
”
追加的一段文字:
“因为在默认情况下COM安全是打开的,所以只要试图访问COM对象的COM程序或客户程序启动COM对象,就会开始进行安全检查。
”
程序代码:
importjava.lang.*;
publicclassCh3_5{
publicstaticvoidmain(String[]args)
{
Stringstr1="解决DCOM的问题主要是解决程序配置和部署的问题。
由于DCOM涉及到在多台计算机上运行的程序,所以潜在的问题比在单机上使用COM时要大。
其他可能需要解决的问题包括程序和网络协议之间的安全机制。
";
Stringstr2="因为在默认情况下COM安全是打开的,所以只要试图访问COM对象的COM程序或客户程序启动COM对象,就会开始进行安全检查。
";
StringBuffers1=newStringBuffer(str1.toLowerCase());//将转化为小写的字符串定义为StringBuffer类
StringBuffers2=newStringBuffer(str2.toLowerCase());//将转化为小写的字符串定义为StringBuffer类
s1.append(s2);//将s2加到s1的尾部
System.out.println(s1);//输出字符串
}
}
运行结果:
解决dcom的问题主要是解决程序配置和部署的问题。
由于dcom涉及到在多台计算机上运行的程序,所以潜在的问题比在单机上使用com时要大。
其他可能需要解决的问题包括程序和网络协议之间的安全机制。
因为在默认情况下com安全是打开的,所以只要试图访问com对象的com程序或客户程序启动com对象,就会开始进行安全检查。