晨考

  1. package com.qfedu.day02;
  2. /**
  3. * @Author laoyan
  4. * @Description TODO
  5. * @Date 2022/3/2 9:17
  6. * @Version 1.0
  7. */
  8. public class ZuoYe01 {
  9. public static void main(String[] args) {
  10. /*byte a = 1; // byte 可以
  11. long b = 1l; // long类型 jdk1.8 不行
  12. String c = "hello" ; // jdk1.8 之后都支持*/
  13. /*char d = 'A';
  14. // switch 也支持枚举类型
  15. switch (d){
  16. default:
  17. System.out.println("我是默认语句");
  18. case 5 :
  19. System.out.println("可以吗,输出该语句就可以");
  20. }*/
  21. int x=0,y=1;
  22. if(++x==y--&x++==1||--y==0)
  23. System.out.println("x="+x+",y="+y);
  24. else
  25. System.out.println("y="+y+",x="+x);
  26. int a=3,b=8;
  27. int c=(a>b)?a++:b++;
  28. System.out.println("a="+a+"\tb="+b+"\tc="+c); // a = 3 b =9 c = 8
  29. int d=(a>b)?++a:++b;
  30. System.out.println("a="+a+"\tb="+b+"\td="+d); // a = 3 b =10 d = 10
  31. int e=(a<b)?a++:b++;
  32. System.out.println("a="+a+"\tb="+b+"\te="+e); // a = 4 b =10 e = 3
  33. int f=(a<b)?++a:++b;
  34. System.out.println("a="+a+"\tb="+b+"\tf="+f); // a = 5 b =10 f= 5
  35. }
  36. }

一、for循环

1、打印5次i love you 和 printf的用法

  1. for (int i = 0; i < 5; i++) {
  2. //System.out.println("I love you!!!");
  3. System.out.print("I love you!!!\t");
  4. }
  5. String name = "zhangsan";
  6. int age = 10;
  7. System.out.printf("你的名字是%s,你的年龄是%d",name,age);

2、打印100以内 能被4整除不到能被7整除的数据,每行打印6个

  1. package com.qfedu.day02;
  2. /**
  3. * @Author laoyan
  4. * @Description TODO
  5. * @Date 2022/3/2 9:42
  6. * @Version 1.0
  7. */
  8. public class Demo02 {
  9. // 打印100以内 能被4整除不到能被7整除的数据,每行打印6个
  10. public static void main(String[] args) {
  11. int loop = 0;// 记录目前打印的个数
  12. for (int i = 0; i <= 100; i++) {
  13. if(i % 4 == 0 && i % 7 != 0){
  14. System.out.print(i+"\t");
  15. loop++;
  16. if(loop == 6){
  17. System.out.println();
  18. loop = 0;
  19. }
  20. }
  21. }
  22. }
  23. }

3、变异的for循环

  1. package com.qfedu.day02;
  2. /**
  3. * @Author laoyan
  4. * @Description TODO
  5. * @Date 2022/3/2 9:36
  6. * @Version 1.0
  7. */
  8. public class Demo03 {
  9. public static void main(String[] args) {
  10. int i = 0;
  11. for (; i < 5; ) {
  12. //System.out.println("I love you!!!");
  13. System.out.print("I love you!!!\t");
  14. i++;
  15. }
  16. // 此处是死循环,需要进行条件判断后,break 才能出去
  17. for(;;){
  18. System.out.println("我能够出去.....");
  19. }
  20. }
  21. }

4、100以内所有偶数之和

  1. package com.qfedu.day02;
  2. /**
  3. * @Author laoyan
  4. * @Description TODO
  5. * @Date 2022/3/2 9:51
  6. * @Version 1.0
  7. */
  8. public class Demo04 {
  9. public static void main(String[] args) {
  10. int count = 0;
  11. for (int i = 0; i < 100; i++) {
  12. if(i % 2 == 0){
  13. count += i;
  14. }
  15. }
  16. System.out.println(count);
  17. }
  18. }

