最近学了java的循环结构,循环结构循环结构既要有循环条件,也要有循环操作,以及改变的循环变量的值。比如开车的时候轮子的转动。开车是循环条件,轮子转动时循环操作。
java有三大循环结构,while,do-while,for。他们的区别如下:
whlie和do-while的结构:
for的结构:
for最后面的操作表达式++是一元运算符。。
i++就是先使用然后对自身加1,比如int i=1; int b=i++;得出的结果是 b=1 i=2
++i则相反,先自身加1,再使用,比如int i=1; int b=++i; 结果b=2 r=2
另外顺便再说下二元运算符,就是常说的加减乘除。三元运算符,int a=100,int c=a>100?200:500;,结果就是c=500.
再然后是嵌套循环,for,while,do-while可以互相嵌套。假设外循环的循环次数是m次,内循环的循环次数是n次,那么内层循环的循环次数需要 m * n次。
有个乘法表的经典例子说明。
public class chengfabiao{
public static void main(String[] args){ for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ System.out.print(i+"*"+j+"="+i*j+"\t"); } System.out.print("\n"); } } }
上面是两个for循环嵌套,外循环执行一次,内循环就要执行i次。随着i渐渐变大,内循环执行的次数也在渐渐变多。好神奇有木有。。。
在执行循环的时候,有时候会要求终止执行。这里就有三个流程控制语句,break和continue以及return。
最后举个日历的例子。
我想查从1900年1月1日之后任意一个月的日历。先输入年份,再输入月份,即可列出这一年这一月的日历表。
其实要一步达到上面的功能对现在的我来说很有难度。。。所以为了再具体化一点,我先实现2015年9月的日历吧。
首先要知道一些知识。闰年有366天,平常是365天。一年中的大月是31天,小月是30天,二月是29天或28天。从1900年1月1日到2015年9月总共的天数除以7即可推算出9月的开始是星期几。
//算出总共有多少天
for(int year=1900;year<2015;i++){ if(year%4==0&&year%100!=0||year%400==0){//算闰年 sum=sum+366; }else{ sum+=365;//算平常的年 } } //上面的已经算到了2014年,现在开始算2015年1月1日到2015年9月总共有多少天 for(int month=1;i<9;i++){ if(month==2){ if(2015%4==0&&2015%100!=0||2015%400==0){//如果是闰年2月是29天,平年2月是28天 sum+=29; }else{ sum+=28; } } else{ if(month==4||month==6||month==9||month==11){//4,6,9,11月是小月,其他都是大月 sum+=30; }else{ sum+=31; } } } //上面已经算到2015年8月的天数。要从9月1号开始布局,so sum+=1; //天数到这里已经算出来了,现在用天数除以7,即可知道星期几。 int wekday=sum%7; //现在是日历的第一排有几个空格。 System.out.println("日\t一\t二\t三\t四\t五\t六"); for(int i=1;i<=wekday;i++){ System.out.print("\t"); } //列出2015年9月的日历表 for(int i=1;i<=j;i++){ if(sum%7==6){//如果是到了第六个空格就换行,其他都是空格 System.out.print(i+"\n"); }else{ System.out.print(i+"\t"); } sum++;//增加天数 }
既然列出了一个月日历表,那么想查任意月的日历表只需要将具体的年份改成自己输入的年份,最后代码如下:
public class cal {
public static void main(String[] args){ Scanner in=new Scanner(System.in); int sum=0,j; System.out.println("请输入年份:"); int year=in.nextInt(); System.out.println("请输入月份:"); int month=in.nextInt(); for(int i=1900;i<year;i++){ if(i%4==0&&i%100!=0||i%400==0){ sum=sum+366; }else{ sum+=365; } } for(int i=1;i<month;i++){ if(i==2){ if(year%4==0&&year%100!=0||year%400==0){ sum+=29; }else{ sum+=28; } } else{ if(i==4||i==6||i==9||i==11){ sum+=30; }else{ sum+=31; } } } sum+=1; int wekday=sum%7; System.out.println("日\t一\t二\t三\t四\t五\t六"); for(int i=1;i<=wekday;i++){ System.out.print("\t"); } if(month==2){ if(year%4==0&&year%100!=0||year%400==0){ j=29; }else{ j=28; } }else{ if(month==4||month==6||month==9||month==11){ j=30; }else{ j=31; } } for(int i=1;i<=j;i++){ if(sum%7==6){ System.out.print(i+"\n"); }else{ System.out.print(i+"\t"); } sum++; } } }
感觉特神奇。。。学到这里总算找到不少乐趣,希望一直学下去。