过完年回来,发现代码都很陌生了,果然是一天不接触就有距离。
最近学了 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++;
}
}
}
感觉特神奇。。。学到这里总算找到不少乐趣,希望一直学下去。