新手区 循环结构--学习 java 归纳(3)

wuming · 2015年02月23日 · 最后由 神奇的小新 回复于 2015年02月28日 · 2146 次阅读

过完年回来,发现代码都很陌生了,果然是一天不接触就有距离。
最近学了 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++;
                 }
             }

}

感觉特神奇。。。学到这里总算找到不少乐趣,希望一直学下去。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 3 条回复 时间 点赞

for 还有 foreach 啊。 不错,就是编码风格需要矫正下。

老师还没教呢,等学到了再补。。。

还有 swith case

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册