Java的流程控制
Scanner对象
-
Java提供出来的一个工具类,我们可以用来获取用户的输入,是Java 5 的新特性
-
基本语法
Scanner scanner=new scanner(System.in);
-
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般使用hasNext()与hasNextLine()判断是否还有输入的数据。
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘的数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入");
if (scanner.hasNext());//通过if判断用户有没有输入字符串
String money=scanner.next();//使用next接收
System.out.println("请输入"+money);//程序会等待用户输入完毕
//凡是属于IO流的类如果不关闭就会一直占用资源,要养成好习惯,用完即关
scanner.close();
}
}
-
注意点:我们在使用nex()或者nextLine()是,要注意两者的特性
-
next():对输入有效字符之前遇到的空白,next()方法会自动去掉,即:next()不能得到带有空格的字符串
-
nextLine():可以获得空白,即:可以得到带有空格的字符串
-
日常使用中,我们比较多用到nextLine(),以避免程序因出现使用空格导致出错
-
- if与Scanner对象的结合使用,通过判断结果来进行输出
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入整数");
if (scanner.hasNextInt()) {
int i = scanner.nextInt();
System.out.println("输入的为整数为"+i);
}else System.out.println("输入错误");
System.out.println("请输入小数");
if (scanner.hasNextFloat()){
float v = scanner.nextFloat();
System.out.println("输入的小数为"+v);
}else System.out.println("输入错误");
scanner.close();
}
}
-
while与scanner对象的结合使用,通过循环结构来进行输出
import java.util.Scanner; public class Demo04 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); double sun=0.0; int m=0; System.out.println("请输入数字");//while 循环语句 while(scanner.hasNextDouble()){ double v = scanner.nextDouble(); sun=sun+v; m++;//循环结构中,自增需要用++m,先赋值再运算 System.out.println("输入的个数为"+m+"总和为"+(long)sun);//注意内存溢出问题 }//当循环结构结束后,直接输出结果 System.out.println("输出的个数为"+m); System.out.println("输出的总和为"+(long)sun);//注意内存溢出问题 System.out.println("输出的平均数为"+(sun/m)); scanner.close(); } }
顺序结构
-
Java的的基本结构就是顺序结构,除非特别指明,否则就会按照顺序一句一句执行
-
顺序结构是最简单的算法结构
-
顺序结构是任何一个算法都离不开的算法结构
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//顺序结构:从上到下,依次执行,最基本的结构
System.out.println("Hello1");//Hello1
System.out.println("Hello2");//Hello2
System.out.println("Hello3");//Hello3
System.out.println("Hello4");//Hello4
System.out.println("Hello5");//Hello5
}
}
选择结构
if单选择结构
-
我们很多时候需要判断一个东西是否可行,然后才去执行,这样一个过程在程序冲我们用if语句来表示
-
基本语法为:
if(布尔表达式){ //如果布尔表示为true,将执行该语句,否则将跳过 }
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
//if:单选择结构
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双选择结构
-
基本语法为:
if(布尔表达式){ //如果结果true,将执行该代码 }else{ //如果结果为false,将执行该代码 }
-
双选择结构同意只会输出一个结果
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
//双选择结构
Scanner scanner=new Scanner(System.in);
//考试分数大于等于60分及格,小于60分不及格
System.out.println("请输入成绩");
double score = scanner.nextDouble();
if(score>=60){
System.out.println("及格");
}else System.out.println("不及格");
System.out.println("==============================");
Scanner scanner1=new Scanner(System.in);
System.out.println("请输入结果:");
String A = scanner1.nextLine();
if(A.equals("成功")){
System.out.println("支付一百万");
}else System.out.println("自己开发");
scanner1.close();
}
}
if多选择结构
- 基本语法为:
if(布尔表达式1){
如果结果true,将执行该代码
}else if{布尔表达式2
//如果结果true,将执行该代码
}else if{布尔表达式3
//如果结果true,将执行该代码
}else if{布尔表达式4
//如果结果true,将执行该代码
}else{
如果以上结果都为false,将执行该代码
}
- 多选择结构可以在if语句中加任意数量的else if 最后一定以else结尾
import java.util.Scanner;
public class Demo04 {
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("A");
}else if(score<100 && score>=80){
System.out.println("B");
}else if(score<80 && score>=60){
System.out.println("C");
}else if(score<60 && score>=0){
System.out.println("不及格");
}else{
System.out.println("输入错误");
}
scanner.close();
}
}
if嵌套结构
- 基本语法为:
if(布尔表达式1){
//如果结果true,将执行该代码,进行下个判断
if(布尔表达式2){
//如果结果true,将执行该代码
}
}
- 同样的,if语句中也能嵌套多个if语句
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
//嵌套的if结构
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字:");
double A = scanner.nextDouble();
if (A<=100 && A>=0) {
if (A>=0 && A<=50){
if (A>=0 && A<=25){
System.out.println("第四");
}else System.out.println("第三");
}else System.out.println("第二");
}else System.out.println("第一");
scanner.close();
}
}
switch多选择结构
- switch case语句是判断一个变量与一系列值中的某个值是否相等,每个值称为一个分支
- 基本的语法为:
switch(变量名){
case 变量值:
//输出语句
case 变量值:
//输出语句
case 变量值:
//输出语句
case 变量值:
//输出语句
dafault:
//输出语句
}
- switch可以使用的变量类型为:byte、short、char、int
- 从java SE 7 开始,switch支持字符串 String 变量类型
import java.util.Scanner;
public class Demo06 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//case:case具有穿透功能
//规范:在每个case后面都必须加上break,避免case穿透
//switch的表达式只能是:byte、short、int、char
//switch是匹配一个具体的值
char gread='C';
String nemo="Andy";
switch(gread){
case 'A' :
System.out.println("优秀");
break;
case 'B' :
System.out.println("良好");
break;
case 'C' :
System.out.println("及格");
break;
default:
System.out.println("挂科");
break;}
//JDK7新特性,可以用String
switch(nemo){
case"Andy":
System.out.println("浩鑫");
break;
case"nemo":
System.out.println("Andy");
break;
case"浩鑫":
System.out.println("Andy鑫");
break;
default:
System.out.println("再见");
}
scanner.close();
}
循环结构
while循环
- while是最基本的循环
- 基本语法为:
while(布尔表达式){
//循环的内容
}
-
只要布尔表达式为true,循环就会一直执行下去
-
我们大多数的情况会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环
-
循环条件一直为true就会变成无限循环(死循环),少部分会让循环一直执行,比如服务器的请求、响应、接听等。我们正常业务编程应该尽量避免死循环,会影响程序的性能或者造成程序卡死崩溃。
public class Demo07 { public static void main(String[] args) { int sun=0; int i=0; //while循环 //用表达式失效的方式来让循环停止下来 //避免死循环的状况发生 while(i<=100){ sun=sun+i; ++i; } System.out.println(sun); } }
do…while循环
- **do…while循环和while循环非常相似,不同的是,do…while循环至少会执行一次
- 基础语法为
do{
//代码语句
}while(布尔表达式)
-
while和do…while的区别就是,while是先判断再执行,do…while是先执行后判断
public class Demo08 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int A=0; int sun=0; //do...while至少要执行一次 //while是先判断后执行,do...while是先执行后判断 do { sun=sun+A; A++; }while(A<=100); System.out.println(sun); System.out.println("================================="); int i=0; do { i++; System.out.println(i); }while(i<0); System.out.println("====================================="); while(i<0){ System.out.println(i); i++; } scanner.close(); } }
for循环
-
使一些循环结构变的更加简单
-
for循环语句是支持迭代的一种通用结构,是最有效,最灵活的循环结构
-
基础语法为:
for(初始化;布尔表达式;迭代){ //代码语句 }
-
for循环为循环结构中最重要的循环,也是用的最多的循环
public class Demo11 {
public static void main(String[] args) {
//For循环
int a=1;//初始化值
while(a<=100)//判断条件
{
System.out.println(a);//循环体
a++;//迭代
}
System.out.println("while循环结束");
//初始值、判断条件、迭代
for (int i = 1; i <= 100; i++) {
System.out.println(i);//循环体
}System.out.println("for循环结束");
/*
For循环注意点
1.最先执行初始化步骤,但可初始化一个或者多个循环控制变量,也可以是空语句
2.检查布尔表达式的结构为true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句
3.执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)
4.再次执行布尔表达式,循环上面过程。
for( ; ; ; ){}死循环
*/
}
}
-
以下为一些示例:
import java.util.Scanner; public class Demo09 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); //For循环示例 //示例1:1+2+3+4+....+100的值 int sun=0; for(int i=0;i<=100;i++){ sun=sun+i; }System.out.println(sun);//5050 System.out.println("==========================="); //示例2:求1-100中奇数的和与偶数的和 int oddSun=0;//奇数和 int evemSun=0;//偶数和 for (int i = 0; i <= 100; i++) { if(i%2==0){ evemSun=evemSun+i; }else{ oddSun=oddSun+i; } } System.out.println(oddSun);//2500 System.out.println(evemSun);//2550 System.out.println("===================================="); //示例3:列出在1-1000中能被5整除的数,并且每行输出3个 for (int i = 0; i <= 1000; i++) { if(i%5==0){ System.out.print(i+"\t"); //print为输出完不换行 }if (i%15==0){ System.out.println(); //printin为输出会换行 } } System.out.println("========================================"); //以while方式实现示例3 int a=0; while(a<=1000){ a++; if(a%5==0){ System.out.print(a+"\t"); } if (a % 15 == 0) { System.out.println(); } } scanner.close(); }
- 打印九九乘法表为比较经典的示例,单独划分出来
import java.util.Scanner;
public class Demo10 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//示例4:打印一个九九乘法表
/*
1.打印第一列
2.我们把固定的第一列再用一个循环包起来
3.去掉重复项i<=j
4.调整样式
*/
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();
}
System.out.println("==================================");
//使用while方法做出九九乘法表
int B=0;
while(B<9){
B++;
int A=1;
while(A<=B){
System.out.print(B+"*"+(A)+"="+(B*A)+"\t");
A++;
} System.out.println();
}
scanner.close();
}
}
增强for循环
-
java 5 引入了一种主要用于数组与集合的增强型for循环
-
基础语法为:
for(声明语句:表达式){ //代码语句 }
-
声明语句:声明新的局部变量,该变量的类型必须与数组元素类型匹配。其作用域限定在循环语句块,其值与数组元素的值相等。
-
表达式:需要访问的数组名或者是返回值为数组的方法
public class Demo12 { public static void main(String[] args) { //增强For循环 int[] numbers={10,20,30,40,50,60,70};//定义数组 for(int A:numbers){ //将数组里面的内容,全部赋予变量名 System.out.println(A); }//10、20、30、40、50、60、70 System.out.println("======================="); //for循环 for (int i = 0; i < 7; i++) { System.out.println(numbers[i]);//10、20、30、40、50、60、70 //将数组里面的内容提取出来,赋予变量名 } } }
break与continue
break
- 在任何循环体的主体部分,均可用break控制循环的流程
- break用于强行退出循环,不执行剩余的语句
- break语句也在Switch语句中使用
continue
- 语句用于循环体中
- 用于终止某次循环过程,即跳过循环体中未执行的语句,接着进行下一次是否执行的循环判定。
public class Demo15 {
public static void main(String[] args) {
//打印101-150之间的质数
int count=101;
int i=2;
while(count>=101 && count<=150){
count++;
while(i<count/2){
i++;
if(count/i==0){
continue;
}
}
System.out.println(count);