• 零基础学习java------day5------do....while循环、嵌套、方法(函数)


    1  do...while循环

    格式

    初始化语句;
    do {
        循环体语句;
        控制条件语句;
    }while(判断条件语句);
    流程:
        先执行初始化语句
        再执行循环体语句
        再执行条件控制语句
        再做条件的判断:
            true, 继续执行循环体和条件控制
            false 循环结束
    特点:
        循环体语句至少执行一次

    案例

    1. 使用do...while  求1-100内的奇数和以及偶数和

    package com._51doit.javase.day04.loop;
    
    public class DoWhile {
        public static void main(String[] args) {
            int i=1;
            int sum1 = 0;
            int sum2 = 0;
            do {
                //System.out.println("我是你爹");
                if(i%2==0) {
                    sum1 += i;
                }else {
                    sum2 += i;
                }
                i++;
            }while (i<=100);
            System.out.println("偶数个数为:"+sum1);
            System.out.println("奇数个数为:"+sum2);
        }
    }

    1.1  循环综合案例

     贪吃蛇:

    需求: 在键盘上输入一个数,如果是1,代表蛇吃食物,得分加10,并继续输入,如果输入的是一个非1的数字,停止程序,输出得分

    package com._51doit.javase.day04.loop;
    
    import java.util.Scanner;
    
    public class Snake {
        public static void main(String[] args) {
            System.out.println("欢迎来到贪吃蛇");
            System.out.println("请输入一个数字:");
            int score = 0;
            Scanner sc = new Scanner(System.in);
            int num = sc.nextInt();
            while(num == 1) {
                score += 10;
                num = sc.nextInt();  //对num重新赋值
            }
            System.out.println("您的得分是:"+score);
        }
    }

    1.2 循环登录练习

    需求:1 控制台提示用户输入密码;2用户输入密码;3如果用户输入的密码不等于1234,回到步骤1;4如果用户输入的密码等于1234,提示登录成功

    分析:
    需要用到Scanner
    循环: 执行多少次: 不确定: while
    循环的条件: 用户输入的密码不等于1234
    循环体: 提示用户输入密码,用户输入密码

    package com._51doit.javase.day04.loop;
    
    import java.util.Scanner;
    
    public class LoginDemo {
        public static void main(String[] args) {
            System.out.println("请输入您的密码");
            Scanner sc = new Scanner(System.in);
            int password = sc.nextInt();
            while(password != 1234) {
                System.out.println("密码不正确,请重新输入密码");
                password = sc.nextInt();
            }
            System.out.println("登录成功");
        }
    }

    将此案例用do...while形式来做

     1 package com._51doit.javase.day04.loop;
     2 
     3 import java.util.Scanner;
     4 
     5 public class LoginDemo {
     6     public static void main(String[] args) {        
     7         Scanner sc = new Scanner(System.in);
     8         do {
     9             System.out.println("请输入您的密码:");
    10             int password = sc.nextInt();
    11         }while(password != 1234);
    12     }
    13 }

    注意,上面代码第十一行会出问题,第10行中的password作用域为do{}中,所以第11行的while就相当于没定义,无法使用,解决方法是将变量进行声明,代码如下

     1 package com._51doit.javase.day04.loop;
     2 
     3 import java.util.Scanner;
     4 
     5 public class LoginDemo {
     6     public static void main(String[] args) {        
     7         Scanner sc = new Scanner(System.in);
     8         int password; //变量的声明,局部变量不赋初值不能使用
     9         do {
    10             System.out.println("请输入您的密码:");
    11             password = sc.nextInt();
    12         }while(password != 1234);
    13         System.out.println("登录成功");
    14     }
    15 }

    1.3 上诉代码将密码改写成字符串

    字符串在比较内容的时候是不能使用  “==”“!=”

    字符串在比较内容的时候,用的是equals

    用法: 字符串a.equals(字符串b);如果内容相同则返回true,否则返回false,当在前面加个"!"表示不相等

     1 package com._51doit.javase.day04.loop;
     2 
     3 import java.util.Scanner;
     4 
     5 public class LoginDemo {
     6     public static void main(String[] args) {        
     7         Scanner sc = new Scanner(System.in);
     8         String password;
     9         do {
    10             System.out.println("请输入您的密码:");
    11             password = sc.nextLine();
    12         }while(!"1234".equals(password)); //这里将“1234”放前面
    13         System.out.println("登录成功");
    14     }
    15 }

     1.4  do you love me

    需求:
    问老婆一个问题: 你爱我么?如果回答的不是爱,继续问, 如果回答的是爱, 循环结束

    package com._51doit.javase.day04.loop;
    
    import java.util.Scanner;
    
    public class DoYouLoveMe {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String answer;
            do {
                System.out.println("老婆,你爱我吗");
                answer = sc.nextLine();
            }while(!"爱".equals(answer));
            System.out.println("哈哈");
        }
    }

    1.5 循环嵌套
    在循环中继续使用循环

    案例:

    1.请输出一个4行5列的星星(*)图案

    /**
     * 循环的嵌套:
     *         循环中还有循环  两层嵌套
     * 外层循环控制行
     * 内层循环控制列
     * 列不换行
     * 内层循环结束后,再换行
     */
    package com._51doit.javase.day04.loop;
    
    public class CircleDemo {
        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();
            }
        }
    }

    2.99乘法表的打印

    package com._51doit.javase.day04.loop;
    
    public class MultiTable {
        public static void main(String[] args) {
            for(int i=1; i<=9; i++) {
                for(int j=1; j<=i; j++) {
                    System.out.print(i+"X"+j+"="+i*j+"	");
                }
                System.out.println();
            }
        }
    }

    知识点:

    tab:

    换行:

    回车:

    1.6 跳转控制语句

    break: 结束单层循环(其所在的那层循环结束),在循环语句和switch语句中使用

    continue:结束本次循环,在循环语句中使用

    return:结束整个方法,返回结果给其调用者

    2. 方法:

    2.1 方法的定义:

    目的:解决代码重复编写问题:

    格式:

      修饰符  返回值类型  方法名(参数类型参数名1,参数类型参数名2…) {

          函数体;

          return 返回值;

    }

    方法格式的解释说明:

      修饰符:比较多,后面会详细介绍。目前就用public static

      返回值类型: 用于限制返回值的数据类型

      方法名: 一个名称,为了方便我们调用参数

      参数类型:限定调用方法时传入参数的数据类型

      参数名:是一个变量,接收调用方法时传入的参数

      函数体: 完成功能的代码

      return:结束方法以及返回方法指定类型的值

      返回值: 程序被return带回来的结果,返回给调用者。

    2.2 方法的调用

    方法名(符合参数类型和个数的具体值)

    练习:

    package com._51doit.javase.day04.loop;
    
    public class MethodTest {
        public static void main(String[] args) {
            printCha(12.5,34);
            printAreaAndZHOfCircle(12);
            printStar(8,10);
            }
            public static void printCha(double a,double b) {
            System.out.println(a-b);
            }
            public static void printAreaAndZHOfCircle(double r) {
            System.out.println("圆的周长为:"+2*3.14*r);
            System.out.println("圆的面积为:"+3.14*r*r);
            }
            public static void printStar(int x,int y) {
            for(int i=1;i<=x;i++) {
                for(int j=1;j<=y;j++) {
                    System.out.print("*");
                    }
                    System.out.println();
            }
        }
    }

    2.3 方法的返回值

    无返回值的方法:

        返回值类型:void

    有返回值的方法:

        返回值类型: 数据类型

        必须return

        return   后面的值要和返回值类型相一致

    案例

    package com._51doit.javase.day04.loop;
    
    public class MethodTest {
        public static void main(String[] args) {
            boolean re = isDouble(13);
            System.out.println(re);
            System.out.println(getCha(12.3,34));//只有有返回值的方法可以直接打印
            System.out.println(getMax(12.4f,12,34));
            }
            public static boolean isDouble(int a) {
                return a%2==0;
            }
            public static double getCha(double x,double y) {
                return x-y;
            }
            public static float getMax(float a,float b,float c) {
                if(a>b&a>c) {
                    return a;
            }else if(b>c) {
                return b;
            }else {
                return c;
            }
        }
    }

    2.4 方法的重载

    概念:一个类中可以存在多个名字相同的方法,但是必须保证参数的个数或类型不同,其与返回值无关

    TODO:在代码里充当书签,便于定位

    案例

     1 package com._51doit.javase.day04.loop;
     2 
     3 public class ReloadMethod {
     4     public static void main(String[] args) {
     5         System.out.println(getSum(1,2));
     6         
     7     }
     8     public static long getSum(long a, long b) {
     9         System.out.println("long......");
    10         return a+b;
    11     }
    12     public static long getSum(int a, int b) {
    13         System.out.println("int......");
    14         return a+b;
    15     }
    16 }

    打印结果为

    int。。。。。。

    3

    可见一个函数存在相同的方法时,其会根据参数的类型去匹配应该调用哪一个函数

    变化1:若将12行代码中的两个int改为short,运行结果会是什么呢?

    public static long getSum(short a, short b){

    得到的结果    long......

             3

    这说明函数调用时,若发现参数类型不完全匹配时,就会找一个能接受给定参数的函数调用,如本例中给定的参数时int类型,但两个getSum()方法中参数都不为int,但long可以接受int类型参数,short不可以接收int类型参数,所以调用参数类型为long的getSum()方法。

    变化2:

    若将第8行和11行代码分别改写成如下形式,运行结果会怎样

    1 public static long getSum(int a, long b) {  //第8行
    2 
    3 
    4 public static long getSum(long a, int b) {   第12行

    这样会报错,main()方法将不知道要调用哪一个getSum方法,报错信息如下:

  • 相关阅读:
    linux设备驱动学习笔记(1)
    linux 设备驱动程序中的一些关联性思考
    linux——(2)文件权限与目录配置
    linux——(1)初识linux
    设计模式-状态模式(State Pattern)
    设计模式-组合模式(Composite Pattern)
    设计模式-迭代器模式(Iterator Pattern)
    设计模式-模板方法模式(the Template Method Pattern)
    设计模式-外观模式(Facade Pattern)
    设计模式-适配器模式(Adapter Pattern)
  • 原文地址:https://www.cnblogs.com/jj1106/p/11302099.html
Copyright © 2020-2023  润新知