Java流程控制(2)
顺序结构
按照顺序一句一句执行
选择结构
if单选择结构
package com.sr.base.struct;
import java.util.Scanner;
public class IfDemo1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容:");
String s = scanner.nextLine();
//equels:判断字符串是否相等 不能用==判断字符串是否相等
if(s.equals("hello")){
System.out.println(s);
}
System.out.println("End");
scanner.close();
}
}
if双选择结构
package com.sr.base.struct;
import java.util.Scanner;
public class IfDemo2 {
public static void main(String[] args) {
//考试分数大于60分就是及格,小于60分就是不及格
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩:");
int score = scanner.nextInt();
if(score>60){
System.out.println("及格");
}else{
System.out.println("不及格");
}
scanner.close();
}
}
if多选择结构
package com.sr.base.struct;
import java.util.Scanner;
public class IfDemo3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩");
int score = scanner.nextInt();
if(score==100){
System.out.println("满分");
}else if(score<100 && score>=90){
System.out.println("A级");
}else if(score<90 && score>=80){
System.out.println("B级");
}else if(score<80 && score>=70){
System.out.println("C级");
}else if(score<70 && score>=60){
System.out.println("D级");
}else if(score<60 && score>=0){
System.out.println("成绩不及格");
}else{
System.out.println("成绩不合法");
}
scanner.close();
}
}
嵌套的if结构
switch选择结构
package com.sr.base.struct;
import java.util.Scanner;
public class SwitchDemo {
public static void main(String[] args) {
char c = 'C';
//switch:匹配一个具体的值
//switch用来匹配一个具体的值比较方便,if用来判断一个区间比较方便
//若无break,就会出现case穿透现象,也就是匹配成功之后会输出后面所有的
//break一定要加上
switch(c){
case 'A':
System.out.println("优秀");
break;
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("及格");
break;
case 'D':
System.out.println("不及格");
break;
default:
System.out.println("未知");
}
}
}
IDEA里面已经支持switch里面匹配字符串String类型了
package com.sr.base.struct;
public class SwitchDemo2 {
public static void main(String[] args) {
String name = "小明";
//JDK以后的新特性,switch里的类型可以是字符串
//字符的本质还是数字
//反编译 java-->class(字节码文件)---->反编译(工具IDEA)
switch (name) {
case "小红":
System.out.println("小红");
break;
case "小明":
System.out.println("小明");
break;
default:
System.out.println("??");
}
}
}
循环结构
while循环
先判断后执行
package com.sr.base.struct;
public class WhileDemo1 {
public static void main(String[] args) {
//输出1~100
int i = 0;
while(i<100){
i++;
System.out.println(i);
}
}
}
package com.sr.base.struct;
public class WhileDemo2 {
public static void main(String[] args) {
//计算1+2+……+100的值
int i = 1;
int sum = 0;
while(i<=100){
sum = sum + i;
i++;
}
System.out.println(sum);
}
}
do while循环
至少执行一次
是先执行再判断
package com.sr.base.struct;
public class DoWhileDemo1 {
public static void main(String[] args) {
int i = 0;
int sum = 0;
do{
sum = sum + i;
i++;
}while(i<=100);
System.out.println(sum);
}
}
do while与while循环的区别
package com.sr.base.struct;
public class DoWhileDemo2 {
public static void main(String[] args) {
int a = 0;
while(a<0){ //由于初始的a=0,这里条件为a<0,不满足,所以不会进入下面循环,所以没有输出
System.out.println(a); //无输出
a++;
}
System.out.println("===========================");
do{ //do while 循环是先执行后输出,至少执行一次,所以这里至少输出一个0,执行一次之后发现不满足条件,跳出循环
System.out.println(a); //输出为0
a++;
}while(a<0);
}
}
for循环
for循环与while循环的关系
package com.sr.base.struct;
public class ForDemo1 {
public static void main(String[] args) {
int a = 0; //初始化条件
while(a<=100){ //条件判断
System.out.println(a); //循环体
a++; //迭代
}
System.out.println("while循环结束");
//初始化条件//条件判断//迭代
for(int i=0;i<=100;i++){
System.out.println(i); //循环体
}
System.out.println("for循环结束");
//IDEA中的快捷键100.for+回车可以自动生成for块
//死循环
for (; ; ) {
}
}
}
for循环案例
package com.sr.base.struct;
public class ForDemo2 {
public static void main(String[] args) {
//计算0~100(不包括100)之间的奇数和偶数的和
int sum1=0;
int sum2=0;
for (int i = 0; i < 100; i=i+2) {
sum1=sum1+i;
}
System.out.println("偶数的和"+sum1);
for (int i = 1; i <=99; i=i+2) {
sum2=sum2+i;
}
System.out.println("奇数的和"+sum2);
}
}
package com.sr.base.struct;
public class ForDemo2 {
public static void main(String[] args) {
//计算0~100(不包括100)之间的奇数和偶数的和
int evensum = 0; //偶数的和
int oddsum = 0; //奇数的和
for (int i = 0; i < 100; i++) {
if(i%2!=0){ //奇数
oddsum=oddsum+i;
}else{ //偶数
evensum=evensum+i;
}
}
System.out.println("奇数的和为:"+oddsum);
System.out.println("偶数的和为:"+evensum);
}
}
package com.sr.base.struct;
public class ForDemo3 {
public static void main(String[] args) {
//用for循环输出1~1000之间能被5整除的数,并且每行输出3个
for (int i = 1; i <=1000; i++) {
if(i%5==0)
System.out.print(i+"\t"); //"\t"表示table键
if (i%(5*3)==0){ //i能被15整除,保证被15整除的地方输出一个换行
//System.out.println();
System.out.print("\n"); //"\n"表示回车/换行键
}
}
//println输出完会换行
//print输出完不会换行
}
}
package com.sr.base.struct;
public class ForDemo4 {
public static void main(String[] args) {
//打印9*9乘法表
for (int i = 1; i <= 9; i++) {
for(int j = 1;j<=i;j++){
int m=j*i;
if(j!=i){
System.out.print(j+"*"+i+"="+m+"\t");
}else{
System.out.print(j+"*"+i+"="+m+"\n");
}
}
}
}
}
结果:
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
增强for循环
主要用于数组或集合
package com.sr.base.struct;
public class ForDemo5 {
public static void main(String[] args) {
int[] numbers = {10,20,30,40,50}; //定义了一个数组
//遍历数组的元素
for (int i = 0; i < 5; i++) {
System.out.println(numbers[i]);
}
System.out.println("=======================");
for(int x:numbers){
System.out.println(x);
}
}
}
break和continue
break
break用于强制退出循环,但循环之外的程序还是会运行
package com.sr.base.struct;
public class BreakDemo {
public static void main(String[] args) {
int i = 0;
while(i<100){
System.out.println(i);
i++;
if(i==30){
break;
}
}
System.out.println("123");
}
}
结果:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
123
continue
continue用于终止某次循环,循环中遇到continue,就会回到循环最开始的地方进行下一次循环,本次循环continue后面的语句不执行
package com.sr.base.struct;
public class ContinueDemo {
public static void main(String[] args) {
int i = 0;
while(i<100){
i++;
if(i%10==0){
System.out.println();
continue;
}
System.out.print(i);
}
}
}
结果
123456789
111213141516171819
212223242526272829
313233343536373839
414243444546474849
515253545556575859
616263646566676869
717273747576777879
818283848586878889
919293949596979899
打印三角形
package com.sr.base.struct;
public class TestDemo1 {
public static void main(String[] args) {
//打印三角形 5行
for (int i = 1; i <= 5; i++) {
for (int j = 5; j >=i; j--) {
System.out.print(" ");
}
for (int j = 1; j <=i; j++) {
System.out.print("*");
}
for (int j = 1; j <=i-1; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
结果:
*
***
*****
*******
*********