JavaSE从小白到大佬(基础篇之语法篇)

本文深入讲解Java中的选择结构和循环结构,包括if语句、switch语句、for循环、while循环和do-while循环的语法及应用实例。帮助读者掌握Java编程的基础控制流程。

语法

选择结构

if语句

一、单分支if语句(指当且仅当条件为一个ture时执行的一个动作)
语法:
在这里插入图片描述
当布尔表达式判断结果为真时,执行语句(组)。其流程图如下:
在这里插入图片描述
注意:有时候布尔表达式后面的大括号可以省略。但最好不要省略。
二、双分支if-else语句
语法:
在这里插入图片描述
他表示如果布尔表达式的判断结果为ture,则执行布尔表达式为真时所要执行的语句。否则执行else后面所跟的语句。
流程图如下:
在这里插入图片描述三、多分支if-else语句
语法:

if(布尔表达式1){
    	语句1
}else if(布尔表达式2){
	语句2
}  ...
else{
	语句n
}

解释一下:如果布尔表达式1结果为真则执行语句1,否则向下继续判断如果布尔表达式2结果为真则执行语句2,否则在向下。。。一直到最后都没有符合布尔表达式的条件则执行else之后的语句n.
流程图:
如下就是一个典型的多分支if-else语句流程图。
利用多分支if-else来判断成绩score的等级
四、if语句中的常见错误和陷阱!!!
1.忘记必要的括号(所以在编写代码的时候一定要仔细)
在这里插入图片描述
2.在if行出现错误的分号(对于这种错误,有时候编译也会通过但是执行出来的结果却不会正确。逻辑错误一般是头脑不清楚或者是因为编译者自己的习惯引起的)

在这里插入图片描述
3.对布尔值的冗余测试
为了检测测试条件中的布尔值时true还是false,比较好的方法就是直接测试布尔类型变量,避免不必要的多余与错误。
在这里插入图片描述
4.悬空else出现歧义
(原因)else总是匹配离他最近的 if 子匹配句,例如
在这里插入图片描述
对于程序a)和b),else语句匹配的是if(i>k)。如果要强制else匹配第一个if的子语句,则需要在第一个if语句后面加上一个大括号。
在这里插入图片描述
5.两个浮点数的相等测试
对于两个浮点数之间最好不要比较,因为浮点数具有有限的计算精度,在计算时可能存在取整错误。因此两个浮点数之间比较并不可靠。
6.简化布尔变量赋值
在这里插入图片描述
7.尽量避免重复性的代码比如:

在这里插入图片描述
这样有利于日后对代码的维护工作,是一个好习惯。

例题1:(多分支if-else)
在这里插入图片描述

/*
1.输入体重a  输入身高b 输入年龄age
2.换算之后体重weight=a/0.45359237; 身高height=b/0.0254;
3.计算BMI index=weight/(height*height)
4.先判断年龄 age>=20 再判断BMI
             age<20 无法判断
5.判断BMI
6.输出
*/
import java.util.Scanner;
class Demo313
{
 public static void main(String[] args){
  Scanner scanner=new Scanner(System.in);
  System.out.print("请输入年龄、身高和体重:");
  int age=scanner.nextInt();
  double a=scanner.nextDouble();
  double b=scanner.nextDouble();
  double weight=a/0.45359237;
  double height=b/0.0254;
  double index=weight/(height*height);
  if(age<20){
   System.out.println("无法计算BIM");
   return;
  }else{
   if(index<18.5){
    System.out.println("偏瘦");
   }else if(index<25.0){
    System.out.println("正常");
   }else if(index<30.0){
    System.out.println("偏胖");
   }else{
    System.out.println("过胖");
   }
  }
 }
}

例题2:
在这里插入图片描述

/*
1.随机产生一个两位数num1  定义a,b为两位数字 sum1=a+b用来记录两位数字之和
2.用户输入一个两位数num2  定义c,d为两位数字 sum2=c+d用来记录两位数字之和
3.判断
   3.1 如果num1==num2 输出 奖金为10000
   3.2 如果sum1==sum2 输出 奖金为3000
   3.3 如果a==b||a==c||b==c||b==d  输出 奖金为1000
*/
import java.util.*;
class Demo32
{
 public static void main(String[] args){
  Random random=new Random();
  int num1=random.nextInt(101);
  //System.out.println("随机生成的号码为"+num1);
  Scanner scanner=new Scanner(System.in);
  System.out.print("请输入你所要买的号码");
  int num2=scanner.nextInt();
  int a=num1%10;int b=(num1/10)%10;int sum1=a+b;//对随机生成的号码的处理
  int c=num2%10;int d=(num2/10)%10;int sum2=c+d;//对输入的号码进行处理
  if(num1==num2){
   System.out.println("一等奖,奖金为10000");
  }else if(sum1==sum2){
   System.out.println("二等奖,奖金为3000");
  }else if(a==c||a==d||b==c||b==d){
   System.out.println("三等奖,奖金为1000");
  }else {
   System.out.println("未中奖");
  }
 }
}

例题3:
在这里插入图片描述

