程序逻辑控制
顺序结构
简单的说,我们通常写的代码就是顺序结构,程序执行时按照我们书写的顺序一行一行执行。如果改变我们代码的书写顺序,则执行顺序也会改变。
System.out.println("1111");
System.out.println("2222");
System.out.println("3333");
改变一下代码的书写顺序
System.out.println("1111");
System.out.println("3333");
System.out.println("2222");
分支结构
if语句
语法形式1:
if(布尔表达式) {
//条件满足执行的代码
}
语法形式2:
if(布尔表达式) {
//条件满足执行的代码
}else {
//条件不满足执行的代码
}
**语法形式3:**多分支形式
if(布尔表达式){
//条件满足时执行代码
}else if(布尔表达式){
//条件满足时执行代码
}else{
//条件都不满足时执行代码
}
Java中的语法格式与C语言基本相同,这里不在过多赘述,唯一不同的是if()中的判断条件只能是布尔表达式,不存在1为true,0位false的情况
写个例子结束我们的if语句
int year = 1996;
if ((year%4==0&&year%100!=0)||year%400==0)
{
System.out.println(year+"是闰年");
} else {
System.out.println(year+"不是闰年");
}
switch语句
基本语法
switch(整数|枚举|字符|字符串){
case 内容1 : {
内容满足时执行语句;
[break;]
}
case 内容2 : {
内容满足时执行语句;
[break;]
}
...
default:{
内容都不满足时执行语句;
[break;]
}
}
具体的语法不在赘述,与C语言基本相同,这里仅给出一些重点的注意事项
注意:
- 根据switch中值的不同,会执行对应的case语句,遇到break就会结束该case语句
- 如果switch中的值没有匹配的case,就会执行default中的语句,建议一个switch语句最好都要带上default
- break 不要遗漏,不写break的时候,case语句会依次向下执行, 从而失去了多分支的效果
- switch 中的值只能是 整数|枚举|字符|字符串
循环结构
while循环
基本语法
while(布尔表达式) {
//循环语句;
}
循环条件为true,则执行循环语句,否则结束循环
注意:
- while下面的语句可以不写{ }, 但是不写的时候只能支持一条语句,建议还是加上{ },while 后面不要多写 分号, 否则可能导致循环不能正确执行
break
break的功能是让循环提前结束
举个例子体会:
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍数, 为:" + num);
break;
}
num++;
}
continue
continue的功能是跳过这次循环,立即进入下次循环
举个例子体会:找到 100 - 200 中所有 3 的倍数
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++; // 这里的 ++ 不要忘记! 否则会死循环.
continue;
}
System.out.println("找到了 3 的倍数, 为:" + num);
num++;
}
执行到continue语句的时候,就会立刻进入下次循环(判定循环条件),从而不会执行到下方的打印语句
for循环
基本语法
for(表达式1;布尔表达式2;表达式3) {
//循环体;
}
表达式1: 用于初始化循环变量.
布尔表达式2: 循环条件
表达式3: 更新循环变量.
例子:计算1~100的和
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("sum = " + sum);
与if类似,for下面的语句可以不写{ },但是不写的时候只能支持一条语句,建议还是加上{ },for 后面不要多写分号,否则可能导致循环不能正确执行
do while循环
基本语法
do{
循环语句;
}while(循环条件);
先执行循环语句,再判定循环条件,do while 循环最后的分号不要忘记,一般 do while很少用到,更推荐使用for和while
输入输出
输出到控制台
System.out.println(msg); // 输出一个字符串,并且换行
System.out.print(msg); // 输出一个字符串,不换行
System.out.printf(format, msg); // 格式化输出,与C语言printf()用法基本一致
从键盘输入
import java.util.Scanner;
如同C语言使用printf()和scanf()之前需要包含头文件(#include<stdio.h>),Java从键盘输入时也需要类似的东西,我们称之为包(package),导入方法如上代码所示
以下是使用 Scanner 读取字符串/整数/浮点数的方法,具体的原理我们先不细说,大家可以先按照格式去使用,等我们学习了类与对象之后便可明白这样做的原理。
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("姓名:"+name+"年龄:"+age+"工资:"+salary);
注意
1.在读取数字和字符时,要先读取字符,后读取数字
//先读字符串
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
System.out.println(name);
int age = sc.nextInt();
System.out.println(age);
//先读数字
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
System.out.println(age);
String name = sc.nextLine();
System.out.println(name);
我们可以发现,我们仅仅输入数字后,程序就结束了,为什么呢?
因为我们在输入数字时敲下的回车(\n)被当成字符串被读取了,所以在输出字符串时输出了一个换行符,让我们看起来读取字符串和输出字符串的操作是失效的,所以我们今后要尽量注意去避免这种情况。
2.优先使用nextLine()去读取字符串】
next():对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。
nextLine():结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
System.out.println(name);
String name1 = sc.next();
System.out.println(name1);
3.循环读入
Scanner sc = new Scanner(System.in);
double sum = 0.0;
int num = 0;
while (sc.hasNextDouble()) {
double tmp = sc.nextDouble();
sum += tmp;
num++;
}
System.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);
hasnextInt(),hasnext()等都可以循环读入,需要注意的是,当我们需要结束循环读入时,使用ctrl + D来结束输入(Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl +d,IDEA使用Ctrl+d )
这篇文章主要是对我们所熟悉的分支循环等结构的简单回顾和复习,并且对Java中的输入输出进行了较为详细的介绍,但因为我们对Java掌握内容太少,一些操作的原理我们也暂未详细讲解,但相信随着我们之后的学习,我们一定会重新掌握那些未深入讲解的东西,同时,由于笔者水平有限,文章可能出现一些错误,希望大家可以多多批评指正!