Java 学习之路(十六)- 程序循环之 while 语句

用 while 语句增强找整除数的程序

增强点:找出n个可以被整除的数

while 语句的语法

while (条件表达式) {
while 循环体
}

  • 条件表达式的结果是一个 boolean 值,如果为 true,则执行循环体,如果为 false,则循
    环结束
  • 而循环体是一个代码块。所以,循环也是可以嵌套别的语句的,包括 while 语句,for 语句,if-else 语句等。
int n = 10;
int dividend = 100;
int divisor = 89;

int found = 0;
while (found < n) {
    if (dividend % divisor == 0) {
        System.out.println(dividend + "可以整除" + divisor + "。商是" + dividend / divisor);
        found++;
    }
    dividend++;
}

do-while 语句

语法:

do {
	while 循环体
} while ( 条件表达式 );

do-while 语句的循环体至少执行一次

do {
	System.out.println("会执行一次");
} while (false);  // 结束要加分号

死循环(endless loop)

无法结束的循环 ( endless loop / infinite loop )
死循环是因为没有设置好结束条件,循环的结束条件很重要,要充分考虑各种边界情况。

一个死循环的例子:

int n = 5;

int dividend = 100;
int divisor = 89;

int found = 0;
while (found < n) { // found 没有自增
    if (dividend % divisor == 0) {
        System.out.println(dividend + "可以整除" + divisor + "。商是" + dividend / divisor);
    }
    dividend++;
}

一个看似死循环却不是死循环的例子

用When找出5个能被2,000,000,000整除的数
程序最终还是结束了,但是结果并不是我们想要的

int n = 5;

int dividend = 100;
int divisor = 2000000000;

int found = 0;
while (found < n) {
    if (dividend % divisor == 0) {
        System.out.println(dividend + "可以整除" + divisor + "。商是" + dividend / divisor);
        found++;
    }
    dividend++;
}
/*
2000000000可以整除2000000000。商是1
-2000000000可以整除2000000000。商是-1
0可以整除2000000000。商是0
2000000000可以整除2000000000。商是1
-2000000000可以整除2000000000。商是-1
*/

导致这样结果出现的原因,是因为没有对运算值做限制,超出了 int 范围。

改进:使用 break 语句结束循环

  • beak 语句可以结束任何循环
  • 不考虑负数的情况,使用 break 改善程序
  • 理解 String start 的内容,为什么不是 “从 -2147483648 开始递增”
int n = 5;

int dividend = 100;
int divisor = 2000000000;

String start = "从" + dividend + "开始递增,";

int found = 0;
while (found < n) {
    if (dividend < 0) {
        System.out.println("被除数溢出,未找到足够的数。循环结束。");
        break;
    }
    if (dividend % divisor == 0) {
        System.out.println(dividend + "可以整除" + divisor + "。商是" + dividend / divisor);
        found++;
    }
    dividend++;
}

System.out.println(start + "共找到" + found + "个可以整除" + divisor + "的数。");

System.out.println(dividend);
/*
2000000000可以整除2000000000。商是1
被除数溢出,未找到足够的数。循环结束。
从100开始递增,共找到1个可以整除2000000000的数。
-2147483648
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值