java基础复习(四)

---恢复内容开始---

一、for循环的掌握

   语法格式:

for( 初始化语句A   ;  条件判断B  ;  循环后功能语句C){

       //循环体D

}

  for的执行流程:

    整个for循环结构中的  A 只会执行一次

    循环第一次:Aà B(true)àDàC

    第二次:      B(true)àDàC

    第三次:      B(true)àDàC

   …

   第n次:        B(false)  结束整个循环

  

  • 举个例子演示一下,for 打印 1-10
  •   

    1) 回顾下学过的while循环示例

       

    2) for循环实现同样的功能

            

         

    3) 注意定义的计数器i的作用域

for 常见面试题  

    

  1) 

     上面的代码打印的值?

           循环了几次?

     判断了几次?

     最后i的值是多少?

  2) 

    上面的代码打印的值?

     循环了几次?

    判断了几次?

    最后i的值是多少?

  练习

    1. for循环计算1-10的 积(也就是 10的阶乘)

       

二、嵌套循环 

  循环嵌套  循环里面还有循环,可以嵌套多层,不同的循环结构相互之间也可以嵌套。

  把循环里面的代码理解成一段普通的代码。

  练习: 在控制台打印 5*,每行5个星 *****

---恢复内容结束---

一、for循环的掌握

   语法格式:

for( 初始化语句A   ;  条件判断B  ;  循环后功能语句C){

       //循环体D

}

  for的执行流程:

    整个for循环结构中的  A 只会执行一次

    循环第一次:Aà B(true)àDàC

    第二次:      B(true)àDàC

    第三次:      B(true)àDàC

   …

   第n次:        B(false)  结束整个循环

  

  • 举个例子演示一下,for 打印 1-10
  •   

    1) 回顾下学过的while循环示例

       

    2) for循环实现同样的功能

            

         

    3) 注意定义的计数器i的作用域

for 常见面试题  

    

  1) 

     上面的代码打印的值?

           循环了几次?

     判断了几次?

     最后i的值是多少?

  2) 

    上面的代码打印的值?

     循环了几次?

    判断了几次?

    最后i的值是多少?

  练习

    1. for循环计算1-10的 积(也就是 10的阶乘)

       

二、嵌套循环 

  循环嵌套  循环里面还有循环,可以嵌套多层,不同的循环结构相互之间也可以嵌套。

  把循环里面的代码理解成一段普通的代码。

  练习: 在控制台打印 5*,每行5个星 *****

  1. 写上相同的5个  System.out.println(“*****”);
  2. 优化上面的代码,使用一个执行5次的循环,循环主体:System.out.println(“*****”)
  3. 希望一个一个的打印*(想想在控制台怎么实现单个打印*
  4. 使用循环优化上面的代码

 建议实际开发中不要嵌套太深  

初学者而言,先学会从简单的代码优化开始(真正的理解到循环的作用,和语法)

练习

       在控制台打印如下的效果

   *

   **

   ***

   ****

   *****

   *****

   ****

   ***

   **

   *               

           *

          **

         ***

       ****

      *****      

      *

     * *

    * * *

   * * * *

  * * * * *

PrintStar

练习

  1. 1-5的 的阶乘和(1!+2!+3!+4!+5!)
package com.javaBase;

public class Factorial {
    int ji = 1;
    int sum = 0;
    public static void main(String[] args) {
        Factorial factorial = new Factorial();
        factorial.printFactorial();
    }
    public Integer printFactorial(){
        for (int i=1;i<=5;i++){
            ji *= i;
            System.out.println(ji);
            sum +=ji;
        }
        System.out.println(sum);
    return sum;
    }
}
Factorial

三、循环控制语句       

1. break

l break  表示终止   当前 这一层循环

示例:

1) 循环10次,打印计数器i的值

 

2) 假设当遇到i的值是3的时候,终止整个循环

3) 每一次循环,都应该判断的值是否是3,如果是,执行一个break

 

怎么测试终止 当前这一层 ?

使用嵌套循环测试

 

  • 给循环添加标签(名字)

语法:用break 名字

结束当前这一层的循环结构(标签名字必须符合Java中标识符的命名规则)

 

      练习

1) 求出100以内前52的倍数的数字

//循环1-100

int n = 0;

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

     if(i%2==0){

//打印

          n++;

      }

     if(n==5){

           break;

      }

}

2. continue

l continue  跳过本次循环,继续下一次循环

   场景:

      一周每天重复做的事情就是 :打代码

但是第5天不想打代码,第6 和第7天仍然继续打代码,怎么实现?

练习

1) 计算出120之间所有不能被3整除的整数的总和  大于(或等于)100的第一个数字

       for(){

判断不能被3整除 ,求总和sum

if( i %3  != 0 ){

     sum+=i;

}

 

再有一个判断sum大于(或等于)100   break 终止循环

if(sum>=100){

      //打印sum    i

       break;

}

}

3. return

l return  表示结束当前的方法

  • 使用刚才break的例子,修改为return 看看有什么区别

注意:break  continue  return  紧跟的后面不能够有其它的代码,因为永远执行不到

