• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

微笑Angle

  • 管理

View Post

黑马程序员_编程基础之第二篇---java语言基础二

 

 

一.循环结构 while 、do while、for三种

 

1.while

 

a.while语句格式: 

while(条件表达式) 

{ 

执行语句; 

} 

b.特点:先判断条件,只有条件满足才执行循环体 

c.规律:条件为true,开始 转圈;只要不干预他,就一直转;条件不满足,停止转圈; 

d.用法: 

定义初始化表达式; 

while(条件表达式) 

{ 

循环体(执行语句); 

} 

2.do while 

a.do while语句格式: 

do 

{ 

执行语句; 

} 

while(条件表达式); 

b.特点:do while的特点是条件无论是否满足,循环体至少被执行一次。 

while比较常见,do while相对于少一点; 

3.for 

a.格式: 

for(初始化表达式;循环条件表达式;循环后的操作表达式) 

{ 

  执行语句; 

} 

b.流程 

1.初始化表达式 

2.判断循环条件表达式真假 

3.为真执行语句 

4.循环后的操作表达式 

5.2-3-4步循环操作直到表达式为假 

c.特点:1.初始化表达式只执行一次 

2.条件不满足,跳出for循环 

4.for和while的区别: 

特点: 

1.作用域不同 

for的变量是在循环里定义的,作用范围仅限于for语句内部,for语句执行完毕,该变量在内存中释放; 

for(int x=0;x<3;x++) 

{ 

  System.out.println(x); 

}仅用于控制循环次数,只为循环增量存在,优化内存; 

而 while的变量,用完后仍然在内存中; 

for与while是可以互换的,如过需要定义循环增量,用for更为合适; 

总结:什么时候使用循环结构? 

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

面试题可能会遇到: 

无限循环的最简单表现形式:

 

for(;;){}

 

对于for来讲,不写条件表达式默认为true;

 

while(true){} 

for练习: 

1.需求:获取1-10的和,并打印
  思路:1.初始化一个变量 int i=1;
          2.写出循环条件表达式 i<=10
          3.循环后的操作表达式i++
          4.定义并初始化接收和的变量int sum=0;
1 2 3 4 5
1 3=2+1 6=3+3 10=4+6 15=5+10
*/
//定义变量用于存储不断变化的和。
int sum=0;
//定义变量,记录住不断变化的被加的数and定义循环,重复加法的过程
for(int i=1;i<=10;i++)
{
sum+=i;
}
System.out.println(sum); 

循环注意事项:一定要明确哪些语句需要参与循环,哪些不需要; 

2. 

需求:1-100之间的7的倍数,并打印  

/*思路: 1.定义初始化变量 int i=1;  

     2.定义循环判断条件 i<=100 循环操作语句 i++  

            3.在循环中定义判断,只要是7的倍数即可,使用if语句 

   定义一个接收循环次数的变量 s*/ 

for(int i=1;i<=100;i++)  

{  

  if(i%7==0)  

{  

System.out.println("1-100之间7的倍数有:"+i);  

}  

} 

其实这就是累加思想。 

初始化变量和int sum=0;

累加 sum+=i;

原理:通过变量记录住每次变化的结果。 

通过循环的形式,进行累加动作。 

计数器思想:通过一个变量记录住数据的状态变化,通过循环来完成。

 

5.for嵌套 

语句嵌套,其实就是语句中含有语句,即循环中含有循环。 

for(int x=0;x<3;x++) 

{ 

  for(int y=0;y<4;y++) 

{ 

  System.out.print("ok"); 

} 

} 

12次ok 

外循环控制的是行数,内循环控制的是每一行的列数; 

练习: 

1.需求
*****
****
***
**
*
思路:
 

1.发现图形中有很多行,每个行有很多列,使用循环嵌套
2.for嵌套中外圈控制行数,内圈控制列数(行数int i=0;i<=5;i++)(列数 int h=5;h>=1;h--)
3.输出语句
 

4.设置一个接收列数变化的变量
for (int x=0;x<5;x++ ) //外循环控制行数
{
for (int y=x;y<5;y++ )
{
  System.out.print("*");
}
System.out.println();
}
*/
2.需求

*
**
***
****
*****
for (int i=1;i<=5;i++ )
{
for (int h=1;h<=i;h++ )
{
System.out.print("*");
}
System.out.println();
}
 

3.九九乘法表 

1*1=1 

1*2=2 2*2=2 

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

该程序类似于上面的练习2 

for (int x=1;x<=9;x++ )
{
for (int y=1;y<=x;y++ )
{

System.out.print(y+"*"+x+"="+y*x+" ");
}
System.out.println();
}
 

嵌套for循环的规律: 

