第2章_Java_基本程序设计(2014)_第1页
第2章_Java_基本程序设计(2014)_第2页
第2章_Java_基本程序设计(2014)_第3页
第2章_Java_基本程序设计(2014)_第4页
第2章_Java_基本程序设计(2014)_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

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

文档简介

1、1第二章第二章 JAVAJAVA基本程序设计基本程序设计学习目标学习目标编写编写Java程序完成简单的计算程序完成简单的计算使用使用Scanner类从控制台获取输入数据类从控制台获取输入数据使用标识符命名变量、常量、方法和类使用标识符命名变量、常量、方法和类使用变量存储数据使用变量存储数据使用赋值语句和赋值表达式编写使用赋值语句和赋值表达式编写程序程序使用常量存储不变的数据使用常量存储不变的数据声明基本数据类型声明基本数据类型使用运算符书写数学表达式使用运算符书写数学表达式实训一:实训一:显示当前时间显示当前时间将一种类型的值强制转换为另一种类型将一种类型的值强制转换为另一种类型实训二:计算贷

2、款支付额实训二:计算贷款支付额使用使用char类型表示字符类型表示字符实训三:实训三:计算整钱兑零计算整钱兑零使用使用String类型表示字符串类型表示字符串熟悉程序设计风格和命名习惯熟悉程序设计风格和命名习惯使用类使用类 JOptionPane 从输入对话框获取输入数据从输入对话框获取输入数据22 2.1 .1 引言引言 在第一章里,学习了如何创建、编译和运行一个在第一章里,学习了如何创建、编译和运行一个Java程序。现在,将学习如何编程解决实际问题。通过这些问程序。现在,将学习如何编程解决实际问题。通过这些问题,你将学到如何利用基本数据类型、变量、常量、运算题,你将学到如何利用基本数据类型

3、、变量、常量、运算符、表达式以及输入输出方法来进行基本的程序设计。符、表达式以及输入输出方法来进行基本的程序设计。32 2. .2 2 编写简单的程序编写简单的程序 首先,我们来看一个计算圆面积的问题。首先,我们来看一个计算圆面积的问题。 该如何编写程序来解决这个问题呢?该如何编写程序来解决这个问题呢? 对于任何一个程序而言,编写程序都将包括两个步骤:对于任何一个程序而言,编写程序都将包括两个步骤:1 1)算法的设计)算法的设计设计出设计出解决问题的一组有限的操作序列。解决问题的一组有限的操作序列。2 2)算法的实现)算法的实现将算法翻译成程序代码。将算法翻译成程序代码。 其实,算法就是帮助程

4、序员在使用程序设计语言编写程其实,算法就是帮助程序员在使用程序设计语言编写程序之前做一个规划。序之前做一个规划。 算法可以是自然语言或伪代码(自然语言和程序设计代算法可以是自然语言或伪代码(自然语言和程序设计代码的混合使用)描述。码的混合使用)描述。4 如你所知,每个如你所知,每个Java程序都是以一个类的程序都是以一个类的声明开始的。类名紧跟在关键字声明开始的。类名紧跟在关键字class后面。后面。 这个这个“计算圆面积计算圆面积”程序的算法,可以描述如下:程序的算法,可以描述如下:1 1)读入半径值;)读入半径值;2 2)利用公式计算面积值:)利用公式计算面积值: 面积面积 = = 半径半

5、径半径半径 3 3)显示面积值。)显示面积值。 当你编写程序代码时,就是要将这个算法翻译成程序。当你编写程序代码时,就是要将这个算法翻译成程序。 这个程序的概貌如下所示:这个程序的概貌如下所示: public class ComputeArea /稍后将给出细节稍后将给出细节 如你所知,每个如你所知,每个Java程序都必须有一个程序都必须有一个main方法方法( (程序从这个方法开始执行程序从这个方法开始执行) )。所以。所以该程序应该扩展为:该程序应该扩展为: public class ComputeArea public static void main(String args) /第一步

6、:读入半径第一步:读入半径 /第二步:计算面积第二步:计算面积 /第三步:显示面积第三步:显示面积 5 每个变量都有自己的名字,用来访问它在内存的位置。每个变量都有自己的名字,用来访问它在内存的位置。为了让编译器知道它们是什么,还需要指明它们的数据类型。为了让编译器知道它们是什么,还需要指明它们的数据类型。 这个程序首先需要从键盘输入的半径。这就产生了两个问题:这个程序首先需要从键盘输入的半径。这就产生了两个问题:1 1)如何读入半径?)如何读入半径?2 2)如何将半径保存在程序中?)如何将半径保存在程序中? 先来看第二个问题。为了保存半径,在程序中你需要声明一个先来看第二个问题。为了保存半径

