Java基础03天 学习笔记_循环|函数|数组

来源:互联网 发布:北京师范网络教育官网 编辑:程序博客网 时间:2024/04/28 16:15

001循环结构 while

 

循环结构:

While ,do while , for


写循环语句时要注意 1.初始值,2.条件判断,3.让初始值变化以便能跳出循环4.执行语句

002 do while

 

Do {语句,增量 } while(判断)

Do while的特点是无论怎么样语句都会执行一次。即使条件不满足

 

003 for

 

For (初始化表达式;循环条件表达式;循环后的表达式)   

{

执行语句;

}

 

for的优势在for内部创建变量,跳出循环后释放。

循环条件满足则进入执行语句,不满足跳出循环。

for执行顺序 1.初始化--2.循环条件--3.执行语句---4.循环后----5.循环条件---6.执行语句---7.循环后表达---

初始化语句只执行一次


004 while for的不同

 

While for,初始变量的作用域不同,for的变量在for循环结束后在内存中释放,所以下图编译时会报找不到变量的错误。



什么时候使用循环结构:

当对某些语句执行很多次时,就是用循环结构。


005循环语句的其他特点


会报错,因为在循环条件中我们不能得到一个布尔类型的值,即不真不假,程序无法继续。

除了循环条件外,其他3部分只要是合法的表达式就可以~



可执行多条语句,可以用逗号隔开~依然管用。强大。

for (int x =0 ,y =8 ; x<3; x++,y++)

 

无限循环的最简单表达:

for (;;){} for的条件默认为真

While(true){} 


006循环练习

 

1获取 110的和,并打印

 

1思路:

一定要明确哪些语句需要参与循环,哪些不需要

定义变量用于存储不断变化的和

定义变量,记录不断变化的被加数

定义循环,重复加法的过程

 

 

Log第一次由于没有在for循环的初始值中用 int x=1;而是直接用x =1;导致




结果调整后正确输出了


2 1-100之间7的倍数的个数,并打印

 

2思路:

先对1-100进行遍历,通过循环 for

在遍历的过程中,定义条件,只对7的倍数进行操作。

定义一个变量来记录7的倍数的个数,但要注意变量的作用域。 For 以外。

 

Log一次通过。



练习总结。

累加思想:比如求和字符串的叠加。通过变量记录每次变化的结果,再通过循环的形式进行累加动作。

 

计数器思想:通过一个变量记录数据的变化(需要if判断)for内的if来实现。 比如在范围内有多少个什么什么,就需要想到计数器。

 

007 008  009for循环嵌套

比如for中嵌套if语句

循环嵌套: for for嵌套

 

****

****

****

对于打印长方形,外部循环控制行数,内部循环控制的是每一行的列数,也就是一行的元素。


练习

打印下列的图形

1.

*****

****

***

**

*

2.

*

**

***

****

*****

 

 

思路:有行有列,使用循环的嵌套,长方形的图形是行列固定,而需求中的图形是行列中有相应的关系

1x=1 y=5 x=2 y=4

 

外: x=,x<=5,x++

内: y=5,y>=x ,y--

Or

   x=1,x<=5,x++

   y=x , y<=5 , y++

 

2 x=1 ,y=1 ,

 

Log , 注意System.out.print("*");中不要用println而且要在外循环中加入换行。




小规律:图像的尖朝上,可以改变循环条件,让条件随着循环变化

尖朝下,可以改变初始化的值,让初始化的值随着外循环变化。


JerryJava循环练习4

 

1*1=1

1*2=2  2*2=4

1*3=3  2*3=6 3*3=9

....

打印九九乘法表

 

思路

被乘数递增 1 23...

乘数的个数与被乘数相关,1等于被乘数

 

所以被乘数为外循环,乘数为内循环,且尖朝上,则需要关联循环条件。 y<=x

 

另外注意输出的格式,和输出的换行。

 

Log一次通过



010 break - continue

 

Break跳出 结束本层循环结构

Continue跳出一次循环,还在当前循环体内

 

常见的是用if语句来控制 break如果达到了某一个条件,则选择跳出。

If(x==1)

Break;



可以给循环起名字~。~

 

Continue只能用于循环结构

Continue下面的语句执行不到。所以也需要用if来控制。

 

For (intx=1;x<=10;x++)

{

If(x%2==1)

Continue;

System.out.println("x="+x);

}

最后只打印的是偶数。


011练习

 

JerryJava循环练习5

 

打印一个等腰三角形。

思路

外循环固定, x=1 , x<=5 , x++

内循环其实是两个组成的,一个是尖朝下的打印空格,一个是尖朝上的星号,

尖朝下则关联初始值,尖朝上则关联条件。

 

内循环1y=x;y<5;y++    -----打印空格

2 y=1;y<x;y++   ------打印星号和一个空格

打印一次换行

 

Log在第一次编写的时候又忘记在初始值中int y=x

修正后结果正确




一个for循环中嵌套了两个并列的for

 

012函数特点,定义

函数又称为方法,两个一样的。

函数提高代码的复用

 

函数:具有特定功能的一段独立小程序。

相同的部分进行抽取,封装成一个独立的功能。

 

 

函数定义的格式:

