逻辑控制
顺序执行
按照代码书写的顺序执行
public static void main(String[] args) {
System.out.println("onward");
System.out.println("and");
System.out.println("upward");
}
条件执行:if、switch
if语句
语法格式1:
if(布尔表达式){
//语句
}
如果布尔表达式结果为true时,则执行语句,否则不执行
语法格式2:
if(布尔表达式){
//语句1
}else{
//语句2
}
如果布尔表达式结果为true时,则执行语句1,否则执行else中的语句2
语法格式3:
if(布尔表达式1){
//语句1
}else if(布尔表达式2){
//语句2
}else{
//语句3
}
如果布尔表达式1结果为true时,则执行语句1,否则若布尔表达式2结果为true,执行语句2,否则执行else中的语句3
练习:
- 判断一个数字是奇数还是偶数
public static void main(String[] args) {
int num = 10;
if (num % 2 == 0){
System.out.println("偶数");
}else{
System.out.println("奇数");
}
}
- 判断一个数是正数、负数、还是0
public static void main(String[] args) {
int num = -10;
if (num > 0){
System.out.println("正数");
}else if(num < 0){
System.out.println("负数");
}else{
System.out.println("零");
}
}
- 判断一个年份是否为闰年
public static void main(String[] args) {
int year = 2024;
if (year % 400 == 0){
System.out.println("闰年");
}else if (year % 100 != 0){
if (year % 4 == 0){
System.out.println("闰年");
}else{
System.out.println("不是闰年");
}
}else{
System.out.println("不是闰年");
}
}
注意:
- 代码风格
//风格1-->推荐
int x = 10;
if (x == 10){
//语句1
}else{
//语句2
}
//风格2
int x = 10;
if (x == 10)
{
//语句1
}
else
{
//语句2
}
两种方式都是合法的,java更推荐第一种,显得代码更加紧凑。
- 分号问题
public static void main(String[] args) {
int x = 10;
if (x == 10);
{
System.out.println("don't give up");//运行结果:don't give up
}
}
此处多写了一个;号,导致分号成了if的语句体,而{}内的代码已经成为了与if无关的代码块
- 悬垂else问题
if/else语句可以不加{},直接写语句,但是只能写一条语句,此时else与最近的if相匹配,但实际不建议这样写,不易于程序员检查和阅读,也容易出现错误。
public static void main(String[] args) {
int x = 20;
int y = 10;
if (x == 10)
if (y == 20)
System.out.println("fighting");
else
System.out.println("don't give up");
//结果什么也没输出
}
加上大括号后就十分容易理解
public static void main(String[] args) {
int x = 20;
int y = 10;
if (x == 10) {
if (y == 20) {
System.out.println("fighting");
} else {
System.out.println("don't give up");
}
}
}
switch语句
基本语法
switch(表达式){
case 常量值1:{
语句1;
break;
}
case 常量值2:{
语句2;
break;
}
...
default:{
内容都不满足时执行此语句;
break;
}
}
执行流程:
- 先计算表达式的值
- 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
- 当表达式的值没有与所列项匹配时,执行default语句
例子:根据day的值输出星期
public static void main(String[] args) {
int day = 7;
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,short,int,char,注意不能是long
-
- 引用类型:String常量串,枚举类型
- break不要遗漏,否则会失去“多分支选择的结果”
public static void main(String[] args) {
int day = 1;
switch(day){
case 1: {
System.out.println("星期一");
}
default:{
System.out.println("输入有误");
}
}
//输出结果:
//星期一
//输出有误
}
- switch 不能表达复杂的条件
public static void main(String[] args) {
int num = 12;
if (num >= 10 && num <= 20){ //这其实是一个布尔表达式,所以不能用switch
System.out.println("live and learn");
}
}
- switch支持嵌套,但很丑,一般不推荐
循环结构:while、do while、for
while循环
基本语法格式:
while(循环条件){
循环语句;
}
循环条件为true,则执行循环语句,否则循环结束。
例子1:打印1~10的数字
//打印1~10的数字
public static void main(String[] args) {
int num = 1;
while(num <= 10){
System.out.println(num);
num++;
}
}
例子2:计算1~100的和
//计算1~100的和
public static void main(String[] args) {
int num = 1;
int sum = 0;
while(num <= 100){
sum += num;
num++;
}
System.out.println(sum);
}
//计算结果是5050
例子3:计算5的阶乘
//计算5的阶乘
public static void main(String[] args) {
int num = 1;
int sum = 1;
while(num <= 5){
sum *= num;
num++;
}
System.out.println(sum);
//计算结果是120
}
例子4:计算 1! + 2! + 3! + 4! + 5!
//计算 1! + 2! + 3! + 4! + 5!
public static void main(String[] args) {
int num = 1;
int sum = 0;
while(num <= 5){
int result = 1;
int i = 1;
while(i <= num){
result *= i;
i++;
}
sum += result;
num++;
}
System.out.println(sum);
}
//计算结果是153
注意:
- 和if一样,while后可以不加{},但不写只可以加一条语句,建议加上
- 和if一样,while后面的{建议和while写在同一行
- 和if一样,while后面不要多写分号,否则会导致循环不能正确执行
public static void main(String[] args) {
int num = 1;
while(num <= 10);
{
System.out.println(num);
num--;
}
//程序死循环
}
while的语句体是一个空语句,实际的{}部分与循环无关,此时num <= 10 恒成立,导致代码死循环。
break
break的功能是让循环提前结束。
例子1:找到100~200中第一个3的倍数
//找到100~200中第一个3的倍数
public static void main(String[] args) {
int num = 100;
while(num <= 200){
if (num % 3 == 0)
{
System.out.println(num);
break;
}
num++;
}
//输出102
}
continue
continue 的功能是跳过这次循环,立即进入下次循环
例子:找到100~200中所有3的倍数
//找到100~200中所有3的倍数
public static void main(String[] args) {
int num = 100;
while(num <= 200){
if (num % 3 != 0){
num++;
continue;
}
System.out.println(num);
num++;
}
}
for循环
基本语法:
for(表达式1; 布尔表达式2;表达式3){
表达式4;
}
表达式1:用于初始化循环变量初始值设置,在循环最开始时执行,仅执行一次。
表达式2:循环条件,满足则循环继续,否则循环结束。
表达式3:循环变量更新方式
例子1:打印1~10的数字
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
}
例子2:计算1~100的和
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++){
sum += i;
}
System.out.println(sum);
//计算结果是5050
}
例子3:计算 5 的阶乘
public static void main(String[] args) {
int sum = 1;
for (int i = 1; i <= 5; i++) {
sum *= i;
}
System.out.println(sum);
//计算结果是120
}
例子4:计算 1! + 2! + 3! + 4! + 5!
//计算 1! + 2! + 3! + 4! + 5!
public static void main14(String[] args) {
int num = 1;
int sum = 0;
while(num <= 5){
int result = 1;
int i = 1;
while(i <= num){
result *= i;
i++;
}
sum += result;
num++;
}
System.out.println(sum);
//计算结果是153
}
注意:
- 和if一样,for后可以不加{},但不写只可以加一条语句,建议加上
- 和if一样,for后面的 { 建议和for写在同一行
- 和if一样,for后面不要多写分号,否则会导致循环不能正确执行
- 和while一样,结束单趟循环用continue,结束整个循环用break
do while
基本语法:
do{
循环语句;
}while(循环条件);
先执行循环语句,再判定循环条件,循环条件成立则继续执行,否则循环结束
例子:打印1~10的数字
//打印1~10的数字
public static void main(String[] args) {
int num = 1;
do{
System.out.println(num);
num++;
}while(num <= 10);
}
注意:
- do while循环最后的分号不能忘记
- 一般do while很少用到,推荐使用while和for循环
输入输出
输出到控制台
基本语法:
System.out.println(msg);//输出一个字符串,带换行
System.out.print(msg);//输出一个字符串,不带换行
System.out.printf(format,msg);//格式化输出
- println 输出的内容自带\n,print 不带\n
- printf的格式化输出方式和C语言的printf是基本一致的
代码示例:
public static void main(String[] args) {
System.out.println("onward and upward");
System.out.print("onward and upward");
System.out.println();
int num = 10;
System.out.printf("num = %d", num);
}
从键盘输入
使用Scanner读取字符串/整数/浮点数
import java.util.Scanner;//需要导入util包
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的名字:");
String name = scanner.nextLine();
System.out.println("请输入你的年龄:");
int age = scanner.nextInt();
System.out.println("请输入你的工资:");
float salary = scanner.nextFloat();
System.out.println("你的信息如下:");
System.out.println("名字:"+name+" 年龄:"+age+" 工资:"+salary);
scanner.close();//调用关闭方法
}
使用 Scanner 循环读取 N 个数字,并求取其平均值
//使用 Scanner 循环读取 N 个数字,并求取其平均值
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int sum = 0;
int num = 0;
while(scanner.hasNextInt()){
sum += scanner.nextInt();
num++;
}
System.out.println(sum / num);
scanner.close();
}
当循环输入多个数据的时候,使用ctrl+z来结束输入(Windows上使用ctrl+z,Linux/Mac上使用ctrl+d)
今天我们先学习到这,继续保持学习,努力定不会辜负我们的!!!