A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 真正黑马 中级黑马   /  2015-4-25 23:01  /  397 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一:循环结构
while语句:
格式:while(条件表达式)  //while:先判断条件,只有条件满足才执行循环体。do while: 先执行循环体,在判断条件,条件满足,再继续执行循环体。                                
{执行语句;}
do while语句:
      do
{执行语句;}
while(条件表达式);//特点:条件无论是否满足,循环体至少被执行一次。
for语句
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;
}
*思考:什么时候用循环结构:当要对某些语句执行很多次时,就使用循环结构。
*小例子注意事项:无限循环的最简单表现形式。
for( ;;){ }
while(true) { }
二:具体事例
1:,1~100之间 7的倍数的个数。并打印。(提示:用到计数器思想)
要求:拿到问题时, 首先分析问题,严格按照要求书写格式即思路,步骤(改进,多种方法等内容-可选)
思路:
1),先对1~100进行遍历。
2),遍历是注意定义初试条件。只对7的倍数进行操作。
3),因为7的倍数不确定,只要符合条件,就通过一个变量来记录住这个变化的次数。
   步骤:
1),定义循环语句,选择for语句。
2),在循环中定义判断。只要是7的倍数即可。使用if语句。条件:7的倍数 x%7==0;
3),定义变量,该变量随着7的倍数的出现而自增。
class  ForTest3
{
public static void main(String[] args)
{
int count = 0;
for(int x=1; x<=100; x++)
{
if(x%7==0)
//System.out.println("x="+x);
count++;
}
System.out.println("count="+count);
}
}
2大圈套小圈思想
*****
****
***
**
*
发现图形有很多行,每一个行有很多列。
要使用嵌套循环。原理:形象说法:大圈套小圈。
class ForForDemo
{
public static void main(String[] args)
{
for(int x=0; x<3; x++)//
{
for(int y=0; y<4; y++)
{
System.out.print("*");
}
System.out.println();//只有一个功能就是换行。
}
System.out.println("-------------------");
for (int x=0; x<5 ;x++ )//x<5:因为外循环控制行数。一共5行。
{
for (int y=x; y<5 ;y++)
{
System.out.print("*");
}
System.out.println();
//z++;
}
}
}
3:编写程序,判断给定的某个年份是否是闰年。
      闰年的判断规则如下:
      (1)若某个年份能被4整除但不能被100整除,则是闰年。
      (2)若某个年份能被400整除,则也是闰年。

import java.util.Scanner;
class Bissextile
{
public static void main(String[] args)
{
    System.out.print("请输入年份");
    int year;    //定义输入的年份名字为“year”
    Scanner scanner = new Scanner(System.in);
    year = scanner.nextInt();
if (year<0||year>3000)
{
        System.out.println("年份有误,程序退出!");
        System.exit(0);
     }
    if ((year%4==0)&&(year%100!=0)||(year%400==0))
        System.out.println(year+" is bissextile");
    else
        System.out.println(year+" is not bissextile ");
    }
}
4:编写程序求 1+3+5+7+……+99 的和值。

class he
{
public static void main(String[] args)
{
        int number = 1;  //初始值1,以后再+2递增上去
        int sum = 0;
        for ( ; number <100; number+=2 ) { sum += number; }
        System.out.println("1+3+5+7+……+99= " +sum);
    }
}
5:利用for循环打印 9*9  表?
1*1=1
1*2=2  2*2=4
1*3=3  2*3=6  3*3=9
1*4=4  2*4=8  3*4=12  4*4=16
1*5=5  2*5=10  3*5=15  4*5=20  5*5=25
1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81
//循环嵌套,打印九九乘法表
public class NineNine
{
public static void main(String[]args)
{
    System.out.println();
for (int j=1;j<10;j++)
{
        for(int k=1;k<10;k++)
{   
//老师的做法,判断语句里的 k<=j,省去下列的if语句。
            if (k>j) break;       //此处用 continue也可以,只是效率低一点
            System.out.print(" "+k+"X"+j+"="+j*k);
         }
        System.out.println();
        }
    }
}
*分析以上几个小例子可知:很多程序是想通的,我们要从中学会找到其中的规律,不能死记代码(但得多敲)。
三两个特殊语句:break,continue

