Java程序设计语言第三单元.docx
《Java程序设计语言第三单元.docx》由会员分享,可在线阅读,更多相关《Java程序设计语言第三单元.docx(20页珍藏版)》请在冰豆网上搜索。
Java程序设计语言第三单元
一、边读边答
1、填空:
(1)程序设计中,是一种表示的常用手段。
是一种表示姓名、提示信息等类似数据的常见形式。
Java语言为数组类型与字符串都字义了相应的标准类型,是实现数组类型的组织与操作的类,是实现字符串存储和操作的类。
(2)根据数据类型的构造方法不同,可以所有的数据类型分为两个类型:
。
所谓简单类型是指,所谓复合类型型是指,既将组织在一起。
数组属于,它由组成。
从严格意义上讲,在Java语言中,数组是的类的对象,因些它又属于引用类型。
由的个数可以将数组分为、和。
(3)所谓一维数组是指。
在Java语言中,使用数组类型需要。
数组类型属于,也就是说,定义的数组类型的变量是,因此系统仅为这个变量分配一个所需存储空间,此时所引用的类可能根本不存在,还需通过创建过程给予构建,由此导出,在定义数组变量时,不需要(Java语法也不允许)。
(4)Java语言定义数组型变量的语法格式:
;
或者,
;
(5)数组型变量属于类型,其内部存储的是,而数组本身需要利用创建。
一个数组可以包含多个元素,被称为数组长度,数组也可以没有任何元素,此时称为。
正因为如此,在创建数组时需要给出。
利用创建数组的语法格式:
;
也可将数组的定义与创建合并到一起。
一旦创建数组,系统就会为其,并将数组的引用信息存放到相应数组型变量中。
对数组元素的任何操作都需要通过实现。
数组一旦被创建就其长度。
(6)在创建数组的同时,称为数组的初始化。
(7)在Java语言中,数组的下标从开始,到结束。
访问数组元素的格式为:
;
在时,会严格检查每个“下标表达式”的,一旦发生越界,会抛出。
(8)JDK5.0中专门增加了一个专门用于操作数据集合的循环控制结构语句foreach,书写格式为:
;
;
(9)在Java语言中,数组型变量可以实现两种形式的复制操作。
第一种称为;第二种称为。
第二种形式的复制操作是通过类的静态方法实现的,此方法的定义格式如下:
在
在时,会严格检查每个“下标表达式”的,一旦发生越界,会抛出。
(10)在Java语言中,一维数组的元素可以属于类型,包括和;也就是说,一维数组的元素又可以是一个一维数组类型,这就支持了,乃至的概念。
Java语言中二维数组的定义格式为:
;
或者,
;
或者,
;
创建二维数组的格式为:
;
在Java语言中二维数组中各行的列数是可以,也可以。
(11)Java语言提供了两种字符串类型,和。
字符串直接常量是用括起起来的字符序列。
除了可以直接书写字符串直接常量外,还可以把一个字符串存储在一个String类的对象中。
String类字义在包中,还提供了很多字符串操作的成员方法。
定义String类有对象的格式如下:
;
创建或初始化String对象的方法如下:
;
或者,
;
(12)String类的主要成员方法列于下表:
方法
描述
(13)Array是位于包中的标准类,其中包含了多个静态成员方法,通过它们可以完成数组的各种操作。
Array的常用静态成员方法列于下表:
方法
功能描述
2、名词:
(1)简单类型:
(2)复合类型型:
(3)数组:
(4)一维数组:
(5)数组的初始化:
(6)数组长度:
(7)空数组:
(8)字符串:
二、边学边练
第1部分:
数组
〖任务1〗:
完成教材【例3-1】的程序,分析运行结果,阅读教材相关内容。
〖任务2〗:
完成教材【例3-2】的程序,分析运行结果,阅读教材相关内容。
〖任务3〗:
完成教材【例3-3】的程序,分析运行结果,阅读教材相关内容。
第2部分:
字符串
〖任务4〗:
完成教材【例3-4】的程序,分析运行结果,阅读教材相关内容。
第3部分:
Array
〖任务5〗:
完成教材【例3-5】的程序,分析运行结果,阅读教材相关内容。
三、精讲精记
一、数组
1、数组的概念
数组是一个最常用的复合数据结构,一个数组中可以存放多个同类型的数据。
数组分为一维数组,二维数组和多维数组。
Java语言中的数组是引用类型,定义一个数组变量,实际上是定义一个数组的引用。
Java语言中的二维数组的各行的元素数可以不同。
2、一维数组
(1)定义数组变量:
数组元素类型[]变量;
或者,
数组元素类型变量[];
(2)数组的创建:
new数组元素类型[元素个数];
(3)数组的初始化。
数组元素类型[]变量={元素值列表};
3、二维数组
(1)定义数组变量:
数组元素类型[][]变量;
或者,
数组元素类型变量[][];
(2)数组的创建:
new数组元素类型[数组的行数][数组的列数];
或者,
new数组元素类型[数组的行数][];
(3)数组的初始化。
数组元素类型[]变量=
{{第0行元素值列表},{第1行元素值列表},……,{第n-1行元素值列表}};
3、多维数组
基本思路:
数组的每个元素都可以是一个数组。
二、字符串
1、字符串的概念
字符串一个字符串序列,字符串中的字符个数称为字符串的长度。
Java中的字符串是类(java.lang包中),分为两种字符串:
不可变字符串String,线程安全可变字符串StringBuffer,线程不安全可变字符串StringBuilder。
字符串变量是字符串的引用。
2、String对象
(1)字符串常量:
用双引号引起来的字符串序列。
如:
"good"
(2)字符串变量的定义:
用双引号引起来的字符串序列。
如:
"good"
String变量;
(3)创字符串对象:
newString(字符串常量);
(4)给字符串变量赋值:
变量=newString(字符串常量);
或者,
变量=字符串常量;
3、String类提供的方法
方法
描述
intlengh()
返回字串常长度
charcharAt(intindex)
返回字符串中指定位置的字符
booleanequals(ObjectothObject)
判断当前字符串与otherObject是否相等。
intcopareTo(StringothString)
当前字符串与otherString进行比较,如大于则返回1,小于则返回-1,相等返回0。
intindex(charch)
返回字符ch在字符串中的位置
intindexOf(Stringstr)
返回字符串str在字符串中的位置
Stringsubstring(intbegin)
Stringsubstring(intbegin,intend)
返回从begin开始到字符串结束的子字符串
返回从begin开始到end结束的子字符串
Stringconcat(Stringstr)
返回当前字符串与字符串str连接的字符串
Stringreplace(charoldChar,charnewChar)
将当前字符串中的oldChar替换为newChar返回
StringtoLowerCase()
将当前字符串中字母转化为小写字符后返回
StringtoUpperCase()
将当前字符串中字母转化为大写字符后返回
StringvalueOf(Objectobj)
StringvalueOf(booleanb)
StringvalueOf(charc)
StringvalueOf(inti)
StringvalueOf(longl)
StringvalueOf(floatf)
StringvalueOf(doubled)
把各种类型的值转换为字符串
三、Arrays类
Arrays类是JavaAPI中提供的标准类,在java.util包中。
Arrays类中提供了多个静态方法,可直接实现数组的排序、搜索等数组的操作。
1、数组的排序
voidArrays.sort(elementType[]a);
2、数组的搜索(二分法)
intArrays.binarySearch(elementType[]a,elementTypev)
3、数组的复制
elementType[]Arrays.copyOf(elementType[]original,intnewLength)
4、数组的填充
voidArrays.fill(elementType[]original,elementTypev)
5、数组的比较
booleanArrays.equals(elementType[]a,elementType[]b)
四、完善调试
1、任务一:
设计一个程序,从键盘上输入n个整数,计算它们的最大值、最小值及平均值。
再计算大于平均值的数的个数和小于平均值的数的个数。
import;
publicclassMyNumber{
main(){
Scannerin=;
System.out.print("请输入整数的个数:
");
intn=;
int[]data=;//声明、创建存放n个整数的数组
intmax=0,min=0;
intsum=0,aver=0;
intlarge=0,smaller=0;
for(;;){
System.out.print("\n请输入第"++"个整数:
");
;
if(i==0){
;
;
}else{
if(data[i]>max){
;
}
if(data[i];
}
}
sum+=;
}
aver=;
for(;;){
if(data[i]>aver){
;
}
if(data[i];
}
}
System.out.print("\n输入的"+n+"个整数:
");
for(inti=0;iif(i!
=n-1){
System.out.print(+"、");
}else{
System.out.println();
}
}
System.out.printf("最大数为:
%d,最小数为:
%d,平均数为:
%d\n",max,min,aver);
System.out.printf("大于平均数的数的个数为:
%d,小于平均数的数的个数为:
%d\n",large,smaller);
}
}
2、任务二:
设计一个Java程序,从键盘上输入一句英语。
统计其中单词的个数和每个字母出现的频率。
import;
publicclassSentence{
publicstaticvoid(String[]args){
=newScanner(System.in);
System.out.print("请输入一句英语:
");
Stringsentence=;
intwordNumber=0;
intletterNumber=0;
int[]letterFrequency=newint[26];
String[]words=sentence.split("[^a-zA-Z]");
wordNumber=words.length;
for(inti=0;i<;i++){
for(intj=0;j<;j++){
letterNumber++;
charletter=words[i].;
letter=Character.toLowerCase(letter);
intindex=(int)letter-97;
letterFrequency[]++;
}
}
System.out.println("各字母出现的频率:
");
for(inti=0;;i++){
System.out.printf("%c:
%f\n",,);
}
}
}
3、任务三:
设计一个Java程序,从键盘上输入一个n维方阵,输出这个方阵。
对这个方阵进行转置操作,输出转置操作后的结果。
importjava.util.Scanner;
publicclassMatrix{
publicstaticvoidmain(String[]args){
Scannerin=newScanner(System.in);
System.out.print("请输入方阵的维数:
");
intn=in.nextInt();
int[][]matrix=newint[n][n];
for(inti=0;ifor(intj=0;jSystem.out.print("\n请输入第"+(i+1)+"行第"+(j+1)+"列:
");
matrix[i][j]=in.nextInt();
}
}
System.out.println("\n输入的原方阵:
");
for(inti=0;ifor(intj=0;jSystem.out.printf("%3d",matrix[i][j]);
}
System.out.println();
}
for(inti=0;ifor(intj=0;j
inttemp=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=temp;
}
}
System.out.println("\n转置操作后的方阵:
");
for(inti=0;ifor(intj=0;jSystem.out.printf("%3d",matrix[i][j]);
}
System.out.println();
}
}
}
五、项目实战
写一个学生成绩管理的简易程序,要求如下:
1、程序提供如下功能菜单:
2、如果选择菜单“1”,则先提示输入学生人数,再逐一输入每个学生的姓名、语文成绩、数学成绩、英语成绩。
如:
成绩输入完毕后,呈现功能菜单。
3、如果选择菜单“2”,则逐一输出每个学生的姓名、语文成绩、数学成绩、英语成绩、总成绩、平均成绩。
如:
4、如果选择菜单“0”,程序输出:
结束程序运行。
5、建议用一个一维字符串数组存放全体学生的姓名,用一个二维float数组存放各同学的语文成绩、数学成绩、英语成绩,总成绩和平均成绩计算获取。
程序的源代码如下:
六、课后练习
一、选择题
1、String、StingBuffer和StringBuilder都是______类,都不能被继承。
A、static B、abstract、C、final D、private
2、下列程序的功能是统计字符串中"array"的个数,在程序的空白处应填入的正确选项是
public class FindKeyWords{
public static void main(sring[] args){
sting text= "An array is a data structur that stores a collection of"
+ "values of the same type . You access each individual value"
+ "through an integer index . For example,if a is an array"
+ "of inergers, then a[i] is the ith integer in the array.";
int arrayCount =0;
int index = -1;
Sting arrarStr ="array";
index = text.indexof(arrayStr);
while(index 0) {
++arrayCount;
index += arrayStr.length();
index = text.indexof(arrayStr,index);
}
System.out.println(“the text contains” + arrayCount + “arrays”);
}
}
A、< B、= C、<= D、>=
3、给出下列代码,则数组初始化中哪项是不正确的?
Byte[] array1,array2[];
byte array3[][];
byte[][] array4;
A、array2 = array1 B、array2=array3
C、array2=array4D、array3=array4
4、顺序执行下列程序语句后,则b的值是
Stringa="Hello";
Stringb=a.substring(0,2);
A、HelloB、helloC、HelD、null
5、执行完以下代码int[]x=newint[10];后,以下哪项说明是正确的
A、x[9]为0B、x[9]未定义C、x[10]为0D、x[0]为空
6、对数组的定义及初始化不正确的方法是:
A、intarray[];
B、intarray[8];
C、int[]array=newint[8];
D、intarray[]=newint[8];
7、关于length()这个方法的表述正确的是哪个?
A、数组有length()这个方法,String也有length()这个方法。
B、数组有length()有这个方法,String没有length()这个方法。
C、数组没有length()这个方法,String有length()这个方法。
D、数组没有length()这个方法,String也没有length()这个方法。
8、运行下面程序段的结果是()。
publicclassMyMain{
publicstaticvoidmain(Stringargs){
System.out.println("HelloJava");
}
}
A、正常输出HelloJavaB、编译时出错
C、运行时出错D、以上答案都不对
9、编译并运行下述程序段的结果是()。
publicclassTest{
publicstaticvoidmain(Stringargv[]){
int[]count=newint[4];
System.out.println(count[4]);
}
}
A、编译时错误B、运行时错误C、输出0D、输出null
10、下面哪个语句(初始化数组)是不正确的()。
A、 int x[] = {1,2,3}; B、 int x[3] = {1,2,3};
C、 int[] x = {1,2,3}; D、 int x[] = new int[]{1,2,3};
11、运行下面程序段的结果是()。
publicclassTest{
publicstaticvoidmain(Stringargv[]){
int[][]data={{1,2,3,4,5},{11,22,33,44,55},{111,222,333,444,555}};
for(inti=0;iif(i%2==0){
System.out.println(data[i][4]+"");
}
}
}
}
A、5555B、555D、55
二、填空题
1、设有数组定义:
inta[][]={11,22,33,44,55,66,77,88,99};则执行下列几个语句后的输出结果是【1】。
for(inti=0iif(a[i]%3==0)System.out.println(a[i]+"");
2、下面程序的运行结果是【2】。
importjava.io.*
publicclassABC{
publicstaticvoidmain(String[]args){
inta[][]={11,22,33,44,55,66,77,88,99};
for(inti=0;i<=a.length/2;i++)
System.out.print(a[i]+a[a.length-i-1]+"");
System.out.println();
}
}
3、请完成下列程序,实现随机抽取数据元素的功能。
publicclassChouti{
publicstaticvoidmain(String[]args){
String[]timu={"天文","地理","历史","文学","红楼","三国"};
intindex=(int)(timu.leng*Math.random());
System.out.print("你抽的题目领域是"+【3】[index]+"。
");
}
}
4、有字符串s1,则其长度为【4】。
5、有数组array,则其长度为【5】。
6、有如下代码:
Strings1,s2;
s1="abcd";
s2="abcd";
则s1.equals(s2)的值为【6】。
7、有如下代码:
Strings1,s2;
s1="abcd";
s2=s1;
则s1.equals(s2)的值为【7】。
8、有如下代码:
Strings1