|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
java是一种面向对象的编程语言,优点是可移植性比较高,最初设计时就是本着一次编写到处执行设计的。可以开发各种应用程序和游戏,不过速度没有c++快,所以一般是不用java来编写应用程序和电脑游戏。
“开关”(Switch)偶然也被分别为一种“选择语句”。依据一个整数表达式的值,switch语句可从一系列代码选出一段实行。它的格局以下:
switch(整数选择因子){
case整数值1:语句;break;
case整数值2:语句;break;
case整数值3:语句;break;
case整数值4:语句;break;
case整数值5:语句;break;
//..
default:语句;
}
个中,“整数选择因子”是一个特别的表达式,能发生整数值。switch能将整数选择因子的了局与每一个整数值对照。若发明符合的,就实行对应的语句(复杂或复合语句)。若没有发明符合的,就实行default语句。
在下面的界说中,人人会注重到每一个case均以一个break开头。如许可以使实行流程跳转至switch主体的开端。这是构建switch语句的一种传统体例,但break是可选的。若省略break,会持续实行前面的case语句的代码,直到碰到一个break为止。只管一般不想呈现这类情形,但对有履历的程序员来讲,大概可以善加使用。注重最初的default语句没有break,由于实行流程已到了break的跳转目标地。固然,假如思索到编程作风方面的缘故原由,完整能够在default语句的开端安排一个break,只管它并没有任何实践的用途。
switch语句是完成多路选择的一种易行体例(好比从一系列实行路径中选择一个)。但它请求利用一个选择因子,而且必需是int或char那样的整数值。比方,倘使将一个字串大概浮点数作为选择因子利用,那末它们在switch语句里是不会事情的。关于非整数范例,则必需利用一系列if语句。
上面这个例子可随机天生字母,并判别它们是元音仍是子音字母:- //:VowelsAndConsonants.java
- //Demonstratestheswitchstatement
- publicclassVowelsAndConsonants{
- publicstaticvoidmain(String[]args){
- for(inti=0;i<100;i++){
- charc=(char)(Math.random()*26+a);
- System.out.print(c+":");
- switch(c){
- casea:
- casee:
- casei:
- caseo:
- caseu:
- System.out.println("vowel");
- break;
- casey:
- casew:
- System.out.println(
- "Sometimesavowel");
- break;
- default:
- System.out.println("consonant");
- }
- }
- }
- }///:~
复制代码
因为Math.random()会发生0到1之间的一个值,以是只需将其乘以想取得的最年夜随机数(关于英语字母,这个数字是26),再加上一个偏移量,失掉最小的随机数。
只管我们在这儿外表上要处置的是字符,但switch语句实践利用的字符的整数值。在case语句中,用单引号关闭起来的字符也会发生整数值,以便我们举行对照。
请注重case语句互相间是怎样聚合在一同的,它们顺次分列,为一部分特定的代码供应了多种婚配形式。也应注重将break语句置于一个特定case的开端,不然把持流程会复杂地下移,并持续判别下一个前提是不是符合。
1.详细的盘算
应出格寄望上面这个语句:
charc=(char)(Math.random()*26+a);
Math.random()会发生一个double值,以是26会转换成double范例,以便实行乘法运算。这个运算也会发生一个double值。这意味着为了实行加法,必需无将a转换成一个double。使用一个“外型”,double了局会转换回char。
我们的第一个成绩是,外型会对char作甚么样的处置呢?换言之,假定一个值是29.7,我们把它外型成一个char,那末了局值究竟是30仍是29呢?谜底可从上面这个例子中失掉:
- //:CastingNumbers.java
- //Whathappenswhenyoucastafloatordouble
- //toanintegralvalue?
- publicclassCastingNumbers{
- publicstaticvoidmain(String[]args){
- double
- above=0.7,
- below=0.4;
- System.out.println("above:"+above);
- System.out.println("below:"+below);
- System.out.println(
- "(int)above:"+(int)above);
- System.out.println(
- "(int)below:"+(int)below);
- System.out.println(
- "(char)(a+above):"+
- (char)(a+above));
- System.out.println(
- "(char)(a+below):"+
- (char)(a+below));
- }
- }///:~
复制代码
输入了局以下:
- above:0.7
- below:0.4
- (int)above:0
- (int)below:0
- (char)(a+above):a
- (char)(a+below):a
复制代码
以是谜底就是:将一个float或double值外型成整数值后,老是将小数部分“砍失落”,不作任何进位处置。
第二个成绩与Math.random()有关。它会发生0和1之间的值,可是否包含值1呢?用正统的数学言语表达,它究竟是(0,1),[0,1],(0,1],仍是[0,1)呢(方括号暗示“包含”,圆括号暗示“不包含”)?一样地,一个树模程序向我们展现了谜底:
- //:RandomBounds.java
- //DoesMath.random()produce0.0and1.0?
- publicclassRandomBounds{
- staticvoidusage(){
- System.err.println("Usage:
- "+
- "RandomBoundslower
- "+
- "RandomBoundsupper");
- System.exit(1);
- }
- publicstaticvoidmain(String[]args){
- if(args.length!=1)usage();
- if(args[0].equals("lower")){
- while(Math.random()!=0.0)
- ;//Keeptrying
- System.out.println("Produced0.0!");
- }
- elseif(args[0].equals("upper")){
- while(Math.random()!=1.0)
- ;//Keeptrying
- System.out.println("Produced1.0!");
- }
- else
- usage();
- }
- }///:~
复制代码
为运转这个程序,只需在命令行键进下述命令便可:
javaRandomBoundslower
或
javaRandomBoundsupper
在这两种情形下,我们都必需野生中止程序,以是会发明Math.random()“仿佛”永久都不会发生0.0或1.0。但这只是一项实行罢了。若想到0和1之间有2的128次方分歧的双精度小数,以是假如全体发生这些数字,消费的工夫会远远凌驾一团体的性命。固然,最初的了局是在Math.random()的输入中包含了0.0。大概用数字言语表达,输入值局限是[0,1)。
最后我再次声明,我并没有说不看好java,实际上我对java很乐观的,毕竟她正在不断改进中,我相信她总有一天会和.net网页编程并驾齐驱的 |
|