语句是程序的基本组成单元,一个软件就是一组语句的有序集合。
按照结构划分语句有三种形式:顺序结构、分支结构、循环结构。
一、流程控制(条件分支)
目的:满足某些条件的时候才执行一段代码。
条件分支有两种语句:if 、switch 。if 用的最多,可以代替 switch 。
1、IF 语句
第一种 IF:
if(表达式)
{
语句块
}
-
语句可以是单行语句,也可以是复合语句;
-
如果是单行语句,
{}
可以省略,但最好不要省略; -
整个 if 是一个逻辑语句,因此不能直接在 if 后面加分号。
例如:
int age = 19;
if (age>18)
{
System.out.println("到达主战场");
}
第二种IF:
if(表达式)
{
语句1
}
else
{
语句2
}
例如:
int score = 80;
if (score >= 60) {
System.out.println("合格");
} else {
System.out.println("尚未合格");
}
}
第三种IF:
if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
...
else
{
语句n;
}
有点像一给我里giao giao,那鬼东西。
例如:
int score = 1011;
if (score <60)
{
System.out.println("不及格");
}
else if(score>= 60&& score <70 )
{
System.out.println("及格");
}
else if (score>=70&&score<80)
{
System.out.println("一般");
}
else if (score>=80&&score<90)
{
System.out.println("中等");
}
else
{
System.out.println("优秀");
}
IF 嵌套:
if(表达式1){
if(表达式2){
语句1;
}else{
语句2;
}
}else{
语句3;
}
2、SWITCH 语句
语法:
switch(条件表达式)
{
case 条件1:
语句1;
break;
case 条件2:
语句2;
break;
...
default:
语句;
}
- switch语句中的变量类型可以是:byte、short、int或者char。
- 从jdk7开始,switch支持字符串string类型了,同时case标签必须为字符串常量或者字面量(用于表达源码中一个固定值的表示法)。
二、循环结构
目的:反复执行N次(或一直执行)某段代码。比如我们体测跑圈哈哈哈/(ㄒoㄒ)/~~
1、 WHILE 循环
while循环语法:
while(条件表达式)
{
循环体
}
先判断条件表达式,如果为ture就执行循环体,执行完循环体再判断条件表达式......,直到条件表达式为false时结束循环
例如:
// 从10倒数到0
int i = 10;
while (i>=0)
{
System.out.println("白豆五"+i);
i--;
}
System.out.println("while结束");
控制台输出:
白豆五10
白豆五9
白豆五8
白豆五7
白豆五6
白豆五5
白豆五4
白豆五3
白豆五2
白豆五1
白豆五0
while结束
// 统计0到10的和
int j = 0;
int sum = 0; //创建一个临时变量用于加和操作
while (j <= 10)
{
sum += j;
j++;
}
System.out.println(sum); //55
// 用while循环实现:从5打印到11
int y = 5;
while(y <= 11)
{
System.out.println(y);
y++;
}
do-while循环语法:
do{
循环体
}while(条件表达式);
两者的区别:while先判断后执行,do-while是先执行后判断。
2、 FOR 循环
既 WHILE 何生 FOR
- while 、do…while 、for 都可以实现循环,可以互换。
- 不同的需求,用不同语法难易程度不同。
- 使用频率:for > while > do…while 。
for循环语法:
for(表达式1;表达式2;表达式3)
{
循环体;
}
(1)先执行表达式1,只会执行一次。
(2)执行表达式2,如果该表达式2结果为真,执行for循环体,然后执行下面第(3)部。如果为假,直接结束for循环。
(3)执行表达式3,然后跳到第(2)步重新执行。
用while表示for:
表达式1;
while(表达式2)
{
循环体;
表达式3;
}
例如:
for (int i=1;i<=10;i++)
{
System.out.print(i+"\t"); // 1 2 3 4 5 6 7 8 9 10
}
// 第二种声明
int j = 0; //将之前for循环内部的局部变量,丢到循环体外面相当于提权,然后都可以调用这个变量。
for(;j<=3;j++)
{
System.out.println(j);
}
// 用while等价for
int i = 0;
while (i <= 10)
{
System.out.println(i);
i++;
}
// 从10倒数到0
for (int i = 10; i >= 0; i--) {
System.out.print(i + "\t");
}
// 统计0到10的和
int sum = 0;
for (int i = 0; i <= 10; i++) {
sum += i;
}
System.out.println(sum);
// 打印2 4 6 8 10
for (int y = 2; y <= 10; y = y + 3) {
System.out.println(y);
}
for-each语句:
for(数据类型type 变量x:遍历对象obj){
引用变量x的java语句;
}
3、 循环嵌套
-
循环嵌套:循环里套着循环。此套娃非彼套娃。嵌套循环可以是嵌套n层,一般也就用两层。
-
三种循环(while、do…while、for)可以相互嵌套,不过使用最多的是for循环嵌套。
例如:
// 循环打印99乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + (i * j) + "\t");
}
System.out.println();
}
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
// 力扣27题通过双指针来移除数组中的元素
/*
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
*/
public int removeElement(int[] nums, int val) {
if (nums == null || nums.length == 0) {
return 0;
}
int l = 0;
int r = nums.length - 1;
while (l < r) {
while (l < r && nums[l] != val) {
l = l + 1;
}
while (l < r && nums[r] == val) {
r = r - 1;
}
int temp = nums[l];
nums[l] = nums[r];
nums[r] = temp;
}
System.out.println(Arrays.toString(nums));
return nums[l] == val ? l : l + 1;
}
// 优解
public int removeElement(int[] nums, int val) {
if (nums == null || nums.length == 0) {
return 0;
}
int j = 0;
for(int i= 0;i<nums.length;i++){
if(nums[i]!=val){
int temp = nums[i];
nums[i]=nums[j];
nums[j]=temp;
j++;
}
}
return j;
}
4、BREAK和CONTINUE
- break 和 continue都可以和while、do…while、for 一起用。
- break:强制结束循环。
- continue:不再执行本次循环后面的代码,然后进行下一次循环。
例如:
//break
for (int i=0;i<=5;i++){
if (i==3){
break;
}
System.out.println(i);
}
打印结果:
0
1
2
// continue
for (int i=0;i<=5;i++){
if (i==3){
continue;
}
System.out.println(i);
}
打印结果:
0
1
2
4
5