5、统计1到100之间分别能被3整除或5整除或同时被3和5整除的数字个数并打印

  1. package com.qfedu.day02;
  2. /**
  3. * @Author laoyan
  4. * @Description TODO
  5. * @Date 2022/3/2 9:53
  6. * @Version 1.0
  7. */
  8. public class Demo05 {
  9. // 统计1到100之间分别能被3整除或5整除或同时被3和5整除的数字个数并打印
  10. public static void main(String[] args) {
  11. int threeNum = 0,fiveNum =0 , threeAndFiveNum = 0;
  12. for (int i = 1; i <= 100; i++) {
  13. if(i % 3 == 0){
  14. threeNum++;
  15. }
  16. if (i % 5 == 0){
  17. fiveNum++ ;
  18. }
  19. if (i % 5 == 0 && i % 3 ==0){
  20. threeAndFiveNum++ ;
  21. }
  22. }
  23. System.out.printf("能被3整除的个数有:%d,能够被5整除的个数有%d,能够同时被3和5整除的个数有%d",threeNum,fiveNum,threeAndFiveNum);
  24. }
  25. }

6、九九乘法表两种方式

  1. package com.qfedu.day02;
  2. /**
  3. * @Author laoyan
  4. * @Description TODO
  5. * @Date 2022/3/2 10:01
  6. * @Version 1.0
  7. */
  8. public class Demo06 {
  9. //九九乘法表
  10. // 第一种: 能否只用一层for循环搞定99 乘法表
  11. public static void main(String[] args) {
  12. // 打印45次即可
  13. int hang = 1;
  14. int lie = 1;
  15. for (int i = 1; i <= 45; i++) {
  16. /**
  17. * 1 1*1 =1
  18. * 2 1*2 =2 2*2=4
  19. */
  20. System.out.print(hang+"*" +lie+"=" +(hang*lie)+"\t");
  21. if(hang == lie){
  22. System.out.println();
  23. lie = 0;
  24. hang++ ;
  25. }
  26. lie++;
  27. }
  28. }
  29. }
  1. package com.qfedu.day02;
  2. /**
  3. * @Author laoyan
  4. * @Description TODO
  5. * @Date 2022/3/2 10:01
  6. * @Version 1.0
  7. */
  8. public class Demo07 {
  9. //九九乘法表
  10. // 第一种: 能否只用一层for循环搞定99 乘法表
  11. public static void main(String[] args) {
  12. for (int i = 1; i < 10; i++) {
  13. for (int j = 1; j <= i; j++) {
  14. System.out.print(i+"*"+j+"="+(i*j) +"\t");
  15. }
  16. System.out.println();
  17. }
  18. }
  19. }

7、判断一个数是否为质数
全部的整数分为三部分: 1 、质数 和 合数
任何的合数都可以分解为质数的乘积。
质数:只能被1和自身整除的数字称之为质数。

  1. package com.qfedu.day02;
  2. import java.util.Scanner;
  3. /**
  4. * @Author laoyan
  5. * @Description TODO
  6. * @Date 2022/3/2 10:20
  7. * @Version 1.0
  8. */
  9. public class Demo08 {
  10. public static void main(String[] args) {
  11. Scanner scanner = new Scanner(System.in);
  12. System.out.println("请输入一个整数:");
  13. int num = scanner.nextInt();
  14. boolean isZhi = true;// 默认都不是
  15. for (int i = 2; i < num; i++) {
  16. if(num % i == 0){
  17. isZhi = false;
  18. break;
  19. }
  20. }
  21. System.out.println( isZhi ? "是质数" : "不是质数");
  22. }
  23. }

