java 控制流程 &枚举类型 enum 的用法 & 带标签的break语句 &continue语句

来源:互联网 发布:淘宝代购百丽是正品吗 编辑:程序博客网 时间:2024/04/30 16:14

java 没有goto语句,但是可以用break+标签来跳到目的地
java有一种变形的for循环
java块:块确定了变量的作用域,不能在嵌套的两个块中声明同名的变量。
例如:

public static void main(String[] args){    int n;    {    int n:     //不正确    }}

在C++中,可以在嵌套的块中冲定义一个变量,在内层定义的变量会覆盖外层的变量,但是可能会导致程序错误,java中不允许这样做。

条件语句

while循环语句首先检测循环条件,因此,while中的代码有可能不执行,如果希望代码中的程序至少执行一次,应使用do{ }while()语句。
注意:在循环中,检测两个浮点数是否相等要格外小心,下面的for循环:

     for(double i=0;i!=1;i=i+0.1)           System.out.println(i);run:run:0.00.10.20.300000000000000040.40.50.60.70.79999999999999990.89999999999999990.99999999999999991.09999999999999991.21.31.40000000000000011.50000000000000021.60000000000000031.70000000000000041.80000000000000051.9000000000000006……

可能永远也无法结束
当在for语句的第1部分中声明了一个变量以后,这个变量的作用于就是for循环的整个循环体。
特别指出:java中,如果在for语句内部定义了一个变量,这个变量就不能再循环体制外使用,因此,如果希望在for循环体之外使用这个变量,就必须确保这个变量在循环语句的前面而且在外部声明!

 for(int i=0;i<5;++i)    System.out.println(i); if(i>1)    System.out.println(i); //编译错误,找不到i变量,应该在for外面声明

正确的方式:

      int i;      for(i=0;i<5;++i)          System.out.println(i);      if(i>2)          System.out.println("i= "+i);run:01234i= 5

多重选择 switch语句

       Scanner in=new Scanner(System.in);       int number=in.nextInt();       switch(number)       {           case 1:               System.out.println(number);               break;           case 2:               System.out.println(number);               break;           case 3:               System.out.println(number);               break;           default:               System.out.println(number);               break;

switch语句将从预选相知相匹配的case标签处开始执行直到遇到break; 或者switch语句的结束为止。如果没有相匹配的case标签,而又default语句,就执行这个句子。
警告:使用switch可能会触发多个case分支。如果在case分支语句的末尾没有break语句,那么就会接着执行下一个case分支语句。这种情况很危险,常常会引发错误,为此,我们在程序中从不使用switch语句。
如果你比我们更喜欢switch语句,编译代码时可以考虑加上-Xlint:fallthrough 选项,这样一来,如果某个分支最后缺少一个break语句,编译器就会给出一个警告信息
如果你确实正是想使用这种直通式(fallthrough)行为,可以为其外围方法加一个标注:@supressWarnnings(“fallthrough”).这样就不会对这个方法生成警告了
@标注是为编译器或处理java源文件或者类文件的工具提供的一种机制。
switch中的case可以是:
1,类型为char、byte、short、或者int的常量表达式
2,枚举常量:

    package 第3章;// enum Size {A,B,C,D};  enum放在这里也可以public class 第3章a{    public static void main(String[] args)    {        Size number=Size.A;  //  注意        switch(number)        {            case A:                System.out.println(number);                break;            case B:                System.out.println(number);                break;            default:                System.out.println("hello");                break;        }    }}enum Size {A,B,C,D};  //  枚举类型的地位和class是并列的,不能放在class内部,可以放于class后,也可以放于package后,class前
package 第3章;public class 第3章a{    public static void main(String[] args)    {       size name=size.boy;       size name2=null;        System.out.println(name);        System.out.println(name2);    }}enum size {hello,good,boy};

3,case标签还可以是字符串字面量
package 第3章;

public class 第3章a
{
public static void main(String[] args)
{
String number=”hello”;
switch(number)
{
case “good”:
System.out.println(“a”);
break;
case “hello”:
System.out.println(“b”);
}
}
}
java.lang.String;
toLowerCase():将字符串转换为小写,返回this
toUpperCase():将字符串转换为大写,返回this

package 第3章;import java.util.*;public class 第3章a{    public static void main(String[] args)    {        Scanner in=new Scanner(System.in);        String str=in.nextLine();        switch(str.toLowerCase())        {            case "hello":                System.out.println("a");                break;            case "good":                System.out.println("b");                break;        }    }}

不带标签的break语句,可以用于跳出switch,也可以用于退出循环语句(只退出当前循环语句)
java还提供了一种带标签的break语句,用于跳出多重嵌套的循环语句
标签必须放在希望跳出的最外层循环之前,并且紧跟一个冒号
注意:不是标签在哪就跳到那,必须放在循环体的前面,而不能放在循环体的后面。
跳到循环体块的尾部,而不是调到haha:处!
a

package 第3章;import java.util.*;public class 第3章a{    public static void main(String[] args)    { Scanner in=new Scanner(System.in);    int number=in.nextInt();    haha:     //  System.out.println("what?");   这里不可以有语句    while(number>0)     {        System.out.println(number--);        if(number<3)            break haha;    }    if(number==2)        System.out.println("well");    else        System.out.println("what?");    System.out.println("hello"+number);    }}//对于任何使用break语句的代码,都需要检测循环是正常结束,还是由break退出。
package 第3章;import java.util.*;public class 第3章a{    public static void main(String[] args)    { Scanner in=new Scanner(System.in);  int number =in.nextLine();  //  System.out.println("what?");    while(number>0)    {        System.out.println(number--);        if(number<3)            break haha;    }    if(number==2)        System.out.println("well");    else        System.out.println("what?");    System.out.println("hello"+number);    }}

break
使用场景有两个,第一,switch中,第二,循环语句中。 
switch场景就不多说了,现在说说循环语句的场景。 
在循环语句中,表示跳出循环语句继续向下执行。

        for(int a=0;a<6;a++)        {            if(a>3)            {                break;            }            System.out.println("a="+a);        }

上面的代码表示当a循环到a=4的时候跳出循环。 

还有一种场景是双循环中break跳出哪一个循环的问题。

     for(int i=1;i<=4;i++)     {            for(int j=1;j<=4;j++)            {                System.out.println("i="+i+",j="+j);                break;            }            }

在上面的双循环中,break跳出的循环是内层循环,而外层循环继续。 
运行结果是: 
 
这时候有个问题,如果我想跳出外层循环怎么办呢? 
那就给循环起个名字。

    w:for(int i=1;i<=4;i++){            n:for(int j=1;j<=4;j++){                                    System.out.println("i="+i+",j="+j);                break w;            }           }

这时候,跳出的循环就是名字为w的外循环了,且不会在执行一遍w。
continue
continue的使用场景是在循环中,想要跳出当次循环,继续下次循环。

      w:for(int i=1;i<=4;i++){            n:for(int j=1;j<=4;j++){                                    System.out.println("i="+i+",j="+j);                continue w;            }           } 


这里写图片描述

重点:1.break和continue语句的作用范围就是当前的循环。
continue
与break语句一样,,他将中断正常的控制流程。continue将控制转移到最内层循环的首部。

package 第3章;import java.util.*;public class 第3章a{    public static void main(String[] args)    {        Scanner in=new Scanner(System.in);        double sum=0;        double goal=100;        while(sum<goal)        {            System.out.println("please input a sum");            double n=in.nextDouble();            if(n<0)            {                System.out.println("what?");                continue;            }            sum+=n;        }    }}

如果将continue语句用于for循环中,就可以跳到for循环的更新部分
带标签的continue将跳到与标签匹配的循环首部

阅读全文
0 0
原创粉丝点击