day05王道Java学习总结

 # 自己总结今天上课的内容
 ## 控制流程语句
        - 顺序结构
            是程序中最简单最基本的流程控制,总的来说:写在前面的先执行,写在后面的后执行
        - 选择结构
            if语句
```
                1. if(关系表达式){
                    语句体,
                }
                2. if(关系表达式){
                    语句体;
                }else{
                    语句体2;
                }
                3. if(关系表达式){
                    语句体1;
                }else if(关系表达式2){
                    语句体2;
                }
                ...
                else{
                语句体n+1;
                }
```                    
                注意事项
                    - 关系表达式无论简单还是复杂,结果必须是Boolean类型
                    - if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略
                    - 一般来说:有左大括号就没有分号,有分号就没有左大括号。
            switch语句
```
                switch(表达式){
                    case 值1:
                        语句体1;
                        break;
                    case 值2:
                        语句体2;
                        break;
                    case 值3:
                        语句体3;
                        break;
                    default
                        语句体n+1;
                        break;
```
                switch表示这是switch语句
                    表达式的取值:byte, short, int, char
                    JDK5以后可以是枚举
                    JDK7以后可以是String
                default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似
                可以放在switch语句的任何位置。
                default可以省略吗?
                    可以省略,一般不建议。除非判断的值是固定的。
                switch语句结束条件
                    遇到break
                    执行到程序的末尾
        - 循环结构
            - for循环
            - while循环
            - do-while循环
            for循环和while循环的区别
                for循环和while循环语句可以等价交换,但还是有些小区别的
                    使用区别
                        控制条件语句所控制的那个变量,在for循环结束后就不能再被访问到了,而while循环结束后还可以继续使用,如果你想                            继续使用,就用while,否则推荐使用for,原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
                    场景区别
                        for循环适合针对一个范围判断进行操作(循环次数比较明确)
                        while循环适合判断次数不明确操作
        - 拓展
            - 如何判断一个数是水仙花数?
                取出**个位**数字;
```
                    int units = i/Math.pow(10,0) % 10;
                    int tens = i / Math.pow(10, 1) % 10;
                    int hundreds = i / Math.pow(10, 2) % 10;
```
            - 循环结构:写程序时优先考虑for循环,其次考虑while循环,最后才考虑do-while循环
            - 死循环:当判断条件为true,就会形成死循环
                1.for(; ; ); 
                2.while(true){}
            - 转义字符 '\t'    tab        '\n'    enter
            - 打印九九乘法表(**待完成**)(见下题)
                技巧:在输出等式之前输出空格
            - 统计这样的三位数{1, 2, 3, 4}这4个数字组成,并且没有重复的数字(**待完成**)
```
class Demo1{
    //统计这样的三位数{1, 2, 3, 4}这4个数字组成,并且没有重复的数字
    public static void main(String[] args){
        int count = 0;
        for(int i = 1; i <= 4; i++){
            for(int j = 1; j <= 4; j ++){
                for(int k = 1; k <= 4; k ++){
                    if(i != j && i != k && j != k){
                        System.out.println(i * 100 + j * 10 + k);
                        count++;
                    }
                }
            }
        }
        System.out.println(count);
    }
}
```
 ## 跳转控制语句
 1.break(中断)
    - 应用场景
        1.switch
        2.循环
        3.离开使用场景的存在是没有意义的
    - 作用
        跳出单层循环
        标签:可以用标签跳出外层循环
             break 标签名;
 2.continue(继续)
    - 使用场景
        只能在循环中使用
        离开使用场景没意义
    - 作用
        终止这次循环,开始下次循环
 3.return(返回)
    - 作用
        结束一个方法,并返回一个值
 ## 方法
  1.概述:完成特定功能的代码块
    修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2){
        函数体;
        return 返回值;
        }
  2.有返回值方法的调用
        直接调用(单独调用)
        输出调用
        复制调用
  3.没有明确返回值类型的函数调用
        其实就是对void类型的方法调用
        只能单独调用
  4.方法重载
        方法名相同,形参个数不同,与返回值类型,形参类型无关
        注意事项:如果没有数据类型一样的方法,编译器会自己把数据类型转换为最接近它的同名方法
        对于数据类型兼容,逻辑一样的方法,就不用使用方法重载,直接定义数据类型占用字节最长的(比如long)
 ## 数组
   1. 概述
        存储同一种数据类型多个元素的容器。
# 小芳的妈妈每天给她2.5元钱,她都会存起来,但是,每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,请问,经过多少天,小芳才可以存到100元钱。
```
class Demo2{
    //小芳的妈妈每天给她2.5元钱,她都会存起来,
    //但是,每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,
    //请问,经过多少天,小芳才可以存到100元钱。
    public static void main(String[] args){
        double sum = 0;    //定义存的钱的数目
        int i = 0;        //定义第一天    这里应该从0开始,之前提交的答案错了
        while(sum < 100){
            sum += 2.5;    //每天加2.5
            if(i % 5== 0){    //存钱的第5天或者5的倍数的话,她都会花去6元钱,
                sum -= 6;
            }
            i++;            //每天的天数加一
        }
        System.out.println(i);//输出天数
    }
}
```
    输出结果:75
             

        