8、时间复杂度

  1. package com.qfedu.day02;
  2. /**
  3. * @Author laoyan
  4. * @Description TODO
  5. * @Date 2022/3/2 11:00
  6. * @Version 1.0
  7. *
  8. * 所谓的时间复杂度就是代码执行的次数的 近似值,可以将变量想象为无穷大。
  9. */
  10. public class ShijianFuzaDu {
  11. public static void main(String[] args) {
  12. int a = 10;
  13. System.out.println(a); // 2 次 常数 O(1) = 1
  14. int n = 100;
  15. for (int i = 0; i < n; i++) {
  16. System.out.println(i);
  17. }
  18. // 时间复杂度 O(n) = n
  19. // 两层循环的,时间复杂度 m * n = n^2
  20. for (int i = 1; i < 10; i++) {
  21. for (int j = 1; j <= i; j++) {
  22. System.out.print(i+"*"+j+"="+(i*j) +"\t");
  23. }
  24. System.out.println();
  25. }
  26. }
  27. }

二、while循环

语法:

  1. while(条件表达式){
  2. 循环体
  3. }
  1. package com.qfedu.day02;
  2. import java.util.Scanner;
  3. /**
  4. * @Author laoyan
  5. * @Description TODO
  6. * @Date 2022/3/2 11:14
  7. * @Version 1.0
  8. */
  9. public class Demo10 {
  10. public static void main(String[] args) {
  11. int i = 0;
  12. while(i<10) {
  13. System.out.println("我爱编程,我爱大数据!");
  14. i++;
  15. }
  16. /**
  17. * 阶乘函数(符号:!)的意思是把逐一减小的自然数序列相乘。例如:
  18. *
  19. * 4! = 4 × 3 × 2 × 1 = 24
  20. * 7! = 7 × 6 × 5 × 4 × 3 × 2 × 1 = 5040
  21. * 1! = 1
  22. */
  23. Scanner scanner = new Scanner(System.in);
  24. System.out.println("请输入一个不是特别大的数字:");
  25. System.out.println("int 的最大值:"+Integer.MAX_VALUE);
  26. int num = scanner.nextInt();
  27. int yuanNum = num;
  28. int count = 1;
  29. while(num>0){
  30. count *= num;
  31. num--;
  32. }
  33. System.out.println(yuanNum+"的阶乘是:"+count);
  34. }
  35. }

三、do-while 循环

语法:

  1. do-while语句由 do关键字 大括号 while关键字 小括号号和相关语句组成
  2. 基本格式如下:
  3. do{
  4. 循环体
  5. }while(条件表达式);
  6. do 代码块中的语句肯定会执行至少一次,下一次是否执行取决于while中的条件是否为真。

代码:

  1. package com.qfedu.day02;
  2. /**
  3. * @Author laoyan
  4. * @Description TODO
  5. * @Date 2022/3/2 11:28
  6. * @Version 1.0
  7. */
  8. public class Demo11 {
  9. public static void main(String[] args) {
  10. int i = 0;
  11. do{
  12. System.out.println("i sike you");
  13. i++;
  14. }while(i <= 2);
  15. int m = 0;
  16. do{
  17. if(m % 2 != 0){
  18. System.out.println(m+"是奇数");
  19. }
  20. m++;
  21. }while(m < 100);
  22. int n = 1;
  23. do{
  24. System.out.println(n+"是奇数");
  25. n = n + 2;
  26. }while(n < 100);
  27. }
  28. }

区别:

  1. 1.while 先执行循环条件,然后在执行循环体,一句话:先判断,再执行
  2. 2.do/while 先执行循环体 然后在执行循环条件,一句话:先执行,再判断
  3. 当第一次 就不满足循环条件的情况下 while循环不能执行循环体, do while 可以执行一次