7、,在程序中你需要声明一个叫做变量(叫做变量(variable)的符号)的符号指定在程序中用于存储数据和计指定在程序中用于存储数据和计算结果的内存位置。算结果的内存位置。 public class ComputeArea public static void main(String args) double radius ; /声明一个用来存储半径的变量声明一个用来存储半径的变量 double area ; /声明一个用来存储面积的变量声明一个用来存储面积的变量 /第一步:读入半径第一步:读入半径 /第二步:计算面积第二步:计算面积 /第三步:显示面积第三步:显示面积 Java语言提供了语言提供

8、了“基本数据类型基本数据类型”来表示整型、浮点型(即来表示整型、浮点型(即带小数点的数)、字符型及布尔型。它们也叫做带小数点的数)、字符型及布尔型。它们也叫做Java的的“原始数原始数据类型据类型”。 关键字关键字double表明以双精度浮点型形式存储在内存中表明以双精度浮点型形式存储在内存中。这是这是一种被经常用来保存实数的数据类型。一种被经常用来保存实数的数据类型。建议:建议: 变量名应尽量选择变量名应尽量选择描述性的名字描述性的名字 “见名知意见名知意”,而不,而不是用是用 x、y 之类简单之类简单的名字。的名字。6 下面,我们继续来完善这个程序:下面,我们继续来完善这个程序:1 1)读

9、入半径)读入半径 radius:(简单起见)先给:(简单起见)先给 radius 赋一个固定值;赋一个固定值;2 2)计算面积)计算面积area: :将表达式将表达式 radius * radius * 3.14159 的值赋给的值赋给area;3 3)显示面积)显示面积: :使用使用System.out.println方法方法, ,在控制台上显示在控制台上显示area的值。的值。/程序清单程序清单2-1 ComputeArea.java public class ComputeArea public static void main(String args) double radius ;

10、/声明双精度实型变量声明双精度实型变量 radius 来存储半径来存储半径 double area ; /声明双精度实型变量声明双精度实型变量 area 来存储面积来存储面积 radius = 20; /给给radius赋赋20 area = radius * * radius * * 3.14159; /计算面积计算面积 /显示面积显示面积 System.out.println(半径为半径为+radius+的园面积为的园面积为+area); 7 在在Java语言中,加号语言中,加号“+”有两种意义:有两种意义:第一种用途是用于做第一种用途是用于做 加法加法;第二种用途是用于做第二种用途是用于

11、做 字符串连接字符串连接。 例如,在该程序的第例如,在该程序的第10行语句中:行语句中: System.out.println(半径为半径为 + radius + 的园面积为的园面积为 + area);其中的其中的“+”将被作为将被作为 字符串连接符字符串连接符。其运算规则是:。其运算规则是:(1 1)如果两个都是字符串,则连接符就把两个字符串连接起来;)如果两个都是字符串,则连接符就把两个字符串连接起来;(2 2)如果其中一个为非字符串)如果其中一个为非字符串( (比如一个数字比如一个数字20) ),那么,那么就就会先被转换为一个字符串会先被转换为一个字符串“20”,然后再与另一个字符串相连

12、接。,然后再与另一个字符串相连接。 所以,上面的所以,上面的“+”会将几个字符串连接成一个更长的字符串会将几个字符串连接成一个更长的字符串 “ “半径为半径为 20 的园面积为的园面积为 1256.636”,然后再由输出方法然后再由输出方法System.out.println将它显示出来。将它显示出来。8小结小结: 一个程序的设计过程,通常都要经过下面几个步骤的处理:一个程序的设计过程,通常都要经过下面几个步骤的处理:第一步:给出算法总框架。第一步:给出算法总框架。 i) 输入数据;输入数据; ii) 处理数据;处理数据; iii) 输出结果;输出结果;第二步:对第一步中的各步骤(即各子问题)

13、进行细化(求精)。第二步:对第一步中的各步骤(即各子问题)进行细化(求精)。第三步:将第二步得到的算法转换为程序第三步:将第二步得到的算法转换为程序代码代码。 可见,每一步都在前一步设计的基础上添加了进一步细化的可见,每一步都在前一步设计的基础上添加了进一步细化的内容;逐步开发并测试每一步。内容;逐步开发并测试每一步。 这种开发过程也叫做这种开发过程也叫做“自顶向下;逐步求精自顶向下;逐步求精”。92.32.3 从控制台读取数据从控制台读取数据 在程序清单在程序清单2-12-1中,半径的值是固定的(中,半径的值是固定的(2020)。要让程序能)。要让程序能适应不同的半径,可以使用适应不同的半径