修饰符返回值类型函数名(参数类型形式参数1参数类型形式参数2…

{

执行语句

Return返回值

 

}

 

Return是函数的结束

谁调用return给谁

 

IntgetResult (int num)

{

Return num*3+5;

}

添加修饰符

Public staticint getResult (int num)

{

Return num*3+5;

}

 

函数定义,函数执行

函数只有被调用才会执行

 

getResult(4);就是调用了

 

Int x =getResult(4);

 

如果函数的返回值不为Void,则都需要写return语句作为函数的结束。



012 013函数应用

 

编写功能是主要任务: 函数是最小的功能单元。

主函数的功能就一个,调用其他的函数。不要把所有的功能都放在Main中,不得体。

 

如何定义一个函数:?

1.明确结果,

返回值类型

2.该功能的过程是否需要未知内容参与 

参数列表

 

第一步:

Publicstatic int getSum()

 

{

Return 3+4;

}

 

进化,第二步:

 

 

Publicstatic int getSum(int x , int y )

{

Return x+y;

}

 

/*

需求:判断2个数时候相同

 

1.结果是boolean

2.功能中有2个整数

 

*/

 

Publicstatic boolean campare(int a , int b)

{

//if(a==b)

//Return true;

//return  false;

return a==b;

}

 

如果返回值是void类型的函数,是不能在输出语句中输出的

写函数的时候,除非需要,否则不要在函数输出语句

是否进行打印操作是调用者的事情。

014函数练习


1.打印矩形

2.99乘法表

 

===========

/**

JerryJava函数练习2

 

1.打印矩形

 

2.99乘法表

 

*/


class  DemoFunc_2{public static void printSq (int row , int col){for (int x=1;x<=row ;x++ ){for (int y=1;y<=col ;y++ ){System.out.print("*");}System.out.println("");}}public static void printnn(){for (int x=1;x<=9 ;x++ ){for (int y=1;y<=x ;y++ ){int z=y*x;System.out.print(y+"*"+x+"="+z+"  ");}System.out.println("");}}public static void main(String[] args) {printSq(7,7);printnn();}}


015 016重载和练习 overload

 

重载:在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者类型不同即可

重载和且仅仅和参数列表相关,功能一致,功能名称就可以一样啦~

 

 

/**

JerryJava重载练习1

 

加法重载

 

*/


class  DemoOverload_1{public static int add (int x , int y){return x+y;}public static int add (int x , int y,int z){return x+y+z;}public static void main(String[] args) {System.out.println(add(3,4));System.out.println(add(3,4,7));}}

99乘法表的改进,进一步提高代码的复用

这个思路要记住

即, 在一个函数中调用另外一个函数,达到提高代码复用性的目的


public static void printnn(int num){for (int x=1;x<=num ;x++ ){for (int y=1;y<=x ;y++ ){int z=y*x;System.out.print(y+"*"+x+"="+z+"  ");}System.out.println("");}}public static void printnn(){printnn(9);}

重载和返回值类型没有关系。

 

017数组的概念定义内存结构

数组是同一个数据类型的集合,其实一个数组就是一个容器。

数组,自动编号。方便操作。数组的编号从0开始。

 

定义一个数组:

格式

元素类型[]数组名 = new元素类型[元素的个数或者数组长度]

int[] x = new int[3]

new是在内存中开辟空间~    x是一个引用类型,(数组,类,接口)

 

Java在内存中开辟了5片空间来进行自己数据的存储

栈内存(局部变量,数据用完了释放)

堆内存(数组和对象,通过new建立的实例都存在堆内存中),每一个实体都有内存地址,实体中的变量都有默认的初始化值,实体不在被使用,会在不确定的时间被回收。

方法区

本地方法区

寄存器

 

 凡是局部变量都是栈内存中的,比如  int [] x =new int[3];

其中的x就是栈内存变量,他会随着函数的释放而消失。

new int[3]则在堆内存开辟了一个空间,

每一个堆内存的实体都有一个地址,上面的语句意为,将new int[3]这个堆内存中的实体的首地址值赋值给栈内存的x变量,

x指向了这个数组,或者x引用了这个数组。所以是引用类型。

 

堆内存中实体的两个特点: 1.有地址,2有初始值int 0 , double 0.0 , float 0.0f , boolean false...),3内存垃圾回收机制

 

x[0]=22;

x=null;  (斩断了链接)

问题来了,x不引用该数组了,该数组失连了,怎么办?

答,当一个实体在堆内存中没有任何的引用使用他的话,Java虚拟机就使其为垃圾,启动垃圾回收机制,不定时的清除。

比起C++真的好多了~自动内存回收机制真是机智啊~

栈:自动释放

堆:垃圾回收

 

int[] x :建立一个整形数组类型的引用变量 x

new int[3]在堆内存中建立一个长度为3的整形数组,且初始值为默认

int []x = new int[3]:建立连接:将该整形数组的首地址值赋给x整形数组引用变量

 

堆内存的实体,可以在栈内存中有多个引用。

 

只要有New,就会开辟一个新的空间!

int [] x= new int[3]

int [] y=new int [3]

x , y值不同啊,因为他们是不同数组的引用~


0 0