程序逻辑控制语句


提示:以下是本篇文章正文内容,下面案例可供参考

一、分支结构

1. if语句

1.1 语法格式1

if (布尔表达式){
//如果布尔表达式的结果为true,执行if中的语句,否则不执行
//语句
}

举例:分数超过90分,获得学习之星称号。

int score=92;
if (score>90){
System.out.println("学习之星");//输出学习之星

int score=89;
if (score>90){
System.out.println("学习之星");//布尔表达式结果为false,不执行if中的语句
}

1.2 语法格式2

if (布尔表达式){
   //语句1
}else{
   //语句2
}//如果布尔表达式结果为true,则执行语句1,否则执行语句2.

举例:分数超过60分,则考试通过;否则未通过。

int score=80;
if (score>60){
  System.out.println("考试通过");
}else{
  System.out.println("考试未通过");
}

1.3 语法格式3

if (布尔表达式1){
   //语句1
}else if(布尔表达式2){
   //语句2
}else{
   //语句3
}
//如果布尔表达式1结果为true,则执行语句1,否则
//表达式2结果为true,则执行语句2,否则执行语句3.

例如给学生成绩分段:

  • 分数在[0, 60 ), 不及格
  • 分数在[60, 70), 及格
  • 分数在[70, 80), 中等
  • 分数在[80, 90), 良好
  • 分数在[90,100], 优秀
    按照上述办法,公布学生成绩
int score=61;//输出及格
if(score>=90&&score<=100){
            System.out.println("优秀");
}else if(score>=80&&score<90){
            System.out.println("良好");
}else if(score>=70&&score<80){
            System.out.println("中等");
}else if(score>=60&&score<70){
            System.out.println("及格");
}else if(score>=0&&score<60){
            System.out.println("不及格");
}else{
System.out.println("数据错误");
}

需注意的问题:

  • 分号问题
int x=20;
if(x==10);//此处多了一个分号
{
System.out.println("错误");
}

  if语句后面多了一个分号,导致{}中的代码成为和if无关的代码块。

  • 悬垂else问题
int x=10;
int y=1;
       if(x==10)
           if(y==10)
               System.out.println("a");
       else
               System.out.println("b");

   if、else语句中可以不加花括号,也可以写语句,但是只能写一条语句;此时else是和最近的if匹配;一般不建议这样写。

2. switch语句

基本语法:

switch(表达式){
            case 常量值1:{
                //语句1;
                [break;]
            }
            case 常量值2:{
                //语句2;
                [break;]
            }
            ...
            default:{
                //都不满足时,执行的语句
                [break;]
            }
        }

执行流程:

  • 先计算表达式的值.
  • 和case依次比较,一旦匹配就执行该项下的语句,直到遇到break时结束.

注意:

  • default是可选项,可以有也可以没有,一般都会加上;当表达式的值没有与所列项匹配时,执行default.
  • 从语法上来讲,case之间没有先后次序之分,包括default,尽量将case按照常量值从小到大排列.
  • 字符串是可以排序的,比如:按照字典排序.

代码示例(根据day的值输出星期几):

int day=3;
switch(day){
            case 1:{
                System.out.println("星期一");
                break;
            }
            case 2:{
                System.out.println("星期二");
                break;
            }
            case 3:{
                System.out.println("星期三");
                break;
            }
            case 4:{
                System.out.println("星期四");
                break;
            }
            case 5:{
                System.out.println("星期五");
                break;
            }
            case 6:{
                System.out.println("星期六");
                break;
            }
            case 7:{
                System.out.println("星期日");
                break;
            }
            default:{
                System.out.println("输入有误");
                break;
            }
        }

注意事项

  • 多个case后的常量值不可以重复
  • switch的括号内只能是以下类型的表达式:
    基本类型:byte、char、short、int
    引用类型:String常量串、枚举类型
    否则会报错
double num=1.0;
switch(num){
            case 1.0:{
                System.out.println("he");
                break;
            }
            case 2.0:{
                System.out.println("ha");
                break;
            }
            default:{
                System.out.println("输入有误");
                break;
            }
        }
//报错 java: 不兼容的类型: 从double转换到int可能会有损失
  • break不能丢,否则会失去"多分支选择"的效果
int day=1;
switch(day){
           case 1:{
               System.out.println("星期一");
               //break;
           }
           case 2:{
               System.out.println("星期二");
               break;
           }
           default:{
               System.out.println("输入有误");
               break;
           }
       }
       //运行结果:
       星期一
       星期二
  • switch不能表达复杂的条件
//例如:如果num的值在10到20之间,就打印he
//使用if就很容易表达,但是使用switch就无法表示
if (num>10&&num<20){
System.out.println("he");
}
  • switch支持嵌套,一般不推荐
  • 综上:switch的使用局限性比较大.

二、循环结构

1. while 循环

基本语法格式:

while(循环条件){
 //循环语句;
}

  循环条件(表达式结果为boolean类型)为true,则执行循环语句;否则结束循环.

实现循环的关键点:

  • 循环因子起始值
  • 循环的条件
  • 循环当中执行的语句–即每次循环时需要做的事
  • 循环因子的修改(递增/递减)

代码示例1:打印1-10的数字

int num=1;
while (num<=10){//循环条件---boolean结果的表达式
System.out.println(num);
num++;//循环因子的递增或递减

System.out.println("=================");
num =10;
while(num>0){
System.out.println(num);
num--;
}

代码示例2:计算1-100的和

//方法1
int sum=0;
int j=1;
while(j<=100){
     sum+=j;
     j++;
}
System.out.println(sum);
//方法2
//求和公式
System.out.println((1+100)*100/2);

代码示例3:计算5的阶乘

//1*2*3*4*5
//给一个变量,从1递增到5
int i=1;
int rst=1;
while(i<=5){
      rst*=i;
      i++;
}
System.out.println(rst);

代码示例4:计算1!+2!+3!+4!+5!

int num=1;
int sum=0;
//外层循环求和
while(num<=5){
    //算num的阶乘
    int i=1;
    int rst=1;
    while(i<=num){
       rst*=i;
       i++;
    }
    sum+=rst;
    num++;
}        
System.out.println("sum="+sum);

  这里可以发现当一个代码中有多重循环时,代码的复杂程度就大大提高了.
注意事项

  • 和if类似,while下面的语句可以不写{},但是不写的时候只能支持一条语句,建议写上{}.
  • 和if类似,while后面的{建议和while写在同一行.
  • 和if类似,while后面不要多写分号,否则导致出错.
int num=1;
while(num<=10);{
   System.out.println(num);
   num++;
}
//死循环,无内容输出

2. break

break的功能是让循环提前结束,break所在的循环结束.
代码示例:找到100-200中第一个3的倍数

int i=100;
        while(i<=200){
            if(0==i%3){
                System.out.println(i);
                break;//作用:如果执行到break的位置,结束当前while循环
            }
            i++;
        }
//输出102

3. continue

continue的功能是跳过这次循环,结束单趟循环,立即进入下次循环.
代码示例:找到100-200中所有3的倍数

int num1=100;
while(num1<=200){
    if(num1%3!=0){
         num1++;
         continue;
     }
     System.out.println("找到了3的倍数,为:"+num1);
     num1++;
}

4. for 循环

基本语法:

for (表达式1;布尔表达式2;表达式3){
    表达式4;
}
  • 表达式1:用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次.
  • 表达式2:循环条件,满足则循环继续,否则循环结束.
  • 表达式3:循环变量更新方式.

执行过程:1234–>234–>234–>…–>2为false,循环结束.
代码示例:

  • 打印1-10的数字
for (int i=1;i<=10;i++){
     System.out.println(i);
}
  • 计算1+2+3+…+100的和
//1~100的和
int sum=0;
for(int i=1;i<=100;i++){
sum+=i;
}
System.out.println("sum="+sum);
//输出结果:sum=5050
  • 计算5的阶乘
 //计算5的阶乘
 //计算1*2*3*4*5
 int rst=1;
 for(int i=1;i<=5;i++){
      rst*=i;
  }
  System.out.println("5的阶乘为"+rst);
  //输出结果:5的阶乘为120
  • 计算1!+2!+3!+4!+5!
int sum1=0;
for(int j=1;j<=5;j++){
    int rst=1;
    for(int i=1;i<=j;i++){
        rst*=i;
    }
    sum1+=rst;
}
System.out.println("1!+2!+3!+4!+5!="+sum1);
//输出结果:1!+2!+3!+4!+5!=153

注意事项:

  • 和if类似,for后面的语句可以不写{},但是不写的时候只能支持一条语句,建议写上{}.
  • 和if类似,for后面的{建议和for写在同一行.
  • 和if类似,for后面不要多写分号,否则可能导致循环不能正确执行.
  • 和while循环一样,结束单趟循环用continue,结束整个循环用break.

5. do while 循环

基本语法:

do{
   循环语句;
}while(循环条件);

先执行循环语句,再判断循环条件,循环条件成立则继续执行,否则循环结束.
代码示例:打印1-10

for (int i=1;i<=10;i++){
     System.out.println(i);
}

注意事项:

  • do while循环最后的分号不要忘记.
  • 一般do while很少用到,更推荐使用for或者while.

三、输入输出

1. 输出到控制台

基本语法:

System.out.println(msg);//输出一个字符串,带换行
System.out.print(msg);//输出一个字符串,不带换行
System.out.printf(format,msg);//格式化输出
  • println输出的内容自带\n,print不带\n.
  • printf的格式化输出方式和C语言的printf基本是一致的.

代码示例:

System.out.println("hello world");
int x=10;
System.out.printf("x=%d\n",x);//格式化输出

格式化字符串

转换符类型举例输出
d十进制整数("%d",100)100
x十六进制整数("%x",100)64
o八进制整数("%o",100)144
f定点浮点数("%f",100f)100.000000
e指数浮点数("%e",100f)1.000000e+02
g通用浮点数("%g",100f)100.000
a十六进制浮点数("%a",100f)0x1.9p6
s字符串("%s",100)100
c字符("%c",‘1’)1
b布尔值("%b",100)true
h散列码("%h",100)64
%百分号("%.2f%%",2/7f)0.29%

2. 从键盘输入

使用Scanner读取字符串/整数/浮点数

import java.util.Scanner;
public class control {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你的姓名:");
        String name =sc.nextLine();
        System.out.println("请输入你的年龄:");
        int age =sc.nextInt();
        System.out.println("请输入你的工资:");
        float salary =sc.nextFloat();
        System.out.println("你的信息如下:");
        System.out.println("姓名:"+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
        sc.close();
    }
}
//输出结果
请输入你的姓名:
张三
请输入你的年龄:
18
请输入你的工资:
2000
你的信息如下:
姓名:张三
年龄:18
工资:2000.0

输入不同类型的数据:

 public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);//标准输入固定写法
        int data =sc.nextInt();//要求用户通过键盘输入一个int类型的数据
        double d =sc.nextDouble();//要求用户通过键盘输入一个double类型的数据
        String s =sc.next();//要求用户通过键盘输入一个String类型的字符串
        System.out.println(data);
        System.out.println(d);
        System.out.println(s);

字符串的输入:

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String s1=sc.next();
        System.out.println(s1);
        //输入hello world
        //输出hello
        
        System.out.println("============");
        String s2 =sc.nextLine();
        System.out.println(s2);
        //输入hello world
        //输出hello world
        sc.close();
    }

sc.next()和sc.nextLine()的区别:

  • sc.next():接收字符串,但是在接收时,遇到空格就终止接收了,空格之后的内容不再接收.
  • sc.nextLine():接收整行的字符串.
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值