2018-05-15 第九天

简介: 一、循环 loop 三for 循环接上篇 语法for(循环条件初始化 1 ; 循环条件 2 ; 迭代 3 ){ //循环体  4 }   解释for 的小括号中由2个分号切分成了3部分。
一、 循环 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语句简洁,但它比较适用于循环次数不易预知的情况(用某一条件控制循环)。

 

(五) 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<width;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<width;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<width; 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);

}

}

 


316b531d9415e44320c6a978f1b95dbdac0f143b

目录
相关文章
|
机器学习/深度学习 存储 测试技术
蓝桥杯冲刺-倒数第八天-省赛题
蓝桥杯冲刺-倒数第八天-省赛题
105 0
|
移动开发
【寒假每日一题】AcWing 4261. 孤独的照片(补)
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
78 0
洛谷每日三题之第三天(第四天补做)
洛谷每日三题之第三天(第四天补做)
洛谷每日三题之第三天(第四天补做)
|
存储 算法
每日一题冲刺大厂第八天 二叉树深度
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题这个月进度是数据结构,让大家练到各种各样的数据结构题目,熟悉数据结构的增删改查,一年以后,蜕变成为一个不一样的自己!
100 0
|
机器学习/深度学习 算法
每日一题冲刺大厂第九天 新二叉树
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题这个月进度是数据结构,让大家练到各种各样的数据结构题目,熟悉数据结构的增删改查,一年以后,蜕变成为一个不一样的自己!
56 0
|
算法
每日一题冲刺大厂 第二十三天 奶牛晒衣服
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题为了让大家练到各种各样的题目,熟悉各种题型,一年以后,蜕变成为一个不一样的自己!
125 0
|
算法
每日一题冲刺大厂 第二十二天 喝咖啡
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题为了让大家练到各种各样的题目,熟悉各种题型,一年以后,蜕变成为一个不一样的自己!
104 0
|
算法
每日一题冲刺大厂 第二十四天 开心的金明
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题为了让大家练到各种各样的题目,熟悉各种题型,一年以后,蜕变成为一个不一样的自己!
94 0
|
机器学习/深度学习 算法 搜索推荐
洛谷每日三题之第六天
洛谷每日三题之第六天
|
机器学习/深度学习
洛谷每日三题之第五天
洛谷每日三题之第五天