(四)流程控制
来源:互联网 发布:软件编程培训机构地址 编辑:程序博客网 时间:2024/05/16 07:23
流程控制
流程控制中包含这几种结构:顺序结构、分支结构和循环结构。
1、顺序结构
顺序结构比较简单,是指代码从上到下从左到右依次运行的。
2、分支结构
分支结构分为判断结构和选择结构。
1.判断结构
if
格式:if( 逻辑值 ){ code;}
如果逻辑值为true,执行对应的代码块,反之则不执行。
注意:if后面的{}。只有一句代码的时候可以省略。
import java.util.Scanner;//导包语句,位置要在class之外。public class IfDemo { public static void main(String[] args){ Scanner s = new Scanner(System.in); int i = s.nextInt(); if(i > 10){//if语句 System.out.println("hahah~~~"); } /* //上面的if语句里面只有一句代码,就可以将if写为下面这种形式。 if(i > 10) System.out.println("hahah~~~") */ }}
练习
判断三个数中的最大数。
if–else
格式:if(逻辑值){Code1;} else {Code2;}
如果逻辑值为true,执行Code1;反之执行Code2。
//判断奇偶import java.util.Scanner;public class IfElseDemo { public static void main(String[] args){ Scanner s = new Scanner(System.in); int i = s.nextInt(); if(i % 2 == 1){ System.out.println(i + "is an odd number ."); } else { System.out.println(i + "is an even number ."); } }}
练习
输入三个数,获取最大值
import java.util.Scanner;public class Test1{ public static void main(String[] args){ Scanner s=new Scanner(System.in); int num1=s.nextInt(); int num2=s.nextInt(); int num3=s.nextInt(); int max; if(num1>num2){ if(num1>num3){ max=num1; }else{ max=num3; } }else{ if(num2>num3){ max=num2; }else{ max=num3; } } System.out.println(max+" is max."); }}
上面的代码是我自己练习的时候写的,比较冗余,之后就没做过更改。
If–else if–else
格式:
if(逻辑值1){
Code1;
} else if(逻辑值2){
Code2;
}…else {
Code;
}
如果逻辑值1为true,执行Code1;如果逻辑值1为false,则判断逻辑值2是否为true,如果逻辑值2是true,则执行Code2。
import java.util.Scanner;public class IfElseIfDemo { public static void main(String[] args){ Scanner s = new Scanner(System.in); double score = s.nextDouble(); if(score > 100||scpre < 0){ System.out.println(erres); }else if(score >= 90){ System.out.println("A"); } else if(score >= 80 ){ System.out.println("B"); } else if(score >= 60){ System.out.println("C"); } else { System.out.println("D"); } }}
练习
输入一个月份,输出月份对应的季节 3-5-Spring 6-8-Summer 9-11-Autumn 12-2-Winter
import java.util.Scanner;public class Test2{ public static void main(String[] args){ Scanner s=new Scanner(System.in); int month=s.nextInt(); String season = ""; if(month>=13||month<=0){ season ="Wrong month !"; }else if(month>=3&&month<=5){ season ="Spring"; }else if(month>=6&&month<=8){ season = "Summer"; }else if(month>=9&&month<=11){ season ="Autumn"; }else{ season ="Winter"; } System.out.println(season); }}
2.选择结构
switch
格式:
switch(表达式){
case 选项1: code1; break;
case 选项2: code2; break;
……
default: code;break;
}
注意:
(1)表达式的值只能是byte/short/char/int四种类型,JDK1.7开始,支持对String进行选择,从JDK1.5开始允许表达式的结果是枚举常量。
(2)break对多行case代码有影响。
如果case之后没有break,那么从匹配的case开始,依次往下执行,直到遇到break或者是switch语句结束。
如果每个case之后都有break的话,case之间的顺序不影响最后的结果;即使有一个case没有break,这个时候case之间的顺序会影响最后的结果。
明坑题
int i = s.nextInt();// int j ;switch(i){ case 1 : int j = 0; case 2 : j += 1; // 编译报错 可能尚未声明变量j case 3: j += 3; default : System.out.println(j);}
练习
计算器
一个符号和两个数字 - 5 9-> 5 - 9 = -4
import java.util.Scanner;public class SwitchCaseExer { public static void main(String[] args){ Scanner s = new Scanner(System.in); String symbol = s.nextLine(); int i = s.nextInt(); int j = s.nextInt(); switch(symbol){ case "+" : System.out.println(i + j); break; case "-" : System.out.println(i - j); break; case "*" : System.out.println(i * j); break; case "/" : System.out.println(i / j); break; default: System.out.println("No this operation !"); } }}
3、循环结构
循环三个要素:循环变量,循环条件,变量改变。
注意:尽量不要使用浮点型来作为循环条件,因为小数在计算机中不能够精确存储。
1.while
格式:
while(判断循环变量){
code;
}
public class WhileDemo { public static void main(String[] args){ int i = 1; while(i <= 5){ System.out.println("Hello"); i++; } }}
练习
1.从控制台输入一个数字,求1-这个数字的和。
import java.util.Scanner;public class WhileExer1 { public static void main(String[] args){ Scanner s = new Scanner(System.in); int n = s.nextInt(); /* int i = 1; int sum = 0; while(i <= n){ sum = sum + i; i++; } */ int sum = 0; while(n > 0){ sum += n; n--; } System.out.println(sum); }}
2.输出500以内8的倍数。
int i = 0;while(i <= 500){ System.out.println(i); i += 8;}/*while(i <= 500){ if(i % 8 == 0){ System.out.println(i); } i++;}*/
3.输入一个数字,输出这个数字是几位数—3463-4。
Scanner s = new Scanner(System.in);int number = s.nextInt();int i = 0;while(number != 0){ number /= 10; i++;}System.out.println(i);
4.输入一个数字,输出各位数字之和— 3463 - 16。
Scanner s = new Scanner(System.in);int number = s.nextInt();int sum = 0;while(number != 0){ sum += (number % 10); number /= 10;}System.out.println(sum);
5.输入一个数字,输出这个数的二进制。
Scanner s=new Scanner(System.in);int num =s.nextInt();String str="";while(num!=0){ str= num % 2 + s; num/=2;}System.out.println(str);
6.求PI的计算次数
public static void main(String[] args) { int i=0; int base =1; double PI = 0; double sign =1.0; while(PI >3.1415927 || PI < 3.1415926){ PI = PI + 4 * sign/ base; i++; sign *= -1; base += 2; } System.out.println(i);}
2.do–whlie
格式:
do{
Code;
}while(逻辑值);
int i = 20;/*while(i <= 10){ System.out.println(i); i++;}*/do{ System.out.println(i); i++;}while(i <= 10);
注意:do–whlie循环中代码块至少执行一次。
3.for
格式:
for(定义循环变量;循环条件的判断;循环变量的改变){
Code;
}
for循环执行的顺序为:
1.定义循环变量
2.循环条件判断
3.执行内部code
4.执行循环变量的改变
5.执行上述2,3,4,2,3,4……直到循环条件判断为false然后跳出循环。
当循环变量改变相对比较规律的时候,建议使用for循环。当不知道循环次数的时候,建议使用while。
while循环,循环变量定义在循环外,循环结束之后循环变量依然可以使用;for循环的循环变量是定义在for循环里边的,循环结束之后,循环变量不能继续使用。当然for循环的变量也可以定义在for循环之外。
for(int i = 1; i <= 5; i++){ System.out.println("Hello");}int sum = 0;for(int i = 1; i <= 100; i++){ sum += i;}
练习
求一个数二进制的1的个数。
一个int 类型的整数由32 个二进制位组成,每个二进制位的值要么为0 要么为1。要求读入一个int 类型的整数n,计算它的32 个二进制位中总共有多少位为1?
public static void main(String[] args) { Scanner s=new Scanner(System.in); int number =s.nextInt(); s.close(); int j=0; for (int i = 0; i < 32; i++) { if((number &1)==1){ j++; } number >>=1; } System.out.println(j);}
4.循环的嵌套
循环结构中包含了其他的循环结构,形成了循环的嵌套。
一般我们打印图形,有如下的方式:
public class ForDemo2 {public static void main(String[] args){/**********************/ for(int j = 1; j <= 4; j++){ for(int i = 1; i <= 5; i++){ System.out.print("*"); } System.out.println(); }/****************row: 1 -> 5*: 1 -> i*/ for(int i = 1; i <= 5; i++){ for(int j = 1; j <= i; j++){ System.out.print("*"); } System.out.println(); }/*****************/ for(int i = 5; i > 0; i--){ for(int j = i ; j > 0; j--){ System.out.print("*"); } System.out.println(); }/*----*---**--***-*********row:1-5" ": 1 -> 5 - i*: 1 -> i*/ for(int i = 1; i <= 5; i++){ for(int j = 1; j <= 5 - i; j++){ System.out.print(" "); } for(int j = 1; j <= i; j++){ System.out.print("*"); } System.out.println(); }/****************row:5 -> 1" ": 5 - i -> 1* : i -> 1*/ for(int i = 5; i > 0; i--){ for(int j = 5 - i; j > 0; j--){ System.out.print(" "); } for(int j = i; j > 0; j--){ System.out.print("*"); } System.out.println(); }}
练习
九九乘法表
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
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();}
百钱买百鸡
3文钱可以买1只公鸡,2 文钱可以买一只母鸡,1 文钱可以买3 只小鸡。用100 文
钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只?
水仙花数
所谓水仙花数,是指一个三位数abc,如果满足a3+b3+c3=abc,则abc 是水仙花数。(善用%)
5.break和continue
break
作用于选择结构和循环结构,表示终止当前的一层语句。
continue
只能作用于循环结构,表示跳出当前的一次循环继续下次循环。
这两个关键字必须结合相应的语句使用个,单独存在没有意义,因此单独存在的时候编译报错。
Java中,不允许废话存在,存在废话就会编译报错。
循环标号
Java中支持对循环进行标号(要求看懂即可)。
当需要一次性跳出多层循环的时候,可以使用标号形式,但是不推荐使用,因为降低了程序的阅读性。
A:for(int i = 0 ; i < 3; i++){ //A为标号 B:for(int j = 0; j < 4; j++){ for(int k = 1; k < 6; k++){ if(k == 3){ break A; } If(k==1) continue B; System.out.println(i + "," + j + "," + k); } }}
练习
1.判断质数
一个数除了1和本身不能整除其他的数。(使用Math.sqrt()注意2和3的判断。)
2.分解质因数
100 = 2 * 2 * 5 * 5; 18 = 2 * 3 * 3;
import java.util.Scanner;public class Exer{ public static void main(String[] args){ Scanner s=new Scanner(System.in); int number = s.nextInt(); while(number!=1){ for(int i=2;i<=number;i++){ if(number%i==0){ System.out.println(i); numbber/=i; break; } } } }}
这部分练习比较多,有些我自己写的,不一定好,大家可以自己写写练习一下,有助于提高自己的能力。
- (四)流程控制
- 四、java流程控制(一)
- PHP学习笔记(四):流程控制
- Swift快速入门(四)流程控制
- JAVA基础(四)------流程控制语句
- PHP之流程控制(四)
- Shell入门(四)流程控制
- scala学习笔记(四)流程控制
- FreeMarker(四)流程控制语句
- <四>控制流程执行
- 四、流程控制语句
- 四 控制执行流程
- JAVA 四 流程控制
- 四、java流程控制(二)-分支控制
- 四、java流程控制(三)——循环控制
- 细说php(四) 流程控制
- 四.流程控制-学习笔记
- java基础四控制流程
- vue组件的初步理解
- 268. Missing Number
- Git 初始设置
- wordpress迁移站点
- Git 常用命令
- (四)流程控制
- C语言求1/n的和,
- 【python + PIL】图像相似度检测
- 我也开始记录我学编程的点点滴滴!
- 安卓x86虚拟机配置
- Mac sublime 编辑 html 快捷键没用的解决方法
- 考题篇(5.4) NSE4 16. 高级IPsec VPN ❀ 飞塔 (Fortinet) 网络安全专家
- ZOJ3209 Treasure Map(DLX精确覆盖)
- Java 入门第三季