流程控制
用户交互Scanner
Scanner对象
通过Scanner类来获取用户的输入
Scanner s = new Scanner(System.in);
next():
一定要读取到有效字符后才可以结束输入
对输入有效字符之前遇到的空白,next()方法会自动将其去掉.
只有输入有效字符后才能将其后面输入的空白作为分隔符或者结束符
next()不能得到带有空格的字符串
package com.kzh.scanner;import java.util.Scanner;public class Demo01 {public static void main(String[] args) {//创建一个扫描器对象,用于接收键盘数据Scanner scanner = new Scanner(System.in);System.out.println("使用next方式接收:");//判断用户有没有输入字符串if (scanner.hasNext()) {//使用next方式接收String str = scanner.next();//程序会等待用户输入完毕System.out.println("输入的内容为:"+str);}//凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉scanner.close();}
}
nextLine():
以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
可以获得空白
package com.kzh.scanner;import java.util.Scanner;public class Demo02 {public static void main(String[] args) {//从键盘接收数据Scanner scanner = new Scanner(System.in);System.out.println("使用nextLine方式接收:");//判断是否还有输入if (scanner.hasNextLine()) {String str = scanner.nextLine();System.out.println("输入的内容为:"+str);}scanner.close();}
}
我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果
package com.kzh.scanner;import java.util.Scanner;public class Demo05 {public static void main(String[] args) {//我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果;Scanner scanner = new Scanner(System.in);//输入的数字个数int n = 0;//数字总和double sum = 0;System.out.println("请输入数据:");//通过循环判断是否还有输入,并对一次输入进行求和与平均数统计while (scanner.hasNextDouble()){double x = scanner.nextDouble();n = n + 1;//n++sum = sum + x;System.out.println("你输入了第"+n+"个数据,当前结果sum="+sum);}System.out.println(n + "个数的和为" + sum);System.out.println(n + "个数的平均数是" + (sum/n));scanner.close();}
}
顺序结构
语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构
package com.kzh.struct;public class ShunXuDemo {public static void main(String[] args) {System.out.println("hello1");System.out.println("hello2");System.out.println("hello3");System.out.println("hello4");System.out.println("hello5");}
}
选择结构
if单选择结构
if(布尔表达式){//如果布尔表达式为true将执行的语句
}
package com.kzh.struct;import java.util.Scanner;public class IfDemo01 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入内容:");String s = scanner.nextLine();//equals:判断字符串是否相等if (s.equals("Hello")){System.out.println(s);}System.out.println("End");scanner.close();}
}
if双选择结构
package com.kzh.struct;import java.util.Scanner;public class IfDemo02 {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多选择结构
if语句最多有1个else语句,else语句在所有的else if之后
if语句可以有若干个else if语句,它们必须在else语句之前
一旦其中一个else if语句检测为true,其他的else if以及else语句都将跳出执行
package com.kzh.struct;import java.util.Scanner;public class IfDemo03 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入成绩:");int score = scanner.nextInt();/** if语句最多有1个else语句,else语句在所有的else if之后* if语句可以有若干个else if语句,它们必须在else语句之前* 一旦其中一个else if语句检测为true,其他的else if以及else语句都将跳出执行* */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结构
if(布尔表达式1){//如果布尔表达式1的值为true执行代码if(布尔表达式2){//布尔表达式2的值为true执行代码}
}
switch多选择结构
switchy语句中的变量类型可以是:
byte,short,int,char,string
从Java SE 7开始switch支持字符串String类型
同时case标签必须为字符串常量或字面量
循环结构
while循环
while(布尔表达式){//循环内容
}
只要布尔表达式为true,循环就会一直执行下去。
我们需要一个让表达式失效的方式来结束循环
package com.kzh.struct;public class WhileDemo01 {public static void main(String[] args) {//输出1-100int i = 0;while (i < 100) {i++;System.out.println(i);}}
}
避免死循环
package com.kzh.struct;public class WhileDemo02 {public static void main(String[] args) {//死循环while (true) {//等待客户端连接//定时检查//。。。。。。。。}}
}
计算1+2+3+...+100=?
package com.kzh.struct;public class WhileDemo03 {public static void main(String[] args) {//计算1+2+3+...+100=?int i = 0;int sum = 0;while (i <= 100) {sum = sum + i;i++;}System.out.println(sum);}
}
do...while循环
对于while语句而言,如果不满足条件,则不能进入循环
但有时候我们需要即使不满足条件,也至少执行一次
do...while循环和while循环相似,不同的是,do...while循环至少会执行一次
do{//代码语句
}while(布尔表达式)
package com.kzh.struct;public class DoWhileDemo01 {public static void main(String[] args) {int i = 0;int sum = 0;do {sum = sum + i;i++;}while (i <= 100);System.out.println(sum);}
}
while和do...while的区别:
while先判断后执行,do...while是先执行后判断
do...while总是保证循环体会被至少执行一次
package com.kzh.struct;public class DoWhileDemo02 {public static void main(String[] args) {int a = 0;while (a < 0) {System.out.println(a);a++;}System.out.println("==================");do {System.out.println(a);a++;}while (a < 0);}
}
For循环
for循环,使一些循环结构变得更加简单
for(初始化;布尔表达式;更新){//代码语句
}
关于for循环有以下几点说明:
最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句
然后,检测布尔表达式的值。如果为true,循环体被执行,如果为false,循环终止,开始执行循环体后面的语句
执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)
再次检测布尔表达式,循环执行上面的过程
package com.kzh.struct;public class ForDemo01 {public static void main(String[] args) {int a = 1;//初始化条件while (a<=100){//条件判断System.out.println(a);//循环体a += 2;//迭代}System.out.println("while循环结束");for (int i = 1; i <= 100; i++){System.out.println(i);}System.out.println("for循环结束");}
}
练习1:计算0到100之间的奇数和偶数的和
package com.kzh.struct;public class ForDemo02 {public static void main(String[] args) {//练习1:计算0到100之间的奇数和偶数的和int oddSum = 0;int evenSum = 0;for (int i = 0; i <= 100; i++) {if (i % 2 != 0) {//奇数oddSum += i;//oddSum = oddSum + i}else{evenSum += i;}}System.out.println("奇数的和:"+oddSum);System.out.println("偶数的和:"+evenSum);}
}
练习2:用for或while循环输出1-1000之间能被5整除的数,并且每行输出3个
package com.kzh.struct;public class ForDemo03 {public static void main(String[] args) {//练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个for (int i = 0; i <= 1000; i++) {if (i % 5 == 0) {System.out.print(i+"\t");}if (i % (5 * 3) == 0) {//每行三个System.out.println();
// System.out.print("\n");}}//println 输出完会换行//print 输出完不会换行}
}
package com.kzh.struct;public class WhileDemo04 {public static void main(String[] args) {
// 用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个int i = 1;//从1开始int count = 0;//计数器,控制每行输出3个数//使用while循环遍历1-1000之间的数while (i <= 1000) {//如果i能被5整除if (i % 5 == 0) {System.out.print(i + "\t");count++;//增加计数器//每行输出3个数if (count == 3){System.out.println();//换行count = 0;//重置计数器}}i++;//增加i 迭代}}
}
练习3;打印九九乘法表
package com.kzh.struct;public class ForDemo04 {public static void main(String[] args) {//练习3;打印九九乘法表for (int j = 1; j <=9; j++) {for (int i = 1; i <= j; i++) {System.out.print(j+"*"+i+"="+(j*i) + "\t");}System.out.println();}//1.我们先打印第一例//2.我们把固定的1再用一个循环包起来//3.去掉重复项,i <= j//4.调整样式}
}
增强for循环
Java5引入了一种主要用于数组或集合的增强型for循环
for(声明语句:表达式){//代码句子
}
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配,其作用域限定在循环语句块,其值与此时数组元素的值相等
表达式:表达式是要访问的数组名,或是返回值为数组的方法
package com.kzh.struct;public class ForDemo05 {public static void main(String[] args) {int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//定义了一个数组for (int i = 0 ;i < 10 ;i++){System.out.println(numbers[i]);}System.out.println("===================");//遍历数组的元素for (int x:numbers ){System.out.println(x);}}
}
break continue
break在任何循环语句的主体部分,均可用break控制循环的流程
break用于强制退出循环,不执行循环中剩余的语句(break语句也在switch语句中使用)
continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定
break
在任何循环语句的主题部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句(break语句也在switch语句中使用)
continue
用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定