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

目录
相关文章
|
6月前
7-35 情人节 (15 分)
7-35 情人节 (15 分)
60 0
|
Python
你值得拥有——流星雨下的告白(Python实现)
你值得拥有——流星雨下的告白(Python实现)
122 0
L1-035 情人节 (15 分)
L1-035 情人节 (15 分)
137 0
L1-035 情人节 (15 分)
|
机器学习/深度学习 安全
|
算法
每日一题冲刺大厂 第二十三天 奶牛晒衣服
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题为了让大家练到各种各样的题目,熟悉各种题型,一年以后,蜕变成为一个不一样的自己!
132 0
|
前端开发 JavaScript 程序员
圣诞临近,小包送给大家一个雪人,一群麋鹿,一堆糖果,一句祝福,圣诞快乐!
圣诞临近,小包送给大家一个雪人,一群麋鹿,一堆糖果,一句祝福,圣诞快乐!
214 0
圣诞临近,小包送给大家一个雪人,一群麋鹿,一堆糖果,一句祝福,圣诞快乐!
|
算法
《C游记》 番外篇(壹)二分查找显神威 猜数游戏趣味生
《C游记》 番外篇(壹)二分查找显神威 猜数游戏趣味生
136 0
《C游记》 番外篇(壹)二分查找显神威 猜数游戏趣味生
|
Java 索引
20018-05-16 第十天
一、方法 (一)方法交换变量示意图     二方法重载overload   概念在同一个类的内部方法名字相同参数列表不同与返回类型无关的方法称之为方法的重载。   方法名字相同代表重载的方法实现的是类似的功能。
1061 0
|
Java C++ 算法
2018-05-14 第八天
一、分支选择 java 的流程控制语句 控制代码执行的一个路径、方向。   三类1.顺序执行从上到下依次执行代码。   2.分支选择根据条件 来 选择执行某些代码跳过某些代码。 3.循环某些代码反复的被执行。
1133 0