尖朝上,可以通过改变内循环的循环条件y<=x;让条件随着外循环变化; 

尖朝下,可以初始化内循环的变量y=x,让初始化随着外循环变化; 

6.其他流程控制语句 break continue 

break(跳出)continue(继续) 

break:应用范围:选择结构和循环结构---跳出循环 

continue:只能应用于循环结构------继续循环 

需求:打印1-10之内的偶数和

思路:1.打印1-10的和

         2.加以判断,如果是奇数,跳过,只计算偶数的和

 这就用到了continue,跳出次循环继续下一循环

for(int x=1;x<=10;x++) 

{ 

if(x%2==1) 

continue; 

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

} 

结果:2 4 6 8 10 

由此可知:continue的特点是:结束本次循环,继续下一次循环。 

总结:1.记住break和continue作用的范围(选择或者循环结构中) 

2.注意事项:break和continue单独存在时,下面不可以有任何语句。 

二.函数部分 

· 函数的定义 

1.定义 

函数就是定义在类中的具有特定功能的一段独立小程序。函数也称为方法。 

java中函数就是方法,方法就是函数。 

int x=4; 

System.out.println(x*3+4); 

int x=6; 

System.out.println(x*3+4); 

以上的运算,因为获取不同的数据的运算结果,代码出现了重复。 

为了提高代码的复用性,对代码进行抽取,将这个部分定义成一个独立的功能,方便于日后使用。java中对功能的定义是通过函数的形式来体现的。 

2.格式 

修饰符 返回值类型 函数名(参数类型 形参1,参数类型 形参2.....) 

{ 

执行语句; 

return 返回值; 

} 

返回值类型:函数运行后的结果的数据类型 

参数 类型 :是形式参数的数据类型 

形式参数 :是一个(变量),用于存储调用函数时传递给函数的实际参数 

实际参数 :传递给形式参数的具体数值 

return :用于结束函数 

返回值 :谁调用函数,就把值返回给谁 

//定义具有(a*3+5)功能的函数 

public static int getResult(int a)
{
return a*3+5; //将运算后的结果返回给调用者
} 

在主函数中调用 getResult(4); 

· 函数的特点

 

1.定义函数可以将功能代码进行封装,便于对该功能进行复用 

2.函数只有被调用才会被执行 

3.函数的出现提高了代码的复用性 

4.当函数运算后,没有具体的返回值时,这时用一个特殊的关键字来标识。 

该关键字就是void,代表函数没有具体返回值的情况。 

当函数的返回值类型是void时,函数中的return语句可以省略不写,写上也可以; 

注意: 

1.主函数中只能调用函数,不可以在主函数内部定义函数,函数之间的关系是平级的。 

2.定义函数时,函数的结果应该返回给调用者,交给调用者处理;在主函数中执行; 

· 函数的应用

 

我们在编写程序,实际就是在不断的实现功能,而在java中最小的功能单元就是函数。 

在以后写代码时,只要再处理或者定义功能,都把它定义到独立的函数中去,而不要再把它们都塞到主函数中,这样方便代码的复用 

主函数的功能只有一个,就是调用函数; 

3.思想 

如何定义一个函数呢? 

明确两点就能把函数写出来了 

1.既然函数是一个独立的功能,那么该功能的运算结果是什么? 

因为这是在明确函数的返回值类型; 

2.再明确在定义该功能的过程中,是否需要未知的内容参与运算。 

因为这是在明确函数的参数列表; 

(定义一个函数功能内部细节的时候,这个细节是可以完全独立可以编写完,还是依靠调用者给我们一些数据才可以完成细节的编写) 

1.需求:定义一个功能完成3+4的运算,并将结果返回给调用者。
思路:1.明确功能的结果:是一个整数的和
         2.在实现该功能的过程中是否有未知内容参与运算,这里是没有的
  其实,这两个功能就是在明确函数的定义
         1.是在明确函数的返回值类型
         2.明确函数的参数列表(参数类型和参数个数)
public static void main(String[] args)
{
int z=getSum();
System.out.println(z);
}
public static int getSum()
{
return 3+4;
} 

这个函数的功能,结果是固定的,毫无扩展性而言。 

练习1的扩展: 

2.需求:为了方便用户需求,由用户来指定加数和被加数,这样,功能才有意义 

思路: 

1.明确功能的结果,是一个整数的和 

2.在实现该功能的过程中是否有未知内容参与运算,加数和被加数是未知的 

public static void main(String[] args)
{
int z=getSum(3,5);
System.out.println(z);
}
public static int getSum(int n1,int n2)
{
return n1+n2;
} 

