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

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.0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
1.2
1.3
1.4000000000000001
1.5000000000000002
1.6000000000000003
1.7000000000000004
1.8000000000000005
1.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:
0
1
2
3
4
i= 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将跳到与标签匹配的循环首部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值