14、,可以使用Scanner类来实现从控制台(键盘)类来实现从控制台(键盘)输入数据。输入数据。 为此,需要使用为此,需要使用Scanner类来创建它的对象,以读取来自类来创建它的对象,以读取来自System.in的输入数据。的输入数据。如下所示:如下所示:Scanner input = new Scanner (System.in);这就声明了一个可以读取来自键盘输入数据的对象这就声明了一个可以读取来自键盘输入数据的对象input。提示:提示: Java使用使用System.out来表示控制台输出设备(显示器),而来表示控制台输出设备(显示器),而使用使用System.in来表示控制台输入(键盘

15、)设备。来表示控制台输入(键盘)设备。 Java并不直接支持控制台输入,而是通过创建并不直接支持控制台输入,而是通过创建Scanner类的类的对象来实现的。对象来实现的。10 与变量不同,对象可以调用它自己的方法,以完成某个任务。与变量不同,对象可以调用它自己的方法,以完成某个任务。 可以调用表可以调用表2-12-1中的方法以读取各种不同类型的输入数据。中的方法以读取各种不同类型的输入数据。表表2-1 Scanner对象的方法对象的方法说明说明: next()用于读入一个不包括空格的字符串;用于读入一个不包括空格的字符串; 而而nextLine()则可以包括空格则可以包括空格。11 下面的源程

16、序清单下面的源程序清单2-22-2调用调用nextDouble( )方法来读取键盘方法来读取键盘输入的带小数点的数。输入的带小数点的数。/源程序清单源程序清单2-2 ComputeAreaWithConsoleInput.javaimport java.util.Scanner; / Scanner类在类在java.util包中包中public class ComputeAreaWithConsoleInput public static void main(String args)/创建一个创建一个Scanner对象对象Scanner input = new Scanner (System.

17、in);/提示用户输入一个半径值提示用户输入一个半径值System.out.print(请输入一个半径值请输入一个半径值:);double radius = input.nextDouble(); /读入实数读入实数area = radius * * radius * * 3.14159; /计算面积计算面积 /显示结果显示结果System.out.println(半径为半径为+radius+的园面积为的园面积为+area); 12注意注意1 1: 语句语句 double radius = input.nextDouble(); 是从键盘读取一个输入数据。在用户键入一个数值然后键入是从键盘读取

18、一个输入数据。在用户键入一个数值然后键入回车键之后,该数值才被读入并赋值给变量回车键之后,该数值才被读入并赋值给变量radius。注意注意2 2: print方法与方法与println方法很相似。两者的不同之处在于:方法很相似。两者的不同之处在于:当显示完字符串后,当显示完字符串后,println会将光标移到下一行;而会将光标移到下一行;而print则不会。则不会。 13 下面的源程序清单下面的源程序清单2-32-3给出了从键盘读取输入数据的另一个例子。给出了从键盘读取输入数据的另一个例子。这个例子读取三个实数,然后输出它们的平均值。这个例子读取三个实数,然后输出它们的平均值。/源程序清单源程

19、序清单2-3 ComputeAverage.javaimport java.util.Scanner; /Scanner类在类在java.util包中包中public class ComputeAverage public static void main(String args)/创建一个创建一个Scanner对象对象Scanner input = new Scanner (System.in);/提示用户输入三个实数提示用户输入三个实数System.out.println(请输入三个实数:请输入三个实数:);double num1 = input.nextDouble();double n

20、um2 = input.nextDouble();double num3 = input.nextDouble();double average = (num1 + num2 + num3) / 3; /计算总和计算总和 /显示结果显示结果System.out.println( 它们的平均值是:它们的平均值是: + average ); 注意:注意: 每当输入多个数值每当输入多个数值(整数、实数)时,应(整数、实数)时,应该使用空格或回车作为该使用空格或回车作为分隔。分隔。14 源程序清单源程序清单2-42-4给出的是从键盘读取输入数据的又一个例子。给出的是从键盘读取输入数据的又一个例子。这个

21、例子读取这个例子读取三个整数三个整数,然后输出它们的和。,然后输出它们的和。/源程序清单源程序清单2-4 ComputeSum.javaimport java.util.Scanner; /Scanner类在类在java.util包中包中public class ComputeSum public static void main(String args) /创建一个创建一个Scanner对象对象Scanner input = new Scanner (System.in);/提示用户输入三个整数提示用户输入三个整数System.out.println(请输入三个整数:请输入三个整数:);in

22、t num1 = input.nextInt();int num2 = input.nextInt();int num3 = input.nextInt();int sum = num1 + num2 + num3; /计算总和计算总和 /显示结果显示结果System.out.println(它们的和是:它们的和是: + sum); 15警告警告: 为了避免输入错误,请不要在为了避免输入错误,请不要在nextInt()、nextLong()、nextFloat()、nextDouble()、next()之后使用之后使用nextLine()。162.42.4 标识符标识符 正如前面那些程序清单中

23、看到的,诸如正如前面那些程序清单中看到的,诸如ComputeArea、main、input、number1、number2等符号,都是出现在程序中的事物的等符号,都是出现在程序中的事物的名字。它们都是名字。它们都是由程序员命名由程序员命名 的。这样的名字称为的。这样的名字称为标识符标识符(identifier)。)。 所有的标识符都必须遵从以下规则:所有的标识符都必须遵从以下规则:标识符必须是由字母、数字、下划线标识符必须是由字母、数字、下划线 _ _ 和和$ $构成的字符序列。构成的字符序列。标识符必须以字母、下划线或美元符号开头,不能以数字开头。标识符必须以字母、下划线或美元符号开头,不能

