java的switch语句
当前位置:以往代写 > JAVA 教程 >java的switch语句
2019-06-14

java的switch语句

java的switch语句

“开关”(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
// Demonstrates the switch statement

public class VowelsAndConsonants {
  public static void main(String[] args) {
    for(int i = 0; i < 100; i++) {
      char c = (char)(Math.random() * 26 + 'a');
      System.out.print(c + ": ");
      switch(c) {
      case 'a':
      case 'e':
      case 'i':
      case 'o':
      case 'u':
                System.out.println("vowel");
                break;
      case 'y':
      case 'w':
                System.out.println(
                  "Sometimes a vowel");
                break;
      default:
                System.out.println("consonant");
      }
    }
  }
} ///:~

由于Math.random()会发生0到1之间的一个值,所以只需将其乘以想得到的最大随机数(对付英语字母,这个数字是26),再加上一个偏移量,获得最小的随机数。
尽量我们在这儿外貌上要处理惩罚的是字符,但switch语句实际利用的字符的整数值。在case语句中,用单引号关闭起来的字符也会发生整数值,以便我们举办较量。
请留意case语句彼此间是如何聚合在一起的,它们依次分列,为一部门特定的代码提供了多种匹配模式。也应留意将break语句置于一个特定case的末端,不然节制流程会简朴地下移,并继承判定下一个条件是否相符。

1. 详细的计较
应出格寄望下面这个语句:
char c = (char)(Math.random() * 26 + ‘a’);
Math.random()会发生一个double值,所以26会转换成double范例,以便执行乘法运算。这个运算也会发生一个double值。这意味着为了执行加法,必需无将’a’转换成一个double。操作一个“造型”,double功效会转换回char。
我们的第一个问题是,造型会对char作什么样的处理惩罚呢?换言之,假设一个值是29.7,我们把它造型成一个char,那么功效值到底是30照旧29呢?谜底可从下面这个例子中获得:

 

//: CastingNumbers.java
// What happens when you cast a float or double
// to an integral value?

public class CastingNumbers {
  public static void main(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
// Does Math.random() produce 0.0 and 1.0?

public class RandomBounds {
  static void usage() {
    System.err.println("Usage: \n\t" +
      "RandomBounds lower\n\t" +
      "RandomBounds upper");
    System.exit(1);
  }
  public static void main(String[] args) {
    if(args.length != 1) usage();
    if(args[0].equals("lower")) {
      while(Math.random() != 0.0)
        ; // Keep trying
      System.out.println("Produced 0.0!");
    } 
    else if(args[0].equals("upper")) {
      while(Math.random() != 1.0)
        ; // Keep trying
      System.out.println("Produced 1.0!");
    } 
    else 
      usage();
  }
} ///:~

#p#分页标题#e#

为运行这个措施,只需在呼吁行键入下述呼吁即可:
java RandomBounds lower

java RandomBounds upper

在这两种环境下,我们都必需人工间断措施,所以会发明Math.random()“好像”永远都不会发生0.0或1.0。但这只是一项尝试罢了。若想到0和1之间有2的128次方差异的双精度小数,所以假如全部发生这些数字,耗费的时间会远远高出一小我私家的生命。虽然,最后的功效是在Math.random()的输出中包罗了0.0。可能用数字语言表达,输出值范畴是[0,1)。

    关键字:

在线提交作业