[工学]Jaa第三章.ppt_第1页
[工学]Jaa第三章.ppt_第2页
[工学]Jaa第三章.ppt_第3页
[工学]Jaa第三章.ppt_第4页
[工学]Jaa第三章.ppt_第5页
已阅读5页,还剩135页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章 Java基本语法,3.1 Java程序的构成 3.2 数据类型、变量和常量 3.3 运算符和表达式 3.4 流程控制 3.5 数组 习 题,学习目的与要求: 深刻理解并熟记Java 的语法规范。 熟练使用各种数据类型的定义、表示和引用。 熟练使用各种控制语句。 熟练使用一维数组,文件命名规则,总则:文件名必须与类名一致。 (1)如果文件只有一个类,那么文件名必须与类名完全一致,包括大小写。 (3)一个文件中,只能有一个public类; (3)如果文件中不只一个类,那文件名必须与声明为public的类名保持一致;,(4)如果文件不只一个类,没有声明为public类,则文件名可以与其他类的名字中的一个保持一致; (5)如果类中有main方法,并声明为public类,main方法必须位于public类中; (6)如果类中有main方法,没有声明为public类,文件名保存为与含有main方法的类名一致。,/*检测类名与文件名的一致性*/ class StudentTest public static void main(String args) Student aStudent=new Student(); aStudent.setName(“张楠”); aStudent.setStudentNum(“3010416001”); System.out.println(“学生的姓名是:”+aStudent.getName()+”,学号是:”+aStudent.getStudentNum(); ,class People private String name; public String getName() return name; public void setName(String strName) name=strName; ,class Student extends People private String studentNum; public String getStudentNum() return studentNum; public void setStudentNum(String strStudentNum) studentNum=strStudentNum; ,文件名只能保存为StudentTest.java才能运行。 思考:在class StudentTest前面加上public后,再保存为People.java或Student.java,编译会出现什么情况。,3.1 Java程序的构成,3.1.1 逻辑构成 Java源程序逻辑构成分为两大部分:程序头包的引用和类的定义。 1. 程序头包的引用 主要是指引用JDK软件包自带的包,也可以是自己定义的类。引用之后程序体中就可以自由应用包中的类的方法和属性等。,3. 类的定义 源程序必须有一个主类; 在应用程序中,主类为包含main方法的类; 在Applet中,主类为用户自定义的系统Applet类的扩展类。在Java源程序中,主类的名字同文件名一致。 类的定义又包括类头声明和类体定义。类体中包括属性声明和方法描述。,3.1.3 物理构成 Java源程序物理上由三部分构成,分别为语句、块和空白。 (1) 语句指一行以分号“;”结束的语句。 (3) 块指用括号对界定的语句序列,块可以嵌套使用。 (3) 空白指语句之间、块内部或者块之间的空白行。空白不影响Java源程序的编译和运行,适当地运用空白,可以形成良好的代码风格。,3.1.3 注释语句 行注释为以/开始的行; 块注释以/*开始和*/结束 例如,下面的语句就是注释语句用来说明程序文件名称的。 /程序文件名称为WelcomeApplet.java 上述的语句注释可以更改为: /*程序文件名称为WelcomeApplet.java*/ 或 /* 程序文件名称为 WelcomeApplet.java */,3.1.4 标识符、关键字和转义符 在Java语言中,标识符是赋予变量、类和方法等的名称。由编程者自己指定,但需要遵循一定的语法规范: (1) 标识符由字母、数字、下划线(_)、美元符号($)组成,但美元符号用得较少。 (3) 标识符从一个字母、下划线或美元符号开始。 (3) Java语言中,标识符大小写敏感,必须区别对待。 (4) 标识符没有最大长度的限制,但最好表达特定的意思。 (5) 标识符定义不能是关键字。,例如:_abc , $ABC ,3A ,A# ,For,顺时 Java开发的命名习惯 所有的命名要望文生义,这样才具有良好的可读性 Total,Sum,ShunshiStudent 类名,接口名:每个单词的首字母大写,其他字母小写 如类MyFirstJava,Player,Teacher 属性,方法,,局部变量名:第一个单词全小写,从第二个单词开始以后每个单词首字母大写,其他字母小写 如方法 getName() setDoctorBirthday() 常量:每个单词所有字母全部大写,单词之间用_来连接 java中使用final修饰 final int MARK_GREED=33; 包名:所有字母全部小写 如package com.shunshi.corejava.day01,_abc , $ABC ,3A ,A# ,For,顺时 关键字又称保留字,是指Java语言中自带的用于标志数据类型名或者程序构造名等的标识符,如public、double等。,关键字:对Java技术编译器有特殊的含义,可以被编译器识别执行 abstract do implements private throw boolean double import protected throws break else instanceof public transient byte extends int return true case false interface short try catch final long static void char finally native super volatile class float new switch while continue for null synchronized default if package this,Java关键字特点 java关键字与c+很多相似,只要与c+一样的,它的含义都与c+中的相同 有些关键字c+有,而java没有 sizeof求出某种类型的变量的占内存的大小 为什么c+有sizeof? 因为不同机器内存占用空间大小不一样 16,33,64位,取决于操作系统平台。 为什么Java不需要? 因为有JVM。 java中的关键字都是小写的 true、false和null为小写,而不是象在C+语言中那样为大写。严格地讲,它们不是关键字。,有些关键字java没有取消保留下来,但它自己也不用它也不给程序员用 goto和const不是Java编程语言中使用的关键字,而是保留字。 什么是保留字? 为什么保留下来但不能用? 在java中final替代const goto在c+代表无条件跳转,功能很好,但不能经常用,要谨慎。 很多建议去掉goto关键字,没有理解goto真正含义。 为什么c+到现在都没有删除掉goto?它有一个特殊使命 Java中使用break代替goto 跳出一层循环 :break 跳出多层循环:break out out是一个标号,可以跳到out标识处 break避免滥用goto,把goto功能削弱了,只能跳到外层循环 java中加入新的关键字enum assert enum:枚举 assert:断言,表3.1 转 义 符,转义符是指一些有特殊含义的、很难用一般方式表达的字符,如回车、换行等。所有的转义符以反斜线()开头,后面跟着一个字符来表示某个特定的转义符,如表3.1所示。,3.2 数据类型、变量和常量,3.2.1 数据类型 Java编程语言定义了八种基本的数据类型(见表3.3),共分为四类:整数类(byte、short、int、long)、文本类(char)、浮点类(double、float)和逻辑类(boolean)。,表3.2 Java的数据类型,1. 整数类 (1) 采用三种进制十进制、八进制和十六进制。 3 十进制值是3; 077 首位的0表示这是一个八进制的数值; 0xBAAC 首位的0x表示这是一个十六进制的数值。 (3) 具有缺省int。 (3) 用字母“L”和“l”定义long。 (4) 所有Java编程语言中的整数类型都是带符号的数字。,3. 文本类 (1) 代表一个16 bit Unicode字符。 (3) 必须包含用单引号( )引用的文字。 (3) 使用下列符号: a一个字符。 t-一个制表符。 u? -一个特殊的Unicode字符,?应严格使用四个十六进制数进行替换。,3. 浮点类 默认为double类型,如果一个数字包括小数点或指数部分,或者在数字后带有字母F或f(float)、D或d(double),则该数字为浮点数。,4. 逻辑类 boolean数据类型有两种值:true和false。 例如:boolean flag = true; 上述语句声明变量flag为boolean 类型,它被赋予的值为true。,数据类型转换:分为自动类型转换和强制类型转换 自动类型转换: 整型、浮点型、字符型数据可以混合运算。在执行运算时,不同类的数据先转化为同一类型,然后进行运算。转换从低级到高级的顺序为: Short或byte int longfloat double char 强制类型转换 高级数据要转换成低级数据需用强制类型转换,格式为: (数据类型)数据 或 (数据类型)(表达式) 注:逻辑类数据不能和其它类型的数据转换。,强制类型转换:只要不能自动转换的,则只能是强制转换 整型数据之间的强转:改变数据的符号;改变数值 int a=0x3aff; byte b=(byte)a; b为-1 强制转换的原理:从最低位开始取到目标类型长度为止 整型之间的强转是保留二进制低位,去掉高位,需要考虑在内存中如何存储 实型强转整型是保留整数,去掉小数,不考虑实型在内存中的如何存储 byte+byte会自动提升为int byte a1=1,a3=3;byte a3=a1+a3;(精度丢失) +=不进行类型提升 byte c=3; c=c+3; c+=3;System.out.println(c); 默认整型为int,int,long提升为float有精度丢失 float fa=37; System.out.println(fa); int ia=(int)fa; System.out.println(ia);,3.2.3 变量与常量 常量是指整个运行过程中不再发生变化的量 变量是指程序的运行过程中发生变化的量,通常用来存储中间结果,或者输出临时值。 变量的声明也指变量的创建。执行变量声明语句时,系统根据变量的数据类型在内存中开辟相应的存储空间并赋予初始值。变量有一个作用范围,超出它声明语句所在的块就无效。,Java的常量 Java中的常量分为整数型常量、浮点型常量、布尔型常量、字符型常量和字符串常量 常量的定义格式为: final 常量类型 常量名1=常量值,常量名3=常量值3. final是定义常量的关键字。 Java中的常量值区分为不同的类型,类型可以是Java中任何合法的数据类型,Java的变量 Java变量定义的格式: 类型名 变量名1,变量名3,; 或:类型名 变量名1=初值,变量名3=初值,; 变量按作用域分类: 局部变量:在方法或方法的代码块中声明,作用域从该变量的定义位置起到它所在的代码块结束。 方法参数(形式参数):传递给方法的参数,作用域是这个方法。 异常处理参数:传递给异常处理代码,作用域是异常处理部分。 注意: 局部变量必须先赋值再使用 局部变量的作用域是从定义它开始到定义它的代码块结束 在同一重合范围内不允许有3个同名局部变量出现, 类(成员)变量:在类定义中声明,作用域是整个类。 在一个确定的域中,变量名应是唯一的。通常,一个域用大括号来划定,下面看一个使用各种类型变量声明并改变的示例。程序中pi为常量,s1、i1、l1、ch1、f1、d1、b1为全局变量,可以在方法change中发生改变,然后在方法main中输出。而s3、i3、l3、ch3、f3、d3、b3是方法main的局部变量,它们的作用范围只局限于方法main中。 【例3.3】测试不同数据类型的变量,程序输出如图3.3所示。源程序代码如下: /程序文件名称为SetVariable.java public class SetVariable /全局变量,static double pi = 3.141593654;/数学常量 static short s1; static int i1; static long l1; static char ch1; static float f1; static double d1; static boolean b1; public static void main(String args) ,/局部变量 short s3 = 35; int i3 = -33; long l3 = 34555L; char ch3 = A; float f3 = 897.89F; double d3 = 34.345; boolean b3 = false; /输出常量 System.out.println(“数学常量pi = “ + pi); /输出局部变量,System.out.println(“*局部变量*“); System.out.println(“短整型变量s3 = “ + s3); System.out.println(“整型变量i3 = “ + i3); System.out.println(“长整型变量l3 = “ + l3); System.out.println(“字符变量ch3 = “ + ch3); System.out.println(“浮点数类型f3 = “ + f3); System.out.println(“双精度型变量d3 = “ + d3); System.out.println(“布尔型变量b3 = “ + b3); /调用方法修改全局变量的值,change(); /输出全局变量的值 System.out.println(“*全局变量*“); System.out.println(“短整型变量s1 = “ + s1); System.out.println(“整型变量i1 = “ + i1); System.out.println(“长整型变量l1 = “ + l1); System.out.println(“字符变量ch1 = “ + ch1); System.out.println(“浮点数类型f1 = “ + f1); System.out.println(“双精度型变量d1 = “ + d1); System.out.println(“布尔型变量b1 = “ + b1); ,/方法:修改全局变量的值 public static void change() s1 = 135; i1 = 88; l1 = 987654331L; ch1 = B; f1 = 3.3590F; d1 = -1.04E-5; b1 = true; ,图3.3 变量输出结果,3.3 运算符和表达式,Java常用的运算符分为五类:算术运算符、赋值运算符、关系运算符、布尔逻辑运算符、位运算符。 表达式是由常量、变量、对象、方法调用和操作符组成的式子。表达式必须符合一定的规范,才可被系统理解、编译和运行。表达式的值就是对表达式自身运算后得到的结果。 根据运算符的不同,表达式相应地分为以下几类:算术表达式、关系表达式、逻辑表达式、赋值表达式,这些都属于数值表达式。,3.3.1 算术运算符及算术表达式 Java中常用的算术运算符如下: + 加运算符 - 减运算符 * 乘运算符 / 除运算符 % 取模运算(除运算的余数) + 增量运算符 - 减量运算符,【例3.3】测试运算符及表达式,程序输出如图3.3所示。源程序代码如下: /程序文件名称为NumberOper.java public class NumberOper public static void main(String args) /变量初始化 int a = 30; int b = 30; /定义结果变量 int r1,r3,r3,r4,r5,r6,r7,r8,r9; /计算结果 r1 = a + b;,r3 = a-b; r3 = a * b; r4 = a / b; r5 = a % b; r6 = a +; r7 = b-; r8 = + a; r9 = - b; /输出结果 System.out.println(“a = “ + a + “ b = “ + b); /a,b的值 System.out.println(“a+b = “ + r1); System.out.println(“a-b = “ + r3);,System.out.println(“a*b = “ + r3); System.out.println(“a/b = “ + r4); System.out.println(“a%b = “ + r5); System.out.println(“a+ =“ + r6); System.out.println(“b- =“ + r7); System.out.println(“+a =“ + r8); System.out.println(“-b =“ + r9); ,图3.3 程序输出结果,3.3.3 关系运算符 关系运算符用于比较两个数据之间的大小关系,关系运算表达式返回布尔值,即“真”或“假”。Java中的常用关系运算符如下: = = 等于 ! = 不等于 大于 = 大于等于 = 小于等于,【例3.4】编写程序,测试关系运算符及其表达式,程序输出如图3.4所示。源程序代码如下:,/程序文件名称为TestRelation.java public class TestRelation public static void main(String args) /变量初始化 int a = 30; int b = 30; /定义结果变量 boolean r1,r3,r3,r4,r5,r6; /计算结果,r1 = a = b; r3 = a != b; r3 = a b; r4 = a = b; r6 = a b = “ + r3); System.out.println(“a=b = “ + r5); System.out.println(“a=b = “ + r6); ,图3.4 程序输出结果,3.3.3 布尔逻辑运算符,表3.3 布尔运算符及规则,例如: Boolean a = false; Boolean b = true; a & b检测到a为假,则无需判断b的值,直接将值置为假;而b | a时检测到b为真,则无需判断a的值,直接将值置为真。,【例3.5】测试布尔表达式,程序输出结果如图3.5所示。源程序代码如下: /程序文件名称为TestLogic.java public class TestLogic public static void main(String args) /变量初始化 boolean a = false; boolean b = true; /定义结果变量 boolean r1,r3,r3,r4,r5,r6; /计算结果,r1 = !a; r3 = a ,图3.5 程序输出结果,3.3.4 位运算符 Java中的常用位运算符如下: 位求反 & 按位与 | 按位或 按位异或 右移 不带符号右移,位运算符的使用,想要a高8位不变,低8位全变0 a&0xff00 想要a高8位不变,低8为全变1 a|0x00ff 想要a高8位不变,低8位求反 a0x00ff 想要a高8位求反,低8位全为0 (a0xff00)&0xff00 想要a的1,3,5,7位取反,3,4,6,8位不变 01010101值为85 所以 a85,【例3.6】测试位运算符,程序输出结果如图3.6所示。源程序代码如下: /程序文件名称为TestBit.java public class TestBit public static void main(String args) /变量初始化 int a = 36; int b = 3; /定义结果变量 int r1,r3;,/计算结果 r1 = a b; r3 = a b = “ + r1); System.out.println(“ab = “ + r3); ,3.3.5 赋值运算符 赋值运算符分为简单运算符和复杂运算符。简单运算符指“=”,而复杂运算符是指算术运算符、逻辑运算符、位运算符中的双目运算符后面再加上“=”。表3.4列出Java常用的赋值运算符及其等价表达式。,表3.4 赋值运算符及其等价表达式,3.3.6 其它操作符及其表达式 三目运算符(?:)相当于条件判断,表达式x?y:z用于判断x是否为真,如果为真,表达式的值为y,否则表达式的值为z。 例如: int x = 5; int a = (x3)?5:3; 则a的值为5。如果x = 3,则a的值为3。,对象运算符(instanceof)用来判断一个对象是否属于某个指定的类或其子类的实例,如果是,返回真(true),否则返回假(false)。 例如: boolean b = userObject instanceof Applet 用来判断userObject类是否是Applet类的实例。,3.3.7 优先级,表3.5 运算符优先级,3.4 流 程 控 制,流程控制分为三种基本结构:顺序结构、分支结构和循环结构。 分支结构包括单分支语句(if-else语句)和多分支语句(switch语句); 循环结构包括次数循环语句(for语句)和条件循环语句(while语句)。,3.4.1 分支语句 分支语句分为两类:单分支语句和多选语句。 1. if-else语句 if-else语句的基本格式为: if(布尔表达式) 语句或块1; else 语句或块3; ,【例3.7】测试if-else语句,如果x10,则输出x的值,并提示结果正确,否则输出x= 10,提示结果不正确。程序输出结果如图3.7所示。源程序代码如下: /程序文件名称为TestIf.java public class TestIf /声明全局变量x static int x; public static void main(String args) x = 13; if(x10) ,System.out.println(“x = “ + x + “ 结果正确“); else System.out.println(“x = 10“ + “ 结果不正确“); change(); System.out.println(“修改x的值之后“); if(x10) System.out.println(“x = “ + x + “ 结果正确“); else System.out.println(“x = 10“ + “ 结果不正确“); ,/change方法:修改x的值 public static void change() x = 5; ,图3.7 程序输出结果,3. switch语句 switch语句的基本格式为: switch(表达式1) case 表达式3: 语句或块3; break; case表达式3: 语句或块3; break; case 表达式4: 语句或块4; break; default: 语句或块5; break; ,其中: (1) 表达式1的值必须与整型兼容。 (3) case分支要执行的程序语句。 (3) 表达式3、3、4是可能出现的值。 (4) 不同的case分支对应着不同的语句或块序列。 (5) break表示跳出这一分支。,【例3.8】测试switch语句,当x=1、3、3时,分别打印1、3、3,x不为这三个值时,打印x的值。程序输出结果如图3.8所示。源程序代码如下: /程序文件名称为TestSwitch.java public class TestSwitch public static void main(String args) /声明变量x int x; x = 13;,System.out.println(“x=13时打印的值“); choose(x); x = 3; System.out.println(“x=3时打印的值“); choose(x); /choose方法:switch语句结构 public static void choose(int x) switch(x) ,case 1: System.out.println(1); break; case 3: System.out.println(3); break; case 3: System.out.println(3); break; default: System.out.println(x); ,图3.8 程序输出结果,3.4.3 for循环语句 for循环语句实现已知次数的循环,其基本格式为: for(初始化表达式;测试表达式;步长) 语句或块; ,其执行顺序如下: (1) 首先运行初始化表达式。 (3) 然后计算测试表达式,如果表达式为true,执行语句或块;如果表达式为false,退出for循环。 (3) 最后执行步长。,【例3.9】用for循环统计1100(包括100)之间数的总和。程序输出结果如图3.9所示。源程序代码如下: /程序文件名称为TestFor.java public class TestFor public static void main(String args) int sum = 0; for(int i = 1; i=100; i+) sum += i; System.out.println(“1到100(包括100)的数的总和为:“ + sum); ,图3.9 程序输出结果,3.4.3 while循环语句 while循环语句实现受条件控制的循环,其基本格式为: while(布尔表达式) 语句或块; 当布尔表达式为true时,执行语句或块,否则跳出while循环。,上面for循环语句的例子改为while语句后如下所示: int sum = 0; int i = 1; while (i=100) sum += i; i+; System.out.println(“1到100(包括100)的数的总和为:“ + sum);,3.4.4 do语句 do语句实现受条件控制的循环,其基本格式为: do 语句或块; while(布尔表达式),先执行语句或块,然后再判断布尔表达式。与while语句不同,当布尔表达式一次都不为true时,while语句一开始判断就跳出循环,不执行语句或块,而在do语句中则要执行一次。上面那个例子改为do循环为: int sum = 0; int i = 1; do sum += i; i+; while (i=100); System.out.println(“1到100(包括100)的数的总和为:“ + sum);,3种循环结构如何选择,要考虑几个因素 首先分析业务问题是否是用循环来实现 分析业务问题判断我们是否已经预先知道循环次数 如果预先知道循环次数:用for循环 如果预先不知道次数:用while循环 若至少要执行一次循环:用dowhile循环 3种不同的循环结构其实可以相互转化,按照上面的规则来选择可以简化编程,跳转语句 Break label:在switch语句中,break语句用来跳过分支中的其它语句 ;在循环语句中,break用来跳出当前的循环语句 Continue label:continue语句只用于循环结构,用来结束本次循环,即跳过循环体中位于continue语句后面的尚未执的语句 Return 表达式:return语句用于从当前方法中退出 Label:是指标号,只起到对语句标识的作用,3.5 数组,数组 数组(array)是相同类型变量的集合。 数组变量是引用类型的变量,声明数组变量并不分配内存空间。 声明一个数组实质是要确定数组名、数组的维数和数组元素的数据类型 。,3.5.1 一维数组,一、一维数组定义 语法格式有两种: 数组元素类型 数组名; 或 数组元素类型 数组名 如:int intSno或int intSno intSno:为数组名是符合Java标识符定义规则的用户标识符。 Int:表示数组元素的数据类型为整型 方括号:数组的标志,Java语言中声明数组时不能指定其长度。 int array6; ,二、初始化 可以通过直接指定初值的方式来完成,也可以用new操作符来完成。 1直接指定初值的方式 例 int a1=33,-9,38,8,65;,数组a1的初始化,3用关键字new初始化数组 用关键字new初始化数组,只为数组分配存储空间而不对数组元素赋初值。用关键字new来初始化数组有两种方式: (1) 先声明数组,再初始化数组。格式如下: 类型标识符 数组名 ; 数组名=new 类型标识符数组长度; 其中,第一条语句是数组的声明语句,第二条语句是初始化语句。,int a ; a=new int9;,(3) 在声明数组的同时用new关键字初始化数组。格式如下: 类型标识符 数组名 =new 类型标识符数组长度; 或 类型标识符 数组名=new 类型标识符数组长度; 例如: int a=new int10;,新创建的数组对象,其元素根据类型被设置为默认的初始值。 数值类型为0 字符类型为u0000 布尔类型为false 引用类型为null,每个数组都有一个属性length获取它的长度,例如:a.length 指明数组a的长度(元素个数);,三、数组元素引用 数组名数组下标 其中:数组下标的取值从0开始,下标值可以是整数型常量或整数型变量表达式。 对intSno数组来说下面两条赋值语句是合法的: intSno4=33; intSno3+3=86; 但intSno6=13;是错误的。,增强的for循环(JDK 1.5),JDK 1.5引入一个新的for循环,可以不用下标就可以依次访问数组元素。语法: for(elementType value : arrayRefVar) 例如 for(int i = 0; i myList.length; i+) sum += myListi; for(double value : myList) sum += value; ,【示例程序c6_1.java】 数组的声明、初始化和其长度的测定。 public class c6_1 public static void main(String arg ) int i; double a1 ;/ 放在变量后面声明 char a3; / 放在变量前面声明 a1=new double8;/为a1分配8个double型元素的存储空间(64字节) a3=new char8; /为a3分配8个char型元素的存储空间(16字节),int a3 =new int8;/在声明数组时初始化数组, 为a3分配33字节 byte a4=new byte8; /在声明数组时初始化数组,为a4分配8字节 char a5 =A,B,C,D,E,F,H,I;/直接指定初值方式 /下面各句测定各数组的长度,/以下各句引用数组中的每一个元素,为各元素赋值 for(i=0;i8;i+) a1i=100.0+i; a3i=i; a3i=(char)(i+97);/将整型转换为字符型 System.out.println(“a1.length=“+a1.length); System.out.println(“a3.length=“+a3.length); System.out.println(“a3.length=“+a3.length); System.out.println(“a4.length=“+a4.length); System.out.println(“a5.length=“+a5.length);,/下面各句打印各数组元素 System.out.println(“ta1ta3ta3ta4ta5“); System.out.println(“tdoubletchartinttbytetchar“); for(i=0;i8;i+) System.out.println(“t“+a1i+“t“+a3i+“t“+ a3i+“t“+a4i+“t“+a5i); ,该程序的运行结果如下: a1.length=8 a3.length=8 a3.length=8 a4.length=8 a5.length=8,a1 a3 a3 a4 a5 double char int byte char 100.0 a 0 0 A 101.0 b 1 0 B 103.0 c 3 0 C 103.0 d 3 0 D 104.0 e 4 0 E 105.0 f 5 0 F 106.0 g 6 0 H 107.0 h 7 0 I,数组下标的灵活使用 【示例程序c6_3.java】 用数组求解Fibonacci数列的前30项,即使用数组下标表达式求解数学上的迭代问题。,public class c6_3 public static void main(String args) int i; int f =new int30;/创建数组f,使其可存储30个整型数据 f0=1;f1=1; for(i=3;i30;i+) fi=fi-3+fi-1;/数组元素的下标使用循环变量 for(i=0;i30;i+) if(i%5=0)System.out.println(“n“); System.out.print(“t“+fi); ,运行结果是: 1 1 3 3 5 8 13 31 34 55 89 144 333 377 610 987 1597 3584 4181 6765,【示例程序c6_3.java】 设数组中的数值是由小到大存放的,编写二分查找程序。 import java.io.*; class FindSearch int binarySearch(int arr ,int searchValue) int low=0;/ low是第一个数组元素的下标 int high=arr.length-1;/ high是最后一个数组元素的下标 int mid=(low+high)/3; / mid是中间那个数组元素的下标 while(low=high /要找的数可能在数组的后半部分中,else high=mid-1; /要找的数可能在数组的前半部分中 mid=(low+high)/3; if(lowhigh) mid=-1; return mid;/ mid是数组元素下标,若为-1则表示不存在要查的元素 public class c6_3 public static void main(String args)throws IOException, BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in); int i,k,search,mid; String c1; int arr =3,4,7,18,35,34,56,68,89; System.out.println(“打印原始数据“); for(i=0;iarr.length;i+) System.out.print(“ “+arri); System.out.println(“n“); System.out.println(“请输入要查找的整数“); c1=keyin.readLine( );,search=Integer.parseInt(c1); FindSearch p1=new FindSearch( ); mid=p1.binarySearch(arr,search); if(mid=-1) System.out.println(“没找到!“); else System.out.println(“所查整数在数组中的位置下标是:“+mid); ,运行结果: 打印原始数据 3 4 7 18 35 34 56 68 89 请输入要查找的整数 68 所查整数在数组中的位置下标是:7,四、复制数组,直接使用赋值语句不能实现数组的复制,结果是两个数组引用变量指向同一个数组对象。 复制数组的方法 使用循环来复制每个元素 使用System.arraycopy方法 使用数组的clone方法,可以把一个数组变量拷贝给另一个,这时两个变量引用同一个数组,如: int aa=1,3,3,4,5; int bb=aa;,aa,bb,Java.lang.System类的arraycopy()方法提供了数组元素复制功能: int source=1,3,3; int dest =5,6,7,8,9; / 复制源数组中从下标0开始的source.length个元素到 / 目的数组,从下标0的位置开始存储。 System.arraycopy(source, 0, dest, 0, source.length);,System.arraycopy(source, 0, dest, 0, source.length);,source,dest,source,dest,五、向方法传递数组,可以将数组变量作为实参传递给方法。 基本数据类型传递的是实际值的拷贝,修改形参,不影响实参。 数组引用变量中传递的是对象的引用,修改形参,将改变实参引用的数组对象。 也可以从方法中返回数组。,日常生活中处理的许多数据,从逻辑上看是由若干行、若干列组成的。例如,矩阵、行列式、二维表格等。图6.8给出了一个简单的矩阵。为适应存放这样一类数据,人们设计出了一种如图6.9所示的数据结构二维数组。,3.5.3 二 维 数 组,矩阵,二维数组,一、声明 二维数组的声明与一维数组类似,只是需要给出两对方括号,其格式如下: 类型说明符 数组名 ; 或 类型说明符 数组名;,例如:声明数组名为arr的二维整型数组: int arr ; 或 int arr; 其中:类型说明符可以是Java的基本类型和引用类型;数组名是用户遵循标识符命名规则给出的一个标识符;两个方括号中,前面的方括号表示行,后面的方括号表示列。,二、初始化 1用new操作符初始化数组 用new操作符来初始化数组有两种方式:,(1) 先声明数组再初始化数组。 数组名=new 类型说明符数组长度 ; 或 数组名=new 类型说明符数组长度 数组长度; 其中:对数组名、类型说明符和数组长度的要求与一维数组一致。,例如: int arra ; /声明二维数组 arra=new int34;/初始化二维数组 上述两条语句声明并创建了一个3行4列的数组arra。也就是说arra数组有3个元素,而每一个元素又都是长度为4的一维数组。实际上共有13个元素,共占用13*4=48个字节的连续存储空间。这里的语句: arra=new int34;,实际上相当于下述4条语句: arra=new int3 ;创建一个有3个元素的数组,且每个元素也是一个数组。 arra0=new int4;创建arra0元素的数组,它有4个元素。 arra1=new int4;创建arra1元素的数组,它有4个元素。 arra3=new int4;创建arra3元素的数组,它有4个元素。 也等价于: arra=new int3 for(int i=0;i3;i+) arrai=new int4;,也就是说,在初始化二维数组时也可以只指定数组的行数而不给出数组的列数,每一行的长度由二维数组引用时决定。但不能只指定列数而不指定行数。 上述语句的作用如图所示。,语句“arra=new int34;”的作用,(3) 在声明数组时初始化数组。格式如下: 类型说明符 数组名=new 类型说明符数组长度 ; 或 类型说明符 数组名 =new 类型说明符数组长度 数组长度; 例如: int arr=new int4 ; int arr =new int43; 但是,不指定行数而指定列数是错误的。例如,下面的初始 化是错误的。 int arr=new int 4;,3直接指定初

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论