3.需求:判断两个数是否相同
思路:1.明确功能返回的结果
2.明确是否有未知内容参与运算
public static void main(String[] args)
{
getResult(3,4);
getResult(4,4);
}
public static void getResult(int n1,int n2)
{
if(n1==n2)
{
System.out.println("这两个数相同");
}
else
{
System.out.println("这两个数不相同");
}
} 

4.需求:定义功能,对两个数进行比较,获取较大的数
思路:1.明确功能返回的结果,最大值
2.是否有未知内容参与运算(两个数)
3.获取两者中的最大值
public static void main(String[] args)
{
int c=max(3,2);
System.out.println(c);
}
public static int max(int n1,int n2)
{
return(n1>n2)?n1:n2;
} 

函数练习: 

1.需求:定义一个功能,用于打印矩形。用户自己指定大小的矩形 

思路:1.明确返回的结果,没有。因为直接打印,所以返回类型是void 

2.是否有未知内容参与运算,有,矩形的行和列不确定,由用户指定。 

public static void main(String[] args) 

{ 

draw(8,8); 

} 

public static void draw(int row,int col) 

{ 

for(int x=0;x<row;x++) 

{ 

  for(int y=0;y<col;y++) 

  { 

    System.out.println("*"); 

} 

System.out.println(); 

} 

2.需求:定义一个打印99乘法表功能的函数。 

思路:1.明确返回的结果,一个int类型的积 

         2.是否有未知内容参与运算(两个int类型的参数) 

public static void main(String[] args)  

{  

print99(); 

}  

public static void print99()  

{ 

for(int x=1;x<=9;x++) 

{ 

for(int y=1;y<=x;y++) 

{ 

System.out.print(y+"*"+x+"="+y*x+"\t"); 

} 

System.out.println(); 

} 

} 

· 函数的重载

 1.重载的概念

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

注意:重载只和参数列表有关。

2.重载的特点:

与返回值无关,只看参数列表。

3.重载的例子

public static void main(String[] args)
 {
  getSum(1,2);
  getSum(3,4,4);
 }
需求:定义一个加法运算,获取两个整数的和
 public static int getSum(int x,int y)
 {
   return x+y;
 }
需求:定义一个加法运算,获取三个整数的和
 public static int getSum(int x,int y,int z)
 {
   return x+y+z;
 }

4.什么时候用重载呢?

当定义的功能相同,但参与运算的未知内容不同。

那么,这时定义一个函数名称以表示其功能,方便阅读,而通过参数列表的不同来区分多个同名函数。

上面的程序可以优化一下:

public static void main(String[] args)
{
  getSum(1,2);
  getSum(3,4,4);
}
需求:定义一个加法运算,获取两个整数的和
public static int getSum(int x,int y)
{
   return x+y;
}
 需求:定义一个加法运算,获取三个整数的和
public static int getSum(int x,int y,int z)
{
   return getSum(x,y)+z;
}

示例2:

打印九九乘法表

用户可以自己定义打印到几

public static void main(String[] args)
 {
  print99(4);
 }
 //用户自定义的乘法表
 public static void print99(int num)
  {
      for(int i=1;i<=num;i++)
      {
    
            for(int s=1;s<=i;s++)
       {
      System.out.print(s+"*"+i+"="+s*i+"\t");
       }
       System.out.println();
         }
 
     }
 //打印九九乘法表
    public static void print99()
  {
       print99(9);
     }

不难发现:上面的两个函数里面的代码一致,

可以对重复的代码作进一步优化:

 public static void print99(int num)
  {
      for(int i=1;i<=num;i++)
      {
    
            for(int s=1;s<=i;s++)
       {
      System.out.print(s+"*"+i+"="+s*i+"\t");
       }
       System.out.println();
         }

     }
//打印九九乘法表
    public static void print99()
  {
       print99(9);
     }

5.重载的好处:
方便于阅读,优化了程序设计。

重载的练习

判断下列哪个函数构成了重载

void show(int a,char b,double c)

a.void show(int x,char y,double z)//没有,因为和原函数一样的

b.int show(int a,double c,char b)//重载,因为参数类型不同 需要注意:重载和返回类型无关

c.void show(int a,double c,char b)//重载,因为参数类型不同

d.boolean show(int c,char b)//重载,因为参数个数不同

e.void show(double c)//重载,因为参数个数不同

f.double show(int x,char y,double z)//没有,因为这两个参数列表一致,与返回类型无关

需要注意:

1.不管任何返回类型的函数,只要参数列表中参数个数或参数类型不同,便可构成重载

2.参数列表中类型不同情况下,参数的顺序不同,也是可以构成重载的

3.重载与返回类型无关,并不代表了返回类型不同就不能构成重载。 

 

详细请查看:http://edu.csdn.net/heima/

 

posted on 2012-07-28 12:02  微笑Angle  阅读(232)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3