Day04课堂笔记
标签(空格分隔): java基础
for循环概述
格式
for(初始化表达式; 比较/判断表达式;循环后的操作表达式){
循环体;// 要执行的语句,一些代码
}
执行流程:
第一步:执行初始化表达式
第二步:执行判断表达式,看结果是true还是false
如果是true则执行循环体;
如果是false则结束,不执行循环体;
第三步:如果判断出true执行完循环体语句后,就执行循环后的操作表达式
第四步:再次判断比较表达式,重复第二步
案例:循环输出十次helloword
举例:
class For_Demo {
public static void main(String[] args) {
//需求:输出十次HelloWorld
for (int x = 1; x <= 10 ;x++ )
{
System.out.println("hello,world!");
}
}
}
案例:使用for循环输出1到10 ,输出10到1;
class For_Demo {
public static void main(String[] args) {
//需求:输出十次HelloWorld
for (int x = 10; x >= 1 ;x-- )
{
System.out.println(x);
}
}
}
注意事项
(1)比较表达式里面的结果必须是布尔类型 boolean类型
(2)如果是一条语句,可以省略,如果多条语句,不允许省略,建议永远不要省略!
(3)有左大括号左边就不能写分号;
while循环
格式:
初始化语句;
while(条件表达式/判断语句){
语句体;
循环控制语句;//改变条件
}
执行流程:
第一步:执行初始化语句;
第二步:执行判断语句
如果:为true则执行循环体;
如果:为false不执行循环体;
第三步:如果执行了语句体,紧跟着就执行循环控制语句;如果没有循环控制语句,会无限循环;
第四步:重复第二步
class Demo1_While {
public static void main(String[] args) {
int x = 1;
while (x <= 10) {
System.out.println("x = " + x);
x++;
}
}
}
注意事项:
(1)记得别漏写控制条件;
(2)有左大括号,就没有分号;
//某屌丝为了追求女神,写了一段代码示爱,但是女神也会java,改动一下把屌丝拒绝
int j = 1;
while (j <= 10000);
{
System.out.println("I Love You!!!");
j++;
}
do–while
格式:
初始化语句;
do {
循环体;
控制条件;
}while(判断条件);
执行流程
第一步:执行初始化语句;
第二步:执行do里面的循环体,然后执行控制语句;
第三步:执行判断条件,如果为true,继续执行循环体里面的代码,如果为false,则结束;
注意:do里面的循环体至少执行一次!
古语:先礼后兵 先砍后奏
三个循环区别
区别
for和while循环都要先判断后执行
do–while 先执行一次再开始判断
for 和 while区别
for里面初始化的表达式值只能作用域for循环里面,出了循环就不能使用
while循环的初始化语句定义在while循环的外面,所以循环结束后,该变量还可以继续使用.
补充: for的另外一种写法,可以让初始化语句的值在循环继续使用
初始化语句;
for(;判断语句;控制语句){
循环体;
}
如果我们不知道怎么使用循环结构,就用for循环,开发中,for循环最常用!
两种无限循环结构
while(true){
循环体;
}
for(;;){
循环体;
}
这两种无限循环,以后while(true)在开发中常用,虽然是无限循环,但是我们可以通过控制语句去跳出循环!
什么使用for循环,什么使用while循环
如果明确循环次数的情况下,我们推荐使用for循环,如果不明确循环的次数,这个时候可以考虑使用while循环,当你不知道用什么循环的使用,推荐用for循环.
嵌套循环
class Demo1_ForFor {
public static void main(String[] args) {
for (int i = 1;i <= 4 ;i++ ) { //外循环决定的是行数
//循环体
for (int j = 1;j <= 5 ;j++ ) { //内循环决定的是列数
System.out.print("*");
}
System.out.println();
}
}
}
第一步:先执行了外面的循环的初始化语句,然后开始做判断
第二步:如果条件成立,紧接着执行循环体
第三步:一定要把循环体看成一个整体,把里面的代码全部执行完之后,才能继续下一步;
如果循环体里面是一个循环结构,那么这个循环结构必须先执行完,才能执行下一步,也就是控制语句;
第四步:回到外层循环,然后继续判断;
外层循环控制 行数 ,内存循环控制列数!
转义字符
转义字符 | 功能 |
---|---|
\t | 制表符 |
\n | 换行 |
\r | 回车 |
break关键字
作用 : 跳出循环 ,终止循环,可以控制循环
应用: switch 中 和 循环中
continue 关键字
作用: 终止本次循环操作,继续下次循环,在continue之后的代码,在当次循环中都不会被执行,而是直接跳到控制语句;
/*
* A:continue的使用场景
* 只能在循环中
*/
class Demo2_Continue {
public static void main(String[] args) {
for (int x = 1;x <= 10 ;x++ ) {
if (x == 4) {
//break;
continue; //终止本次循环,继续下次循环
}
System.out.println("x = " + x);
}
System.out.println("----");
}
}
标号控制
格式:
标识符 :
应用:
对单层循环结构而言,没有意义,如果需要在内层循环中,在符合特定要求的情况下,跳出外层循环,这个时候可以采用标号法,使用break+标号来跳出;
练习
class Test1 {
public static void main(String[] args) {
for(int x=1; x<=10; x++) {
if(x%3==0) {
//break; //我想在控制台输出2次:“Java基础班“
//continue; //我想在控制台输出7次:“Java基础班“
System.out.println("Java基础班");//我想在控制台输出13次:“Java基础班“
}
System.out.println("Java基础班");
}
}
}
三个关键字区别
return和break以及continue的区别?
return : 结束方法
break : 结束循环,终止循环;
continue : 终止当次循环,继续下次循环!
class Demo4_Return {
public static void main(String[] args) {
for (int i = 1;i <= 10 ;i++ ) {
if (i == 4) {
//break; 相当于跳到位置1
return; 相当于直接跳到位置2 //返回的意思,用来返回方法
}
} // 位置1
System.out.println("循环结束了");
}//位置2
}
方法(函数)
什么是方法
完成特定功能的代码块
方法的作用是什么?
提高代码的复用性,其实就是为了少写代码
定义方法的一般格式是什么?
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…){
代码;
}
//public static 修饰符
//void 返回值类型
//main 方法名 (其实就是标识符)
//参数类型 参数名 :数量不限,可以写,可以不写,根据实际功能要求来!
public static void main(String[] args){
}
怎么写方法?
1,明确返回值类型 : 我要返回什么
2,明确参数列表 : 我要你给我什么
注意:写方法时候,不要把方法写在main方法里面,否则报错!
class MethodDemo {
public static void main(String [] args){
//千万不要在这里面写方法
//写好方法后 怎么调用?
//在主方法里面,直接写方法名(传入相应参数)
int he = add(10,20,30);
System.out.println("he = " + he);
}
//要在大括号下面去书写
//如果不需要返回任何值,就写void
// 如果要返回具体的数据,看这个数据是什么类型的返回值就写什么类型的
public static int add(int a,int b,int c){
int sum = a + b + c;
return sum;
}
}
方法的调用
方法的重载
方法名相同,参数列表不同 (方法重载),与返回值无关
参数列表不同
参数个数不同
参数类型不同
顺序不同
思考:没有方法重载行不行? 不用也可以,只是需要起不同的名字
方法重载解决什么问题?
解决了我们在调用方法时候,我们对于类似功能的代码块,只需要记住一个方法名即可.不需要记住多个方法名!
举例: 做两个数加法 和三个数的加法 都是做加法,add方法就够了
已知函数 : void show(int a, int b, float c){ },
哪个答案和show不是函数重载?
A.void show(int a,float c,int b){ }
B,void show(int x,int y,float z){ }
C.int show(int a, float c, int b){return a;}
D.int show(int a, float c ){return a;}