24、以数字开头。标识符不能是保留字(也叫标识符不能是保留字(也叫“关键字关键字”。参见下一页的。参见下一页的表表2_12_1)。)。标识符可以为任意长度。标识符可以为任意长度。例如,例如,$2、ComputeAverager、radius、showMessageDialog等都是合法的标识符,而等都是合法的标识符,而2A、d+4都是非法的,因为它们不符合标都是非法的,因为它们不符合标识符的命名规则。识符的命名规则。 Java编译器会检测出非法标识符,并且报告语法错误。编译器会检测出非法标识符,并且报告语法错误。17表表2_1 Java关键字表关键字表注意:关键字全部为小写。注意:关键字全部为小写。

25、182.52.5 变量变量 正如前面几节的程序中看到的,用变量来存储将在程序中用到正如前面几节的程序中看到的,用变量来存储将在程序中用到的数据。它们之所以被称为变量,是因为它们的值可能会被改变。的数据。它们之所以被称为变量,是因为它们的值可能会被改变。 例如,可以使用下面的变量来存放不同半径的圆面积:例如,可以使用下面的变量来存放不同半径的圆面积: /计算第一个面积计算第一个面积 radius = 1.0;/ radiux 第一次赋值第一次赋值 area = radius * * radius * * 3.14;/ area第一次赋值第一次赋值 System.out.println(半径为半径

26、为+radius+的面积是的面积是:+area); /计算第二个圆面积计算第二个圆面积 radius = 2.0;/ radius 第二次赋值第二次赋值 area = radius * * radius * * 3.14;/ area 第二次赋值第二次赋值 System.out.println(半径为半径为+radius+的面积是的面积是:+area);19 变量用于存储指定类型的数据。因此,要使用变量,必须进行变量用于存储指定类型的数据。因此,要使用变量,必须进行变量声明变量声明,以通知编译器变量的名字以及它可以存储的数据类型。,以通知编译器变量的名字以及它可以存储的数据类型。 变量声明的语

27、法格式如下:变量声明的语法格式如下:数据类型数据类型 变量名;变量名; 下面是一些变量声明的例子:下面是一些变量声明的例子:int count; 声明声明count是一个是一个int类型类型( (也是一种基本整型也是一种基本整型) )的变量。的变量。double radius; 声明声明radius是一个是一个double类型的变量。类型的变量。如果几个变量为同一类型,允许一起声明它们如果几个变量为同一类型,允许一起声明它们( (用逗号用逗号“,”分隔分隔):):数据类型数据类型 变量名变量名1 1,变量名,变量名2 2,.;例如:例如:int i, j, k; /声明声明i、j、k都是都是

28、int类型的变量类型的变量20 变量也可以有初始值。可以一步完成变量的声明和初始化。变量也可以有初始值。可以一步完成变量的声明和初始化。例如,例如,int count = 1;它等同与下面两条语句:;它等同与下面两条语句: int count; count = 1; 还可以使用简捷的方式来同时声明和初始化同一类型的变量:还可以使用简捷的方式来同时声明和初始化同一类型的变量:int i = 1,j = 2,k;提示:提示: 在给变量赋值之前,必须先声明变量在给变量赋值之前,必须先声明变量“先声明,后使先声明,后使用用”。 任何时候都要尽可能地一步完成所有变量的声明任何时候都要尽可能地一步完成所有

29、变量的声明( (和初始化和初始化) )。这会使得程序易读,同时可以避免程序设计错误。这会使得程序易读,同时可以避免程序设计错误。212.62.6 赋值语句和赋值表达式赋值语句和赋值表达式 声明变量后,可以使用声明变量后,可以使用赋值语句赋值语句 给它赋一个值。给它赋一个值。 赋值语句的语法格式:赋值语句的语法格式:变量变量 = = 表达式;表达式;/注意:千万不要忘了最后的分号注意:千万不要忘了最后的分号“;”“;” 表达式表达式 是由是由常量、变量、方法及运算符常量、变量、方法及运算符 组成的一个运算式子。组成的一个运算式子。因此,程序中的每个表达式都是一个值(也叫做因此,程序中的每个表达式

30、都是一个值(也叫做“表达式的值表达式的值 ”)。)。 因而,因而,赋值语句的作用是:赋值语句的作用是:计算表达式的值并将其值赋值给计算表达式的值并将其值赋值给“=”“=”右边的变量。右边的变量。 考虑下面的代码:考虑下面的代码:y = 5 * * ( 3 / 2 ) + 3 * * 2; /将表达式的值赋给将表达式的值赋给y yx = y+1; / 将将y y加加1 1的值赋给的值赋给x xarea = radius * * radius * * 3.14; /将圆面积的值赋给将圆面积的值赋给area提示:提示:“赋值赋值”就是将值就是将值存储到变量的内存存储到变量的内存地址中去地址中去。22

