一:顺序结构
1.1.顺序结构比较简单.按照代码书写的顺序一行一行执行
public class TestDemo {
public static void main(String[] args) {
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
//aaa
//bbb
//ccc
}
}
1.2.如果调整代码的书写顺序, 则执行顺序也发生变化
public class TestDemo {
public static void main(String[] args) {
System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb");
//aaa
//ccc
//bbb
}
}
二:分支结构
2.1 if语句
2.1.1 if语句的基本语法的三种形式
①if语句的基本语法形式1
if(布尔表达式){
//条件满足时执行代码
}
②if语句的基本语法形式2
if(布尔表达式){
//条件满足时执行代码
}else{
//条件不满足时执行代码
}
③if语句的基本语法形式3
if(布尔表达式){
//条件满足时执行代码
}else if(布尔表达式){
//条件满足时执行代码
}else{
//条件都不满足时执行代码
}
2.1.2 if语句的具体代码演示
public class TestDemo {
public static void main(String[] args) {
//判定一个数字是奇数还是偶数
int num=10;
if(num%2==0) {
System.out.println(num + "是偶数");
}else{
System.out.println(num+"是奇数");
}
}
}
public class TestDemo {
public static void main(String[] args) {
//判定一个数字是正数还是负数
int num = 10;
if (num > 0) {
System.out.println(num+"是正数");
} else if (num < 0) {
System.out.println(num+"是负数");
} else {
System.out.println(num+"是 0");
}
}
}
2.1.3 if语句的注意事项
①悬垂else问题
public class TestDemo {
public static void main(String[] args) {
int x=10;
int y=10;
if(x==5){
if(y==10){
System.out.println("LOL");
}
else{
System.out.println("hahaha");
}
}
}
}
以上代码什么都不会输出,原因在于此时的else是和最接近的if匹配,但是实际开发中我们不建议这么写。
②代码风格问题
Java 中更推荐使用 : { 放在 if / else 同一行。如上面代码所示
③分号问题
public class TestDemo {
public static void main(String[] args) {
int x = 20;
if (x == 10); {
System.out.println("hehe");
}
}
}
此处多写了一个分号, 导致分号成为了 if 语句的语句体, 而 { } 中的代码已经成为了和一个 if 无关的代码块。程序输出 hehe
2.2 switch语句
2.2.1 switch语句的基本语法
switch(整数|枚举|字符|字符串){
case 内容1 : {
内容满足时执行语句;
[break;]
}
case 内容2 : {
内容满足时执行语句;
[break;]
}
...
default:{
内容都不满足时执行语句;
[break;]
}
}
2.2.2 代码实例
public class TestDemo {
public static void main(String[] args) {
int day=1;
switch(day){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
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;
}
}
}
根据switch中的值得不同,会执行对应的case语句。遇到break就会结束该case语句。
如果switch中的值没有匹配的case,就会执行default中的语句。
建议一个switch语句最好都要带上default。
2.2.3 switch语句的注意事项
① break 不要遗漏, 否则会失去 “多分支选择” 的效果
②注意事项2 switch 中的值只能是 整数|枚举|字符|字符串
③注意事项3 switch 不能表达复杂的条件
④注意事项4 switch 虽然支持嵌套, 但是很丑~
// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
// 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示
三:循环结构
3.1 while循环
3.1.1 while语句的基本语法格式
while(循环条件){
循环语句;
}
循环条件为 true, 则执行循环语句; 否则结束循环
3.1.2 代码实例
//用while循环实现 计算 1! + 2! + 3! + 4! + 5!
int i=1;
int sum=0;
while(i<=5){
//将fac j重置为1,非常重要
int fac=1;
int j=1;
while(j<=i){
fac*=j;
j++;
}
sum+=fac;
i++;
}
System.out.println(sum);
完成猜数字游戏 ,用户输入数字,判断该数字是大于,小于,还是等于随机生成的数字,等于的时候退出程序。
import java.util.Scanner;
import java.util.Random;
Random random=new Random();
Scanner sc=new Scanner(System.in);
int guess=random.nextInt(100);//[1,100)
while(true){
System.out.println("请输入要输入的数字:[1,100)");
int num=sc.nextInt();
if(num<guess){
System.out.println("低了");
}else if(num>guess){
System.out.println("高了");
}else{
System.out.println("猜对了");
break;
}
}
求两个正整数的最大公约数
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
while(a%b!=0){
int c=a%b;
a=b;
b=c;
}
System.out.println(b);
求出0~99999之间的所有“水仙花数”并输出。
int i=0;
int tmp=0;
for(i=0;i<=99999;i++){
tmp=i;
int count=0;
//首先判断数字有几位
while(tmp!=0){
tmp/=10;
count++;
}
tmp=i;
//求每一位
int sum=0;
while(tmp!=0){
sum+=Math.pow(tmp%10,count);
tmp/=10;
}
if(sum==i){
System.out.println(i);
}
}
编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输入,最多输入三次。三次均错,则提示退出程序
Scanner scanner=new Scanner(System.in);
int count=3;
while(count!=0){
System.out.println("请输入你的密码:");
String password=scanner.nextLine();
if(password.equals("123")){
System.out.println("登录成功");
break;
}else {
count--;
System.out.println("你还有" + count + "次机会");
}
}
求一个整数,在内存当中存储时,二进制1的个数。
int count=0;
int n=11;
while(n!=0){
if((n&1)!=0){
count++;
}
n=n>>>1;//无符号右移
}
System.out.println(count);
3.1.3 while循环语句的注意事项
①和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
②和 if 类似, while 后面的 { 建议和 while 写在同一行.
③和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行
3.2 for循环
3.1.1 for循环的基本语法
for(表达式1;表达式2;表达式3){
循环体;
}
表达式1: 用于初始化循环变量
表达式2: 循环条件
表达式3: 更新循环变量
相比于 while 循环, for 循环将这三个部分合并在一起, 写代码时不容易遗漏
3.1.2 代码实例
//用for循环实现 计算 1! + 2! + 3! + 4! + 5!
int i=1;
int sum=0;
for(i=1;i<=5;i++){
int j=1;
int fac=1;
for(j=1;j<=i;j++){
fac*=j;
}
sum+=fac;
}
System.out.println(sum);
输出n*n的乘法口诀表,n由用户输入
int i=0,j=0;
System.out.println("请输入n的值:");
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
System.out.printf(i+"*"+j+"="+i*j+" ");
}
System.out.println(" ");
}
3.1.3 for循环语句的注意事项
①和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
②和 if 类似, for 后面的 { 建议和 while 写在同一行.
③和 if 类似, for 后面不要多写 分号, 否则可能导致循环不能正确执行
3.3 do while循环(次要)
3.1.1 do while语句的基本语法
do{
循环语句;
}while(循环条件);
先执行循环语句, 再判定循环条件
3.1.2 代码实例
//用do while循环打印1-10
int i=1;
do{
System.out.println(i);
i++;
}while(i<=10);
3.1.3 do while循环语句的注意事项
①do while 循环最后的分号不要忘记
②一般 do while 很少用到, 更推荐使用 for 和 while
3.4 break
break 的功能是让循环提前结束
//找到 100 - 200 中第一个 3 的倍数
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍数, 为:" + num);
break;
}
num++;
}
执行到 break 就会让循环结束
3.5 continue
continue 的功能是跳过这次循环, 立即进入下次循环
//找到 100 - 200 中所有3的倍数
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++; // 这里的 ++ 不要忘记! 否则会死循环.
continue;
}
System.out.println("找到了 3 的倍数, 为:" + num);
num++;
}
执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的打印语句