2018-05-15 第九天

一、循环loop

)for 循环(接上篇

语法:for(循环条件初始化 1 ; 循环条件 2 ; 迭代 3 ){

//循环体  4

}


解释:for 的小括号中由2个分号切分成了3部分。


执行过程:

1:循环条件初始化执行且仅执行一次。

2:判断循环条件是否成立,如果成立,那么执行循环体。然后执行迭代部分,然后再判断循环条件。

3:一旦循环条件不成立,那么立即结束循环。

==》 1,2,4,3,2,4,3,2,4,3,2(不成立)结束。


注意事项:

1:循环条件初始化执行且仅执行一次。

2:小括号中的两个分号是必不可少的。其他的三部分从语法层面上来讲,都可以没有。

3:如果循环条件这部分没有,那就代表循环条件永远成立。

4:如果初始化部分需要初始化多个变量,那么可以使用逗号分割,包括迭代部分亦然。

5:在 for 循环的小括号中定义的变量,只能在for 循环中使用。


例:

//水仙花数:在 100-999  之间有几个这样的数  : 该三位数的每一位的 三次幂  之和 等于该数自身  求这几个数是什么??

public class TestLoop2{

public static void main(String[] args){

int unit  = 0;

int decade = 0;

int hundred = 0;

for(int i = 999; i >= 100 ;i--){

unit = i%10;

decade = i/10%10;

hundred = i/100;

if(unit * unit * unit + decade * decade * decade + hundred * hundred * hundred == i){

System.out.println(i);

}

}

}

}


(四)循环语句的选择:

在for循环中,循环控制变量的初始化和修改都放在语句头部分,形式较简洁,且特别适用于循环次数已知的情况。

在while循环中,循环控制变量的初始化一般放在while语句之前,循环控制变量的修改一般放在循环体中,形式上不如for语句简洁,但它比较适用于循环次数不易预知的情况(用某一条件控制循环)。


[if !supportLists](五)[endif]break和 continue

break:意思是打断。在循环结构中,如果想跳出循环体,结束整个循环结构可以使用break语句。

continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。即只结束本次循环,而不是终止整个循环的执行。

 

二、嵌套循环

嵌套循环的概念:循环体中包含了其他的循环。


特点:外层循环迭代一次,内层循环执行一遍。


例1:

//打印,矩形,平行四边形,等腰三角形

public class TestDoubleLoop{

public static void main(String[] args){

// for(int i=0;i<5;i++){

// for(int j=0;j<5;j++){

// System.out.println("i = "+i + "\tj = "+j);

// }

// }

//打印,矩形,平行四边形,等腰三角形

//    ************  i== 0

//   ************   i== 1

//  ************   i== 2

// ************   i == 3

// 打印的空格的数量  高度 height-i-1

int width = 16;

int height = 10;

//外层循环控制打印多少行,以及每一行的末尾的换行符

for(int i = 0; i < height;i++){

//内层循环控制打印一行的星号

for(int j = 0;j

System.out.print(" *");

}

System.out.print("\n");

}

System.out.print("\n");

//平行四边形

for(int i = 0; i < height;i++){

//用来控制每一行的空格的数量

for(int j = 0;j < height-i-1; j++){

System.out.print(" ");

}

//内层循环控制打印一行的星号

for(int j = 0;j

System.out.print(" *");

}

System.out.print("\n");

}

System.out.print("\n");

//等腰三角形

//    *  i== 0  1  2*i+1

//   ***   i== 1  3

//  *****   i== 2   5

// *******   i == 3

for(int i = 0; i < height;i++){

//用来控制每一行的空格的数量

for(int j = 0;j < height-i-1; j++){

System.out.print(" ");

}

//内层循环控制打印一行的星号

for(int j = 0;j<(i<<1)+1;j++){

System.out.print("*");

}

System.out.print("\n");

}

}

}


例2:

//求2--100以内的所有的素数:

//素数:只能被1 和 自身整除的数。又称为质数。 合数

public class TestPrime{

public static void main(String[] args){

//遍历2--100之间的所有的数type1

for(int i = 2;i <= 100; i++){

//对每一个i 进行逐个的判断,是否满足 素数的条件,满足 打印即可。

// 对当前的 i 进行取余运算,对[2~ i-1]区间的所有的数进行逐个取余,如果都有余数 那么i 就是素数

int counter1 = 0;//记录内层循环循环了多少次

int counter2 = 0;//记录条件满足了多少次

for(int j = 2; j<= i-1 ;j++){

//内层循环中,遍历一遍,所有的j 必须都满足下面的条件 i 才是素数

if(i % j != 0){

counter2 ++;

}

counter1 ++;

}

//判断 counter1 是否  等于counter2

if(counter1 == counter2){

System.out.println(i);

}

}

//遍历2--100之间的所有的数type2

for(int i = 2;i <= 100; i++){

//对每一个i 进行逐个的判断,是否满足 素数的条件,满足 打印即可。

// 对当前的 i 进行取余运算,对[2~ i-1]区间的所有的数进行逐个取余,如果都有余数 那么i 就是素数

boolean flag = false;

for(int j = 2; j<= i-1 ;j++){

if(i % j == 0){

flag = true;

break;

}

}

//如果flag 还是false 说明i 是素数 没有一个j 被i 除尽

if(false == flag){//容易理解的方案

//if(!flag){//最优的方案。

System.out.println(i);

}

}

}

}

例3:百钱买白鸡

//今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。凡百钱买鸡百只,问鸡翁、母、鶵各几何?

public class TestDoubleLoop3{

public static void main(String[] args){

for(int i = 0;i<=20;i++){//公鸡

for(int j = 0;j<= 33;j++){//母鸡

for(int k = 0;k<=300;k++){//小鸡

if( i+j+k == 100 && i*5 + j * 3 + k/3 == 100 && k%3 == 0){

System.out.println("公鸡数量:"+i+ "\t母鸡数量:"+j+"\t小鸡数量:"+k);

}

}

}

}

for(int i = 0;i<=20;i++){//公鸡

for(int j = 0;j<= 33;j++){//母鸡

int k = 100 -i - j;//小鸡

if(i*5 + j * 3 + k/3 == 100 && k%3 == 0){

System.out.println("公鸡数量:"+i+ "\t母鸡数量:"+j+"\t小鸡数量:"+k);

}

}

}

}

}


例4:

//九九乘法表

public class TestNine{

public static void main(String[] args){

//外层循环控制行数

for(int i = 1;i<=9;i++){

//内层循环控制一行的显式内容

for(int j = 1;j<=i; j++){

int num = j*i;

System.out.print(j+"*"+i+"="+num+"; ");

}

System.out.println();

}

}

}


三、标号:了解

解释:break 和 continue 后都可以跟标号。

可以通过break 后面跟标号,实现跳出标号对应的那一层循环。

可以通过continue 后面跟标号,实现 跳到对应层的循环的迭代处(for),while do-while 循环条件判断处。


例://标号

public class TestLabel{

public static void main(String[] args){

//外层循环控制行数

//定义标号

label1 : for(int i = 1;i<=9;i++){

//内层循环控制一行的显式内容

for(int j = 1;j<=i; j++){

int num = j*i;

System.out.print(j+"*"+i+"="+num+"; ");

if(j == 7)break label1;

}

System.out.println();

}

}

}


四、方法

方法的定义:

必要性:1:通过方法可以实现重复代码的简化,和代码的复用。

2:将某些功能代码封装到一个方法的内部,实现了功能的模块化,方便后期的维护和修改。


语法:[方法的修饰符 public static]  方法的返回类型  方法名(参数列表){

//方法体

}


1:[方法的修饰符 public static]:可选的部分,不是必须的。还有其他修饰符。


2:方法的返回类型:

可以是void(空)或者java 支持的任意类型(十一种)

代表着方法执行完毕之后是否会产生一个结果。

如果一种方法只是实现了一段功能,不需要得到一个结果。那么该方法的返回类型必须是void。

如果一种方法,执行完毕之后希望得到一个结果数据。这个时候方法的返回类型就不能是void了。必须数据类型要与结果的数据类型兼容。


3:方法名:通过名字来访问该方法的功能。还要通过名字来显示该方法实现了什么样的功能。

   方法名也是一类标识符。命名规范和局部变量一致,首字符小写,遵循驼峰命名法。


4:参数列表:又称为形参列表

表达的意思:在使用方法的时候,需要传递给方法的一些动态的数据,表达了方法在使用的时候的一种需求。

public static void printStarRect(int width) :在使用该方法的时候,需要给方法传递一个 int 类型的值。

参数列表的格式:

1:参数列表可以为空。()

2: 需要传递的数据可以是任意个,类型也是任意类型。(数据类型 变量名1, 数据类型 变量名2, 数据类型 变量名3......)


5:方法体:功能实现的主体部分。

return:如果方法的返回类型是void。那么可以在方法中使用“return;”

作用:直接结束方法。方法直接返回。

如果方法的返回类型不是void ,那就是java支持的某种类型。那么该方法必须使用return 后面跟着一个想要得到的结果。

public static int max(int a,int b){

int max = a > b ? a : b;

return max;

}


6:把方法的名字 + 参数列表的组合称之为方法的签名signature。

在一个类的内部方法的签名必须唯一。


注意问题:

1:方法不能被定义到任意的其他的方法的内部去。

2:所有的方法都必须在某一个类的内部。必须被最外层的大括号包围。

3:如果想使用方法提供的功能。方法的调用。那么该方法必须直接的或者间接的被 main 调用。

4:方法的调用的格式语法:方法名+参数列表(实参列表)。

例:

//打印不同边长的星号正方形。

public class TestMethod1{

public static void main(String[] args){

int width = 7;

//打印边长是7

printStarRect(7);

width = 10;

//打印边长是10

printStarRect(width);

width = 21;

//打印边长是10

printStarRect(width);

int max = max(1,2);

System.out.println(max);

System.out.println(max(1,2,3));

//不允许

//System.out.println(printStarRect(1));

test();

System.out.println(randomNumberByRange(10,12));

}

//自定义方法,实现打印指定宽度的星号正方形

//方法名是一类标识符,和局部变量的命名规范一致,

//将重复的代码抽取出来,形成一个独立的功能模块  方法 method 将抽取的代码的变化的量作为方法的参数列表。

public static void printStarRect(int width){

if(width > 20){

return;

}

for(int i = 0;i < width ;i++){

for(int j=0;j

System.out.print(" *");

}

System.out.println();

}

System.out.println();

}

//自定义方法。功能是得到某一个int区间的随机值。

//涉及到范围,都是前闭后开 包含小的,不包含大的。

public static int randomNumberByRange(int min, int max){

return (int)(Math.random()*(max-min)+min);

}

//定义方法。对于任意的两个int 类型的值,求两个值 中的比较大的值。

//

public static int max(int a,int b){

if(a > b)

return a;

return b;

}

public static int max(int a,int b,int c){

int max = a > b ? a : b;

max = max > c ? max : c;

return max;

}

//对任意的int 类型的值,求该值的绝对值

public static int abs(int a){

return a > 0 ? a : -a;

}

//求指定概率【0.0-1.0】的事件 是否发生

public static boolean isHappened(double percent){

return Math.random() < percent;

}

public static void test(){

int counter = 0;

for(int i=0;i<1000;i++){

boolean bool = isHappened(0.3);

if(bool)counter ++;

}

System.out.println(counter);

}

}



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容

  • 一首歌,或许因为一句歌词而扣动你的心弦; 一本书,或许因为一段说话而引起你的共鸣; 一个人,或许因为一件事请而让你...
    笨笨小小猪阅读 162评论 1 3
  • 我要写的是特斯拉的人物小传。 一.特斯拉简介 尼古拉·特斯拉(塞尔维亚文:Никола Тесла;1...
    王艺敏阅读 309评论 0 0
  • 我们每天都会遇到一些人一些事,琐碎的大大小小事宜,组成了我们生活的一部分。也在不经意间影响和改变着我们的生活和行为...
    飘丹阅读 456评论 2 3
  • 有多少人在用老实这两个字欺骗 所谓老实不过是剥夺他人时 更加的心安理得 所谓老实不过是别人对弱者的骗 老实人又有多...
    妹妹躲雨吗阅读 139评论 0 1