【Java】流程控制—if、switch、for等

目录

流程控制

输入、输出

if判断

switch多重选择

while循环

do while循环

for循环

break和continue


流程控制

输入、输出

下列代码为例:

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);//创建 Scanner对象
        System.out.println("Input your name:");//打印提示
        String name=scanner.newxtLine();//读取并获取字符串
        System.out.println("Input your age:");//打印提示
        int age=scanner.nextInt();//取并获取整数
        System.out.print(name+" is "age+" years old!")//输出
    }
}

首先,我们通过import语句导入java.util.Scanner,import是导入某个类的语句,必须放到Java源代码的开头,后面我们在Java的package中会详细讲解如何使用import。

然后,创建Scanner对象并传入System.in。System.out代表标准输出流,而System.in代表标准输入流。直接使用System.in读取用户输入虽然是可以的,但需要更复杂的代码,而通过Scanner就可以简化后续的代码。

有了Scanner对象后,要读取用户输入的字符串,使用scanner.nextLine(),要读取用户输入的整数,使用scanner.nextInt()。Scanner会自动转换数据类型,因此不必手动转换

if判断


  • if的基本语法

if(){
    
}

根据if中的计算结果,JVM决定是否执行if语句块

-if可与else连用

if(){
    
}else{
    
}

else后还与多个if...else if...串联

  • 判断引用类型相等 在Java中,判断值类型的变量是否相等,可以使用==运算符。但是,判断引用类型的变量是否相等,==表示“引用是否相等”,或者说,是否指向同一个对象

例如,下面的两个String类型,它们的内容是相同的,但是,分别指向不同的对象,用==判断,结果为false:

public class Main{
    public static void main(String[] args){
        String s1="hello";
        String s2="HELLO".toLowerCase();
        System.out.println(s1);
        System.out.println(s2);
        if(s1==s2){
            System.out.println("s1==s2");
        }else{
            System.out.println("s1!=s2");
        }
    }
}

输出结果:

hello
hello
s1!=s2

要判断引用类型的变量内容是否相等,必须使用equals()方法:

public class Main{
    public static void main(String[] args){
        String s1="hello";
        String s2="HELLO".toLowerCase();
        System.out.println(s1);
        System.out.println(s2);
        if(s1.equals(s2)){
            System.out.println("s1 equals s2");
        }else{
            System.out.println("s1 not equals s2");
        }
    }
}

输出结果:

hello
hello
s1 equals s2
  • 练习 请用if ... else编写一个程序,用于计算体质指数BMI,并打印结果。

BMI = 体重(kg)除以身高(m)的平方

BMI结果:

过轻:低于18.5 正常:18.5-25 过重:25-28 肥胖:28-32 非常肥胖:高于32

参考:

import java.util.Scanner;

public class Main {

 public static void main(String[] args) {
  Scanner scanner=new Scanner(System.in);
  System.out.println("Input your weight(kg):");
  float weight=scanner.nextFloat();
  System.out.println("Input your hight(m):");
  float hight=scanner.nextFloat();
  
  float bmi=weight/(float) Math.pow(hight, 2);
  System.out.println(bmi);
  if(bmi<18.5) {
   System.out.println("过轻");
  }else if(bmi<25){
   System.out.println("正常");
  }else if(bmi<28) {
   System.out.println("过重");
  }else if(bmi<32) {
   System.out.println("肥胖");
  }else {
   System.out.println("非常肥胖");
  }
 }

}

switch多重选择


除了if语句外,还有一种条件判断,是根据某个表达式的结果,分别去执行不同的分支。

  • switch的基本语法

int option=1;
switch(option){
    case 1:
        System.out.println("Selected 1");
        break;
    case 2:
     System.out.println("Selected 2");
     break;
    case 3:
     Sysytem.out.println("Selected 3");
     break;
    default:
     System.out.println("Not selected");
     break;
}

结果:

