【达内课程】JAVA流程控制语句
文章目录
- for循环
- if
- break
- continue
- while
- do...while
- switch
for循环
我们用 IntelliJ IDEA 写一个 Java 程序
for (int i = 1; i <= 4; i++) {System.out.println("i = " + i);
}
运行程序,结果输出如下:
for 循环的执行顺序用上边的例子说明一下:
1、首先执行 int i = 1,并且只执行一次,定义初始化变量 i,赋值1
2、然后判断 i <= 4 结果为 true,则执行循环体打印 i = 1
3、循环体结束之后,执行 i++,然后 i 变成了2,继续判断 i <= 4 结果为true,则执行循环体打印 i = 2
4、如此循环执行,直到打印 i = 4之后,再执行 i++ 让 i 变成了 5,然后判断 i <= 4 结果为 false,循环结束。
5、这样就完成了 1~4 的输出,当然程序不是固定的,大家也可以把条件 i <= 4 修改为 i < 5,这样也是可以的。
练习:求阶乘、约数、派Π
我们用 Android Studio 写一个 Android 程序
<EditTextandroid:id="@+id/editText"android:layout_width="match_parent"android:layout_height="wrap_content"android:ems="10"android:inputType="textPersonName" /><Buttonandroid:id="@+id/button1"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="doClick"android:text="阶乘" /><Buttonandroid:id="@+id/button2"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="doClick"android:text="约数" /><Buttonandroid:id="@+id/button3"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="doClick"android:text="π" /><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:textColor="#222222"android:textSize="18sp" />
public class MainActivity extends AppCompatActivity {EditText editText;TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//类中定义的变量称为成员变量editText = findViewById(R.id.editText);textView = findViewById(R.id.textView);}public void doClick(View view) {switch (view.getId()) {case R.id.button1:f1();break;case R.id.button2:f2();break;case R.id.button3:f3();break;}}/*** 阶乘*/public void f1() {int a = Integer.valueOf(editText.getText().toString());int result = a;for (int i = a - 1; i >= 1; i--) {result = result * i;}textView.setText(result + "");}/*** 约数*/public void f2() {int a = Integer.valueOf(editText.getText().toString());textView.setText("");for (int i = 1; i <= a; i++) {if (a % i == 0) {textView.append(i + "\n");}}}/*** π*/public void f3() {int n = Integer.valueOf(editText.getText().toString());double sum = 0;//a、b是分子、分母,i控制累加次数for (int a = 1, b = 1, i = 0; i < n; a *= -1, b += 2, i++) {sum += a / (double) b;}double pi = sum * 4;textView.setText(pi + "");}
}
运行程序,结果如下:
关于 f1() 阶乘方法的一些说明
阶乘的定义
一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。
自然数n的阶乘写作n!。亦即n!=1×2×3×…×(n-1)×n。
阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
关于 f2() 求约数的方法的一些说明
约数的定义
约数,又称因数。整数a除以整数b(b≠0)
除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。
关于 f3() 求派Π的方法的一些说明
Π的计算方法
观察上边的规律,我们可以得知 计算规律是 加减交替 的,所以 a *= -1 来控制符号变化,分母是 +2 的,所以 b+=2 用来控制分母变化。具体可以一步一步演算下。
练习:循环嵌套
输出如下图案
写一个 Java 程序
for (int i = 0; i < 5; i++) {for (int j = 0; j <= i; j++) {System.out.print("*");}System.out.println("");}
进阶练习,输出如下金字塔图形:
for (int i = 1; i <= 5; i++) {for (int j = 0; j < 5 - i; j++) {System.out.print(" ");}for (int j = 0; j < 2 * i - 1; j++) {System.out.print("*");}System.out.println("");}
练习:百元买百只鸡
公鸡5元1只
母鸡3元1只
小鸡1元3只
用100元恰好买100只鸡的组合
System.out.println("公鸡5元1只");System.out.println("母鸡3元1只");System.out.println("小鸡1元3只");//能买i只公鸡for (int i = 0; i < 20; i++) {//买完公鸡剩余钱int money = (100 - 5 * i);//买j只母鸡for (int j = 0; j < money / 3; j++) {//买k只小鸡int k = (money - 3 * j) * 3;if (i + j + k == 100) {System.out.println("花完100元买100只鸡,要买" + i + "只公鸡," + j + "只母鸡," + k + "只小鸡");}}}
运行程序,结果如下:
if
顺序判断多个条件,只要执行了其中1个分支,就跳出if语句
if(条件1){//如果符合条件1,则执行条件1,然后跳出整个if语句
}else if(条件2){//如果符合条件2,则执行条件2,然后跳出整个if语句
}else{//如果条件1/2都不符合,则执行else里的语句
}
练习:判断符号函数
要求,输入一个整数,如果输入正数,返回1;
如果输入负数,返回-1;
如果输入0,返回0;
我们用 IntelliJ IDEA 写一个 Java 程序
public class Main {public static void main(String[] args) {System.out.println("请输入整数:");int a = new Scanner(System.in).nextInt();int r = f(a);System.out.println(r);}static int f(int x) {if (x > 0) {return 1;} else if (x < 0) {return -1;} else {return 0;}}
}
运行程序,结果如下:
break
中断循环(跳出循环)
练习:产生>0.999的随机浮点数
//产生[0,1)的随机浮点数/*double d = Math.random();System.out.println(d);*///需要打印出>0.999的浮点数for (int i = 0; ; i++) {double d = Math.random();if (d > 0.999) {System.out.println("第" + i + "次" + d);break;}}
运行程序,结果如下:
上面是在单循环中的应用场景,我们还会碰到多循环时的情况,首先写一个双循环程序,每行输出数字 0-7,输出 5 行:
for (int i = 0; i < 5; i++) {for (int j = 0; j < 8; j++) {System.out.print(j);}System.out.println();}
正常情况下运行程序,结果如下:
当我们使用 break
for (int i = 0; i < 5; i++) {for (int j = 0; j < 8; j++) {if (j == 6) {break;}System.out.print(j);}System.out.println();}
运行结果如下:
可以看出 break 只能跳出1层循环
continue
Java continue 语句用来结束当前循环,并进入下一次循环,即仅仅这一次循环结束了,不是所有循环结束了,后边的循环依旧进行。
练习:跳过某个数字的输出
int[] numbers = {1, 2, 3, 4, 5, 6};for (int i = 0; i < numbers.length; i++) {if (i == 3) {continue;}System.out.println("Count is: " + i);}
运行程序,结果如下:
练习:带标签的 continue 程序测试
for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {System.out.println(j);}System.out.println("test");}System.out.println("finish");
正常情况下输出
不使用标签的 continue
for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if (j == 2) {continue;}System.out.println(j);}System.out.println("test");}System.out.println("finish");
使用标签的 continue
outer:for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if (j == 2) {continue outer;}System.out.println(j);}System.out.println("test");}System.out.println("finish");
运行程序结果如下:
我们可以看到会连同外循环一起 break 掉,所以"test"没有打印。
continue 和 break 的区别
continue 语句类似于 break 语句,但它只能出现在循环体中。它与 break 语句的区别在于:continue 并不是中断循环语句,而是中止当前迭代的循环,进入下一次的迭代。简单来讲,continue 是忽略循环语句的当次循环。
练习:输入整数n,求n内质数数量
public class Main {public static void main(String[] args) {System.out.println("输入整数n,求n内质数数量");int n = new Scanner(System.in).nextInt();int r = f(n);System.out.println(r);}static int f(int n) {//count为记数,假设2是已知质数,count默认为1int count = 1;outer:for (int i = 3; i <= n; i++) {//最多除到i的开方,为避免开放后漏除,所以开方后+1//至于为什么可以打电话问问你们的小学体育老师,看看他是怎么教你数学的...double max = Math.sqrt(i) + 1;for (int j = 2; j < max; j++) {//i能被j整除if (i % j == 0) {//直接跳出最外层循环continue outer;}}count++;}return count;}
}
运行程序结果如下:
质数的定义
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
100以内的质数有25个,分别是2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97
关于求质数方法的一些说明
根据质数的定义,我们可以使用 for 循环把输入的数字 N 用从 2 ~ N-1 范围的数开始除,如果都不能整除,说明是质数。所以假如我们输入 50,假设 2 是已知的质数,那么从 3 开始,
3 需要除 2
4 需要除 3、2
5 需要除 4、3、2
…
50 需要除 49、48、…、2
所以编写程序如下:
static int f(int n) {//count为记数,假设2是已知质数,count默认为1int count = 1;outer:for (int i = 3; i <= n; i++) {for (int j = 2; j < i; j++) {if (i % j == 0) {continue outer;}}count++;}return count;}
但这样做循环次数比较多,为了提高效率可以先将数字开平方,因为如果一个数不是素数是合数, 那么一定可以由两个自然数相乘得到, 其中一个大于或等于它的平方根,一个小于或等于它的平方根,并且成对出现。
while
while循环的一般语法是:
while( 表达式 ){语句;
}
其中,表达式是循环条件,语句为循环体。while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句,一旦条件为假,就停止执行循环体。如果条件在开始时就为假,则不执行循环体语句直接退出循环
练习:产生>0.99的随机浮点数需要的次数
int count = 0;double d = 0;while (d < 0.99) {d = Math.random();System.out.println("产生的随机数为:"+d);count++;}System.out.println(count + "次结束:" + d);
运行程序,结果如下:
程序中的 d = Math.random();
非常重要,这条语句通过修改 d 的值来修改循环条件,直到 d 的值大于 0.99,循环条件为假时退出循环。也就是说,循环条件中的变量,需要在循环中重新赋值,以逐渐改变循环条件的值,直到循环条件为假;否则循环将永远不会停止,这种循环称为“死循环”或者“无限循环”。
while(true)
就是无限循环语句。因为括号中的条件为 true,所以永远不会跳出循环,除非语句块中有break语句才都能跳出循环。
练习:猜数字
随机产生1-1000范围内的整数,让用户猜数字,并提示猜结果的大小,直到猜对为止
//new Random().nextInt(1000)产生[0,1000)范围的随机整数//1+new Random().nextInt(1000)产生[1,1000]int r = 1 + new Random().nextInt(1000);System.out.println(r);while (true) {System.out.println("猜");int c = new Scanner(System.in).nextInt();if (c > r) {System.out.println("大");} else if (c < r) {System.out.println("小");} else {System.out.println("对");break;}}
运行程序如下:
do…while
do{执行语句;
}while(条件表达式);
do…while特点是条件无论是否满足,循环体至少被执行一次。
do…while 和 while 的不同
do…while 循环是先执行一次,再判断
while循环是先判断,再执行。如果条件不成立一次都不执行 ,而do…while循环是不管条件成不成立都先执行一次
double d = 1;do {System.out.println("条件为false,也运行了一次");} while (d < 0.99);
运行结果如下:
switch
关于 switch 的语法可以查看 Java switch case 语句
这里只说几个重要的点:
1、switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了
2、case 标签必须为字符串常量或字面量,可以是运算表达式,但一定要符合正确的类型。不能是变量,即便变量在之前进行了赋值,JVM依然会报错。
3、每个 case 后必须跟 break,否则程序会继续执行下一条 case 语句,直到出现 break 语句
case后为变量或表达式,只能是一个确切的值
练习:分数转换为五档分制
分数分为5个级别,分数大于等于90,小于等于100,为A。分数大于等于70,小于90,为B。规则如下:
A[90,100]
B[70,90)
C[60,70)
D[20,60)
E[0,20)
我们来写一个 Android Demo
XML代码
<EditTextandroid:id="@+id/editText"android:layout_width="match_parent"android:layout_height="wrap_content"android:ems="10"android:hint="请输入分数"android:inputType="number" /><Buttonandroid:id="@+id/button"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="doClick"android:text="转换" /><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="18sp"android:textColor="#222222"android:gravity="center" />
java代码
public void doClick(View view) {TextView tv = findViewById(R.id.textView);EditText et = findViewById(R.id.editText);tv.setText(f(Integer.parseInt(et.getText().toString())));}String f(int s) {String r = "";if (s < 0 || s > 100) {return "填写有误";}switch (s / 10) {case 10:case 9:r = "A";break;case 8:case 7:r = "B";break;case 6:r = "C";break;case 5:case 4:case 3:case 2:r = "D";break;case 1:case 0:r = "E";break;}return r;}
运行结果如下:
【达内课程】JAVA流程控制语句相关推荐
- 划重点丨详解Java流程控制语句知识点
本文分享自华为云社区<java知识点问题精选之流程控制语句>,原文作者:breakDraw . 流程控制语句就是用来控制程序中各语句执行的顺序,下面将详细介绍java流程控制语句. Q: ...
- Java流程控制语句的基本概念
Java流程控制语句的基本概念 概述: 流程:做事情的顺序 控制:按照一定的规定去做某些事情 人为的定义好一定的规定,java语句按照规定进行执行的语句. 分类: 一.顺序语句: 自上而下自左往右执行 ...
- java中特殊流程控制语句,深入分析JAVA流程控制语句
复合语句 Java的复合语句是以整个区块为单位的语句,由{}以及{}内包含的内容组成 对于复合语句来说,复合语句创建了一个局部变量的作用域,该作用域中变量可以创建并使用,在作用域外使用则会报错,找不到 ...
- java循环控制语句,简述Java流程控制语句中的三种循环控制语句,并描述下它们的区别。...
简述Java流程控制语句中的三种循环控制语句,并描述下它们的区别. 答:for语句,构建确定循环次数的循环结构 while语句,通常构建不确定循环次数的循环结构 do-while语句,通常构建不确定循 ...
- JAVA学习(四):Java流程控制语句(顺序结构、if条件语句、switch条件语句、循环语句与跳转语句)
Java流程控制语句 本博文将对JAVA中组成各种结构的控制语句进行重点介绍,主要内容是区别于C/C++中的流程控制语句的重点解析. 1.顺序语句 顺序结构中的语句可分为:表达式语句.空语句和复合语句 ...
- 3.Java流程控制语句
文章目录 03 Java流程控制语句 1. 分支结构(选择结构) 1.1 if单分支选择结构 1.2 if-else双分支选择结构 1.3 if-else if-else多分支结构 1.4 嵌套if分 ...
- (三)java流程控制语句
文章目录 十三.Java API文档 十四.运算符 十五.流程控制语句 if-else语句 switch语句 for循环控制 while循环 do...while循环 多重循环控制 跳转控制语句 十三 ...
- JAVA流程控制语句1
单分支结构: 只有一个条件,符合就执行 借用JDK提供的Math数学类,random()方法是生成一个随机数,返回类型是double类型,数据范围是[0,1) 双 ...
- java 流程控制语句
流程控制语句 在程序中, 程序运行的流程控制决定程序是如何执行的, 主要有三大流程控制语句. 顺序控制 分支控制 循环控制 一.顺序控制 顺序控制就是程序会由上而下,由左及右依次逐行执行,就和我们写文 ...
最新文章
- 麦司机博客项目技术选型-Java后端
- FreeJTS部标视频平台:JT/T808、JT/T809、JT/T796、JT/T794、JT/T1078、苏标ADAS的区别
- us域名在哪里注册_独立站如何选择一个合适的域名?
- bool查询原理 es_ES系列之原理copy_to用好了这么香
- SparkSQL练习+理解+详解
- html td装满图片,HTML:桌子上的Td不满
- HUE 打开 WorkFlow异常 Operation category READ is not supported in state standby
- java中自定义异常的方法步骤
- 十六进制、二进制转换以及练习
- zigbee网关 cc2530裸机驱动温度传感器LM75A
- 区域D绕直线L旋转形成的旋转体体积计算
- 吃饭 睡觉 打豆豆!!!
- java二进制保存图片_JAVA高级特性——二进制存储图片
- Docker基础(centos安装、阿里云镜像加速器配置、常用命令、数据卷、DockerFile、镜像推送阿里云等)
- cocos2dx 常见的22种特效 3D特效
- 使用 vimdiff 比较文件的技巧
- 【es】es界面化管理工具cerebro的安装和使用
- jeeplus框架代码生成器功能的使用
- ES Elasticsearch
- 网盘限速怎么办? 小编来支招!