31、注意注意: 语句语句“ x+1 = x; ”是错误的。因为它违背了赋值是错误的。因为它违背了赋值语句的语法规则。语句的语法规则。 而语句而语句“ x = x+1 ; ”是合法的。它表示将表达是合法的。它表示将表达式式 x+1 的值赋值给变量的值赋值给变量 x。它不再是数学运算中的。它不再是数学运算中的一个等式!一个等式!23 在在Java中,赋值运算符中,赋值运算符“=”也属于一种运算符,因此,与其也属于一种运算符,因此,与其他表达式一样,他表达式一样,赋值表达式赋值表达式(它的值就是(它的值就是“=”“=”右边表达式的值)右边表达式的值)也可以用在其他语句中。也可以用在其他语句中。 例如,下

32、面的语句是正确的:例如,下面的语句是正确的:System.out.println( x = 1 ); 它等价于下面两条语句:它等价于下面两条语句:x = 1;System.out.println( x ); 另外,下面的语句也是正确的:另外,下面的语句也是正确的:i = j = k = 1; 它等价于:它等价于:k = 1;j = k;i = j;注意注意 在赋值语句中,左边变量的数据类在赋值语句中,左边变量的数据类型必须与右边值的类型一致,否则将被型必须与右边值的类型一致,否则将被视为非法。视为非法。提示提示 在程序设计中,要解决任在程序设计中,要解决任何问题,赋值语句都是最基本、何问题,赋

33、值语句都是最基本、最重要、使用最多的语句。尤最重要、使用最多的语句。尤其在涉及数值计算的程序设计其在涉及数值计算的程序设计中,扮演着不可或缺的角色。中,扮演着不可或缺的角色。242.72.7 有名常量有名常量 在在Java程序中,可以使用变量,也可以使用常量。除了诸如程序中,可以使用变量,也可以使用常量。除了诸如3.14、1.0、20 等直接常量外,还允许使用等直接常量外,还允许使用有名常量有名常量(又称为(又称为“符号常量符号常量 ”)。)。 声明有名常量的语法格式:声明有名常量的语法格式: final 数据类型数据类型 常量名常量名 = = 值;值;/ final是声明有名常量的关键字是声

34、明有名常量的关键字 下面来改写程序清单下面来改写程序清单2-12-1,将其中的,将其中的声明为常量声明为常量:/程序清单程序清单2-1 ComputeArea.javapublic class ComputeArea public static void main(String args)final double PI = 3.14; /声明一个声明一个double类型的常量类型的常量PIdouble radius ;double area ;radius = 20;area = radius * * radius * * PI ; /PI 的值为的值为 3.14System.out.prin

35、tln(半径为半径为+radius+的园面积为的园面积为+area);警告警告 按照习惯按照习惯 ,常,常量用大写字母命。量用大写字母命。例如,用例如,用 PI,而而不是不是 Pi、pI 或或 pi。提示提示: 使用有名常量有三个好处:使用有名常量有三个好处:1 1)不必重复输入同一个值;)不必重复输入同一个值;2 2)如果需要修改常量值,只)如果需要修改常量值,只需要在声明处做改动即可;需要在声明处做改动即可;3 3)给常量赋一个描述性的名)给常量赋一个描述性的名字可提高程序的易读性。字可提高程序的易读性。252.82.8 数值数据类型及其运算数值数据类型及其运算 每一种数据类型都有它的取值

36、范围每一种数据类型都有它的取值范围。编译器会根据每个变量。编译器会根据每个变量或常量的数据类型为其分配内存空间或常量的数据类型为其分配内存空间。Java为数值、字符值和布为数值、字符值和布尔值数据提供了八种基本数据类型(如表尔值数据提供了八种基本数据类型(如表2-22-2所示)。所示)。表表2-2 Java基本数据类型基本数据类型其中,前其中,前6 6行为数值数据类型;且前行为数值数据类型;且前4 4行均为整型。行均为整型。26提示提示 为简单和一致性,在大部分内容中,我们都使用为简单和一致性,在大部分内容中,我们都使用intint来表示整数;为更精确而使用来表示整数;为更精确而使用doubl

37、edouble表示实数。表示实数。警告警告 当被赋值的变量的值太大以至于无法存储时,就会当被赋值的变量的值太大以至于无法存储时,就会造成上溢造成上溢( (overflow) )。例如:。例如: int value = 2147483647+1;/发生上溢发生上溢 而当变量的值太小以至于无法存储时,则会发生下而当变量的值太小以至于无法存储时,则会发生下溢溢( (underfiow) )。例如:。例如: int value = -2147483648-1 1;/发生下溢发生下溢 由于由于Java不会报告数据溢出的错误警告,所以当使用不会报告数据溢出的错误警告,所以当使用接近给定类型最大或最小值时要