# 函数的概念?函数的格式?格式的解释说明
    概述:完成特定功能的代码块
    修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2){
        函数体;
        return 返回值;
    }
    修饰符:比较多,后面会详细介绍。目前public static 
    返回值类型:用于限定返回值的数据类型
    方法名:一个名称,为了方便我们调用方法
    参数类型:限定调用方法时传入参数的数据类型
    参数名:是一个变量,接受调用方法时传入的参数(形参)
    方法体:完成功能的代码
    return 结束方法以及返回方法指定类型的值
    返回值 程序被return带回的结果,返回给调用者
         
# 函数的调用
    A:明确返回值类型的函数调用
        直接调用(单独调用)
        输出调用
        复制调用
    B:void类型的函数调用
        其实就是对void类型的方法调用
        只能单独调用
    
    
# 函数的练习:
    A: 获取4个值中的最大值
```
class Demo3{
    //获取4个值中的最大值
    public static void main(String[] args){
        int a = 1,b = 2, c = 3, d = 4;
        int max = a;
        if(b > max){
            max = b;
        }
        if(c > max){
            max = c;
        }
        if(d > max){
            max = d;
        }
        System.out.println(max);
    }
}
```
    B: 花式打印九九乘法表(按四种不同方式打印)
```
class Demo4_1{
    //花式打印九九乘法表
    public static void main(String[] args){
        for(int i = 1; i <= 9; i++){
            for(int j = 1; j <= i; j++){
                System.out.print(i + "*" + j + "=" + (i * j) + '\t');
            }
            System.out.println();
        }
    }
}

```
```
class Demo4_2{
    //花式打印九九乘法表
    public static void main(String[] args){
        for(int i = 1; i <= 9; i++){
            //在输出数字之前输出空格
            for(int j = 1; j <= 9 - i; j++){
                System.out.print("     " + '\t');
            }
            for(int j = 1; j <= i; j++){
                System.out.print(i + "*" + j + "=" + (i * j) + '\t');
            }
            System.out.println();
        }
    }
}
```
```
class Demo4_3{
    //花式打印九九乘法表
    public static void main(String[] args){
        for(int i = 9; i >= 1; i--){
            for(int j = 1; j <= i; j++){
                System.out.print(i + "*" + j + "=" + (i * j) + '\t');
            }
            System.out.println();
        }
    }
}

```
```
class Demo4_4{
    //花式打印九九乘法表
    public static void main(String[] args){
        for(int i = 9; i >= 1; i--){
            for(int j = 1;j <= 9 - i; j ++){
                System.out.print("     " + '\t');
            }
            for(int j = 1; j <= i; j++){
                System.out.print(i + "*" + j + "=" + (i * j) + '\t');
            }
            System.out.println();
        }
    }
}
```

# 什么是函数重载?
    System.out.println( )该函数有很多重载的类型,支持将一个不同类型的参数打印出来。如:
    void println(boolean x) 
                  打印 boolean 值,然后终止行。 
     void println(char x) 
                  打印字符,然后终止该行。 
     void println(char[] x) 
                  打印字符数组,然后终止该行。 
     void println(double x) 
                  打印 double,然后终止该行。 
     void println(float x) 
                  打印 float,然后终止该行。 
     void println(int x) 
                  打印整数,然后终止该行。 
     void println(long x) 
                  打印 long,然后终止该行。 
     void println(String x) 
                  打印 String,然后终止该行。 
但是只能打印一个参数。
能不能想办法写一组类似的输出函数,支持传入两个参数打印出来?如:
void println(boolean x,boolean y)        打印两个boolean类型的值
void println(char x, char  y)         打印两个char类型的值
```
package com.wangdao.day05;

import java.util.Scanner;

/**
* @author Yuechao Yang E-mail:yyc05060808@outlook.com
* @version 创建时间:2019年3月29日 下午10:00:07
* 类说明
*/
public class Demo1 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入两个数:");
        String x = in.next();
        String y = in.next();
        println(x,y);
    }
    public static void println(long x, long y) {
        System.out.println(x + " " + y);
    }
    public static void println(int x, int y) {
        System.out.println(x + " " + y);
    }
    public static void println(byte x, byte y) {
        System.out.println(x + " " + y);
    }
    public static void println(short x, short y) {
        System.out.println(x + " " + y);
    }
    public static void println(boolean x, boolean y) {
        System.out.println(x + " " + y);
    }
    public static void println(char x, char y) {
        System.out.println(x + " " + y);
    }
    public static void println(float x, float y) {
        System.out.println(x + " " + y);
    }
    public static void println(double x, double y) {
        System.out.println(x + " " + y);
    }
    public static void println(String x, String y) {
        System.out.println(x + " " + y);
    }
    public static void println(char[] x, char[] y) {
        System.out.println(x + " " + y);
    }
}

```

上一篇:Python学习day05——面向对象程序设计基础案例


下一篇:Python教程100天:Day05 - 总结和练习