import java.util.Scanner;
/*
1.输入一个三位数num
2.拆分该数字 对num取余 a个位 b十位 c百位
3.重新组成一个新数字newNum=100*a+10*b+c;
4.判断num是否等于newNum
 相等 是回文数
 不相等 不是回文数
5.输出
*/
class Demo35
{
 public static void main(String[] args){
  Scanner scanner=new Scanner(System.in);
  System.out.print("请输入一个三位数:");
  int num=scanner.nextInt();
  int num1=num;
  int a=num%10;
  num/=10;
  int b=num%10;
  num/=10;
  int c=num%10;
  int newNum=100*a+10*b+c;
  if(num1==newNum){
   System.out.println("数字"+num1+"是回文数");
  }else{
   System.out.println("数字"+num1+"不是回文数");
  }
 }
}

例题4:
在这里插入图片描述

import java.util.Scanner;
/*
1.输入圆的圆心点ox oy和半径radius
2.输入所要查找的点 x y
3.计算该点到圆心的距离 distance
4.判断 
  如果distance<radius 在圆内
  如果distance=radius 在圆上
  如果distance>radius 在圆外
5.输出
*/
class Demo38
{
 public static void main(String[] args){
 Scanner scanner=new Scanner(System.in);
 System.out.println("请输出该圆的圆心和半径:");
 double ox=scanner.nextDouble();
 double oy=scanner.nextDouble();
 double radius=scanner.nextDouble();
 System.out.println("请输出要查找的点的坐标");
 double x=scanner.nextDouble();
 double y=scanner.nextDouble();
 double distance=Math.pow(((ox-x)*(ox-x)+(oy-y)*(oy-y)),0.5);
 if(distance<radius){
   System.out.println("该点在圆内");
  }else if(distance>radius){
   System.out.println("该点在圆外");
  }else{
   System.out.println("该点在圆内上");
  }
 }
}

switch语句

Java提供switch语句用来处理多重条件的问题
语法:

switch(表达式){
	case 1:
		语句块1;
		break;
	case 2:
		语句块2;
		break;
	...
	case n:
	 	语句块n;
	 	break;
	 default:
	 	语句块n+1;
	 	break;
	 }


注意:
1.表达式内取值byte、short、int、char、String、枚举类型,并且必须用括号括住
2.case后面跟的是与switch表达式的值具有相同的数据类型
3.当switch表达式的值与case值相同时,执行从case开始的语句,直到遇见break或者到switch结束
4.默认情况(default)是可选的
5.关键字break是可选的,用来跳出循环

循环结构

Java提供三种类型的循环语句:for循环、while循环、do-while循环

1)for循环

语法:

for(初始条件;循环继续条件;步长){
	循环体;
}

执行流程:先执型初始条件,在判断循环继续条件,在执行循环体,最后执行步长(步长一般是自增或自减运算)

流程图:
在这里插入图片描述
注意:如果省略for循环中的循环条件,则隐含认为他执行循环继续条件true,变成无限循环
例题:求两个数的最大公约数

/*
1.输入两个整数num1 num2
2.定义变量gcd
3.反向比较  遇见的第一个可以被两者整除的数字就是最大公约数
    if(num1>num2) i%num2==0&&j%num2==0 gcd=i
    else gcd j
4.输出
*/
import java.util.Scanner;
class Demo4C
{
 public static void main(String[] args){
  Scanner scanner=new Scanner(System.in);
  System.out.print("请分别输入两个整数:");
  int num1=scanner.nextInt();
  int num2=scanner.nextInt();
  if(num1>num2){
   for(int i=num1;i>1;i--){
    for(int j=num2;j>1;j--){
     if(num1%i==0&&num2%i==0){
      System.out.println("gcd=" +i);
      return;
     }
    }
   }
  }
 }
}

while循环

while循环 在循环条件为真的情况下重复执行语句
语法结构:

while(循环继续条件){
	//循环体
	语句组;
}

流程图:
在这里插入图片描述
注意:要保证循环条件最终可以变成false,或者出现关键字break或return,才能使程序停止运行。否则程序将陷入死循环
例题:循环猜数字游戏

/*
1.输入两个整数num1 num2
2.定义变量gcd
3.反向比较  遇见的第一个可以被两者整除的数字就是最大公约数
    if(num1>num2) i%num2==0&&j%num2==0 gcd=i
    else gcd j
4.输出
*/
import java.util.Scanner;
class Demo4C
{
 public static void main(String[] args){
  Scanner scanner=new Scanner(System.in);
  System.out.print("请分别输入两个整数:");
  int num1=scanner.nextInt();
  int num2=scanner.nextInt();
  if(num1>num2){
   for(int i=num1;i>1;i--){
    for(int j=num2;j>1;j--){
     if(num1%i==0&&num2%i==0){
      System.out.println("gcd=" +i);
      return;
     }
    }
   }
  }
 }
}

在这里插入图片描述

4) do-while循环

do-while循环和while循环基本一致,不同的是do-while循环先执行一次循环体,然后继续判断循环继续条件
语法结构:

do{
	循环体;
}while(循环继续条件);

流程图:
在这里插入图片描述
如果循环中的语句至少执行一次,则推荐使用do-while循环语句。
例题见下一篇文章!

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值