四、break和continue的区别

  1. break : 跳出当前循环体,不再进入
  2. continue: 跳出本次循环,进入下一次即可。
  1. package com.qfedu.day02;
  2. /**
  3. * @Author laoyan
  4. * @Description TODO
  5. * @Date 2022/3/2 11:39
  6. * @Version 1.0
  7. *
  8. * break 在一个循环体中,如果遇到break,直接跳出该循环,结束了,进入下一个循环体或者执行以后的代码
  9. * continue: 结束本次循环,进入下一次循环,比如3 这次循环结束了,该 4 这次的循环了。
  10. */
  11. public class Demo12 {
  12. public static void main(String[] args) {
  13. // 如果数字是8 就结束循环
  14. for (int i = 0; i < 10; i++) {
  15. // 3 5 7 9
  16. if(i % 2 != 0 ){
  17. continue;
  18. }
  19. if(i == 8){
  20. break;
  21. }
  22. }
  23. for(int m = 1; m < 10 ; m++){
  24. for (int n = 1; n <= m; n++) {
  25. System.out.print(m+"*"+n+"="+(m*n) +"\t");
  26. if(n == 3){
  27. break;
  28. }
  29. }
  30. System.out.println();
  31. if(m == 5){
  32. break;
  33. }
  34. }
  35. }
  36. }

五、多重循环练习

课堂练习2:键盘上输入三个数值,分表表示三角形的三条边长。
需要先判断三条边长是否可以构成三角形。
两边之和大于第三边,两边之差小于第三边
如果可以打印输出周长和面积,如果不能,
需要键盘再次输入,最多3次 使用while循环
周长 = a + b + c
面积 = 海伦公式

package com.qfedu.day02_2;

import java.util.Scanner;

/**
 * @Author laoyan
 * @Description TODO
 * @Date 2022/3/2 14:42
 * @Version 1.0
 */
public class Demo02 {
    /**
     * 课堂练习2:键盘上输入三个数值,分表表示三角形的三条边长。
     * 需要先判断三条边长是否可以构成三角形。
     *    两边之和大于第三边,两边之差小于第三边
     * 如果可以打印输出周长和面积,如果不能,
     * 需要键盘再次输入,最多3次  使用while循环
     *   周长 = a + b + c
     *   面积 = 海伦公式
     *
     */
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        int count = 0;
        do{
            System.out.println("请输入一个三角形的三边:");
            int  a  = scanner.nextInt();
            int  b  = scanner.nextInt();
            int  c  = scanner.nextInt();
            if((a+b)>c && (a+c)>b && (b+c)>a){
                System.out.printf("%d,%d,%d,三个值可以组成三角形",a,b,c);
                int zhouChang = a+b+c;
                System.out.println("该三角形的周长是:"+zhouChang);
                float p = zhouChang / 2.0f;
                // Math.sqrt(数字)   对某个数字开根号
                double area = Math.sqrt(p*(p-a)*(p-b)*(p-c));
                System.out.println("该三角形的面积是:"+area);
                break;
            }else{
                System.out.printf("%d,%d,%d,三个值不能组成三角形,请重新输入",a,b,c);
                count++;
            }
        }while(count<3);
    }
}

求1000以内的完数
完数定义:若一个自然数,恰好与除去它本身以外的一切因数的和相等,这种数叫做完全数。例如,6=1+2+3

package com.qfedu.day02_2;

/**
 * @Author laoyan
 * @Description TODO
 * @Date 2022/3/2 15:04
 * @Version 1.0
 */
public class Demo03 {
    /*
        求1000以内的完数
        完数定义:若一个自然数,恰好与除去它本身以外的一切因数的和相等,这种数叫做完全数。例如,6=1+2+3
     */
    public static void main(String[] args) {

        // 获取1000以内的每一个数字的因数
        // 将因数相加 判断是否等于该数本身
        //  28  1 + 2 + 4 + 7 + 14
        for (int i = 1; i < 1000; i++) {
            int  sum = 0;// 因数相加的结果
            for (int j = 1; j < i; j++) {
                // i=6 就代表要判断的数字  j  就是i 的需要判断的因数,我们要判断该数字是不是i的因数
                if( i % j ==0){
                    sum += j;
                }
            }

            if(sum == i){
                System.out.println(i+"是完数");
            }

        }

    }
}