package com.javaBase;

import java.sql.SQLOutput;

public class LoopController {
    public static void main(String[] args) {
        LoopController loopController = new LoopController();
        //loopController.breakController();
        //loopController.continueController1();
        //loopController.continueController2();
        loopController.returnController();
    }
    /**
     * 1)求出100以内前5个2的倍数的数字
     */
    //循环1-100
     int n=0;
     public void breakController(){
         for (int i=1;i<=100;i++){
             if (i%2==0){
                 n++;
                 System.out.println(n);
             }
             if (n==5){
                 break;
             }
         }
     }
    /**
     * continue  跳过本次循环,继续下一次循环
     * 场景:
     *           一周每天重复做的事情就是 :打代码
     * 但是第5天不想打代码,第6 和第7天仍然继续打代码,怎么实现?
     */
    public void continueController1(){
        for (int i = 1;i<=7;i++){
            if (i==5){
                continue;//跳出这次循环
            }
            System.out.println(i+"写代码");
        }
    }
    /**
     * 1)计算出1—20之间所有不能被3整除的整数的总和
     * 大于(或等于)100的第一个数字
     */
    public void continueController2(){
        int j=0;
        for (int i = 1;i<=20;i++){
            if (i%3 !=0){
                j += i;//跳出这次循环

            }else {
                continue;
            }
            if (j>=100){
                break;
            }else {
                System.out.println(j);
            }
        }
    }
    /**
     * return  表示结束当前的方法
     * 使用刚才break的例子,修改为return 看看有什么区别
     */
    public void returnController(){
        int j=0;
        for (int i = 1;i<=5;i++){
            if (i==3){
                return;
            }
            System.out.println(i);
        }
        System.out.println("方法结束");
    }
}
loopController

四、总结三种循环语句

3种循环结构的语法

while(条件){

     执行这里面的内容

}

 

do{

               }while(条件)

 

 for(初始值;判断条件;循环后执行语句){

               循环体里面做的事情    

              }

  1. 循环真正作用
  2. 目前而言,需要熟练的使用每一种循环完成基本的操

六、引入

  思考:我们第一次听说方法是什么时候?

  示例:

  设计一段代码,计算1-10的和(举例代码演示)

  我们还有个需求,计算1-1000的和,怎么做?

  比较上面的代码区别,都比较类似,唯一不同的地方是在哪里?

  

  希望设计一段代码,能够同时满足求1-n的和,怎么办?

    我们可以用  方法  来解决

图示如下:

  1. 什么是方法   

    方法,也叫 函数,但是一般在java中都叫 方法(同学们在其他地方看到 函数 ,它其实就是指 方法)。

    方式   就是一个能够独立完成某个功能的一段代码。

    方法  看成是一个整体,比如这个圈,既然可以看成一个整体,那么我们这个圈里是不是可以包含 1-n 的求和的代码

          

  

  2. 怎么设计 

    需求:设计一个方法,完成计算任意两个整数的和的功能!

    1) 拷贝一个主方法,然后修改   

    2) 完成此方法的功能

      我们就是此方法的设计者,设计这个方法需要哪些步骤呢?

      我们需要做什么事情?(计算任意两个整数的和)

      计算哪两个数?

        定义两个变量准备用来接收使用者给我的两个整数

        这两个变量定义在方法的()中

        我们在设计的时候,两个变量是没有具体数据的,我们可以当成这两个变量是有数据的

  3. 定义语法

修饰符  返回类型 方法名字(数据类型  变量名,数据类型 变量名,……){

在方法的代码块区域返回结果值的语法: return  返回和方法返回类型相同的值

}

 

    方法的 返回类型 和 方法名字 必须定义

    在一个类中不能 同时存在  相同名字 和 参数类型个数一模一样  的方法

    jvm是怎么来判断 相同名字 和参数类型的方法?--》 

    方法签名方法名+参数列表(和参数的名字没有关系,只是和参数的类型 ,个数,顺序有关)

  4.怎么使用

    上面计算2个数的和的方法怎么调用?在哪里调用?

    主方法:是程序的入口,放在主方法里,jvm可以间接的调用我们定义的方法。

    使用(调用)方法,我们现在是使用者,对于使用者而言,不用关心方法内部是如何计算的(应该把方法看成一个整体)

      方法有static修饰    : 类名.方法名()

      方法没有static修饰: 对象名.方法名()--(后面面向对象讲解)

      如果调用的方法和被调用的方法同时在一个类中,并且同时有static 或者同时没有static:

              方法名()

       方法被调用的时候才会执行

      

       可以重复的调用执行(多次调用相互之间没有关系,各自调用各自的)

   5.常见问题

    1) 调用的时候参数不一致

     

    2) static main 方法调用一个非static方法      

    3) 直接写方法名add没有括号和参数;

     

    

     

   6.总结  

    在一个类中,用static修饰的方法只能调用 同样是static修饰的方法

    实参列表 和 形参参数个数和类型必须一一对应。

    在一个类中不能定义一样的名字 和 相同形参类型和个数 的方法。

    把一个方法看成是能够独立完成某个功能的一段代码,把一个方法看成是一个整体

     从两方面去看:

    1) 使用者

      a) 不用关心方法内部的代码是如何写

      b) 如何使用(调用)

      c) 方法形式参数(所需要关心)

      d) 方法的执行结果

    2) 设计者

      a) 实现什么功能,要做什么事情

      b) 形式参数:用户在调用方法的时候传入什么已知条件

      c) 执行完毕的结果如何处理

 

   7.练习

    1) 定义一个方法,接受三个int参数,计算打印最大的一个数。

    

