这个式子的y舱什么意思思?y = 3E+09...

c语言 x=2 y=3 z=4 !(x=y)丨丨x+z-y-!z这个式子什么意思_百度知道
c语言 x=2 y=3 z=4 !(x=y)丨丨x+z-y-!z这个式子什么意思
!&非&的意思(x = y) ---& x = 3;!(x = y) 值为0中间 || 符号为&或&x + z-y -!z= 3 + 4 -3 -!4 = 3 + 4 -3 -0 = 4取或,也就是为真相当于 bool类型里的 true。
其他类似问题
按默认排序
其他2条回答
应该表示逻辑 1。相当于True。
。。。。。。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁∫∫(1-x-y)dxdy 其中积分区域D由直线x+y=1及两坐标轴围成,这个式子的几何意义是什么?_百度知道
∫∫(1-x-y)dxdy 其中积分区域D由直线x+y=1及两坐标轴围成,这个式子的几何意义是什么?
∫∫(1-x-y)dxdy 其中积分区域D由直线x+y=1及两坐标轴围成,这个式子的几何意义是什么?求详细解答,谢谢!
我有更好的答案
按默认排序
就是针对直线:x+y=1与坐标轴所形成的域内,在x和y两个方向上对其积分。就是那块面积 dxdy就是平面的微小面积元,二重积分就是把这些微小面积元全累加,是一个分的越来越细,加的越来越准的极限过程,本质上讲就是对面积元求和
其他类似问题
坐标轴的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Java实训3——基本程序设计(维信科技)
Java实训3——基本程序设计(维信科技)3.1变量与数据类型变量是利用声明的方式,将内存中的某个块保留下来以供程序使用。可以声明为块记载的数据类型为整型、字符型、浮点型或是其他数据类型,作为变量的保存之用。本章将就变量及各种数据类型做一个基础性地介绍。数据类型在程序语言的构成要素里,占有相当重要的地位。Java的数据类型可分为原始数据类型与引用数据类型。原始数据类型也称为基本数据类型,它们包括了最基本的boolean、byte、char、short、int、long、float与double等类型。另一种数据类型为引用数据类型,它是以一种特殊的方式指向变量的实体,这种机制类似于C/C++的指针。这类的变量在声明时是不会分配内存的,必须另外进行开辟内存空间的操作,如字符串与数组均属于这种数据类型。3.1.1变量与常量(维信科技,山西最专业的IT实训)下面先来看一个简单的实例,好让读者了解Java里变量与常量之间的关系,下面的程序里声明了两种Java经常使用到的变量,分别为整型变量num与字符变量ch。为它们赋值后,再把它们的值分别显示在显示器上:范例:TestJava3_1.java01//下面的程序声明了两个变量,一个是整型,一个是字符型02publicclassTestJava3_103{04publicstaticvoidmain(Stringargs[])05{06intnum=3;//声明一整型变量num,赋值为307charch='z';//声明一字符变量ch,赋值为z08System.out.println(num+"是整数!");//输出num的值09System.out.println(ch+"是字符!");//输出ch的值10}11}输出结果:3是整数!z是字符!在TestJava3_1中,声明了两种不同类型的变量num与ch,并分别将常量3与字符“z”赋值给这两个变量,(维信科技,山西最专业的IT实训)最后再将它们显示在显示器上。声明一个变量时,编译程序会在内存里开辟一块足以容纳此变量的内存空间给它。不管变量的值如何改变,都永远使用相同的内存空间。因此,善用变量将会是一种节省内存的方式。常量是不同于变量的一种类型,它的值是固定的,例如整数常量、字符串常量。通常给变量赋值时,会将常量赋值给它,在程序TestJava3_1中,第6行num是整型变量,而3则是常量。此行的作用是声明num为整型变量,并把常量3这个值赋给它。相同的,第7行声明了一个字符变量ch,并将字符常量'z'赋给它。当然,在程序进行的过程中,可以为变量重新赋值,也可以使用已经声明过的变量。3.1.2Java的变量类型在Java中规定了八种基本数据类型变量来存储整数、浮点数、字符和布尔值。如图3-1所示:图3-1Java的变量类型在这里只是先介绍基本数据类型,引用数据类型会在以后的章节中介绍。3.1.3基本数据类型到目前为止,相信读者已经对Java有了一些初步的认识,如果想在程序中使用一个变量,就必须先声明,(维信科技,山西最专业的IT实训)此时编译程序会在未使用的内存空间中寻找一块足够能保存这个变量的空间以供这个变量使用。Java的基本数据类型如表3-1所示。表3-1Java的基本数据类型数据类型字节表示范围long(长整数)8-9223372036854775808~9223372036854775807int(整数)4-2147483648~2147483647short(短整数)2-32768~32767byte(位)1-128~127char()10~255boolean()1布尔值只能使用true或falsefloat()4-3.4E38(-3.4×1038)~3.4E38(3.4×1038)double()8-1.7E308(-1.7×10308)~1.7E308(1.7×10308)3.1.3.1整数类型当数据不带有小数或分数时,即可以声明为整数变量,如3,-147等即为整数。Java中,整数数据类型可以分为long、int、short及byte四种:long为64位,也就是8个字节(bytes),可表示范围为-4775808到4775807;int为32位,(维信科技,山西最专业的IT实训)也就是4个字节,表示范围为-到;若是数据值的范围在-32768到32767之间时,可以声明为short(短整数)类型;若是数据值更小,在-128到127之间时,可以声明为byte类型以节省内存空间。举例来说,想声明一个短整型变量sum时,可以在程序中做出如下的声明://声明snum为短整型经过声明之后,Java即会在可使用的内存空间中,寻找一个占有2个字节的块供sum变量使用,同时这个变量的范围只能在-32768到32767之间。3.1.3.1.1常量的数据类型有趣的是,Java把整数常量的数据类型均视为int型,因此,如果在程序中使用了超过这个大小的常量,编译时将发生错误,如下面的范例:范例:TestJava3_2.java01//下面这段程序说明了值的可取范围的问题02publicclassTestJava3_203{04publicstaticvoidmain(Stringargs[])05{06longnum=329852547553;//声明一长整型变量07System.out.println(“num=“+num);08}09}如果编译上面的程序代码,将会得到下列的错误信息:TestJava3_2.java:5:integernumbertoolarge:329852547553longnum=329852547553;这是因为把整数常量看成是int类型,但这个整数已超出了int类型所能表示的范围,因此虽然把num的类型设为long(维信科技,山西最专业的IT实训),但编译时仍然会发生错误。要解决这个问题,只要在整数常量后面加上一个大写的“L”即可,此举代表该常量是long类型的整数常量。所以只要把第6行的语句改成:06longnum=329852547553L;即可成功地编译运行。3.1.3.1.2数据类型的最大值与最小值Java提供了long、int、short及byte四种整数类型的最大值、最小值的代码,以方便设计者使用。最大值的代码是MAX_VALUE,最小值是MIN_VALUE。如果要取用某个类型的最大值或最小值,只要在这些代码之前,加上它们所属的类的全名即可。举例来说,如果程序代码里需要用到长整数的最大值,如图3-2所示的语法表示。图3-2代码的表示法由上面的语法可知,如果要使用某个类型的代码,则必须先指定该类型所在的类库以及该类型所属的类,但因java.lang这个类库属于常用类库,(维信科技,山西最专业的IT实训)所以默认的Java程序会将它加载,因此在实际的应用上设计者可以将它省略。Java所提供的整数的最大值与最小值的标识符及常量值,可在表3-2中查阅。若是读者现在不懂什么叫类库也没有关系,现在只要会使用它就行了。表3-2整数常量的特殊值代码Longint使用类全名java.lang.Longjava.lang.Integer最大值代码MAX_VALUEMAX_VALUE最大值常量92233720368547758072147483647最小值代码MIN_VALUEMIN_VALUE最小值常量-9223372036854775808-2147483648shortbyte使用类全名java.lang.Shortjava.lang.Byte最大值代码MAX_VALUEMAX_VALUE最大值常量32767127最小值代码MIN_VALUEMIN_VALUE最小值常量-32768-128下面程序是输出Java定义的四种整数类型的常量的最大和最小值,可以将程序与上表做对照、比较。范例:TestJava3_3.java01//下面这段程序调用了表3-2中的方法,可以得到数据类型的最大值和最小值02publicclassTestJava3_303{04publicstaticvoidmain(Stringargs[])05{06longlong_max=java.lang.Long.MAX_VALUE;//得到长整型的最大值07intint_max=java.lang.Integer.MAX_VALUE;//得到整型的最大值08shortshort_max=Short.MAX_VALUE;//得到短整型的最大值09bytebyte_max=Byte.MAX_VALUE;//得到Byte型的最大值1011System.out.println("LONG的最大值:"+long_max);12System.out.println("INT的最大值:"+int_max);13System.out.println("SHORT的最大值:"+short_max);14System.out.println("BYTE的最大值:"+byte_max);15}16}输出结果:LONG的最大值:4775807INT的最大值:SHORT的最大值:32767BYTE的最大值:127程序TestJava3_3列出了各种整数类型的最大值,通过它的运行,读者可以了解到Java对于整数的最大值、最小值的规定。(维信科技,山西最专业的IT实训)读者可以自己改写程序,输出一下最小值。3.1.3.1.3溢出的发生当整数的数据大小超出了可以表示的范围,而程序中又没有做数值范围的检查时,这个整型变量所输出的值将发生紊乱,且不是预期的运行结果。在下面的程序范例中,声明了一个整型的数,并把它赋值为整型所可以表示范围的最大值,然后将它分别加1及加2。范例:TestJava3_4.java01//整数值如果超出了自己所可以表示范围的最大值,会出现溢出02publicclassTestJava3_403{04publicstaticvoidmain(Stringargs[])05{06intx=java.lang.Integer.MAX_VALUE;//得到整型的最大值0708System.out.println("x="+x);09System.out.println("x+1="+(x+1));10System.out.println("x+2="+(x+2));11}12}输出结果:x=;x+1=-;x+2=-当最大值加上1时,结果反而变成表示范围中最小的值;当最大值加上2时,结果变成表示范围中次小的值,这就是数据类型的溢出。读者可以发现,这个情形会出现一个循环,若是想避免这种情况的发生(维信科技,山西最专业的IT实训),在程序中就必须加上数值范围的检查功能,或者使用较大的表示范围的数据类型,如长整型。当声明了一整数i,其表示的范围为-~之间,当i的值设为最大值,仍在整数的范围内,但是当x加1或加2时,整数x的值反而变成-和-,成为可表示范围的最小及次小值。上述的情形就像计数器的内容到最大值时会自动归零一样。而在整数中最小值为-,所以当整数x的值最大时,加上1就会变成最小值-,也就是产生了溢出。可以参考图3-3来了解数据类型的溢出问题。图3-3数据类型的溢出为了避免int类型的溢出,可以在该表达式中的任一常量后加上大写的“L”,或是在变量前面加上long,作为强制类型的转换。以TestJava3_5为例,在下面的程序中加上防止溢出的处理,为了让读者方便比较,特地保留一个整数的溢出语句。范例:TestJava3_5.java01//下面的这段程序当整型发生溢出之后,用强制类型进行转换02publicclassTestJava3_503{04publicstaticvoidmain(Stringargs[])05{06intx=java.lang.Integer.MAX_VALUE;0608System.out.println("x="+x);09System.out.println("x+1="+(x+1));10System.out.println("x+2="+(x+2L));11System.out.println("x+3="+((long)x+3));12}13}输出结果:x=x+1=-x+2=x+3=程序说明:1、第6行声明int类型的整数变量x,并赋值为整数最大值,即。2、第8行输出x的值,即:。3、第9行输出x+1的值,此时溢出发生,运行结果变成-。4、第10行输出x+2的值,为了避免溢出发生,在表达式的常量部分2后加上L,执行结果变成。5、第11行输出x+3的值,为了避免溢出发生,在表达式的整数部分x之前加上long,执行结果变成。由上面的程序可知,处理int类型的溢出,可以利用强制类型转换方式。但是对于long类型的溢出,就没有处理办法了,此时就需要在程序中加上变量值的界限检查,在运行时才不会发生错误。3.1.3.2字符类型字符类型在内存中占有2个字节,可以用来保存英文字母等字符。计算机处理字符类型时,是把这些字符当成不同的整数来看待(维信科技,山西最专业的IT实训),因此,严格说来,字符类型也算是整数类型的一种。在计算机的世界里,所有的文字、数值都只是一连串的0与1。这些0与1对于设计者来说实在是难以理解,于是就产生了各种方式的编码。它们指定一个数值来代表某个字符,如常用的字符码系统ASCII。虽然各类的编码系统合起来有数百种之多,却没有一种是包含足够的字符、标点符号及常用的专业技术符号。这些编码系统之间可能还会有相互冲突的情形发生,也就是说,不同的编码系统可能会使用相同的数值来表示不同的字符,在数据跨平台的时候就会发生错误。Unicode就是为了避免上述情况的发生而产生的,它为每个字符制订了一个唯一的数值,因此在任何的语言、平台、程序中都可以安心地使用。Java所使用的就是Unicode字符码系统(维信科技,山西最专业的IT实训)。举例来说,Unicode中的小写a是以97来表示,在下面的程序中可以看到,声明字符类型的变量ch1、ch2,分别将变量ch1的值设为97,ch2的值设为字符a,再输出字符变量ch1及ch2的内容。范例:TestJava3_6.java01//字符类型也可以直接赋给数值,下面的这段程序就是采用这种赋值方式02publicclassTestJava3_603{04publicstaticvoidmain(Stringargs[])05{06charch1=97;07charch2='a';0809System.out.println("ch1="+ch1);10System.out.println("ch2="+ch2);11}12}输出结果:ch1=ach2=a给字符变量在赋值可以使用数值和字符,它们都可以使程序正确地运行。要注意的是,字符要用一对单引号('')括起。举例来说,想在程序中输出一个包括双引号的字符串时(维信科技,山西最专业的IT实训),可把字符变量赋值为转义字符,再将它输出来,也就是说,在程序中声明一个字符类型变量ch,然后把ch设置为\",再进行输出的操作。或者,也可以直接在要输出的字符串中加入特殊的转义字符。表3-3为常用的转义字符:表3-3常用的转义字符转义字符所代表的意义转义字符所代表的意义\f换页\\反斜线\b倒退一格\'单引号\r归位\"双引号\t跳格\n换行以下面的程序为例,将ch赋值为“\"”(要以单引号(')包围),并将字符变量ch输出在显示器上,同时在打印的字符串里直接加入转义字符,读者可自行比较一下两种方式的差异。范例:TestJava3_7.java01//下面这道程序表明了转义字符的使用方法02publicclassTestJava3_703{04publicstaticvoidmain(Stringargs[])05{06charch='\"';0708System.out.println(ch+"测试转义字符!"+ch);09System.out.println("\"helloworld!\"");10}11}输出结果:"测试转义字符!""helloworld!"不管是用变量存放转义字符,或是直接使用转义字符的方式来输出字符串,程序都可以顺利运行。由于使用变量会占用内存资源(维信科技,山西最专业的IT实训),似乎显得有些不妥;当然也可以不必声明字符变量就可以输出转义字符,但如果在程序中加上太多的转移字符,以至于造成混淆而不易阅读时,利用声明字符变量的方式就是一个很好的选择。3.1.3.3浮点数类型与双精度浮点数类型在日常生活中经常会使用到小数类型的数值,如身高、体重等需要精确的数值时,整数就不能满足程序设计者的要求了。在数学中,这些带有小数点的数值称为实数,在Java里,这种数据类型称为浮点数类型(float),其长度为4个字节,有效范围为-3.4×1038到3.4×1038。当浮点数的表示范围不够大的时候,还有一种双精度(double)浮点数可供使用。双精度浮点数类型的长度为8个字节,有效范围为-1.7×10308到1.7×10308。浮点数的表示方式,除了指数的形式外,还可用带有小数点的一般形式来表示。举例来说,想声明一个double类型的变量num与一个float类型的变量sum,并同时给sum赋初值3.0,可以在程序中做出如下的声明及设置://声明sum为双精度浮点型变量floatsum=3.0f;//声明sum为浮点型变量,其初值为3.0声明之后,Java即会在可使用的内存空间中,寻找一个占有8个字节的块供num变量使用,其范围在-1.7×10308到1.7×10308之间,寻找另一个占有4个字节的块供sum变量使用,而这个变量的范围只能在-3.4×1038到3.4×1038之间。在此例中,sum的初值为3.0。下列为声明与设置float与double类型的变量时应注意的事项:doublenum1=-6.3e64;//声明num1为double,其值为-6.3×1064doublenum2=-5.34E16;//e也可以用大写的E来取代floatnum3=7.32f;//声明num3为float,并设初值为7.32ffloatnum4=2.456E67;//错误,因为2.456×1067已超过float可表示的范围值得一提的是,使用浮点型数值时,默认的类型是double,在数值后面可加上D或是d,作为double类型的标识(维信科技,山西最专业的IT实训)。在Java中,D或d是可有可无的。在数据后面加上F或是f,则作为float类型的识别。若是没有加上,Java就会将该数据视为double类型,而在编译时就会发生错误,错误提示会告诉设计者可能会失去精确度。下面举一个简单的例子,在下面的程序里,声明一个float类型的变量num,并赋值为3.0,将num*num的运算结构输出到显示器上。范例:TestJava3_8.java01//下面这道程序说明了浮点数类型的使用方法02publicclassTestJava3_803{04publicstaticvoidmain(Stringargs[])05{06floatnum=3.0f;07System.out.println(num+"*"+num+"="+(num*num));08}09}输出结果:3.0*3.0=9.0Java也提供了浮点数类型的最大值与最小值的代码,其所使用的类全名与所代表的值的范围,可以在表3-4中查阅:表3-4浮点数常量的特殊值floatdouble使用类全名java.lang.Floatjava.lang.Double最大值MAX_VALUEMAX_VALUE最大值常量3.4028235E38107976931348623157E308最小值MIN_VALUEMIN_VALUE最小值常量1.4E-454.9E-324相同的,在类全名中,可以省去类库java.lang,直接取用类名称即可。下面的程序是输出float与double两种浮点数类型的最大与最小值(维信科技,山西最专业的IT实训),读者可以将下面程序的输出结果与上表一一进行比较。范例:TestJava3_9.java01//下面这道程序用于取得单精度和双精度浮点数类型的最大、最小值02publicclassTestJava3_903{04publicstaticvoidmain(Stringargs[])05{06System.out.println("float_max="+java.lang.Float.MAX_VALUE);07System.out.println("float_min="+java.lang.Float.MIN_VALUE);08System.out.println("double_max="+java.lang.Double.MAX_VALUE);09System.out.println("double_min="+java.lang.Double.MIN_VALUE);10}11}输出结果:float_max=3.float_min=1.4E-45double_max=1.double_min=4.9E-3243.1.3.4布尔类型布尔(boolean)类型的变量,只有true(真)和false(假)两种。也就是说,当将一个变量定义成布尔类型时,它的值只能是true或false,除此之外,没有其他的值可以赋值给这个变量。(维信科技,山西最专业的IT实训)举例来说,想声明名称为status变量为的布尔类型,并设置为true值,可以使用下面的语句:booleanstatus=//声明布尔变量status,并赋值为true经过声明之后,布尔变量的初值即为true,当然如果在程序中需要更改status的值时,即可以随时更改。将上述的内容写成了程序TestJava3_10,读者可以先熟悉一下布尔变量的使用:范例:TestJava3_10.java01//下面的程序声明了一个布尔值类型的变量02publicclassTestJava3_1003{04publicstaticvoidmain(Stringargs[])05{06//声明一布尔型的变量status,布尔型只有两个值一个是true一个是false08booleanstatus=true;09System.out.println("status="+status);10}11}输出结果:status=true布尔值通常用来控制程序的流程,读者可能会觉得有些抽象,本书会陆续在后面的章节中介绍布尔值在程序流程中所起的作用。3.1.3.5基本数据类型的默认值在Java中,若在变量的声明时没有给变量赋初值,则会给该变量赋默认值,表3-5列出了各种类型的默认值。表3-5基本数据类型的默认值数据类型默认值byte(byte)0short(short)0int0long0Lfloat0.0fdouble0.0dchar\u0000(空)booleanfalse在某些情形下,Java会给予这些没有赋初始值的变量一个确切的默认值,但这没有任何意义,是没有必要的,但应该保证程序执行时,不会有这种未定义值的变量存在。虽然这种方式给程序编写者带来了很多便利,但是过于依赖系统给变量赋初值,(维信科技,山西最专业的IT实训)就不容易检测到是否已经给予变量应有的值了,这是个需要注意的问题。3.1.4数据类型的转换Java的数据类型在定义时就已经确定了,因此不能随意转换成其它的数据类型,但Java容许用户有限度地做类型转换处理。数据类型的转换方式可分为“自动类型转换”及“强制类型转换”两种。3.1.4.1自动类型转换在程序中已经定义好了数据类型的变量,若是想用另一种数据类型表示时,Java会在下列的条件皆成立时,自动做数据类型的转换:1、转换前的数据类型与转换后的类型兼容。2、转换后的数据类型的表示范围比转换前的类型大。举例来说,若是想将short类型的变量a转换为int类型,由于short与int皆为整数类型,符合上述条件1;而int的表示范围比short大,亦符合条件2。因此Java会自动将原为short类型的变量a转换为int类型。值得注意的是,类型的转换只限该行语句,并不会影响原先所定义的变量的类型,而且通过自动类型的转换,可以保证数据的精确度,它不会因为转换而损失数据内容。这种类型的转换方式也称为扩大转换。前面曾经提到过,若是整数的类型为short或byte,为了避免溢出,Java会将表达式中的short和byte类型自动转换成int类型,即可保证其运算结果的正确性,这也是Java所提供的“扩大转换”功能。以“扩大转换”来看可能比较容易理解——字符与整数是可使用自动类型转换的;整数与浮点数亦是兼容的;(维信科技,山西最专业的IT实训)但是由于boolean类型只能存放true或flase,与整数及字符是不兼容,因此是不可能做类型的转换。接下来看看当两个数中有一个为浮点数时,其运算的结果会有什么样的变化?范例:TestJava3_11.java01//下面这段程序声明了两个变量,一个是整型,一个是浮点型02publicclassTestJava3_1103{04publicstaticvoidmain(Stringargs[])05{06inta=156;07floatb=24.1f;//声明一浮点型变量f,并赋值0809System.out.println("a="+a+",b="+b);10System.out.println("a/b="+(a/b));//这里整型会自动转化为浮点型11}12}输出结果:a=156;b=24.0;a/b=6.5从运行的结果可以看出,当两个数中有一个为浮点数时,其运算的结果会直接转换为浮点数。当表达式中变量的类型不同时,Java会自动以较小的表示范围转换成较大的表示范围后,再作运算。也就是说,假设有一个整数和双精度浮点数作运算时,Java会把整数转换成双精度浮点数后再作运算,运算结果也会变成双精度浮点数(维信科技,山西最专业的IT实训)。关于表达式的数据类型转换,在后面的章节中会有更详细的介绍。3.1.4.2强制类型转换当两个整数进行运算时,其运算的结果也会是整数。举例来说,当做整数除法8/3的运算,其结果为整数2,并不是实际的2.6666…,因此在Java中若是想要得到计算的结果是浮点数时,就必须将数据类型做强制性的转换,转换的语法如下:【格式3-1数据类型的强制性转换语法】因为这种强制类型的转换是直接编写在程序代码中的,所以也称为显性转换。下面的程序说明了在Java里,整数与浮点数是如何转换的。范例:TestJava3_1201//下面范例中说明了自动转换和强制转换这两种转换的使用方法02publicclassTestJava3_1203{04publicstaticvoidmain(Stringargs[])05{06inta=55;07intb=9;08floatg,h;0910System.out.println("a="+a+",b="+b);11g=a/b;12System.out.println("a/b="+g+"\n");13System.out.println("a="+a+",b="+b);14h=(float)a/b;//在这里将数据类型进行强制类型转换15System.out.println("a/b="+h);16}17}输出结果:a=55;b=9;a/b=6.0;a=55;b=9;a/b=6.111111当两个整数相除时,小数点以后的数字会被截断,使得运算的结果保持为整数。但由于这并不是预期的计算结果,(维信科技,山西最专业的IT实训)而想要得到运算的结果为浮点数,就必须将两个整数中的其中一个(或是两个)强制转换类型为浮点数,下面的三种写法都正确:(1)(float)a/b//将整数a强制转换成浮点数,再与整数b相除(2)a/(float)b//将整数b强制转换成浮点数,再以整数a除之(3)(float)a/(/float)b//将整数a与b同时强制转换成浮点数,再相除只要在变量前面加上欲转换的数据类型,运行时就会自动将此行语句里的变量做类型转换的处理,但这并不影响原先所定义的数据类型。此外,若是将一个超出该变量可表示范围的值赋值给这个变量时,这种转换称为缩小转换由于在转换的过程中可能会丢失数据的精确度,Java并不会自动做这些类型的转换,此时就必须要做强制性的转换。3.2运算符、表达式与语句程序是由许多语句组成的,而语句的基本单位是表达式与运算符。本章将介绍Java运算符的用法、表达式与运算符之间的关系,以及表达式里各种变量的数据类型的转换等。学完本章(维信科技,山西最专业的IT实训),希望读者能对Java语句的运作过程有更深一层的认识。3.2.1表达式与运算符Java中的语句有很多种形式,表达式就是其中一种形式。表达式是由操作数与运算符所组成:操作数可以是常量、变量也可以是方法,而运算符就是数学中的运算符号,如“+”、“-”、“*”、“/”、“%”等。以下面的表达式(z+100)为例,“z”与“100”都是操作数,而“+”就是运算符。图3-4表达式是由操作数与运算符所组成Java提供了许多的运算符,这些运算符除了可以处理一般的数学运算外,还可以做逻辑运算、地址运算等。根据其所使用的类的不同,运算符可分为赋值运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、括号运算符等。3.2.1.1赋值运算符号想为各种不同数据类型的变量赋值时,就必须使用赋值运算符(=),表3-6中所列出的赋值运算符虽然只有一个,(维信科技,山西最专业的IT实训)但它却是Java语言中必不可缺的。表3-6赋值运算符赋值运算符号意义=赋值等号(=)在Java中并不是“等于”的意思,而是“赋值”的意思。还记得在前几章中,为变量赋值的语句吗?图3-5表达式的赋值范例上面的语句是将整数22赋值给num这个变量。再来看看下面这个语句。num=num–3//将num-3的值运算之后再赋值给变量num存放从未学习过C或C++的读者,可能会不习惯这种思考方式。若是把等号(=)当成“等于”,这种语句在数学上根本说不通,但是把它看成“赋值”时,这个语句就很容易理解了,把num-3的值运算之后再赋值给num存放,因为之前已经把num的值设为22,所以执行这个语句时,Java会先处理等号后面的部分num-3(值为19),再赋值给等号前面的变量num,执行后,(维信科技,山西最专业的IT实训)存放在变量num的值就变成了19了。将上面的语句编写成下面这个程序:范例:TestJava3_13.java01//在程序中赋值采用“=”02publicclassTestJava4_103{04publicstaticvoidmain(Stringargs[])05{06intnum=22;//声明整数变量num,并赋值为220708System.out.println("第一次赋值后,num="+num);//输出num的值0910num=num–3;//将变量num的值减三之后再赋给num变量11System.out.println("改变之后的值,num="+num);//输出计算后num的值12}13}输出结果:第一次赋值后,num=22改变之后的值,num=19当然,在程序中也可以将等号后面的值赋值给其他的变量,如:insum=num1+num2;//num1与num2相加之后的值再赋给变量sum存放num1与num2的值经过运算后仍然保持不变,sum会因为“赋值”的操作而更改内容。3.2.1.2一元运算符对于大部分的表达式而言,运算符的前后都会有操作数。但是有一种运算符较特别,它只需要一个操作数,(维信科技,山西最专业的IT实训)称为一元运算符。下面的语句就是由一元运算符与一个操作数所组成的。+3;//表示正3~a;//表示取a的补码b=-a;//表示负a的值赋值给变量b存放!a;//a的NOT运算,若a为零,则!a为1,若a不为零,则!a为零表3-7列出了一元运算符的成员:表3-7一元运算符一元运算符意义+正号–负号!NOT,否~取补码下面的程序声明了byte类型的变量a及boolean类型的变量b,可以看到两个变量分别进行了“~”与“!”运算之后的结果。范例:TestJava3_14.java01//下面这段程序说明了一元运算符的使用02publicclassTestJava3_1403{04publicstaticvoidmain(Stringargs[])05{06bytea=java.lang.Byte.MAX_VALUE;//声明并将其类型最大值赋给a07booleanb=fa0809System.out.println("a="+a+",~a="+(~a));10System.out.println("b="+b+",!b="+(!b));11}12}输出结果:a=127,~;a=–128;b=false;!b=true程序说明:1、第6行声明了byte变量a,并赋值为该类型的最大值,即a的值为127。程序第7行,声明boolean变量b,赋值为false。2、第9行输出a与~a的运算结果。3、第10行输出b与!b的运算结果(维信科技,山西最专业的IT实训)。b的值为flase,因此进行“!”运算后,b的值就变成了true。3.2.1.3算术运算符算术运算符在数学上面经常会使用到,表3-8列出了它的成员:表3-8算术运算符算术运算符意义+加法–减法*乘法/除法%余数3.2.1.3.1加法运算符“+”将加法运算符“+”的前后两个操作数相加。如下面的语句:System.out.println("3+8="+(3+8));//直接输出表达式的值3.2.1.3.2减法运算符“-”将减法运算符“–”前面的操作数减去后面的操作数,如下面的语句:num=num–3;//将num-3运算之后赋值给num存放a=b–c;//将b–c运算之后赋值给a存放120-10;//运算120–10的值3.2.1.3.3乘法运算符“*”将乘法运算符“*”的前后两个操作数相乘,如下面的语句:b=b*5;//将b*5运算之后赋值给b存放a=a*a;//将a*a运算之后赋值给a存放19*2;//运算19*2的值3.2.1.3.4除法运算符“/”将除法运算符“/”前面的操作数除以后面的操作数,如下面的语句:a=b/5;//将b/5运算之后的值赋给a存放c=c/d;//将c/d运算之后的值赋给c存放15/5;//运算14/7的值使用除法运算符时要特别注意一点,就是数据类型的问题。以上面的例子来说当a、b、c、d的类型皆为整数(维信科技,山西最专业的IT实训),若是运算的结果不能整除时,输出的结果与实际的值会有差异,这是因为整数类型的变量无法保存小数点后面的数据,因此在声明数据类型及输出时要特别小心。以下面的程序为例,在程序里给两个整型变量a、b赋值,并将a/b的运算结果输出:范例:TestJava3_15.java01//下面这段程序说明了除法运算符的使用方法02publicclassTestJava3_1503{04publicstaticvoidmain(String[]args)05{06inta=13;07intb=4;0809System.out.println("a="+a+",b="+b);10System.out.println("a/b="+(a/b));11System.out.println("a/b="+((float)a/b));//进行强制类型转换12}13}输出结果:a=13;b=4a/b=3;a/b=3.25程序说明:1、第10行与11行,程序分别做出不同的输出:第10行中,因为a,b皆为整数类型,输出结果也会是整数类型,程序运行结果与实际的值不同。2、第11行中,为了保证程序运行结果与实际的值相同,所以使用了强制性的类型转换(维信科技,山西最专业的IT实训),即将整数类型(int)转换成浮点数类型(float),程序运行的结果才不会有问题。3.2.1.3.5余数运算符“%”将余数运算符“%”前面的操作数除以后面的操作数,取其所得到的余数。下面的语句是余数运算符的使用范例:num=num%3;//将num%3运算之后赋值给num存放a=b%c;//将b%c运算之后赋值给a存放100%7;//运算100%7的值以下面的程序为例,声明两个整型变量a、b,并分别赋值为5和3,再将a%b的运算结果输出。范例:TestJava3_16.java01//在JAVA中用%进行取模操作02publicclassTestJava3_1603{04publicstaticvoidmain(String[]args)05{06inta=5;07intb=3;0809System.out.println(a+"%"+b+"="+(a%b));10System.out.println(b+"%"+a+"="+(b%a));11}12}输出结果:5%3=2;3%5=33.2.1.4关系运算符与if语句设计者常常会在if语句中使用到关系运算符,(维信科技,山西最专业的IT实训)所以有必要先来认识if语句的用法。if语句的格式如下:【格式3-2if语句的格式】如果括号中的判断条件成立,就会执行后面的语句;若是判断条件不成立,则后面的语句就不会被执行,如下面的程序片段:if(x&0)System.out.println("IlikeJava!");当x的值大于0,就是判断条件成立时,会执行输出字符串“IlikeJava!”的操作;相反,当x的值为0或是小于0时,if语句的判断条件不成立,就不会执行上述操作了。(维信科技,山西最专业的IT实训)表3-9列出了关系运算符的成员,这些运算符在数学上也是经常使用的。表3-9关系运算符关系运算符意义&大于&小于&=大于等于&=小于等于==等于!=不等于在Java中,关系运算符的表示方式和在数学中很类似,但是由于赋值运算符为“=”,为了避免混淆,当使用关系运算符“等于”(==)时,就必须用2个等号表示;而关系运算符“不等于”的形式有些特别,(维信科技,山西最专业的IT实训)用“!=”代表,这是因为在键盘上想要取得数学上的不等于符号“≠”较为困难,所以就用“!=”表示不等于。当使用关系运算符去判断一个表达式的成立与否时,若是判断式成立会产生一个响应值true,若是判断式不成立则会产生响应值false。以下面的程序为例,判断if语句括号中的条件是否成立,若是成立则执行if后面的语句。范例:TestJava3_17.java01//下面这段程序说明了关系运算符的使用方法,关系运算符返回值为布尔值02publicclassTestJava3_1703{04publicstaticvoidmain(String[]args)05{06if(5&2)07System.out.println("返回值:"+(5&2));0809if(true)10System.out.println("HelloJava!");1112if((3+6)==(3-6))13System.out.println("IlikeJava!");14}15}输出结果:返回值:trueHelloJava!程序说明:1、在第6行中,由于5&2的条件成立,所以执行第7行的语句:输出返回值true。2、在第9行中,若是if语句的参数为true,判断亦成立,所以接着执行第10行的语句:输出字符串HelloTestJava!。3、第12行,3+6并不等于3-6,if的判断条件不成立,所以第13行语句不被执行。3.2.1.5递增与递减运算符递增与递减运算符在C/C++中就已经存在了,Java仍然将它们保留了下来,是因为它们具有相当大的便利性。(维信科技,山西最专业的IT实训)表3-10列出了递增与递减运算符的成员。表3-10递增与递减运算符递增与递减运运算符意义++--递增,变量值加1递减,变量值减1善用递增与递减运算符可使程序更加简洁。例如,声明一个int类型的变量a,在程序运行中想让它加1,语句如下:a=a+1;//a加1后再赋值给a存放将a的值加1后再赋值给a存放。也可以利用递增运算符“++”写出更简洁的语句,而语句的意义是相同的:a++;//a加1后再赋值给a存放,a++为简洁写法在程序中还可以看到另外一种递增运算符“++”的用法,就是递增运算符“++”在变量的前面,如++a,这和a++所代表的意义是不一样的。a++会先执行整个语句后再将a的值加1,而++b则先把b的值加1后,再执行整个语句。以下面的程序为例,(维信科技,山西最专业的IT实训)将a与b的值皆设为3,将a++及++b输出来,可以轻易地比较出两者的不同。范例:TestJava3_18.java01//下面这段程序说明了“++”的两种用法的使用02publicclassTestJava3_1803{04publicstaticvoidmain(Stringargs[])05{06inta=3,b=3;0708System.out.print("a="+a);//输出a09System.out.println(",a++="+(a++)+",a="+a);//输出a++和a10System.out.print("b="+b);//输出b11System.out.println(",++b="+(++b)+",b="+b);//输出++b和b12}13}输出结果:a=3;a++=3;a=4b=3;++b=4;b=4程序说明:1、在第9行中,输出a++及运算后的a的值,所以执行完a++后,a的值才会加1,变成4。2、程序的第11行中,输出++b运算后b的值,所以执行++b前,b的值即先加1,变成4。同样的,递减运算符“--”的使用方式和递增运算符“++”是相同的,递增运算符“++”用来将变量值加1,而递减运算符“--”则是用来将变量值减1。此外,递增与递减运算符只能将变量加1或减1(维信科技,山西最专业的IT实训),若是想要将变量加减非1的数时,还是得用原来的“a=a+2”的方法。3.2.1.6逻辑运算符在if语句中也可以看到逻辑运算符,表3-11列出了它的成员。表3-11逻辑运算符逻辑运算符意义&&AND,与||OR,或当使用逻辑运算符&&时,运算符前后的两个操作数的返回值皆为真,运算的结果才会为真;使用逻辑运算符“||”时,运算符前后的两个操作数的返回值只要有一个为真,运算的结果就会为真,如下面的语句:(1)a&0&&b&0//两个操作数皆为真,运算结果才为真(2)a&0||b&0//两个操作数只要一个为真,运算结果就为真在第1个例子中,a&0而且b&0时,表达式的返回值为true,即表示这两个条件必须同时成立才行;在第2个例子中,(维信科技,山西最专业的IT实训)只要a&0或者b&0,表达式的返回值即为true,这两个条件仅需要一个成立即可,读者可以参考表3-12中所列出的结果:表3-12AND及OR结果表条件1条件2结果&&(与)||(或)truetruetruetruetruefalsefalsetruefalsetruefalsetruefalsefalsefalsefalse由表3-12可以看出,在条件中,只要有一个条件为假(false),相与的结果就是假(false);相反的如果有一个条件为真(true),那么相或的结果就为真(true)。下面的这个程序是判断a的值是否在0~100之间,如果不在即表示成绩输入错误;若是a的值在50~60之间,则需要补考。范例:TestJava3_19.java01//下面这段程序是对与操作进行的说明,返回值为布尔类型02publicclassTestJava3_1903{04publicstaticvoidmain(String[]args)05{06inta=56;0708if((a&0)||(a&100))09System.out.println("输入的数据有错误!");10if((a&60)&&(a&49))11System.out.println("准备补考吧!");12}13}输出结果:准备补考吧!程序说明:1、当程序执行到第8行时,if会根据括号中a的值作判断,a&0或是a&100时,条件判断成立,即会执行第9行的语句:输出字符串“输入的数据有错误!”。由于学生成绩是介于0~100分之间,(维信科技,山西最专业的IT实训)因此当a的值不在这个范围时,就会视为是输入错误。2、不管第9行是否有执行,都会接着执行第10行的程序。if再根据括号中a的值做判断,a&60且a&49时,条件判断成立,表示该成绩需要进行补考,即会执行第11行的语句,输出“准备补考吧!”。3.2.1.7括号运算符除了前面所述的内容外,括号()也是Java的运算符,如表3-13所示:表3-13括号运算符括号运算符意义()提高括号中表达式的优先级括号运算符()是用来处理表达式的优先级的。以一个简单的加减乘除式子为例:3+5+4*6-7//未加括号的表达式相信根据读者现在所学过的数学知识,这道题应该很容易解开。加减乘除的优先级(*、/的优先级大于+、-)来计算结果,这个式子的答案为25。但是如果想先计算3+5+4及6-7之后再将两数相乘时(维信科技,山西最专业的IT实训),就必须将3+5+4及6-7分别加上括号,而成为下面的式子:(3+5+4)*(6-7)//加上括号的表达式经过括号运算符()的运作后,计算结果为-12,所以括号运算符()可以使括号内表达式的处理顺序优先。3.2.2运算符的优先级表3-14列出了各个运算符的优先级的排列,数字越小的表示优先级越高。表3-14运算符的优先级优先级运算符类结合性1()括号运算符由左至右1[]方括号运算符由左至右2!、+(正号)、-(负号)一元运算符由右至左2~位逻辑运算符由右至左2++、--递增与递减运算符由右至左3*、/、%算术运算符由左至右4+、-算术运算符由左至右5&&、&&位左移、右移运算符由左至右6&、&=、&、&=关系运算符由左至右7==、!=关系运算符由左至右8&(位运算符AND)位逻辑运算符由左至右9^(位运算符号XOR)位逻辑运算符由左至右10|(位运算符号OR)位逻辑运算符由左至右11&&逻辑运算符由左至右12||逻辑运算符由左至右13?:条件运算符由右至左14=赋值运算符由右至左表3-14的最后一栏是运算符的结合性。什么是结合性呢?结合性可以让程序设计者了解到运算符与操作数之间的关系及其相对位置。举例来说,当使用同一优先级的运算符时,结合性就非常重要了,它决定谁会先被处理。读者可以看看下面的例子:a=b+d/5*4;这个表达式中含有不同优先级的运算符,其中是“/”与“*”的优先级高于“+”,而“+”又高于“=”,但是读者会发现,“/”与“*”的优先级是相同的,到底d该先除以5再乘以4呢?还是5乘以4后d再除以这个结果呢(维信科技,山西最专业的IT实训)?结合性的定义,就解决了这方面的困扰,算术运算符的结合性为“由左至右”,就是在相同优先级的运算符中,先由运算符左边的操作数开始处理,再处理右边的操作数。上面的式子中,由于“/”与“*”的优先级相同,因此d会先除以5再乘以4得到的结果如上b后,将整个值赋给a存放。3.2.3表达式表达式是由常量、变量或是其他操作数与运算符所组合而成的语句,如下面例子,均是表达式正确的使用方法:-49//表达式由一元运算符“-”与常量49组成sum+2//表达式由变量sum、算术运算符与常量2组成a+b–c/(d*3–9)//表达式由变量、常量与运算符所组成此外,Java还有一些相当简洁的写法,(维信科技,山西最专业的IT实训)是将算术运算符和赋值运算符结合成为新的运算符,表3-15列出了这些运算符。表3-15简洁的表达式运算符范例用法说明意义+=a+=ba+b的值存放到a中a=a+b-=a-=ba-b的值存放到a中a=a-b*=a*=ba*b的值存放到a中a=a*b/=a/=ba/b的值存放到a中a=a/b%=a%=ba%b的值存放到a中a=a%b下面的几个表达式,皆是简洁的写法:a++//相当于a=a+1a-=5//相当于a=a–5b%=c//相当于b=b%ca/=b--//相当于计算a=a/b之后,再计算b--这种独特的写法虽然看起来有些怪异,但是它却可以减少程序的行数,提高运行的速度!看下面这道范例:范例:TestJava3_20.java01//下面是关于简洁写法的一段程序02publicclassTestJava3_2003{04publicstaticvoidmain(String[]args)05{06inta=5,b=8;0708System.out.println("改变之前的数是:a="+a+",b="+b);09a+=b;10System.out.println("改变之后的数是:a="+a+",b="+b);11}12}输出结果:改变之前的数是:a=5,b=8;改变之后的数是:a=13,b=8程序说明:1、第6行分别把变量a、b赋值为5及8。2、第8行在运算之前先输出变量a、b的值,a为5,b为8。3、第9行计算a+=b,这个语句也就相当于a=a+b,将a+b的值存放到a中。计算5+8的结果后赋值给a存放。4、程序第10行,再输出运算之后变量a、b的值。所以a的值变成13,而b仍为8。除了前面所提到的算术运算符和赋值运算符的结合可以存在于简洁的表达式中,递增、递减运算符也同样可以应用在简洁的表达式中。表3-16列出了一些简洁写法的运算符及其范例说明。表3-16简洁表达式的范例运算符范例执行前说明执行后abab+=a+=b124a+b的值存放到a中(同a=a+b)164-=a-=b124a-b的值存放到a中(同a=a–b)84*=a*=b124a*b的值存放到a中(同a=a*b)484/=a/=b124a/b的值存放到a中(同a=a/b)34%=a%=b124a%b的值存放到a中(同a=a%b)04B++a*=b++124a*b的值存放到a后,b加1(同a=a*b;b++)485++ba*=++b124b加1后,再将a*b的值存放到a(同b++;a=a*b)605b--a*=b--124a*b的值存放到a后,b减1(同a=a*b;b--)483--ba*=--b124b减1后,再将a*b的值存放到a(同b--;a=a*b)363举一个实例来说明这些简洁的表达式在程序中该如何应用。以TestJava3_21为例,输入两个数,经过运算之后,来看看这两个变量所存放的值有什么变化。范例:TestJava3_21.java01//下面的程序说明了简洁表达式的使用方法,但这种方式现在已不提倡使用了。02publicclassTestJava3_2103{04publicstaticvoidmain(String[]args)05{06inta=10,b=6;0708System.out.println("改变之前的数:a="+a+",b="+b);09a-=b++;//先计算a-b的值,将结果设给a之后,再将b值加110System.out.println("改变之后的数:a="+a+",b="+b);11}12}输出结果:改变之前的数:a=10,b=6改变之后的数:a=4,b=7程序说明:1、第8行输出运算前变量a、b的值。在程序中a、b的赋值为10、6,因此输出的结果a为10,b为6。2、第9行计算a-=b++,也就是执行下面这两个语句:a=a-b;//(a=10-6=4,所以a=4)b++;//(b=b+1=6+1=7,所以b=7)3、程序第10行,将经过运算之后的结果输出,即可得到a为4,b为7的答案3.2.4表达式的类型转换当int类型遇上了float类型,到底谁是“赢家”呢?在前面曾提到过数据类型的转换,在这里,要再一次详细讨论表达式的类型转换。Java是一个很有弹性的程序设计语言,当上述的情况发生时,只要坚持“以不流失数据为前提”的大原则,即可做不同的类型转换,使不同类型的数据、表达式都能继续存储。依照大原则,当Java发现程序的表达式中有类型不相符的情况时,会依据下列的规则来处理类型的转换。1、占用字节较少的类型转换成占用字节较多的类型。2、字符类型会转换成int类型。3、int类型会转换成float类型。4、表达式中若某个操作数的类型为double,则另一个操作数字也会转换成double类型。5、布尔类型不能转换成其它类型。范例:TestJava3_22.java01//下面的程序说明了表达式类型的自动转换问题02publicclassTestJava3_2203{04publicstaticvoidmain(String[]args)05{06charch='a';07shorta=-2;08intb=3;09floatf=5.3f;10doubled=6.28;1112System.out.print("(ch/a)-(d/f)-(a+b)=");13System.out.println((ch/a)-(d/f)-(a+b));14}15}输出结果:(ch/a)-(d/f)-(a+b)=-50.32先别急着看结果,在程序运行之前可先思考一下,这个复杂的表达式(ch/a)-(d/f)–(b+a)最后的输出类型是什么?它又是如何将不同的数据类型转换成相同的呢?读者可以参考图3-6的分析过程。图3-6数据类型的转换过程3.3循环和选择性语句到目前为止,本书所编写的程序,都是简单的程序语句。如果想处理重复的工作时,“循环”就是一个很好的选择,它可以运行相同的程序片段,还可以使程序结构化。在本章中就要认识选择与循环结构语句,学习如何利用这些不同的结构编写出有趣的程序,让程序的编写更灵活,操控更方便。3.3.1程序的结构设计一般来说程序的结构包含有下面三种:1、顺序结构2、选择结构3、循环结构这三种不同的结构有一个共同点,就是它们都只有一个入口,也只有一个出口。程序中使用了上面这些结构到底有什么好处呢?这些单一入、出口可以让程序易读、好维护,也可以减少调试的时间。现在以流程图的方式来让读者了解这三种结构的不同。3.3.1.1顺序结构本书前面所讲的那些例子采用的都是顺序结构,程序至上而下逐行执行,一条语句执行完之后继续执行下一条语句,一直到程序的末尾。这种结构如图3-7所示:图3-7顺序结构的基本流程顺序结构在程序设计中是最常使用到的结构,在程序中扮演了非常重要的角色,因为大部分的程序基本上都是依照这种由上而下的流程来设计。3.3.1.2选择结构选择结构是根据条件的成立与否,再决定要执行哪些语句的结构,其流程图如图3-8所示。图3-8选择结构的基本流程这种结构可以依据判断条件的结构,来决定要执行的语句。当判断条件的值为真时,就运行“语句1”;当判断条件的值为假,则执行“语句2”。不论执行哪一个语句,最后都会再回到“语句3”继续执行。举例来说,想在下面的程序中声明两个整数a及b,并赋其初值,如果a大于b,在显示器中输出a-b的计算结果。无论a是否大于b,最后均输出a*b的值。范例:TestJava3_23.java01//下面的程序说明了if语句的操作,只有当条件满足时才会被执行02publicclassTestJava3_2303{04publicstaticvoidmain(String[]args)05{06inta=6,b=5;0708System.out.println("a="+a+",b="+b);09if(a&b)10System.out.println("a-b="+(a-b));11System.out.println("a*b="+(a*b));12}13}输出结果:a=6;b=5a-b=1;a*b=30读者可以试着更改程序第6行中变量a、b的初值,将a的值设置得比b值小,可较容易观察程序运行的流程。如果输入的a值小于或等于b值,则会跳至执行第11行。3.3.1.3循环结构循环结构则是根据判断条件的成立与否,决定程序段落的执行次数,而这个程序段落就称为循环主体。循环结构的流程图如下图3-9所示。图3-9循环结构的基本流程3.3.2选择结构选择结构包括if、if..else及switch语句,语句中加上了选择结构之后,就像是十字路口,根据不同的选择,程序的运行会有不同的结果。现在先来看看if语句。3.3.2.1if语句在前面简单地介绍了if的用法。要根据判断的结构来执行不同的语句时,使用if语句就是一个很好的选择,它会准确地检测判断条件成立与否,再决定是否要执行后面的语句。if语句的格式如下所示:【格式3-3if语句的格式】若是在if语句主体中要处理的语句只有1个,可省略左、右大括号。当判断条件的值不为假时,就会逐一执行大括号里面所包含的语句,if语句的流程图如图3-10所示。图3-10if语句的流程图选择结构中除了if语句之外,还有if…else语句。在if语句中如果判断条件成立,即可执行语句主体内的语句,但若要在判断条件不成立时可以执行其他的语句,使用if…else语句就可以节省判断的时间。3.3.2.2if…else语句当程序中存在含有分支的判断语句时,就可以用if...else语句处理。当判断条件成立,即执行if语句主体;判断条件不成立时,则会执行else后面的语句主体。if…else语句的格式如下:【格式3-4if…else语句的格式】若是在if语句或else语句主体中要处理的语句只有一个,可以将左、右大括号去除。if…else语句的流程图如图3-17所示。图3-17if..else语句的基本流程下面举一个简单的例子:声明一个整型变量a,并给其赋初值5,在程序中判断a是奇数还是偶数,再将判断的结果输出。范例:TestJava3_24.java01//以下程序说明了if...else的使用方法02publicclassTestJava3_2403{04publicstaticvoidmain(String[]args)05{06inta=5;0708if(a%2==1)09System.out.println(a+"是奇数!");10else11System.out.println(a+"是偶数!");12}13}输出结果:5是奇数!程序说明:1、第8~11行为if..else语句。在第8行中,if的判断条件为a%2==1,当a除以2取余数,若得到的结果为1,表示a为奇数,若a除以2取余数得到的结果为0,则a为偶数。2、当a除以2取余数的结果为1时,即执行第9行的语句,输出“a为奇数!”;否则执行第11行,输出“a为偶数!”。3、读者可以自行将变量a的初值更改,再重复执行程序。从上面的程序中发现,程序的缩进在这种选择结构中起着非常重要的作用,它可以使设计者编写的程序结构层次清晰,在维护上也就比较简单。所以本书建议读者以后在编写程序时要养成缩进的好习惯。3.3.2.3条件运算符还有一种运算符可以代替if…else语句,即条件运算符,如表3-17所示:表3-17条件运算符条件运算符意义?:根据条件的成立与否,来决定结果为“:”前或“:”后的表达式使用条件运算符时,操作数有3个,其格式如下:【格式3-5if…else语句的格式】将上面的格式以if语句解释,就是当条件成立时执行表达式1,否则执行表达式2,通常会将这两个表达式之一的运算结果指定给某个变量,也就相当于下面的if..else语句:【格式3-6?:与if…else语句的相对关系】接下来,可以试着练习用条件运算符来编写程序,在下面的程序中声明变量a、b,并为其赋初值,再利用条件运算符判断其最大值。范例:TestJava3_25.java01//以下程序说明了条件运算符的使用方法02publicclassTestJava3_2503{04publicstaticvoidmain(String[]args)05{06inta=5,b=13,m0708max=(a&b)?a:b;0910System.out.println("a="+a+",b="+b);11System.out.println("最大的数是:"+max);12}13}输出结果:a=5;b=13最大的数是:13程序说明:1、第6行声明变量并为其赋初值。a、b为要比较大小的两个整数值;max存放比较大小后的最大的那个值。2、第8行(max=(a&b)?a:b)赋值当a&b时,max=a,否则max=b。3、第10行输出a、b的值。程序第11行,输出最大值。4、可以自行将a、b的值更改,再运行此程序。读者可以发现,使用条件运算符编写程序时较为简洁,它用一个语句就可以替代一长串的if..else语句,所以条件运算符的执行速度也较高。3.3.2.4if..elseif..else语句如果需要在if..else里判断多个条件时,就需要if..elseif…else语句了,其格式如下:【格式3-7if…elseif…else语句】这种方式用在含有多个判断条件的程序中,请看下面的范例:范例:TestJava3_26.java01//以下程序说明了多分支条件语句if..elseif...else的使用02publicclassTestJava3_2603{04publicstaticvoidmain(String[]args)05{06intx=1;0708if(x==1)09System.out.println("x==1");10elseif(x==2)11System.out.println("x==2");12elseif(x==3)13System.out.println("x==3");14else15System.out.println("x&3");16}17}输出结果:x==1可以看出if…elseif..else比单纯的if..else语句可以含有更多的条件判断语句,可是读者想一想如果有很多条件都要判断的话,这样写会不会是一件很头疼的事情,下面将为读者介绍的多重选择语句就可以为读者解决这一件头疼的问题。3.3.3多重选择语句——switch语句switch语句可以将多选一的情况简化,而使程序简洁易懂,在本节中,将要介绍如何使用switch语句以及它的好伙伴——break语句;此外,也要讨论在switch语句中如果不使用break语句会出现的问题。首先,先来了解switch语句该如何使用。要在许多的选择条件中找到并执行其中一个符合判断条件的语句时,除了可以使用if..else不断地判断之外,也可以使用另一种更方便的方式即多重选择——switch语句。使用嵌套if..else语句最常发生的状况,就是容易将if与else配对混淆而造成阅读及运行上的错误。使用swtich语句则可以避免这种错误的发生。switch语句的格式如下:【格式3-8switch语句】要特别注意的是,在switch语句里的选择值只能是字符或是常量。接下来看看switch语句执行的流程。1、switch语句先计算括号中表达式的结果。2、根据表达式的值检测是否符合执行case后面的选择值,若是所有case的选择值皆不符合,则执行default所包含的语句,执行完毕即离开switch语句。3、如果某个case的选择值符合表达式的结果,就会执行该case所包含的语句,一直遇到break语句后才离开switch语句。4、若是没有在case语句结尾处加上break语句,则会一直执行到switch语句的尾端才会离开switch语句。break语句在下面的章节中会介绍到,读者只要先记住break是跳出语句就可以了。5、若是没有定义default该执行的语句,则什么也不会执行,直接离开switch语句。根据上面的描述,可以绘制出如图3-18所示的switch语句流程图:图3-18switch语句的基本流程下面的程序是一个简单的赋值表达式,利用switch语句处理此表达式中的运算符,再输出运算后的结果。范例:TestJava3_27.java01//以下程序说明了多分支条件语句的使用02publicclassTestJava3_2703{04publicstaticvoidmain(String[]args)05{06inta=100,b=7;07charoper='/';0809switch(oper)//用switch实现多分支语句10{11case'+':12System.out.println(a+"+"+b+"="+(a+b));13b14case'-':15System.out.println(a+"-"+b+"="+(a-b));16b17case'*':18System.out.println(a+"*"+b+"="+(a*b));19b20case'/':21System.out.println(a+"/"+b+"="+((float)a/b));22b23default:24System.out.println("未知的操作!");25}26}27}输出结果:100/7=14.285714程序说明:1、第7行,利用变量存放一个运算符号,如3+2、5*7等。2、第9~25行为switch语句。当oper为字符+、-、*、/、%时,输出运算的结果后离开switch语句;若是所输入的运算符皆不在这些范围时,即执行default所包含的:语句输出“未知的操作!”,再离开switch。3、选择值为字符时,必须用单引号将字符包围起来。程序运行的结果会因为没有加上break语句而出现错误,所以程序设计者在使用switch语句的时候,要特别注意是否需要加上break语句。3.3.4while循环while是循环语句,也是条件判断语句。当事先不知道循环该执行多少次的时,就要用到while循环。while循环的格式如下:【格式3-9while循环语句】当while循环主体有且只有一个语句时,可以将大括号除去。在while循环语句中,只有一个判断条件,它可以是任何表达式,当判断条件的值为真,循环就会执行一次,再重复测试判断条件、执行循环主体,直到判断条件的值为假,才会跳离while循环。下面列出了while循环执行的流程。1、第一次进入while循环前,就必须先为循环控制变量(或表达式)赋起始值。2、根据判断条件的内容决定是否要继续执行循环,如果条件判断值为真(True),继续执行循环主体;条件判断值为假(False),则跳出循环执行其他语句。3、执行完循环主体内的语句后,重新为循环控制变量(或表达式)赋值(增加或减少),由于while循环不会自动更改循环控制变量(或表达式)的内容,所以在while循环中为循环控制变量赋值的工作要由设计者自己来做,完成后再回到步骤2重新判断是否继续执行循环。根据上述的程序流程,可以绘制出如图3-19所示的while循环流程图:图3-19while循环的基本流程下面这道范例是循环计算1累加至10:范例:TestJava3_28.java01//以下程序说明了while循环的使用方法02publicclassTestJava3_2803{04publicstaticvoidmain(String[]args)05{06inti=1,sum=0;0708while(i&=10)09{10sum+=i;//累加计算11i++;12}13System.out.println("1+2+...+10="+sum);//输出结果14}15}输出结果:1+2+...+10=55程序说明:1、在第6行中,将循环控制变量i的值赋值为1。2、第8行进入while循环的判断条件为i&=10,第一次进入循环时,由于i的值为1,所以判断条件的值为真,即进入循环主体。3、第9~12行为循环主体,sum+i后再指定给sum存放,i的值加1,再回到循环起始处,继续判断i的值是否仍在所限定的范围内,直到i大于10即跳出循环,表示累加的操作已经完成,最后再将sum的值输出即可。3.3.5do…while循环do…while循环也是用于未知循环执行次数的时候,而while循环及do…while循环最大不同就是进入while循环前,while语句会先测试判断条件的真假,再决定是否执行循环主体,而do…while循环则是“先做再说”,每次都是先执行一次循环主体,然后再测试判断条件的真假,所以无论循环成立的条件是什么,使用do…while循环时,至少都会执行一次循环主体。do…while循环的格式如下:【格式3-10do…while循环语句】当循环主体只有一个语句时,可以将左、右大括号去除。第一次进入do..while循环语句时,不管判断条件(它可以是任何表达式)是否符合执行循环的条件,都会直接执行循环主体。循环主体执行完毕,才开始测试判断条件的值,如果判断条件的值为真,则再次执行循环主体,如此重复测试判断条件、执行循环主体,直到判断条件的值为假,才会跳离do…while循环。下面列出了do…while循环执行的流程:1.进入do...whle循环前,要先为循环控制变量(或表达式)赋起始值。2.直接执行循环主体,循环主体执行完毕,才开始根据判断条件的内容决定是否继续执行循环:条件判断值为真(True)时,继续执行循环主体;条件判断值为假(False)时,则跳出循环,执行其他语句。3.执行完循环主体内的语句后,重新为循环控制变量(或表达式)赋值(增加或减少),由于do…while循环和while循环一样,不会自动更改循环控制变量(或表达式)的内容,所以在do…while循环中赋值循环控制变量的工作要由自己来做,再回到步骤2重新判断是否继续执行循环。根据上述的描述,可以绘制出如图3-20所示的do..while循环流程图:图3-20do…whle循环的基本流程把TestJava3_28.java(1+2+…+10)的程序稍加修改,用do…while循环设计一个能累加至n的程序,并且能够限制n的范围(n要大于0),就是下面的范例TestJava3_29.java:范例:TestJava3_29.java01//以下程序说明了do...while循环的使用02publicclassTestJava3_2903{04publicstaticvoidmain(String[]args)05{06inti=1,sum=0;07//do.while是先执行一次,再进行判断。即,循环体至少会被执行一次08do09{10sum+=i;//累加计算11i++;12}while(i&=10);13System.out.println("1+2+...+10="+sum);//输出结果14}15}输出结果:1+2+...+10=55首先,声明程序中要使用的变量(i循环记数及累加操作数)及sum(累加的总和),并将sum设初值为0;由于要计算1+2+…+10,因此在第一次进入循环的时候,将i的值设为1,接着判断i是否小于等于10,如果i小于等于10,则计算sum+i的值后再指定给sum存放。i的值已经不满足循环条件时,i即会跳出循环,表示累加的操作已经完成,再输出sum的值,程序即结束运行。程序说明:1、第08~12行利用do…while循环计算1~10的数累加2、第13行,输出1~10的数的累加结果:1+2+...+10=55do..while循环不管条件是什么,都是先做再说,因此循环的主体最少会被执行一次。在日常生活中,如果能够多加注意,并不难找到do…while循环的影子!举例来说,在利用提款机提款前,会先进入输入密码的画面,让使用者输入三次密码,如果皆输入错误,即会将银行卡吞掉,其程序的流程就是利用do…while循环设计而成的。3.3.6for循环当很明确地知道循环要执行的次数时,就可以使用for循环,其语句格式如下:【格式3-11for循环语句】若是在循环主体中要处理的语句只有1个,可以将大括号去除。下面列出了for循环的流程。1、第一次进入for循环时,为循环控制变量赋起始值。2、根据判断条件的内容检查是否要继续执行循环,当判断条件值为真(true)时,继续执行循环主体内的语句;判断条件值为假(false)时,则会跳出循环,执行其他语句。3、执行完循环主体内的语句后,循环控制变量会根据增减量的要求,更改循环控制变量的值,再回到步骤2重新判断是否继续执行循环。根据上述描述,可以绘制出如图3-21所示的for循环流程图。图3-21for循环的基本流程范例TestJava3_30可以使读者熟悉for循环的使用,它是利用for循环来完成由1至10的数的累加运算。范例:TestJava3_30.java01//以下程序说明了for循环的使用方法02publicclassTestJava3_3003{04publicstaticvoidmain(String[]args)05{06inti,sum=0;07//for循环的使用,用来计算数字累加之和08for(i=1;i&=10;i++)09sum+=i;//计算sum=sum+i10System.out.println("1+2+...+10="+sum);11}12}输出结果:1+2+...+10=55程序说明:1、在第06行声明两个变量sum和i,I用于循环的记数控制。2、08~09行,做1~10之间的循环累加,执行的结果如TestJava3_28,如果读者不明白的话,可以和TestJava3_28的程序说明比较一下,相信就可以明白for的用法了。3.3.7循环嵌套当循环语句中又出现循环语句时,就称为嵌套循环。如嵌套for循环、嵌套while循环等,当然读者也可以使用混合嵌套循环,也就是循环中又有其他不同种类的循环。以打印九九乘法表为例,练习嵌套循环的用法。范例:TestJava3_31.java01//以下程序说明了for循环的嵌套使用方法02publicclassTestJava3_3103{04publicstaticvoidmain(String[]args)05{06inti,j;07//用两层for循环输出乘法表08for(i=1;i&=9;i++)09{10for(j=1;j&=9;j++)11System.out.print(i+"*"+j+"="+(i*j)+"\t");12System.out.print("\n");13}14}15}输出结果:1*1=11*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=92*1=22*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=183*1=33*2=63*3=93*4=123*5=153*6=183*7=213*8=243*9=274*1=44*2=84*3=124*4=164*5=204*6=244*7=284*8=324*9=365*1=55*2=105*3=155*4=205*5=255*6=305*7=355*8=405*9=456*1=66*2=126*3=186*4=246*5=306*6=366*7=426*8=486*9=547*1=77*2=147*3=217*4=287*5=357*6=427*7=497*8=567*9=638*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=648*9=729*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81程序说明:1、i为外层循环的循环控制变量,j为内层循环的循环控制变量。2、当i为1时,符合外层for循环的判断条件(i&=9),进入另一个内层for循环主体,由于是第一次进入内层循环,所以j的初值为1,符合内层for循环的判断条件(j&=9),进入循环主体,输出i*j的值(1*1=1),j再加1等于2,仍符合内层for循环的判断条件(j&=9),再次执行计算与输出的工作,直到j的值大于9即离开内层for循环,回到外层循环。此时,i会加1成为2,符合外层for循环的判断条件,继续执行内层for循环主体,直到i的值大于9时即离开嵌套循环。3、整个程序到底执行了几次循环呢?可以看到,当i为1时,内层循环会执行9次(j为1~9),当i为2时,内层循环也会执行9次(j为1~9),以此类推的结果,这个程序会执行81次循环,而显示器上也正好输出81个式子。3.3.8循环的跳离在Java语言中,有一些跳离的语句,如break、continue等语句,站在结构化程序设计的角度上,并不鼓励用户使用,因为这些跳离语句会增加调试及阅读上的困难。因此建议读者:除非在某些不得以的情况下之外,否则尽量不要去使用它们。在本节中,将为读者介绍break及continue语句。3.3.8.1break语句break语句可以强迫程序跳离循环,当程序执行到break语句时,即会离开循环,继续执行循环外的下一个语句,如果break语句出现在嵌套循环中的内层循环,则break语句只会跳离当前层的循环。以下图的for循环为例,在循环主体中有break语句时,当程序执行到break,即会离开循环主体,而继续执行循环外层的语句。【格式3-12break语句格式】以下面的程序为例,利用for循环输出循环变量i的值,当i除以3所取的余数为0时,即使用break语句的跳离循环,并于程序结束前输出循环变量I的最终值。范例:TestJava3_32.java01//下面的程序是介绍break的使用方法02publicclassTestJava3_3203{04publicstaticvoidmain(String[]args)05{06in0708for(i=1;i&=10;i++)09{10if(i%3==0)11b//跳出整个循环体12System.out.println("i="+i);13}14System.out.println("循环中断:i="+i);15}16}输出结果:i=1i=2循环中断:i=3程序说明:1、第9~13行为循环主体,i为循环的控制变量。2、当i%3为0时,符合if的条件判断,即执行第11行的break语句,跳离整个for循环。此例中,当i的值为3时,3%3的余数为0,符合if的条件判断,离开for循环,执行第14行:输出循环结束时循环控制变量i的值3。通常设计者都会设定一个条件,当条件成立时,不再继续执行循环主体。所以在循环中出现break语句时,if语句通常也会同时出现。此外,读者可以回想一下前面提到过的switch语句中是不是也有一个break,如果记不清楚的读者可以翻看一下本章前面的内容。3.3.8.2continue语句continue语句可以强迫程序跳到循环的起始处,当程序运行到continue语句时,即会停止运行剩余的循环主体,而是回到循环的开始处继续运行。以下图的for循环为例,在循环主体中有continue语句,当程序执行到continue,即会回到循环的起点,继续执行循环主体的部分语句。【格式3-13continue语句格式】将程序TestJava3_32中的break语句改成continue语句就形成了程序TestJava3_33.java。读者可以观察一下这两种跳离语句的不同。break语句是跳离当前层循环,而continue语句是回到循环的起点。程序如下所示:范例:TestJava3_33.java01//下面的程序是介绍continue的使用方法02publicclassTestJava3_3303{04publicstaticvoidmain(String[]args)05{06in0708for(i=1;i&=10;i++)09{10if(i%3==0)11continue;//跳出一次循环12System.out.println("i="+i);13}14System.out.println("循环中断:i="+i);15}16}输出结果:i=1;i=2i=4i=5i=7i=8i=10循环中断:i=11程序说明:1、第9~13行为循环主体,i为循环控制变量。2、当i%3为0时,符合if的条件判断,即执行第11行的continue语句,跳离目前的for循环(不再执行循环体内的其他的语句),而是回到循环开始处继续判断是否执行循环。此例中,当i的值为3、6、9时,取余数为0,符合if判断条件,离开当前层的for循环,再回到循环开始处继续判断是否执行循环。3、当i的值为11时,不符合循环执行的条件,此时执行程序第14行:输出循环结束时循环控制变量i的值11。当判断条件成立时,break语句与continue语句会有不同的执行方式。Break语句不管情况如何,先离开循环再说;而continue语句则不再执行此次循环的剩余语句,直接回到循环的起始处。3.3.9局部变量Java可以在程序的任何地方声明变量,当然也可以在循环里声明。有趣的是,在循环里声明的变量只是局部变量,只要跳出循环,这个变量便不能再使用。下面以一个范例来说明局部变量的使用方法。输出结果:i=1,sum=1i=2,sum=3i=3,sum=6i=4,sum=10i=5,sum=15在TestJava3_34中,把变量i声明在for循环里,因此变量i在此就是局部变量,它的有效范围仅在for循环内(8~12行),只要一离开这个循环,变量i便无法使用。相对的,变量sum是声明在main()方法的开始处,因此它的有效范围从第6行开始到第12行结束,当然,for循环内也是属于变量sum的有效范围。
送道具给圈友:}

我要回帖

更多关于 y舱什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信