六、方法

1、方法的作用
1) 代码可以重复利用。
2) 让整个代码便于理解
将来尽可能的将一段代码拆分为多个方法,然后相互调用。
2、方法的声明

访问权限修饰符 其它修饰符 返回值类型 方法名(参数列表){

      方法体代码

    return 返回值;(如果返回值类型为 void 此行可省略)
}
/*
   public 权限修饰符
             public  protected private  default
   void  是返回值
   main  就是该方法的方法名
           起的方法名字要规范:
             符合标识符的明名规范即可,一般要见名知意。
   static   其他修饰符,静态的,该方法是静态方法。
   String[] args  参数

*/
public static void main(String[] args) {
    方法体
   // return 
}

1、没有参数也没有返回值的方法。

/**
     * 没有参数也没有返回值的方法
     * 该方法提供了一个功能:打印99乘法表
     */
    public static void print99(){
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i+"*"+j+"="+(i*j) +"\t");
            }
            System.out.println();
        }
    }

2、没有参数有返回值的方法。

伪代码
public static int getNum(){
   return 某个数字;
}

3、有参数没有返回值的方法。

/**
     * 有参数,无返回值
     * 提供一个方法,该方法可以接收一个数字,计算出该数字的阶乘
     */
    public static void jieCheng(int num){

        int yuanNum = num;
        int count = 1;
        while(num>0){
            count *= num;
            num--;
        }
        System.out.println(yuanNum+"的阶乘是:"+count);
    }

4、有参数也有返回值的方法。

package com.qfedu.day02_3;

import java.util.Scanner;

/**
 * @Author laoyan
 * @Description TODO
 * @Date 2022/3/2 16:21
 * @Version 1.0
 */
public class Demo02 {

    /**
     * 判断一个数是否为质数
     * @param num num表示要判断的数字
     * @return 返回true表示是质数,否则不是
     *
     * 有参数又有返回值
     */
    public static boolean isZhiShu(int num){
        boolean isZhi = true;// 默认都不是
        for (int i = 2; i < num; i++) {
            if(num % i == 0){
                isZhi = false;
                break;
            }
        }
        return isZhi;
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int num = scanner.nextInt();
        boolean isZhi = isZhiShu(num);
        System.out.println(isZhi ? "是" : "否");

    }
}

5、有返回值,有两个参数的方法,方法的功能为 计算指定数字的n次方的值

package com.qfedu.day02_3;

/**
 * @Author laoyan
 * @Description TODO
 * @Date 2022/3/2 16:34
 * @Version 1.0
 */
public class Demo03 {
    public static int computeNumCiFang(int num,int ciFang){
        int count = 1 ;
        for (int i = 0; i < ciFang; i++) {
            count *= num;
        }
        return count;
    }
    public static void main(String[] args) {
        int i = computeNumCiFang(2, 3);
        System.out.println(i);
    }
}

6、方法的重载
方法的重载:
java支持一个类中有多个方法名是一样的 方法
方法的重载:方法名相同,参数个数不同,类型不同,顺序不同 称之为重载
跟返回值、访问修饰符、其他修饰符无关。
常见于类中的构造方法中

package com.qfedu.day02_3;

/**
 * @Author laoyan
 * @Description TODO
 * @Date 2022/3/2 16:54
 * @Version 1.0
 *
 * 方法的重载:
 *    java支持一个类中有多个方法名是一样的  方法
 *    方法的重载:方法名相同,参数个数不同,类型不同,顺序不同 称之为重载
 *    跟返回值、访问修饰符、其他修饰符无关。
 *    常见于类中的构造方法中
 */
public class Demo05 {

    public static int show(){
        return 10;
    }

    public static int show(int a){
        return 10;
    }

    public static int show(int a,int b){
        return 10;
    }

    public static int show(double a,int b){
        return 10;
    }

    public static int show(int b,double a){
        return 10;
    }


}

IDEA工具自动导入包的设置:
image.png