38、小心!接近给定类型最大或最小值时要小心!272.8.12.8.1 算术运算符算术运算符 数值类型的运算符包括标准的算术运算符数值类型的运算符包括标准的算术运算符: + +(加号)、(加号)、- -(减号)、(减号)、* *(乘号)、(乘号)、/ /(除号)、(除号)、%(求余号(求余号)表表2-3 JAVA算术运算符算术运算符 当除法的两个操作数都是整数时,除法的结果就是整数,小数当除法的两个操作数都是整数时,除法的结果就是整数,小数部分被舍去。例如,部分被舍去。例如,5/25/2的结果是的结果是2 2而不是而不是2.52.5。 所以,要实现通常意义的算术除法,其中一个操作数就必须是所以,要实

39、现通常意义的算术除法,其中一个操作数就必须是浮点数。例如,浮点数。例如,5.0/25.0/2的结果是的结果是2.52.5。28 运算符运算符%用于求得除法的余数。其左边是被除数,右边是除数。用于求得除法的余数。其左边是被除数,右边是除数。因此,因此,7%3的结果是的结果是1 1,12%4的结果是的结果是0,26%8是是2,20%13是是7。 在程序设计中,求余数是非常有用的。在程序设计中,求余数是非常有用的。 例如,偶数例如,偶数 %2的结果总是的结果总是0 0,而奇数,而奇数 %2的结果总是的结果总是1 1。所以,可以利用这一特性来判定一个整数是奇数还是偶数。所以,可以利用这一特性来判定一个

40、整数是奇数还是偶数。 如果今天是星期六,如果今天是星期六,7 7天之后就又会是星期六。天之后就又会是星期六。1010天之后呢?天之后呢? 使用下面的表达式你就能知道那天是星期几了:使用下面的表达式你就能知道那天是星期几了:(6+10)%7的结果是的结果是2 /是星期二(假设是星期二(假设 0 0 为星期天)为星期天) 下面的程序清单下面的程序清单2-52-5给出了给出了“计算一个以秒为单位的时间量所计算一个以秒为单位的时间量所包含的分钟数和剩余秒数包含的分钟数和剩余秒数”的程序。例如,的程序。例如,500秒就是秒就是8分分20秒秒。29/源程序清单源程序清单2-5 DisplayTime.ja

41、vaimport java.util.Scanner; public class DisplayTime public static void main(String args)Scanner input = new Scanner (System.in);/提示用户输入数据提示用户输入数据System.out.println(请输入一个整数秒请输入一个整数秒:);int seconds = input.nextInt();/如何在如何在seconds中获取分钟数中获取分钟数?int minutes = seconds/ /60;/如何获取剩余秒数如何获取剩余秒数?int remainingS

42、econds = seconds%60; /显示结果显示结果System.out.println(seconds +秒是秒是: + minutes + 分分+ remainingSeconds + 秒秒); 30需要说明的是:需要说明的是: 运算符运算符 + + 和和 都都可以是一元的也可以是二元的。可以是一元的也可以是二元的。一元运算符仅有一个操作数。例如,一元运算符仅有一个操作数。例如,5 5。在这里,。在这里,作为作为“负号负号”。而二元运算符则有两个操作数。例如,而二元运算符则有两个操作数。例如,4 45 5。这里的。这里的为为“减号减号”。 同样,运算符同样,运算符 + + 可以用作

43、可以用作“正号正号”也可以作为也可以作为“加号加号”。另外,值得你注意的是:另外,值得你注意的是: 在任何程序设计语言中,浮点数的计算结果都是近似的在任何程序设计语言中,浮点数的计算结果都是近似的。因为,这些数都没有以准确的精度来存储!例如,因为,这些数都没有以准确的精度来存储!例如,System.out.println(1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1);显示的是显示的是0.50000000000000001,而不是,而不是0.5。而。而System.out.println(1.0 - 0.9);显示的是显示的是0.09999999999999998,而不是

44、,而不是0.1。 不过,整数及其计算结果是精确的。不过,整数及其计算结果是精确的。312.8.22.8.2 数值直接量数值直接量 直接量直接量 是指在程序中直接出现的常量值。是指在程序中直接出现的常量值。 例如,下面语句中的例如,下面语句中的34和和0.305都是直接量都是直接量:int numberOfYear = 34;double weight = 0.305;1. 1. 整型直接量(也叫做整型直接量(也叫做“整型字面量整型字面量”、“整型常量整型常量”) 整型直接量整型直接量 被默认为被默认为int类型,即其值的范围是:类型,即其值的范围是:-231(-2147483648) 231-

45、1(2147483647) 为了表示一个为了表示一个long类型的直接量,需要在其后追加字母类型的直接量,需要在其后追加字母L或或l(推荐使用(推荐使用L)。)。 例如,例如,2147483648L、-2147483649L(因为这两个数都已超过了(因为这两个数都已超过了int的范围)。的范围)。注意注意 在默认情况下,整型直接量都被当做十进制整数。若要表示在默认情况下,整型直接量都被当做十进制整数。若要表示一个八进制整数,就需要用一个八进制整数,就需要用0 0开头;而十六进制整数则需要用开头;而十六进制整数则需要用0 x开开头。例如,下面的代码将八进制整数头。例如,下面的代码将八进制整数17

46、7777、十六进制整数、十六进制整数FFFF显示为十进制整数显示为十进制整数65535:System.out.println( 0177777 + , + 0 xFFFF );提示提示 为提高程序的可读性,为提高程序的可读性,建议使用十进制的整型直接建议使用十进制的整型直接量。而八进制整数、十六进量。而八进制整数、十六进制整数通常仅用于位运算制整数通常仅用于位运算可以直观地了解其中每可以直观地了解其中每一位二进制位的情况。一位二进制位的情况。322. 浮点型直接量浮点型直接量 浮点型直接量浮点型直接量 被默认为被默认为double类型。类型。 例如,例如,0.5被认为是被认为是double型而

47、不是型而不是float型。型。 可以在数字后面追加可以在数字后面追加F或或f来表示来表示float类型的直接量。类型的直接量。 例如,例如,100.2f、100.2F则表示为则表示为float类型的直接量。类型的直接量。注意:注意: double 型值比型值比 float 型值更精确。例如型值更精确。例如:System.out.println( 1.0 / 3.0 = + 1.0 / 3.0 );显示结果为显示结果为:1.0 / 3.0 = 0.3333333333333333 (16位位)System.out.println( 1.0f / / 3.0f = + 1.0f / / 3.0f

48、);显示结果为显示结果为:1.0f / 3.0f = 0.33333334 (8位位)333. 科学记数法科学记数法 浮点型直接量也可以用浮点型直接量也可以用 科学记数法科学记数法 表示。表示。 例如,例如,123.456也可以写成也可以写成 1.23456e+2 或或 1.23456e2,相当于相当于 1.23456102 = 123.456;而而 1.23456e-2 等于等于 1.2345610-2 = 0.0123456。E或或e表示指数表示指数。注意:注意: float型和型和double型都是用来表示带小数的数。为什么把它们型都是用来表示带小数的数。为什么把它们称为称为“浮点数浮点

49、数”呢?因为这些数都是以规范的浮点数的形式存储呢?因为这些数都是以规范的浮点数的形式存储的。的。 342.8.32.8.3 计算计算Java表达式表达式 用用Java编写数值表达式,就是使用编写数值表达式,就是使用Java运算符对算术表达式进运算符对算术表达式进行直接翻译。行直接翻译。 例如,算术表达式例如,算术表达式 可以翻译成如下所示的可以翻译成如下所示的Java表达式:表达式: (3 + 4 * * x)/ /5 - 10 * * (y - 5) * * (a + b + c)/ /x + 9 (4/ /x + 9 + x)/ /y) Java表达式的计算结果和它对应的算术表达式的结果是

50、一样的。表达式的计算结果和它对应的算术表达式的结果是一样的。 因此,可以将算术表达式的运算规则应用在计算因此,可以将算术表达式的运算规则应用在计算Java表达式上:表达式上: 首先执行括号中的运算;括号可以嵌套,先执行内层括号;然后首先执行括号中的运算;括号可以嵌套,先执行内层括号;然后执行乘、除、求余;最后是加、减运算。优先级相同时,按照从左执行乘、除、求余;最后是加、减运算。优先级相同时,按照从左到右顺序执行。到右顺序执行。)94(9)(5(105x43yxxxcbay35程序清单程序清单2-62-6是利用下面公式将华氏温度转换为摄氏温度的程序是利用下面公式将华氏温度转换为摄氏温度的程序:

51、/程序清单程序清单2-6 FahrenheitToCelsius.javaimport java.util.Scanner; public class FahrenheitToCelsius public static void main(String args)Scanner input = new Scanner (System.in);System.out.println(请输入一个华氏温度请输入一个华氏温度:);double fahrenheit = input.nextDouble();/将华氏温度转换为摄氏温度将华氏温度转换为摄氏温度double celsius = ( 5.0/

52、/9 ) * * ( fahrenheit - 32 );/显示转换结果显示转换结果System.out.println(华氏华氏 + fahrenheit + 度等于摄氏度等于摄氏 + celsius+度度);)32)(95(fahrenheitcelsius注意注意 两个整数相除商为整两个整数相除商为整数!所以,应该将第数!所以,应该将第8 8行行的的(5/9)(5/9)写为写为(5.0/9)(5.0/9)或或(5/9.0)(5/9.0)。因为。因为(5/9)(5/9)的的结果是结果是0 0。36概念回顾概念回顾如何声明一个整型变量如何声明一个整型变量tax?一个实型变量一个实型变量cel

53、sius?计算公式计算公式 的的java表达式如何写?表达式如何写?如何将上面这个表达式的值保存到变量如何将上面这个表达式的值保存到变量celsius中?中?如何声明一个有名常量如何声明一个有名常量PI并使其值为并使其值为3.1415926?想要保存一个大于想要保存一个大于2147483647(232-1)的整数,需要声明何的整数,需要声明何 种类型的变量?种类型的变量?表达式表达式 10/ /3 和和 7.0/ /2 的值分别是什么?的值分别是什么?若有变量声明若有变量声明 int n;则表达式;则表达式 n%2 的可能值有几个?它们的可能值有几个?它们 分别意味着什么?分别意味着什么? 直

54、接量直接量 248、0.36 在在 java中将被作为何种类型?中将被作为何种类型?)32)(95(fahrenheit371.23456e-2 表示什么表示什么?若有变量声明若有变量声明 int n;则如何求得其个位数、十位数、百位数?则如何求得其个位数、十位数、百位数?若有变量声明若有变量声明 int m , r;如何使得表达式如何使得表达式 m * * r * * r 的值为的值为 double类型?类型?若有若有 int i; double d; 则执行则执行 i = d; 会有问题吗?如何解决?会有问题吗?如何解决?若有变量声明若有变量声明 double val;如何使其值只保留小数

55、点后两位?如何使其值只保留小数点后两位? 如何使其小数点后第三位四舍五入?如何使其小数点后第三位四舍五入?如何能得到如何能得到28的值?的值?382.92.9 问题:显示当前时间问题:显示当前时间 本节的问题是开发一个显示当前本节的问题是开发一个显示当前GMT(格林威治时间)的程序。(格林威治时间)的程序。 格林威治时间的格式为格林威治时间的格式为 小时小时:分钟分钟:秒。例如,秒。例如,15:19:00System类中的方法类中的方法currentTimeMillis返回从返回从GMT 1970年年1 1月月1 1日日00:00:00开始到当前时刻的毫秒数。开始到当前时刻的毫秒数。(因为(因

56、为1970年是年是UNIX操作系统正式发布的时间,所以这一时间也操作系统正式发布的时间,所以这一时间也被称为被称为UNIX时间戳,时间戳,UNIX epoch)。)。程序清单程序清单2-7-v1显示这个时间显示这个时间。39/程序清单程序清单2-7-v1 ShowCurrentTime1.javapublic class ShowCurrentTime1 public static void main(String args)/获取从获取从 1970.1.1-00:00:00 开始到当前时刻的毫秒数开始到当前时刻的毫秒数long totalMilliseconds = System.curre

57、ntTimeMillis();/显示这个时间显示这个时间System.out.println( 当前时间的毫秒数是当前时间的毫秒数是: + totalMilliseconds );40 在获取了这个当前时间的总秒毫数在获取了这个当前时间的总秒毫数totalMilliseconds后,接下后,接下来我们可以按照下面的步骤计算出当前来我们可以按照下面的步骤计算出当前GMT是几点、几分、几秒:是几点、几分、几秒:1 1)将总秒毫数)将总秒毫数totalMilliseconds除以除以1000得到总秒数得到总秒数 totalSeconds;2 2)将)将totalSeconds%60得到当前的秒数;得