Selected 1
  • default的作用 当option的值在分支中没有时,将转到default对应的内容。

  • break的作用 结束选择分支,若没有break,会接着执行下一个分支,直到break跳出选择分支;
    和default都为switch中不能忘记的;

  • option也可以为字符串 switch在字符串匹配时,是比较内容;

  • switch 表达式

    int opt;
    switch (fruit) {
    case "apple":
        opt = 1;
        break;
    case "pear":
    case "mango":
        opt = 2;
        break;
    default:
        opt = 0;
        break;

从java12开始(12,13,14),switch升级为更简单的表达形式,新语法没有穿透效应,不要再写break;

public class Main{
    public static void main(String[] args){
        String fruit="apple";
        int opt=switch(fruit){
            case "apple"->1;
            case "pear","mango"->2;
            default->0;
        };//赋值语句以;结尾
        System.out.println("opt="+opt);
    }
}
  • yield 如果需要复杂的语句,我们也可以写很多语句,放到{...}里,然后,用yield返回一个值作为switch语句的返回值:

public class Main{
    public static void main(String[] args){
        String fruit="orange";
        int opt=switch(fruit){
            case "apple"->1;
            case "pear","mango"->2;
            default->{
                int code=friut.hanshCode();
                yield code;
            }
        }
    }
}
  • 练习 使用switch实现一个简单的石头、剪子、布游戏。

参考:

import java.util.Scanner;

public class Main {

 public static void main(String[] args) {
  while(true) {
   System.out.println("Rock(石头)");
   System.out.println("Scissors(剪刀)");
   System.out.println("Paper(布)");
   System.out.println("end&continue");
   System.out.println("Input your chioce:");
   Scanner sc=new Scanner(System.in);
   String chioce=sc.next();
   
   int comp=(int)(Math.random()*3);//Math.random()表示【0,1)的浮点型
   System.out.print("Computer:");
   judge(chioce,comp);
   
   System.out.println("输入0继续游戏!");
   String s=sc.next();
   if(s.equals("end"))break;
  }  
 } 
 public static void judge(String chioce,int comp) {
  String flag=null;
  switch(comp) {
  case 0:
   System.out.println("Rock");
   flag="Rock";
   break;
  case 1:
   System.out.println("Scissors");
   flag="Scissors";
   break;
  case 2:
   System.out.println("Paper");
   flag="Paper";
   break;
  default :
   break;
  }
  panduan(chioce,flag);
 }
 public static void panduan(String chioce,String flag) {
  if(chioce.equals(flag)) {
   System.out.println("平局!");
  }else {
   if((chioce.equals("Rock")&&flag.equals("Scissors"))||(chioce.equals("Scissors")&&flag.equals("Paper"))||(chioce.equals("Paper")&&flag.equals("Rock"))) {
    System.out.println("you win!");
   }else {
    System.out.println("you lose!");
   }
  }
 }
}

while循环


  • 基本语法

while(条件表达式){
    
}

当条件表达式为true时就会执行{}中的语句,然后再次循环(无break);
避免 死循环即条件表达式一直为true;

  • 练习 使用while计算从m到n的和:

参考:

public class Main{
    public static void main(String[] aegs){
        int sum=0;
        int m=20;
        int n=100;
        while(m!=(n+1){
            sum+=m;
            m++;
        }
        System.out,println(sum);
    }
}

do while循环


while循环是先判断循环条件,再执行循环。而另一种do while循环则是先执行循环,再判断条件,条件满足时继续循环,条件不满足时退出。

基本语法:

do{
    
}while(条件表达式);//最后要加 ;
  • 练习 使用do while循环计算从m到n的和。

public class Main {
 public static void main(String[] args) {
  int sum = 0;
        int m = 20;
  int n = 100;
  do {
  sum+=m;
  m++
  } while (m!=(n+1));
  System.out.println(sum);
 }
}

for循环


  • 基本语法

for(初始条件;循环检测条件;循环后更新计数器){
    ///执行语句
}
  • 灵活使用for语句 for循环可以缺少初始条件、循环条件和循环更新语句

  • for each循环 Java提供了另一种for each循环,更简单地遍历数组;

public class Main{
    public static void main(String[] args){
        int[] ns={1,12,23,34,45,6}
        for(int n:ns){
            System.out.println(n);
        }
    }
}

输出结果:

1
12
23
34
45
6

和for循环相比,for each循环的变量n不再是计数器,而是直接对应到数组的每个元素。for each循环的写法也更简洁。但是,for each循环无法指定遍历顺序,也无法获取数组的索引。

除了数组外,for each循环能够遍历所有“可迭代”的数据类型,如List、Map等。

  • 练习 1.给定一个数组,请用for循环倒序输出每一个元素: 参考:

public class Main {
    public static void main(String[] args) {
        int[] ns = { 1, 4, 9, 16, 25 };
        for (int i=ns.lenght;i>0;i--) {
            System.out.println(ns[i]);
        }
    }
}

2.利用for each循环对数组每个元素求和: 参考:

public class Main {
    public static void main(String[] args) {
        int[] ns = { 1, 4, 9, 16, 25 };
        int sum = 0;
        for (int n:ns) {
            sum+=n;
        }
        System.out.println(sum); // 55
    }
}

3.圆周率π可以使用公式计算: 参考:

public class Main {
    public static void main(String[] args) {
        double pi = 0;
        for (long i=1,j=-1;i<=999999999;i++) {
         j=-1*j;
            double a=j*(2*i-1);
            pi+=4*(1/a);
        }
        System.out.println(pi);
    }
}

break和continue


  • break 在循环过程中,可以使用break语句跳出__当前__循环。

  • continue break会跳出当前循环,也就是整个循环都不会执行了。而continue则是提前结束本次循环,直接继续执行下次循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值