零基础学习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+"\t");
            }
            System.out.println();
        }
    }
}

知识点:

tab: \t

换行: \n

回车:\r

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方法,报错信息如下:

 

posted @ 2019-08-05 11:39  一y样  阅读(303)  评论(0编辑  收藏  举报