Java技术与应用 -Java基本语法(第3~7章) 西安交大 卫颜俊 2007年4月 电子信箱:Mr.Java@163.com.

Slides:



Advertisements
Similar presentations
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
Advertisements

Java技术与应用 -Java基本语法 (第3章) 西安交大 卫颜俊 2008年11月
Tool Command Language --11级ACM班 金天行.
南京理工大学 第2章 Java基本语法 本章我们将学习Java编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。 使用下面的编程框架: public class Test{ public static void main(String []args){ //以下添加测试代码.
第二章 JAVA语言基础.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
第九章 字符串.
Java软件设计基础 2. Java语言基础.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
C#程序设计基础 $5 流程控制.
Signutil.
第二章 C# 基础知识.
Java语言程序设计 第二部分 Java语言基础.
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
C语言高级编程(第四部分) 字符串 北京大学 信息科学技术学院.
2.5 字符串.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
走进编程 程序的顺序结构(二).
辅导课程六.
4.1 一維陣列 4.2 for(:) 迴圈 4.3 動態陣列 4.4 二維陣列 4.5 非矩形陣列
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
1.2 MATLAB变量表达式与数据格式 MATLAB变量与表达式 MATLAB的数据显示格式
C语言程序设计基础 刘新国.
第二章 Java语言基础.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
Java程序设计 第2章 基本数据类型及操作.
第七章 操作符重载 胡昊 南京大学计算机系软件所.
第一章 函数与极限.
第4章 PHP流程控制语句.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
第二章Java基本程序设计.
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
顺序表的删除.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
第二章 Java基本语法 讲师:复凡.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
第4章 Excel电子表格制作软件 4.4 函数(一).
第二章 Java语法基础.
第九节 赋值运算符和赋值表达式.
3.16 枚举算法及其程序实现 ——数组的作用.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
ASP.NET实用教程 清华大学出版社 第4章 C#编程语言 教学目标 教学重点 教学过程 2019年5月5日.
2.6 字符型数据 一、 字符常量 1、字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,‘A’、‘1’、‘+’等。
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
第二章 Java基本语法 讲师:复凡.
C程序设计 实验二 数据类型、运算符和表达式 第6讲
第4章 数组与字符串 学习目标 本章要点 上机练习 习 题.
第二章 Java基本语法 讲师:复凡.
Chap 6 数据类型和表达式 6.1 数据的存储和基本数据类型 6.2 常量和变量 6.3 数据的输入和输出 6.4 类型转换
复习 标签(label)、文本框(text)控件 按钮:点击事件
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
基本知识 数据类型、变量、常量、运算符.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
變數、資料型態、運算子.
第2章 Java语言基础.
鸡兔同笼(续) ——选择结构.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
第二章 Java基础语法 北京传智播客教育
§4.5 最大公因式的矩阵求法( Ⅱ ).
顺序结构程序设计 ——关于“字符串”和数值.
第9章 位 运 算.
第二次课后作业答案 函数式编程和逻辑式编程
第二章 简单数据类型 §2.1 数据类型概述 §2.2 变量和常量 §2.3 简单数据类型 §2.4 简单数据类型的相互转换
Presentation transcript:

Java技术与应用 -Java基本语法(第3~7章) 西安交大 卫颜俊 2007年4月 电子信箱:Mr.Java@163.com

主要内容 数据类型(Data Types) 运算符与表达式(Operator & Expression) 控制流程(Control Flow) 数组(Array) 字符串(String & StrignBuffer)

1. 数据类型(Data Types)

文字量

转义符 '\t'、'\\'、'\''、'\"'、'\r'、'\n'、'\b' 使用三位八进制数值加“\”前缀来表示ASCII码字符,格式为‘\xxx’ 使用四位十六进制数值加“\u”前缀来表示Unicode码字符,格式为'\uxxxx'

常量、变量 合法标识符(包括汉字) 作用域  { } 局部,成员 赋初值

变量的赋值与引用赋值 【例3-1】变量赋值演示

变量的值传递与引用传递 【例3-2】参数传递演示

变量的作用域 对于对象实例变量,可以在定义时赋给初始值,也可以在构造方法中赋给初始值; 对于类静态变量可以在定义时或使用静态初始化器进行赋初始值,但不能在构造方法中赋给初始值。 P.53~P.54例子

常量与初始化 常量只能初始化一次 。 对于简单常量,其值不可修改。 对于数组常量,始终保持引用同一个数组,但数组元素值可以改变。 对于其它复杂变量总是对同一个对象的引用,但其内部状态值可以更改。 【例3-3】常量使用演示

复杂类型 数组 字符串 类(抽象类,接口)

2 .运算符与表达式 运算符是进行操作数(文字量、常量和变量)运算的符号表示。 表达式是将标识符、 关键字、符号和运算符连接起来的有意义的组合体。 包括:赋值、算术、关系、条件、逻辑和位运算符和表达式。

赋值运算符与表达式 = 变量赋值:x=84; 运算符表达式:y=(x*5)/6; 方法调用:height=building.getHeight(); 对象分配:Point point=new Point();

算术运算符与表达式 双目运算符 :加(+)、减(-)、乘(*)、除(/)和取余(%) 单目运算符 :正(+)、负(-)、加加(++)和减减(--) 【例4-1】“++”和“--”的使用 java.lange.Math类的作用

关系运算符与表达式 int x=3; boolean a=x<5; a的结果为true ==(等于)、!=(不等于)、<(小于)、<=(小于等于)、>(大于)和>=(大于等于)以及一种类型比较运算符:instanceof 举例: int x=3; boolean a=x<5; a的结果为true boolean b=x==5; b的结果为false boolean c=x!=x; c的结果为false boolean d=a==c; d的结果为true String s1="Java"; String s2="Java"; boolean e=s1==s2; e的结果为false boolean f=s1.equals(s2); f的结果为true

条件运算符与表达式 &&(与)、||(或)、!(反)、~(异或)、&(非简洁与)、|(非简洁或)和?: 【例4-3】条件运算符的使用

逻辑运算符与表达式 &(位与)、|(位或)、^(位异或)和~(位取反) 【例4-4】逻辑运算符的使用

移位运算符与表达式 >>(带符号右移)、<<(带符号左移)和>>>(无符号右移) 正整数的原码=反码=补码 负整数的反码=原码各位求反 负整数的补码=反码加1 【例4-5】位运算符的使用

简洁赋值运算符

复合运算符

运算符的优先级 从左到右进行,并遵守:括号 > 算术运算符 > 关系运算符和大部分逻辑运算符(除了!号) > 赋值运算符。 在表达式进行运算之前,首先会将其它数据类型转换为最大数据类型,最终结果以等号左边的变量类型为准。 【例4-7】随机产生三个[1,1000]范围的整数,并判断它们是否构成等差和等比数列

3. 控制结构 顺序语句有:输入、计算赋值和输出语句 分支语句有:单分支if-else和多分支switch-case语句 循环语句有:while、do和for语句

顺序语句 标准输入语句(java.lang包中的System类中的静态成员变量in的方法read ) int read() 读一个字节或字符,返回0到255范围内的 int 字节值,如果没有可读字节,则返回-1。 int read(byte[] b) 读一个字节数组,读取一定数量的字节并将其存储在缓冲区数组b中,并以整数形式返回实际读取的字节数。 int read(byte[] b,int off,int len) 读一个字节数组并截取一部分,读取len个数据字节存入字节数组b,以整数形式返回实际读取的字节数。 java.util包中的Scanner类的nextT()方法 t nextT() 读下一个数。其中,T:Boolean、Byte、Char、double、Float、Int、Short和Long等,t:boolean、byte、char、double、float、int、short和long等。 String nextLine() 读下一行字符串

read输入语句举例 int i; try{ i=System.in.read(); }catch(IOException e){} char c=(char)i; byte b[]=new byte[256];//定义一个包含256个元素的字节数组 int len= System.in.read(b); String s=new String(b,0,len);//定义一个字符串,其值来自于b中从b[0]开始的len个字节 float f=Float.parseFloat(s);//字符串转换为float类型

Scanner输入语句举例 Scanner sc = new Scanner(System.in); int x=sc.nextInt(); 【例5-1】根据输入的半径和高度,分别计算圆面积、圆柱全面积和圆锥侧面积。

输出语句 标准输出语句(java.lang包中的System类的out成员变量的方法print、println和write ) void print(T t) 输出指定数值 void println(T t) 输出指定数值并带换行 void write(int b) 输出指定的字节值 void write(byte[] buf, int off, int len) 输出len个字节,起始位置从数组的第off个元素开始。 格式化输出语句(System.out.printf方法) (java.util包中提供了Formatter类的format方法 ) PrintStream printf (String 格式字符串, Object... 参数); 举例: System.out.printf ("%4$s %3$s %2$s %1$s %4$s %3$s %2$s %1$s","a", "b", "c", "d"); //输出结果:"d c b a d c b a" System.out.printf ("%3d %x",23,34); //输出结果:" 23 12" System.out.printf ("%8.2f",3.14159); //输出结果:" 3.14"

分支语句 if ( 关系或条件表达式 ) 语句; if (关系或条件表达式) 语句1 else语句2; 嵌套分支语句 【例5-4】将学生成绩转换为五分制。 switch(数值表达式){// boolean、byte、short、char和int case 值1: 语句1; break; …… defalut: 其它语句; }

循环语句 while (关系或条件表达式) 语句; do 语句 while (关系或条件表达式); for(循环变量赋初始值;关系或条件表达式; 循环变量值的修正) 语句; for(变量修饰 变量类型 变量名:表达式) 举例: int[] a = {1, 3, 5, 7, 9}; int sum = 0; for (int x : a) sum += x; 【例5-9】查找2~n之间的素数的第2种做法

其它语句 标签语句 标签名: break语句 break;或break 标签名; 标签语句 标签名: break语句 break;或break 标签名; continue语句 continue;或continue标签名; return语句 return;或return表达式; exit语句 System.exit(状态值); 【例5-10】break、continue和标签的联合使用。

递归 什么是递归? 什么是递归函数? 三个最经典的递归问题: 裴波那契数列:f(0)=0;f(1)=1;f(n)=f(n-1)+f(n-2) 一个著名的故事:“老和尚讲故事,他说从前有座山,山上有座庙,庙里有个老和尚在讲故事,他说从前有座山,山上有座庙,庙里有个老和尚在讲故事,他说从前有座山,……。这样没完没了地反复讲故事,直到最后老和尚烦了停下来为止。” 什么是递归函数? 直接调用自己或通过另一函数间接调用自己的函数。 不断将大问题转化为小问题,直至问题有解为止。 三个最经典的递归问题: 裴波那契数列:f(0)=0;f(1)=1;f(n)=f(n-1)+f(n-2) Ackerman函数: 梵塔(Hanoi)问题

递归程序举例 梵塔(Hanoi)问题 源自一个古老的传说,相传在古印度的一座神庙前,有一根串着64个祭神用的圆盘的柱子,这些圆盘是按大小顺序叠放的,大的在下,小的在上,僧侣们要将这些圆盘借助一个柱子移到另一个柱子上,移动过程中,一次只能移动一个,并且要始终保证每个柱子上的圆盘大的在下,小的在上,什么时候移完,就意味着世界末日。

梵塔(Hanoi)问题算法 将A上的n-1片金片借助C针移到B针上; 把A针上剩下的一片金片由A针移到C针上; 最后将剩下的n-1个金片借助A针由B针移到C针上。

综合举例 【例5-13】猜数游戏。

4.数组 数组是一种复合数据类型,代表一组同类型的变量。 数组是一种特殊的对象。 从存储方式来看,数组所代表的变量按顺序连续存放,数组本身使用一个标识符来定义,称为数组名。 所代表的每一个变量称为数组元素,数组元素在内存中所处的位置称为下标。 数组的长度是指数组中的元素个数。 数组也遵守一般变量的先定义后使用的原则。

数组举例 记录一个班的10名同学的数学成绩 其中,score.length ==10 定义10个变量:float score1,score2,…,score10分别存放每个同学的数学成绩 定义1个数组变量: score[]=new float[10]; 其中,score.length ==10 每个元素为: score[i](i=0,…,9) 类型为float 数组为score

一维数组 定义格式 举例: 类型名 数组名[][=初值];或 类型名[] 数组名[=初值]; int ai[]; //定义一个整数数组 float score[]; //定义一个float数组 float[] score; Object ao[]; //定义一个Object数组 String names[]; //定义一个字符串数组 byte[] rowvector, colvector, matrix[]; //分别定义两个字节数组和一个字节数组的数组 MyClass<int>amc[]; //定义一个带参数的对象数组

一维数组的初始化 数组的定义中并不为数组元素分配内存 静态初始化 使用一对大括弧“{}”加数据来对数组进行初始化 举例: int ai[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//数组ai有10个数组元素,即ai.length为10,每个元素类型为int char[] ac = {'n', 'o', 't', ' ', 'a', ' ', 'S', 't', 'r', 'i', 'n', 'g'}; //数组ac有12个数组元素,即ac.length为12,每个元素类型为char String countryNames[] = { "中国", "美国", "法国"};//数组countryNames有3个数组元素,即countryNames.length为3,每个元素类型为String MyClass amc[] = { new MyClass(), new MyClass(), new MyClass() };//数组amc有3个数组元素,即amc.length为3,每个元素类型为MyClass Color colorPalette[] = {Color.RED, Color.GREEN, Color.BLUE };//数组colorPalette有3个数组元素,即colorPalette.length为3,每个元素类型为Color

一维数组的初始化(2) 动态初始化 举例: 使用构造对象的方法(new运算符)来初始化数组 int ai[] = new int[10];//数组ai有10个数组元素 int length = 35; float score[] = new float[length];//数组score有35个数组元素 String countryNames[] = new String[] { "中国", "美国", "法国"};//数组countryNames有3个数组元素,即countryNames.length为3,每个元素类型为String

一维数组的引用 举例: for (int i = 0; i < ai.length; i++) { System.out.println(ai[i] * ai[i]); }

一维数组的完整例子 【例6-1】模拟体育比赛中的胜、平和负3种状态10000次,统计并显示每种状态的次数。 ( (int) (Math.random() * 10000)) % 3 【例6-2】查找数组中是否存在某个数值。 关键代码: for (int x : arrayOfInts) { …}

二维数组 定义格式 举例: 类型名 数组名[][] [=初值];或 类型名[] 数组名[] [=初值];或 类型名[][] 数组名[=初值]; 举例: int ai[][]; int[] ai []; int [][]ai;

二维数组的初始化 二维数组的定义中不为数组元素分配内存, 分静态初始化和动态初始化 举例: 1 : int ai1[][] = new int[3][3]; 2 : int ai2[][] = { 3 : {1, 2, 3}, {4, 5, 6}, { 7, 8, 9} 4 : }; 5 : int ai3[][] = new int[3][]; 6 : ai3[0] = new int[3]; 7 : ai3[1] = new int[2]; 8 : ai3[2] = new int[1]; 9 : int ai4[][] = { 10: {1, 2, 3}, {4, 5}, {6} 11: }; 12: int ai5[][] = { 13: {1, 2}, null, {3, 4, 5} 14: };

二维数组的引用 举例: for (int i = 0; i < ai4.length; i++) { for (int j = 0; j < ai4[i].length; j++) { System.out.println(ai4[i][j] * ai4[i][j]); }

二维数组的完整例子 【例6-4】输出如下所示的杨辉三角形。 三角形中的每一行除最左和最右为1之外,中间的每一行每一列的值=上一行当前列的值+上一行前一列的值。

数组与算法 java.util.Arrays类和java.lange.System类中提供了数组的初始化、拷贝、克隆、比较、查找与排序等方法。 1. 初始化方法:System.fill(a,val); 其中,a为要初始化的数组,val为初始化值。 2. 拷贝方法:Arrays.arraycopy(src,srcPos,dest,destPos,length); 其中,src为原始数组,srcPos为原始数组起始下标,dest为目标数组,destPos为目标数组起始下标,length为要拷贝的元素个数。 3. 克隆方法:a.clone(); 其中,a为数组,返回值为目标数组。 “=”表示数组引用,而clone表示复制。

数组与算法(2) 4. 比较方法:Arrays.equals(a1,a2); 其中,a1、a2为要比较的两个数组, “==”表示为同一个引用,而equals表示元素相等。 5. 数组排序方法:Arrays.sort(a); 其中,a为待排数组。 6. 查找方法:Arrays.binarySearch(a,key); 其中,a为待查数组,key为查找关键值,返回值为查找到的数组下标,如果未找到,返回-1。 7. 元素批输出方法:Arrays.toString(a); 其中,a为待输出数组,返回值为数组元素构成的字符串。如果直接输出a的话,得到的只是a的内存标识号,而不是所有元素值。

举例 【例6-7】数组与算法演示。

举例 【例6-8】对一组数据进行分析。原始数据如下表6-1所示: 表6-1 W县2003-2006年苹果产量表(单位:万担) 要求预测2007年的产量,采用的算法: 算术平均: 几何平均: 增长速度: 发展速度:

5.字符串 字符串是指用一对双引号将若干个字符括起来组成的字符序列。 Java语言中的字符串表面上是字符序列,内部却是使用对象来表示的,不能把字符串与字符数组等同起来。 包括定长字符串和可变长字符串 有时为了提高存取效率,采用定长字符串,使用String类的对象; 有时则为了修改的灵活性,采用可变长字符串,使用StringBuffer类的对象。

定长字符串的定义格式 String 变量名=<字符串文字量>; String() 构造一个空字符串 其中,<字符串文字量>为由一对双引号("")括起来的字符序列。 String() 构造一个空字符串 String(String original) 由原始字符串构造新的字符串 String(char[] value) 由字符数组构造字符串 String(char[] value,int offset,int count) 由字符数组的一部分构造字符串 举例: String word="月随碧山转,水合青山流。杳如星河上,但觉云林幽。"; String s=new String(); String firstName=new String("杰克"); char asc[]={'伦', 敦'} String lastname=new String(asc); String name=new String(firstName +'•'+ lastname);

定长字符串的引用格式 对于字符串文字量可以直接使用,而一旦定义好一个字符串变量,就可以按名存取。 String类提供了一个方法length()取得字符串的长度,即它所包含的字符个数。 比如上例中的s.length()为0,name.length()为5等。

定长字符串的处理算法 “+”运算符,不但可以将两个字符串拼接,还可以将其它类型的值与字符串拼接,得到一个新的字符串。 String类的常用方法

定长字符串举例 【例7-1】定长字符串处理方法综合演示。 【例7-2】判断字符串是否为回文。

可变长字符串 举例:对于可变长字符串"Dot saw I",其长度为9,而容量为17。

可变长字符串的定义格式 StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符。 StringBuffer(int capacity) 构造一个不带字符,但具有指定初始容量的字符串缓冲区。 StringBuffer(String str) 构造一个字符串缓冲区,并将其初始化为指定的字符串内容。 举例: StringBuffer s1 = new StringBuffer(); StringBuffer s2 = new StringBuffer(28); StringBuffer s3 = new StringBuffer("地球只有一个,请爱惜她!");

可变长字符串的引用格式 StringBuffer类提供length()方法计算长度,capacity()方法计算容量。

可变长字符串的处理算法 StringBuffer类的常用方法

可变长字符串举例 【例7-3】可变长字符串处理方法综合演示。 【例7-4】字符串、字符数组的转换。 【例7-5】从字符串中提取单词。

可变长字符串举例 【例7-6】字符串四则运算表达式的计算。 算法简述:StringTokenizer类是java.util包中提供的一个解析字符串的类,其方法如下: StringTokenizer(String str, String delim) 为指定字符串构造一个StringTokenizer类的对象。其中,str为原始字符串,delim参数中的字符都是起分隔标记作用的分隔符序列。分隔符字符本身不作为标记。 boolean hasMoreTokens() 测试此标记的字符串中是否还有更多的可用标记。如果此方法返回true,那么后续调用无参数的nextToken方法将成功地返回一个标记。 public String nextToken() 返回下一个标记。

综合例子 【例7-7】给定一篇英文,要求完成以下功能: (1) 显示所有汉字符号; (2) 将字母转换为大写; (3) 去掉非字母符号; (4) 统计各个字母出现的次数(不区分大小写); (5) 每个字母只保留一个。

作业2题目 P.46: 11.定义分数类,包括分子和分母变量、构造方法、加减乘除方法、化简方法、计算方法和显示方法。 P.68: 5. 给定x和m的值,计算: P.95: 5.找出1~10000范围内分别满足如下条件的数: (1) 7的倍数 (2) 带7的数 (3) 带777的数 P.111: 4. 已经有一个n×m的稀疏矩阵:int A[][]={{...},{...},...}; 请定义一个新数组int B[][],要求仅保存A中非零元素。 P.123: 8. 解剖身份证号字符串的意义。使用数组或String或StringBuffer验证身份证号。要求: (1) 分别对15位和18位进行处理; (2) 对正确的分别显示:出生年月日、性别和省份; (3) 对错误的显示:"输入错误"信息。。

实验2题目 P.360: 实验项目2

本讲结束! 谢谢!