class OtherDemo
{
public static void main(String[] args)
{
//break:
w:for(int x=0; x<3; x++)
{
for(int y=0; y<4; y++)
{
System.out.println("x="+x);
break w;
}
}


//continue:只能作用于循环结构。继续循环。特点:结束本次循环,继续下一次循环。


for(int x=1; x<=10; x++)
{
if(x%2==1)
continue;
System.out.println("x="+x);

}


w:for(int x=0; x<3; x++)
{
for(int y=0; y<4; y++)
{
System.out.println("x="+x);
continue w;
}
}
*记住:
1,break和continue语句作用的范围。
2,break和continue单独存在时,下面可以有任何语句。因为都执行不到。
3,这两个语句不能离开应用范围。
4,这个两个语句单独存在下面都不可以有语句。
5,continue语句是结束本次循环继续下次循环。
6,标号的出现,可以让这两个语句作用于指定的范围。
四:函数
函数的定义:等同于方法
函数的特点:1:对代码进行封装;2:便于复用;3:只有调用才执行;4:提高复用性;
函数的应用:两个明确:1:明确功能后结果是什么;2是否有未知书参与运算。
函数的重载:在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。


小例子:
(1)、求  a+aa+aaa+.......+aaaaaaaaa=?
      其中a为1至9之中的一个数,项数也要可以指定。

import java.util.Scanner;
class Multinomial
{
public static void main(String[] args)
{
        int  a;      //定义输入的 a
        int  howMany;   //定义最后的一项有多少个数字
        Scanner scanner = new Scanner(System.in);
         System.out.println("请输入一个 1~9 的 a 值");
        a = scanner.nextInt();
            System.out.println("请问要相加多少项?");
        howMany = scanner.nextInt();
        int sum=0;
        int a1=a;  // 用来保存 a 的初始值
        for (int i=1; i<=howMany; i++)
{
            sum+= a;
            a = 10*a +a1;   // 这表示a 的下一项
        // 每次 a 的下一项都等于前一项*10,再加上刚输入时的 a ;注意,这时的 a 已经变化了。
            }
        System.out.println("sum="+sum);
   }
}

(2):求 2/1+3/2+5/3+8/5+13/8.....前20项之和?

class Sum{
    public static void main(Sting[] args){
        double sum=0;
        double fenZi=2.0, fenMu=1.0;    //初始的分子 (fenZi)=2,分母(fenMu)=1
        for(int i=1; i<=20; i++){
            sum += fenZi / fenMu ;
            fenMu = fenZi;           //下一项的分母 = 上一项的分子
            fenZi += fenMu;         //下一项的分子 = 上一项的分子加分母
        }
        System.out.println("sum= "sum);
    }
}
(3)
利用程序输出如下图形:
   *
   * * *
   * * * * *
   * * * * * * *
   * * * * *
   * * *
   *

class Asterisk  //星号*
{
public static void main(String[] args)
{
        for (int i=1; i<=13; i+=2)
{
            for(int j=1; j<=i && i+j<= 14; j++)
{
System.out.print("* ");
}
            System.out.println();          // 换行
        }
    }
}
(4):计算圆周率
  PI=4-4/3+4/5-4/7.......
  打印出第一个大于 3.1415小于 3.1416的值

class Pi {
    public static void main(String[] args){
        double pi =0;  //定义初始值
        double fenZi = 4;    //分子为4
        double fenMu = 1;  //第一个4,可看作分母为1 的分式,以后的分母每次递增2
        for (int i = 0; i < 1000000000; i++){ //运行老久,减少循环次数会快很多,只是精确度小些
            pi += (fenZi/fenMu) ;
            fenZi *= -1.0;    //每项分子的变化是+4,-4,+4,-4 ....
            fenMu += 2.0;    //分母的变化是1,3,5,7, ....   每项递加2
            }
        System.out.println(pi);
    }
}
输出结果为pi = 3.1415926525880504,应该不精确

4 个回复

倒序浏览
原创,自己总结的,大家相互交流啊,谢谢
回复 使用道具 举报
感谢分享!!!
回复 使用道具 举报
赞一个,确实写了很多
回复 使用道具 举报
点100个赞...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马