七、方法return

  1)  引入

    设计一个方法求任意两个整数的和,我们之前代码是怎么写的?

    在上面的方法基础之上,计算3个整数的和

      a) 使用这个方法,先计算两个的和sum,再调用一次,然后sum和另外一个数求和

        从代码上看,这个求和的方法只能够传入两个

      b) 希望上面的方法计算完毕之后不打印,得到计算之后的一个结果值。

        那我们可以用 return 来返回结果值

  2)示例   

    要求:计算2个整数的和,然后把计算的结果返回给调用者。

    1) 方法里写上return 返回值(定义个sum变量存放求和的结果并返回)

      return  sum;//表示把sum变量中的值返回给调用者

    2) 修改返回类型

      方法的内部返回了一个数据,数据的类型是int,所以void 修改成 int

      注意:把sum变量中的值返回给调用者,不是返回sum这个变量

    3) 方法里面返回的变量sum 值,是否可以在调用的方法里面直接使用?

      方法里面的变量sum只能在所在方法里面才能访问,其他方法不能访问

    4) 怎么获得结果值?

       add方法这个整体  看成是 此方法计算完毕的结果值

      a) 直接把  方法整体  放在打印语句中打印(把方法看成是整体)

      b) 可以定义一个变量接收 方法结果值

      c) 把方法整体看成是一个值,参与运算

     思考:直接打印 方法整体,还是  把方法结果值定义一个变量存起来再去打印 ,哪种方式更好一些?

    

     思考:计算1+3的和,直接每次计算的时候打印方法,还是单独定义一个变量接收起来 哪种方式更好;

  

  3) 常见问题

    ①定义了一个有返回类型的方法,但是调用的时候没有放在打印语句中

    例如

            add(1,2);

        

     ②在调用方法的里面去打印输出 被调用方法里面的变量  

      add方法中定义的返回变量sum的值,这个sum局部变量 只能在add方法内部访问,而

      主方法中无法访问(作用域不同)

        

     ③没有返回任何东西,也就是返回类型为 void,去打印输出(或者使用变量接收)方法返回值

    

    

④定义了add(int x,int  y) 是有返回值的方法,但是调用的的方式有问题,例如

1)错误调用方式一

public static void main(String [] args){

add(1,2);

System.out.println(add(1,2));

/*

上面的代码什么问题? 多调用了一次,两次add(1,2) 调用了2次,是独立的调用了两次,第一次调用的时候可以使用一

个变量去接收,然后打印变量即可

*/

}

⑤错误调用方式二

public static void main(String [] args){

add(1,2);

System.out.println(add);

/*

上面的代码什么问题? 打印的是一个变量add,这个变量然而并没有定义,和方法名字搞混淆了

*/

}

 

 

    ⑥如果一个方法的返回类型不是void,那么要求(不管方法里面做了什么事情)都必须返回

    一个和 返回值类型匹配的值

public static int add(){

if(true){

   return 1;

}

}

 

    上面的代码:编译器只看结构,不看其中的值,编译器看到的是一个if结构

 

public static int add(){

if(true){

   return 1;

}else{

   return 2;

}

}

 

              上面的代码:编译器看到结构是if-else,始终都会执行一部分,而这2部分都有return

 

public static int add(){

if(true){

   return 1;

}else if(false){

   return 2;

}

  4)应用场景

    一般来说就是如果需要方法返回一个结果值,那么就return(一般做一些数学运算都需要使用返回值)

    设计一个方法:打印用户传入的字符串,思考是否需要返回值?

public static void print(String str){

   System.out.println(str);

}

八、方法重载

  1)引入   

  • 定义一个add方法,求2个整数的和
  • 举例,定义不同方法,满足下面要求:

    2个整数和,3个整数和,4个整数的和…….

    

    这种方式不好,感觉不容易记住;方法名太多;-- 但是可以通过方法重载来修改上面的例子

  2)概念    

     方法重载:是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数列表(类型   个数  顺序

    如果一个类中存在了多个名字一样的方法而编译不报错那么肯定就是重载

     重载理解:①方法名相同

                         ②参数类型,参数个数,参数顺序 只要有一个不同

    注意:方法重载和参数名字没有关系。和 返回值类型  修饰符也没有关系。

  3)作用

    ①多个方法写成重载方法有什么好处?方便记忆

    ②典型的方法重载示例w(多个不同类型);

  4)应用场景  

    ava.io.PrintStream

    java.io.PrintStream包里面的println方法 ,方法名字都一样,参数类型不同

    

猜你喜欢

转载自www.cnblogs.com/funkyd/p/10221173.html