chapter2数据类型.ppt_第1页
chapter2数据类型.ppt_第2页
chapter2数据类型.ppt_第3页
chapter2数据类型.ppt_第4页
chapter2数据类型.ppt_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

Java语言程序设计,,第二章 基本类型、数组和枚举类型,主要内容: 标识符和关键字 基本数据类型 从命令行输入输出数据 数组(难点) 枚举类型,2.1 标识符和关键字,标识符用作给变量、类和方法命名 可以以字母、下划线“_”和”$”符开头,除首字符外,可以跟上字母、下划线“_”和”$”符或数字 Java是大小写敏感的,标识符也不例外 Java 标识符的选取因注意“见名知意” 注意标识符不能有空格、数字开头、是java关键字、带有 # 等符号 标识符见下图,标识符,Java关键字/保留字,Java中一些赋以特定的含义、并用做专门用途的单词称为关键字(keyword) 所有Java关键字都是小写的,DEFAULT、DO、NULL等都不是Java关键字 ; goto和const 虽然从未被使用,但也作为Java关键字保留; true和false被用作特殊用途,但不是java关键字 Java中一共有50个关键字,如下表所示,关键字,* 不再使用的;*在jdk1.2中添加的;*在jdk1.4中添加的; *在jdk5.0中添加的,test,1.which of the following are keywords or reserved words in java? a) if b)then c)goto d)while e)case f)sizeof 2. which of the following are java key words? a)double b)Switch c)then d)instanceof 3.which of these are key words in java? a) default b)NULL c)String d)throws e)long f)true,Answer:1.acde 2.ad 3.adef,数据类型,Java是一门强类型语言。也就是说,所有的变量都必须显式声明类型(使用变量必须要声明)。 Java的数据类型分为两大类: 简单类型(primitive type,也称为原始类型或基本类型) 引用类型(reference type ) 简单类型指的是一个数、一个字符或者一个true/false值。它不提供任何与它们所持有的数据类型相关的行为。 Java有8种简单类型。,数据类型的分类,数据类型,简单数据类型,引用数据类型,数值型,字符型(char),布尔型(boolean),整数类型(byte, short, int, long),浮点类型(float, double),类(class),接口(interface),数组,2.2基本数据类型,布尔类型,boolean类型适于逻辑运算,一般用于程序流程控制 boolean类型数据只允许取值true或false,不可以0或非0的整数替代true和false。 用法举例: boolean b = false; if(b) /do something ,整数类型,Java各整数类型有固定的表数范围和字段长度,而不受具体操作系统的影响,以保证Java程序的可移植性 。,整数类型(con.),Java语言整型常量的三种表示形式: 十进制整数,如12, -314, 0。 八进制整数,要求以0开头,如012 十六进制数,要求0x或0X开头,如0x12 Java语言的整型常量默认为int型,如: int i =3; 声明long型常量可以后加 l 或 L ,如: long l = 3L;,字符型,char型数据用来表示通常意义上“字符” 字符常量是用单引号括起来的单个字符 char c = A; Java字符采用Unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示(前缀为u表示Unicode) char c1 = u0061; Java语言中还允许使用转义字符来将其后的字符转变为其它的含义 char c2 = n; /代表换行符 String str =“c:java” ; char 不同于String(char是简单类型/String是引用类型),特殊字符,public class Example2_1 public static void main (String args ) char ch1=,ch2=好; int p1=32831,p2=30452; System.out.println(“+ch1+“的位置:“+(int)ch1); System.out.println(“+ch2+“的位置:“+(int)ch2); System.out.println(“第“+p1+“个位置上的字符是:“+(char)p1); System.out.println(“第“+p2+“个位置上的字符是:“+(char)p2); ,例2.1,浮点型,Java浮点类型有固定的表数范围和字段长度。和整数类型一样,在java中,符点类型的范围与机器无关。,浮点型,Java浮点类型常量有两种表示形式 十进制数形式,必须含有小数点,例如: 3.14 314.0 .314 科学记数法形式,如 3.14e2 3.14E2 314E2 Java浮点型常量默认为double型,如要声明一个常量为float型,则需在数字后面加f或F,如: double d = 3.14; float f = 3.14f;,各种整型数据类型的转换,通常,我们需要在不同的数据类型之间进行转换。 简单类型除了boolean类型以外,其他的数据类型可以自动转换成其他的数据类型,只要遵循如下图所示的原则:,byte,short,char,int,long,float,double,例2.2,public class Example2_2 public static void main (String args ) int c=128; long d=77777; float f=2e3F; double g=3.14e-300; /指数表示法 double result=f*g; System.out.println(“f=“+f); System.out.println(“g=“+g); System.out.println(“rerult=“+result); g=1234.123456789; /小数表示法 c=(int)d; f=(float)g; /导致精度的损失 System.out.print(“ c= “+c); System.out.println(“ d= “+d); System.out.println(“f=“+f); System.out.println(“g=“+g); ,2.3 从命令行输入输出数据,由于C语言出现的比较早,那个时候还没有图形用户界面的概念(Graphics User Interface),因此,C语言提供了许多用来输入、输出数据的函数,例如printf 、scanf等。 Java不象C,提供在命令行进行数据输入、输出的功能不多。 Sun公司新推出的JDK1.5又新增了一些在命令行进行数据输入、输出的功能。,2.3 数据的输入,1数据的输入:Scanner Scanner是SDK1.5新增的一个类,可以使用该类创建一个对象: Scanner reader=new Scanner(System.in); 然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型, nextByte(), nextDouble(), nextFloat(), nextInt(), nextLine(),nextLong(), nextShort()。,2.3数据的输入,上述方法执行时都会堵塞,等待你在命令行输入数据回车确认。 下面让我们来看一个例子,来更好的了解Scanner语句,在这个例子中,用户在键盘依次输入若干个数字,每输入一个数字都需要按回车键确认,最后在键盘输入一个非数字字符结束整个的输入操作过程。程序将计算出这些数的和及平均值。,例2.3,import java.util.Scanner; public class Example2_3 public static void main (String args ) System.out.println(“请输入若干个数,每输入一个数回车确认“); System.out.println(“最后输入数字0结束输入操作“); Scanner reader=new Scanner(System.in); double sum=0; int m=0; double x = reader.nextDouble(); while(x!=0) m=m+1; sum=sum+x; x=reader.nextDouble(); System.out.println(m+“个数的和为“+sum); System.out.println(m+“个数的平均值“+sum/m); ,2.3 数据的输出,2数据输出: System.out.printf System.out.printf的功能完全类似C语言中的printf函数。pringf的一般格式: printf(格式控制部分,表达式1,表达式2,表达式n); 例如: System.out.printf(“点的坐标为(%d,%d)”,x,y); 输出: 点的坐标为(200,300) printf方法的用法与C语言相同。,printf()的格式控制部分,格式控制部分由格式控制符和普通字符组成。格式控制符用来输出表达式的值,普通字符原样输出。 d输出整数类型数据。 c输出字符类型数据。 f输出浮点类型数据,最多保留6位小数。 s输出字符串类型数据。 输出数据时,也可以控制数据在命令行的位置: md输出的int类型数据占m列。 m.nf输出的浮点数据占m列,保留n位小数。 Java提倡用: n表示回车换行。,1. 声明数组,格式1: 数组元素类型 数组名 ; 格式2: 数组元素类型 数组名; 其中,数组元素的类型可以是基本类型,也可以是类或接口。 例如,要保存某批学生的成绩,可以定义一个数组score,声明如下: int score ; 或者 int score;,声明了一个元素类型为整型的数组a,元素个数没有确定。系统将a的值初始化为空(null),此时数组a并没有得到可用的内存空间,null,a,int a ,注:与C+不同的是,Java不允许在声明数组中的方括号内制定数组元素的个数。若声明 int a12或int12a将导致语法错误,1. 声明数组,给已声明的数组分配空间可采用如下格式: 数组名 = new 数组元素类型 数组元素的个数; 例如,score = new int10;,在声明数组的同时给数组规定空间,两步合并。 例如:int score = new int10; /创建同时声明,1. 声明数组,二维数组声明,格式1:数组元素类型 数组名 ; 格式2:数组元素类型 数组名; 例如:int a;,a,0,a0,0,10,a1,0,a2,0,a3,0,a4,int a ; a=new int5 ; a1=10;,1,2,3,4,2. 创建数组,在Java语言中,所有的数组都是动态地分配存储空间。也可以在声明数组的同时,使用new运算符为数组分配空间。 int a=new int6; a=new int10;,2. 创建数组,创建二维数组空间,(1)直接为每一维分配空间,如: int a = new int 23; (2)从最高维开始,按由高到低的顺序分别为每一维分配空间。如: int a = new int 2; a0 = new int 3; a1 = new int 4;,二维数组看作是数组的数组,不要求二维数组每一维的大小相同,3数组元素的使用,通过下标可以访问数组中的任何元素。数组元素的访问格式如下: Java对数组下标范围进行严格检查,如果下标超出范围将产生运行错误。,4 length的使用,一数组的元素的个数称作数组的长度。对于一维数组,“数组名字.length”的值就是数组中元素的个数。 对于二维数组“数组名字.length”的值是它含有的一维数组的个数。 对于 float a = new float12; a.length的值12 对于 int b = new int36; b.length的值是3,5数组的初始化,创建数组后,系统会给每个数组元素一个默认的值,如,float型是0.0。 在声明数组时同时也还可以给数组的元素一个初始值,如: float boy= 21.3f,23.89f,2.0f,23f,778.98f;,数组属于引用型变量,因此两个相同类型的数组如果具有相同的引用,它们就有完全相同的元素。例如,对于 int a=1,2,3,b=4,5; 数组变量a和b分别存放着不同的引用。但是,如果使用了赋值语句:a=b;那么,a中存放的引用就和b的相同,这时系统将释放最初分配给数组a的元素,使得a的元素和b的元素相同,即a0,a1就是b0,b1,而最初分配给数组a的三个元素已不复存在 .,6数组的引用,下面结合例2.4来看怎样使用数组。,0xB9671,0xB8321,0xB9671,6数组的引用,public class Example2_4 public static void main(String args) int a=1,2,3,4; int b=100,200,300; System.out.println(“数组a的元素个数=“+a.length); System.out.println(“数组b的元素个数=“+b.length); System.out.println(“数组a的引用=“+a); System.out.println(“数组b的引用=“+b); System.out.println(“a=b的结果是“+(a=b); a=b; System.out.println(“数组a的元素个数=“+a.length); System.out.println(“数组b的元素个数=“+b.length); System.out.println(“a=b的结果是“+(a=b); System.out.println(“a0=“+a0+“,a1=“+a1+“,a2=“+a2); System.out.print(“b0=“+a0+“,b1=“+b1+“,b2=“+b2); ,6数组的引用,例 计算数组中所有元素的和,import java.io.*; public class Sum public static void main(String args) int a = 1,2,3,4,5,6,7,8,9,10; System.out.println(“数组 a 的总和是:“ + sum(a); static int sum(int b) int s=0; for (int i=0; ib.length; i+) s=s+bi; return s; ,例 编写一个方法将一维数组元素按由小到大排列,static void sort(int a) int n= a.length; for (int i=0; iaj) /* 交换ai和aj */ int temp=ai; ai=aj; aj=temp; ,测试排序方法,public class TestSort public static void main(String args) int b = 4,6,3,8,5,3,7,1,9,2; System.out.println(“排序前“); for (int k=0;kb.length;k+) System.out.print(“ “ + bk); sort(b); System.out.println(); System.out.println(“排序后“); for (int k=0;kb.length;k+) System.out.print(“ “ + bk); ,例 利用命令行参数实现两整数相乘,public class UseComLParameter public static void main(String args ) int a1, a2, a3; if (args.length 2) System.out.println(“运行本程序要提供两个命令行参数“); System.exit(0); a1 = Integer.parseInt(args0); a2 = Integer.parseInt(args1); a3 = a1*a2; System.out.println(a1+“ 与 “+a2+“ 相乘的积为:“+a3); ,例 输出命令行所有参数,public class AllCommandPara public static void main(String args) for(int i=0;iargs.length;i+) System.out.println(argsi + “ “); ,E:javajava AllCommandPara “hello good“ 34 “my 123“ hello good 34 my 123,8. 复制数组,1arraycopy方法 System类调用方法 public static void arraycopy(sourceArray,int index1,copyArray,int index2,int length) 可以将数组sourceArray从索引index1开始后的length个元素中的数据复制到数组copyArray中,copyArray数组从第index2元素开始存放这些数据。 例2-5,import java.util.Arrays; public class Example2_5 public static void main(String args) char a = a,b,c, d,e,f, b = 1,2,3,4,5,6; int c =1,2,3,4,5,6, d = 10,20,30,40,50,60; System.arraycopy(a, 0, b, 0, a.length); System.arraycopy(c, 2, d, 2, c.length-3); System.out.println(“数组 a 的各个元素中的值:“); System.out.println(Arrays.toString(a); System.out.println(“数组 b 的各个元素中的值:“); System.out.println(Arrays.toString(b); System.out.println(“数组 c 的各个元素中的值:“); System.out.println(Arrays.toString(c); System.out.println(“数组 d 的各个元素中的值:“); System.out.println(Arrays.toString(d); ,2copyOf和copyOfRange()方法 Arrays类调用copyOf方 法复制整个数组中元素的值到另一个数组中。 public static double copyOf(double original,int newLength) Arrays类调用copyOfRange()方法复制数组中部分元素的值复制到另一个数组中 public static double copyOfRange(double original,int from,int to) 例2-6,import java.util.*; public class Example2_6 public static void main(String args) int a =10,20,30,40,50,60,b,c,d; b=Arrays.copyOf(a,10); System.out.println(“数组 a 的各个元素中的值:“); System.out.println(Arrays.toString(a); System.out.println(“数组 b 的各个元素中的值:“); System.out.println(Arrays.toString(b); c=Arrays.copyOfRange(a,3,5); System.out.println(“数组 c 的各个元素中的值:“); System.out.println(Arrays.toString(c); d=Arrays.copyOfRange(a,3,9); System.out.println(“数组 d 的各个元素中的值:“); System.out.println(Arrays.toString(d); ,排序与二分查找,1Array类调用 public static void sort(double a) 方法可以把参数a指定的double类型数组按升序排序。 2Array类调用 public static void sort(double a,int start,int end) 方法可以把参数a指定的double类型数组中索引star至end-1的元素的值按升序排序。 3Array类调用(二分法) public static int binarySearch(double a, double number) 方法判断参数number指定的数是否在参数a指定的数组中。 例2-7,import java.util.*; public class Example2_7 public static void main(String args) int a=12,34,9,23,45,6,45,90,123,19,34; Arrays.sort(a); System.out.println(Arrays.toString(a); int number=45; int index=Arrays.binarySearch(a,number); if(index=0) System.out.println(number+“和数组中索引为“+index+“的元素值相同“); else System.out.println(number+“不与数组中任何元素值相同“); ,2.5 枚举类型,Java使用关键字enum声明枚举类型,语法格式如下: enum 枚举名 常量列表 其中的常量列表是用逗号分割的字符序列,称为枚举类型的常量(枚举类型的常量要符合标识符之规定,即由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字字符)。 例2-8 ,例2-9,enum Season 春季,夏季,秋季,冬季 public class Example2_8 public static void main(String args) Season x=Season.春季; System.out.println(x); x=Season.夏季; System.out.println(x); x=Season.秋季; System.out.println(x); x=Season.冬季; System.out.println(x); ,public enum Weekday 星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期日 public class Example2_9 public static void main(String args) Weekday x=Weekday.星期日; if(x=Weekday.星期日) System.out.println(x); System.out.println(“今天我休息“); ,习题,1. 1)public class Test 2) public static void main(String args) 3) unsigned byte b=0; 4) b-; 5) 6) 7) what is the value of b at line 5? A.-1 B.255 C.127 D.compile fail E.compile succeeded but run error,D,2. Which three are valid declarations of a float? (Choose Three) A. float foo = -1; B. float foo = 1.0; C. float foo = 42e1; D. float foo = 2.02f; E. float foo = 3.03d; F. float foo = 0x0123;,ADF,3. Given: 8. int index = 1; 9. boolean test = new Boolean3; 10. boolean foo= test index; What is the result? A. foo has the value of 0 B. foo has the value of null C. foo has the value of true D. foo has the value of false E. an exception is thrown F. the code will not compile,F,4. Given: 8. int index = 1; 9. int foo = new int 3; 10. int bar = foo index; 11. int baz = bar + index; What is the result? A. baz has the value of 0 B. baz has the value of 1 C. baz has the value of 2 D. an exception is thrown E. the code will not compile,B,5. Given: 1. byte arry1, array2; 2. byte array3 ; 3. byte array4; If each array has been initialized, which statement will cause a compiler error? A. array2 = array1; B. array2 = array3; C. array2 = array4; D. both A and B E. both A and C F. both B and C,A,6. Given: 1. public class ArrayTest 2. public static void main (Stringargs) 3. float f1, f2; 4. f1 = new float 10; 5. f2 = f1; 6. System.out.printIn (“f20=” + f20); 7. 8. What is the result? A. It prints f20 = 0.0. B. It prints f20 = NaN. C. An error at line 5 causes compile to fail. D. An error at line 6 causes compile to fail. E. An error at line 6 causes an exception at runtime.,A,7. Which of the following two are valid declarations of a char? (Choose Two) A.char ch = “a”; B.char ch = ; C.char ch = cafe; D.char ch = “cafe”; E.char ch = ucafe; F.char ch = u10100; G.char ch = (char) true;,BE,找零时刻,请考虑下面这段话所描述的问题: Tom在一家汽车配件商店购买了一个价值$1.10的火花塞,但是他钱包中都是两美元一张的钞票。如果他用一张两美元的钞票支付这个火花塞,那么应该找给他多少零钱呢

温馨提示

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

评论

0/150

提交评论