循环语句
循环语句是用来控制某些语句的重复执行。
要素
初始化变量 循环条件 循环语句 更改初始化变量的语句
while语句
while(循环条件){ //特点:1.先判断,后执行 2.执行次数 :0--n;
重复语句
}
do while循环语句
do{ //特点:1.先执行,后判断 2.执行次数:1--n
重复执行语句
}while(循环条件);
案例一:用while方法求出所有的水仙花数。
/**
用while和do while语句分别实现求出【100-999】之间所有的水仙花数
*/
// while语句求水仙花数
class Demo3 {
public static void main(String[] args){
int a,b,c,sum;
int i=100; //定义控制变量
while(i<1000){ //循环条件
a=i/100; //提取数字
b=i%100/10;
c=i%10;
sum=a*a*a+b*b*b+c*c*c;
if(sum==i){ //判断是否是水仙花数
System.out.println(sum);//输出语句
}
i++; //操作控制变量
}
案例二:用do while方法求出所有的水仙花数
/**
用while和do while语句分别实现求出【100-999】之间所有的水仙花数
*/
// while语句求水仙花数
class Demo3 {
public static void main(String[] args){
//用do while语句求出[100-999]之间所有的水仙花数
int a,b,c,d,sum;
int i=100; //定义控制变量
do{ //先执行一次程序体
a=i/100;
b=i%100/10;
c=i%10;
sum=a*a*a+b*b*b+c*c*c;
if(sum==i){
System.out.println(i);
}
i++; //控制变量操作,不能放在循环体外面
}while(i<999); //循环条件,注意此处比while循环要少1,因为没有判断前已经执行过一次了
}
}
for 循环:
for语句的规范:
for (初始化语句;循环条件 ;更改语句 ){
循环语句
}
注意:
for (int num=1;num<88;num++){
num=num+1
}
System.out.println(num);
上述语句最后并不会输出num值,因为num是局部变量,局部变量都是有作用域的,超出了作用域就不能再继续使用。
for循环的变形:
int num=1;
for (;num<88;){
num=num+1
num++;
}
上面代码变形也是正确的,初始化语句和更改初始变量语句可以单独拿出,但是 ; 不能省略。
for(;;){
}
上述代码也是正确的,该循环为无限循环。
注意:在无限循环后面不要跟其他语句,因为永远都执行不到,编译时会报错:
public class Pra{
public static void main(String[] args){
for(;;){
System.out.println("hello");
}
System.out.println("over");
}
}
------------------------------------------------------------------------------
Pra.java:6: 错误: 无法访问的语句
System.out.println("over");
^
1 个错误
for循环的嵌套使用:
双层for循环可以理解为时钟,外层的for循环=时针,内层的for循环=分针,分针走一圈---->>时针走一格;
双层for循环通常可以用来打印几行几列的表格,外层for控制行数,内层for控制列数
案例一:打印一个由*组成的6行5列的矩形:
class Demo5 {
public static void main(String[] args){
//打印6行5列的矩形
for(int i=1;i<6;i++){
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
案例二:打印由*组成的直角三角形:
class Demo5 {
public static void main(String[] args){
//打印靠右的直角三角形
for(int i=1;i<6;i++){
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}
}
案例三:打印一个由*组成的倒置的直角三角形:
//打印倒置的直角三角形
class Demo5 {
public static void main(String[] args){
for(int i=1;i<6;i++){
for(int j=i;j<6;j++){
System.out.print("*");
}
System.out.println();
}
案例四:打印由*组成的等腰三角形
class Demo5 {
public static void main(String[] args){
//打印等腰三角形
for(int i=1;i<6;i++){
for(int k=i;k<5;k++){
System.out.print(" ");
}
for(int j=1;j<=i;j++){
System.out.print("* ");
}
System.out.println();
}
}
}
案例五:打印九九乘法表:
class Demo5 {
public static void main(String[] args){
//打印九九乘法表
for(int i=1;i<10;i++){
for(int j=1,sum=0;j<=i;j++){
sum=i*j;
System.out.print(i+"X"+j+"="+sum+"\t");
}
System.out.println();
}
案例六:打印万年历,输入年份月份信息后从控制台输出日历信息。
/*
输出万年历效果。
求和法,思路:先算出所求年份离1900年总共有多少天,天数+1位所求年1月1日,取模7,
余数就是1月1的星期几;再求月份,再取模,余数就是星期数,最后制表输出,双for循环。
*/
import java.util.*;
class Demo6 {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
System.out.print("请输入要求的年份信息:");
int year=in.nextInt();
System.out.print("请输入要求的月份信息:");
int month=in.nextInt();
int sum=0; //总天数
int day=0; //每个月有多少天
//求所求年份距离1900年有多少天
for(int i=1900;i<year;i++){
//判断是否是闰年
if(i%400==0 || (i%4==0 && i%100!=0)){
sum+=366;
}else
sum+=365;
}
//求每个月有多少天
for(int i=1;i<=month;i++){ //注意:不能定义i从0开始,因为i代表月份,必须从1开始
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day=31;
break;
case 4:
case 6:
case 9:
case 11:
day=30;
break;
case 2:
if(year%400==0 || (year%4==0 && year%100!=0)){
day=29;
}else
day=28;
}
if(i<month)
sum+=day; //目前为止是到month-1月的和,因为判断条件没有=month
}
//现在准备输出日历表格
//第一行是不变的,可以直接输出
System.out.println("日\t一\t二\t三\t四\t五\t六");
//先打印1号之前的表格
//此处注意sum是到所求月 的上个月31号之前的和,所以所求月1号要+1
int week=(sum+1)%7;
for(int i=0;i<week;i++){
System.out.print("\t"); //1号对应的星期几之前全部输出制表符
}
//接下来打印月份数字了
for(int i=1;i<=day;i++){
System.out.print(i+"\t");
if((sum+i)%7==6){
System.out.println();
}
}
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容