58、到当前的秒数;3 3)将)将totalSeconds除以除以60得到总的分钟数得到总的分钟数totalMinutes;4 4)将)将totalMinutes%60得到当前分钟数;得到当前分钟数;5 5)将)将totalMinutes除以除以60得到总的小时数得到总的小时数totalHours;6 6)将)将totalHours%24得到当前小时数。得到当前小时数。41下面是算法二:下面是算法二:1 1)将总秒毫数)将总秒毫数totalMilliseconds除以除以10001000得到总秒数得到总秒数remainingSeconds;2 2)将)将remainingSeconds除以除以360

59、03600得到总的小时数得到总的小时数totalHours;3 3)将)将remainingSeconds%3600得到剩余的秒数得到剩余的秒数remainingSeconds;4 4)将)将remainingSeconds除以除以6060得到总的分钟数得到总的分钟数totalMinutes;5 5)将)将remainingSeconds%60得到剩余的秒数得到剩余的秒数totalSeconds;6 6)显示结果。)显示结果。(完整的程序请各位自行完成)(完整的程序请各位自行完成)结论:结论: 一个问题的求解算法可能有多个。一个问题的求解算法可能有多个。42程序清单程序清单2-7-v2 将将显

60、示当前显示当前GMT的的 小时:分钟:秒。小时:分钟:秒。/程序清单程序清单2-7-v2 ShowCurrentTime2.javapublic class ShowCurrentTime2 public static void main(String args)/获取从获取从 1970.1.1-00:00:00 开始到当前时刻的毫秒数开始到当前时刻的毫秒数long totalMilliseconds = System.currentTimeMillis(); /获取总秒数获取总秒数long totalSeconds = totalMilliseconds / 1000 ;/计算当前秒数计算当

温馨提示

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

最新文档

评论

0/150

提交评论