循环结构的4要素:
(1)、初始条件;
(2)、循环条件 -- > boolean类型;
(3)、循环体;
(4)、迭代条件。
一、while循环结构:
while(a){
b;
c;
}
执行顺序:a - - b - - c - - a - - b - - c …………直到条件a不满足
说 明:
1、写while循环一定小心不要丢了迭代条件。一旦丢了,就容易导致死循环! 2、写程序要避免出现死循环。
3、for循环与while循环可以相互转换。
二、do--while循环结构:
do {
b;
c;
}while(a)
执行顺序:b - - c - - a - - b - - c …………直到条件a不满足
说 明:do—while循环结构至少会执行一次循环体。
package cn.edu.bzu;
public class Test00 {
public static void main(String[] args) {
//遍历100以内的偶数
int num=1;
int sum=0,count=0;
do {
if(num%2==0) {
System.out.println(num);
sum+=num;
count++;
}
num++;
}while(num<=100);
System.out.println("总和为:"+sum);
System.out.println("个数为:"+count);
}
}
答案:(java中while括号内的必须是boolean类型,不能是整型)
package cn.edu.bzu;
import java.util.Scanner;
public class Test00 {
public static void main(String[] args) {
int z=0,f=0;
Scanner scan=new Scanner(System.in);
while(true) {
int num=scan.nextInt();
if(num==0)
break;
else if(num>0)
z++;
else
f++;
}
System.out.println("您输入的数(以0认为结束)中,正数"+z+"个,负数"+f+"个。");
}
}
嵌套循环:一个循环体含在另外一个循环体中。
嵌套循环示例:
1、
*****
*****
*****
*****
package cn.edu.bzu;
import java.util.Scanner;
public class Test00 {
public static void main(String[] args) {
int i,j,k;
for(i=0;i<4;i++) {
for(j=0;j<=i;j++)
System.out.print(" ");
for(k=0;k<4;k++)
System.out.print('*');
System.out.println();
}
}
}
2、结果展示图:
*
**
***
****
package cn.edu.bzu;
import java.util.Scanner;
public class Test00 {
public static void main(String[] args) {
int i,j,k;
for(i=0;i<4;i++) {
for(k=0;k<=i;k++)
System.out.print('*');
for(j=0;j<=i;j++)
System.out.print(" ");
System.out.println();
}
}
}
三、例题:
1、九九乘法表:
package cn.edu.bzu;
import java.util.Scanner;
public class Test00 {
public static void main(String[] args) {
int i,j;
for(i=1;i<=9;i++) {
for(j=1;j<=i;j++) {
System.out.print("i * j = "+i*j+" ");
}
System.out.println();
}
}
}
2、输出100以内的所有质数:(2是最小的质数)
x
package cn.edu.bzu;
import java.util.Scanner;
public class Test00 {
public static void main(String[] args) {
int i,j;
for(i=1;i<=9;i++) {
for(j=1;j<=i;j++) {
System.out.print("i * j = "+i*j+" ");
}
System.out.println();
}
}
}
优化代码1:
package cn.edu.bzu;
import java.util.Scanner;
public class Test00 {
public static void main(String[] args) {
int count=0;
boolean isFlag=true; //设置一个标志为,用来标志
//获取当前时间距离1970-01-01 00:00:00的毫秒数
long start=System.currentTimeMillis();
for(int i=2;i<=1000000;i++) {
for(int j=2;j<=Math.sqrt(i);j++) {//优化二:使用Math
if(i%j==0) {
isFlag=false; //标志位:如果不是质数就标志位为false
break; //优化一:只对本身非质数的自然数是有效的
}
}
//
if(isFlag==true)
count++;
isFlag=true;
}
long end=System.currentTimeMillis();
System.out.println("质数的个数为:"+count);
System.out.println("所花费的时间为:"+(end - start));
}
}
优化代码2:
package cn.edu.bzu;
import java.util.Scanner;
public class Test00 {
public static void main(String[] args) {
int count=0;
boolean isFlag=true; //设置一个标志为,用来标志
//获取当前时间距离1970-01-01 00:00:00的毫秒数
long start=System.currentTimeMillis();
label:for(int i=2;i<=1000000;i++) {
for(int j=2;j<=Math.sqrt(i);j++) {//优化二:使用Math
if(i%j==0) {
continue label;
}
}
count++;
}
long end=System.currentTimeMillis();
System.out.println("质数的个数为:"+count);
System.out.println("所花费的时间为:"+(end - start));
}
}
break和continue:break结束包裹此关键字的最近的一层的所有循环,continus结束此层的当次循环。
return用于结束一个方法。
四、测试习题
1. 循环结构是如何最后退出循环的,有哪些不同的情况请说明。
① 循环条件返回false
② 在循环体内,一旦执行到break,跳出循环
continue;return
2.指出如下程序输出的结果:
label: for (int i = 1; i <= 4; i++) { for (int j = 1; j <= 10; j++) { if (j % 4 == 0) { continue label; } System.out.print(j); } System.out.println(); } |
正确结果:123123123123
3.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3。
编程 找出1000以内的所有完数。(因子:除去这个数本身的其它约数)
//int factor = 0;
for(int i = 1;i <= 1000;i++){
int factor = 0;
for(int j = 1;j <= i/2;j++){
if(i % j == 0){
factor += j;
}
}
if(i == factor){
System.out.println(i);
}
//重置factor
//factor = 0;
}
4. 说明break和continue使用上的相同点和不同点
break:s witch-case 和 循环结构(结束当前循环),其后不可以声明执行语句
continue: 循环结构(结束当次循环),其后不可以声明执行语句
5.
******
*****
****
***
**
*
外层循环控制行数
内层循环控制列数
for(int i = 1;i <= 6;i++){
for(int j = 1;j <= 7 - i;j++){
System.out.print("*");
}
System.out.println();
}
或
for(int i = 0;i < 6;i++){
for(int j = 0;j < 6 - i;j++){
System.out.print("*");
}
System.out.println();
}