Java编程思想学习(四)----第四章:控制执行流程
在Java中,涉及的关键字包括if-else、while、do-while、for、return、break 以及选择语句switch。然而,Java并不支持goto语句(该语句引起许多反对意见,但它仍是解决某些特殊问题的最便利的方法)。在Java中,仍然可以进行类似goto那样的跳转,但比起典型的goto,有了很多限制。
4.1 true和false
所有条件语句都利用条件表达式的真或假来决定执行路径。
4.2 if-else
//:control/IfElse.java
import static net.mindview.util.Print.*; public class IfElse{
static int result = 0;
static void test(int testval, int target){
if (testval > target)
result = +1;
else if (testval < target)
result = -1;
else
result = 0;//Match
}
public static void main(String[] args){
test(10, 5);
print(result);
test(5, 10);
print(result);
test(5, 5);
print(result);
}
}/*Output
1
-1
0
*///:~
4.3 迭代
while、do-while和for用来控制循环,有时将它们划分为迭代语句(iteration statement)。语句会重复执行,直到起控制作用的布尔表达式( boolean expression)得到“假”的结果为止。
while(boolean-expression)
statement
do
statement
while(boolean-expression);
while和do-while唯一的区别就是do-while中的语句(statement)至少会执行一次,即便表达式第一次就被计算为false。
4.3.2 for
//:control/ListCharacters.java public class ListCharacters{ public static void main(String[] args) {
for (char c = 0; c < 128; c++)
if (Character.isLowerCase(c))
System.out.println("value:" + (int) c + " Character:" + c);
} }/*Output
value:97 Character:a
value:98 Character:b
value:99 Character:c
value:100 Character:d
value:101 Character:e
value:102 Character:f
value:103 Character:g
value:104 Character:h
value:105 Character:i
value:106 Character:j
value:107 Character:k
value:108 Character:l
value:109 Character:m
value:110 Character:n
value:111 Character:o
value:112 Character:p
value:113 Character:q
value:114 Character:r
value:115 Character:s
value:116 Character:t
value:117 Character:u
value:118 Character:v
value:119 Character:w
value:120 Character:x
value:121 Character:y
value:122 Character:z
*///:~
c的作用域就是for控制的表达式的范围内。
4.3.3 逗号操作符
逗号用作分隔符时用来分隔函数的不同参数。(如:function(a,b,c))
通过使用逗号操作符,可以在for语句内定义多个变量,但是它们必须具有相同的类型。
//:control/CommaOperator.java public class CommaOperator
{
public static void main(String[] args)
{
for (int i = 1, j = i + 10; i < 5; i++, j = i * 2)
System.out.println("i = " + i + ", j = " + j);
}
}/*Output
i = 1, j = 11
i = 2, j = 4
i = 3, j = 6
i = 4, j = 8
*///:~
4.4 Foreach语法
for(float x : f) {}
这条语句定义了一个float类型的变量x,继而将每一个float元素赋值给x。
尽管range()使得foreach语法可以适用于更多的场合,并且这样做似乎可以增加可读性,但是它的效率会稍许降低。
4.5 return
关键词包括return、break、continue和一种与其他语言中的goto类似的跳转到标号语句的方式。
如果在返回void的方法中没有return语句,那么在该方法的结尾处会有一个隐式的return,因此在方法中并非总是必须要有一个return语句。但是,如果一个方法声明它将返回void之外的其他东酉,那么必须确保每一条代码路径都将返回一个值。
4.6 break和continue
在任何迭代语句的主体部分,都可用break和continue控制循环的流程。其中,break用于强行退出循环,不执行循环中剩余的语句。而continue则停止执行当前的迭代,然后退回循环起始处,开始下一次迭代。
无穷循环的第二种形式是for(;;)。编译器将while(true)与for(;;)看作是同一回事。
4.7 臭名昭著的goto
Java没有goto。然而,Java也能完成一些类似于跳转的操作,这与break和continue这两个关键词有关。它们其实不是一个跳转,而是中断迭代语句的一种方法。之所以把它们纳入goto问题中一起讨论,是由于它们使用了相同的机制:标签。
//:control/LabeledFor.java
import static net.mindview.util.Print.*; public class LabeledFor
{
static void init(String s)
{
print(s + "初始化了一次");
} static void step(String s)
{
print(s + " step了一次");
} public static void main(String[] args)
{
int i = 0;
outer:
for (init("outer"); true; step("outer"))
{
inner:
for (init("inner"); i < 10; step("inner"), i++)
{
Print.print("i = " + i);
if (i == 2)
{
print("continue");
continue;
} if (i == 3)
{
print("break");
i++;
break;
}
if (i == 7)
{
print("continue outer");
i++;
continue outer;
} if (i == 8)
{
print("break outer");
break outer;
} for (int k = 0; k < 5; k++)
{
if (k == 3)
{
print("continue inner");
continue inner;
}
}
}
}
}
}/*Output
outer初始化了一次
inner初始化了一次
i = 0
continue inner
inner step了一次
i = 1
continue inner
inner step了一次
i = 2
continue
inner step了一次
i = 3
break
outer step了一次
inner初始化了一次
i = 4
continue inner
inner step了一次
i = 5
continue inner
inner step了一次
i = 6
continue inner
inner step了一次
i = 7
continue outer
outer step了一次
inner初始化了一次
i = 8
break outer
*///:~可以得知continue之后会执行step,break不会
如果想在中断循环的同时退出,简单地用一个return即可。return会结束整个方法,break label跳出循环后循环后面的代码还会依次执行。
4.8 switch
switch(integral-selector) {
case integral-value1 :
statement;
break;
case integral-value2 :
statement;
break;
case integral-value3 :
statement;
break;
//...
default:
statement;
}
由于Random.nextInt(26)会产生0到26之间的一个值,所以在其上加上一个偏移量“a”,即可产生小写字母。
int c = rand.nextInt(26) + 'a' ;
Random.nextInt()将产生0~25之间的一个随机int值,它将被加到“a”上。这表示“a”将自动被转换为int以执行加法。
练习9:(4)一个斐波那契数列是由数字
1、1、2、3、5、8、13、21、34等等组成的,其中每一个数字(从第三个数字起)都是前两个数字的和。创建一个方法,接受一个整数参数,并显示从第一个元素开始总共由该参数指定的个数所构成的所有斐波那契数字。例如,如果运行java
Fibonacci 5(其中Ffbonaccl是类名),那么输出就应该是 1、1、2、3、5。
练习10:(5)吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如,下列数字都是“吸血鬼”数字:
1260 = 21 * 60 ; 1827 = 21 * 87 ; 2187 = 27 * 81
写一个程序,找出4位数的所有吸血鬼数字(Dan Forhan推荐)。
@Test
public void exercises9() {
float f[] = new float[5];
for(int i=0; i< 5; i++) {
if(i == 0) {
f[i] = 1;
}else if(i == 1) {
f[i] = 1;
}else {
f[i] = f[i-1] + f[i-2];
}
System.out.println(f[i]);
}
}
@Test
public void exercises10() {
Integer x = 1111;
System.out.println(x.toString().length());
for(int i = 9; i < 100; i ++) {
for(int j = 9; j < 100; j ++) {
int product = i * j;
if(product%100 != 0 && String.valueOf(product).length() == 4) {
System.out.println(product + " = " + i + "*" + j);
}
}
} }
Java编程思想学习(四)----第四章:控制执行流程的更多相关文章
- [Java编程思想-学习笔记]第4章 控制执行流程
4.1 return 关键字return有两方面的用途:一方面指定一个方法结束时返回一个值:一方面强行在return位置结束整个方法,如下所示: char test(int score) { if ...
- [Java编程思想-学习笔记]第3章 操作符
3.1 更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...
- Java编程思想学习(五)----第5章:初始化与清理
随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一. C++引入了构造嚣(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法.Java中也采用了构造器,并 ...
- [Java编程思想-学习笔记]第1章 对象导论
1.1 抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, ...
- [Java编程思想-学习笔记]第2章 一切都是对象
2.1 创建新的数据类型:类 通过第一章掌握了面向对象的理论后,我们知道每个对象必定属于一个类型,那么Java如何创建新的数据类型?如下程序所示: class Circle { // 属性 // 方 ...
- Java编程思想学习(三)----第三章:操作符
3.2使用Java操作符 操作符接受一个或多个参数,并生成一个新值. 操作符作用于操作数,生成一个新值.有些操作符可以改变操作数自身的值.几乎所以的操作符都只能操作“基本类型”.例外的操作符有“=”, ...
- 【学习笔记】《Java编程思想》 第1~7章
第一章 对象导论 对整书的概要. 略读. 第二章 一切都是对象 创建一个引用,指向一个对象. 安全的做法:创建一个引用的同时便进行初始化. 对象存储的地方:1)寄存器:这是最快的存储区,因为它位于不同 ...
- 一起读《Java编程思想》(第四版)
空余时间看<Java编程思想>(第四版)这本书,遇到不懂的知识点就记录在本博客内. 1.复用具体实现 Java代码复用的三种常见方式:继承.组合.代理. 1.继承:使用extends关键字 ...
- JAVA编程思想读书笔记(四)--对象的克隆
接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObje ...
- Java编程思想 学习笔记4
四.控制执行流程 1.true和false 所有条件语句都利用条件表达式的真或假来决定执行路径.注意Java不允许我们将一个数字作为布尔值使用. 2.if-else 3.迭代 while.do-whi ...
随机推荐
- 《Applying Deep Learning to Answer Selection: A Study And an Open Task》文章理解小结
本篇论文是2015年的IBM watson团队的. 论文地址: 这是一篇关于QA问题的一篇论文: 相关论文讲解1.https://www.jianshu.com/p/48024e9f7bb22.htt ...
- Android控件——Button与ImageButton
1.简单介绍
- 上传漏洞新姿势(限Linux)
服务器:Linux当前环境:nginx/1.4.7PHP版本:PHP Version 7.0.0 上传情况简介:上传 111.jpg111 确实可以成功的但是上传 1.php.jpg1111.1 ...
- VPS速度测试(4):上传下载速度、服务器带宽、Ping响应时间
1.VPS的速度好坏经常是我们选择某一个VPS商家的重要参考指标,对于国外的VPS主机我们可以执行以下命令来测试VPS入口带宽是多少. wget https://cachefly.cachefly.n ...
- git清除用户名密码
问题: remote: HTTP Basic: Access deniedfatal: Authentication failed for 'http://******** 解决方案: git con ...
- git 查看父分支
// 显示本地分支和服务器分支的映射关系 git branch -vv // 切换分支(和创建分支就差一个-b参数) git checkout {{branch_name}} // 创建新分支,新分支 ...
- 二、ansible配置简要介绍
[defaults] # some basic default values… hostfile = /etc/ansible/hosts \\指定默认hosts配置的位置 # library_pat ...
- ORM数据库查询操作之基于双下划线的跨表查询
创建表结构 from django.db import models class Book(models.Model): title=models.CharField(max_length=32) ...
- python标准库之【socket】
socket通常也称作”套接字“.网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket 是网络连接端点.例如当你的Web浏览器请求www.fishc. ...
- SQL Server 连接字符串和身份验证 学习
SQL Server .NET Data Provider 连接字符串包含一个由一些属性名/值对组成的集合.每一个属性/值对都由分号隔开. PropertyName1=Value1; ...