JavaDay07

  • 打印10000以内的所有完全数。如果一个正整数等于除了它本身之外所有除数之和,这个数就是完全数。如6==1+2+3 28==1+2+4+7+14。
package com.bjpowernode.day07.demo01.exercise;
/*
 *打印10000以内的所有完全数。如果一个正整数等于除了它本身之外所有除数之和,这个数就是完全数。
 *如6==1+2+3 28==1+2+4+7+14
 */
public class Demo01 {

    public static void main(String[] args) {
        //遍历10000以内的所有整数,如果这个整数是完全数就打印
        for( int num=1 ; num<=10000 ; num++ ) {
            //求num所有除数之和
            int sum=0;              //保存num所有除数之和

            //求num所有除数之和
            for( int x=1 ; x<num ; x++ ) {
                if ( num % x == 0 ) {
                    sum += x;
                }
            }
            //判断num是否是完全数
            if( num == sum ) {
                System.out.println(num);
            }
        }

    }

}
  • 输入两个数n和a,如n==4,a==3,求 3 + 33 + 333 + 3333的和
package com.bjpowernode.day07.demo01.exercise;

import java.util.Scanner;

/*
 * 输入两个数n和a,如n==4,a==3,求 3 + 33 + 333 + 3333的和
*/
public class Demo02 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入两个数n和a");
        int n = sc.nextInt();
        int a = sc.nextInt();

        int sum = 0;        //保存累加和
        int num = 0;        //保存每次需要累加的数

        for( int x=0 ; x<n ; x++ ) {
            //先构建需要累加的数
            num = num*10 + a;   
            sum += num;
        }
        System.out.println("sum=="+sum);
    }
}
  • 打印九九乘法表
package com.bjpowernode.day07.demo01.exercise;
/*
 * 打印九九乘法表
 * 1*1=1
 * 1*2=2    2*2=4
 * 1*3=3    2*3=6   3*3=9
 * 1*4=4    2*4=8   3*4=12  4*4=16
 */
public class Demo03 {

    public static void main(String[] args) {
        for( int i=1 ; i<=9 ; i++ ) {
            //每一行,先打印乘法表,不换行
            //第i行,打印i个表达式
            for( int j=1 ; j<=i ; j++ ) {
                System.out.print( j + "*" + i + "=" + (i*j) + "\t");
            }

            System.out.println();
        }
    }

}
  • 换零钱,把一元钱换成5毛,2毛,1毛,有多少种换法,打印
package com.bjpowernode.day07.demo01.exercise;
/*
 *  换零钱,把一元钱换成5毛,2毛,1毛,有多少种换法,打印
 */
public class Demo04 {

    public static void main(String[] args) {

        for( int wumao=0 ; wumao<=2 ; wumao++ ) {
            for( int ermao=0 ; ermao<=5 ; ermao++ ) {
                for( int yimao=0 ; yimao<=10 ; yimao++ ) {
                    if ( wumao*5 + ermao*2 + yimao*1 == 10 ) {
                        System.out.println( "五毛有" + wumao + "个,两毛有" + ermao + "个,一毛有" + yimao + "个");
                    }
                }
            }
        }
    }

}

1 断点调试

1.1 什么是断点调试

是调试程序的一种方法。
可以在某条语句上加上断点,在调试程序时,运行到断点处就会中断,可以查看变量的当前值,可以查看程序的运行过程。

1.2 如何添加断点

1)在某行语句的前面进行双击
2)选择run->Toggle breakpoint
3)Ctrl + shift + B快捷键

1.3 如何调试

1)启动调试
选择Run->Debug
F11快捷键
单击常用工具栏的调试按钮
2)如何调试
Step into–F5–转到方法内部去执行
Step over–F6–执行下一条语句
Step return–F7–从方法中返回
Resume–F8–执行到下一个断点或程序结束
Terminate–Ctrl+F2–终止调试

package com.bjpowernode.day07.demo02.breakpoint;

import java.util.Scanner;

/*
 * 测试断点调试
 */
public class Demo {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int num = sc.nextInt();

        if ( num>0 ) {
            System.out.println("正整数");
        }else if ( num<0 ) {
            System.out.println("负整数");
        }

        int sum = 0;
        while ( num>=0 ) {
            sum += num;
            num--;
        }
        System.out.println( "sum==" + sum );
    }

}

2 方法

2.1 什么是方法?为什么使用方法?

1)方法就是为了完成某个功能而编写的一段代码,如果以后想使用这功能时就直接调用这个方法即可。
如:System.out.println();语句中println()就是一个方法,它的作用是在屏幕上打印信息并换行。
Math.random();语句中random()就是一个方法,它的作用是生成[0,1]之间的随机小数。
sc.nextInt();语句中nextInt();就是一个方法,它的作用是从键盘上读取一个整数并返回。
以上这些方法,是SUN公司之前就为我们定义好了,我们直接使用即可。

2)为什么使用方法?
方法可以使代码更简洁
可以实现代码的复用
方法方便程序的维护

package com.bjpowernode.day07.demo03.method1;

/*
 * 模拟汽车驾驶
 */
public class Demo {

    public static void main(String[] args) {
        // 起步
        System.out.println("++++++++++++++++++++++");
        System.out.println("踩刹车");
        System.out.println("松手刹");
        System.out.println("踩离合");
        System.out.println("挂档");
        System.out.println("松离合");
        System.out.println("踩油门");

        // 停车
        System.out.println("------------------------");
        System.out.println("踩刹车");
        System.out.println("踩离合");
        System.out.println("摘档");
        System.out.println("松离合");
        System.out.println("拉手刹");
        System.out.println("松刹车");

        // 起步
        System.out.println("++++++++++++++++++++++");
        System.out.println("踩刹车");
        System.out.println("松手刹");
        System.out.println("踩离合");
        System.out.println("挂档");
        System.out.println("松离合");
        System.out.println("踩油门");

        // 停车
        System.out.println("------------------------");
        System.out.println("踩刹车");
        System.out.println("踩离合");
        System.out.println("摘档");
        System.out.println("松离合");
        System.out.println("拉手刹");
        System.out.println("松刹车");

        // 起步
        System.out.println("++++++++++++++++++++++");
        System.out.println("踩刹车");
        System.out.println("松手刹");
        System.out.println("踩离合");
        System.out.println("挂档");
        System.out.println("松离合");
        System.out.println("踩油门");

        // 停车
        System.out.println("------------------------");
        System.out.println("踩刹车");
        System.out.println("踩离合");
        System.out.println("摘档");
        System.out.println("松离合");
        System.out.println("拉手刹");
        System.out.println("松刹车");

        // 起步
        System.out.println("++++++++++++++++++++++");
        System.out.println("踩刹车");
        System.out.println("松手刹");
        System.out.println("踩离合");
        System.out.println("挂档");
        System.out.println("松离合");
        System.out.println("踩油门");

        // 停车
        System.out.println("------------------------");
        System.out.println("踩刹车");
        System.out.println("踩离合");
        System.out.println("摘档");
        System.out.println("松离合");
        System.out.println("拉手刹");
        System.out.println("松刹车");

    }

}
package com.bjpowernode.day07.demo03.method1;
/*
 * 方法可以使代码更简洁
可以实现代码的复用
方法方便程序的维护
 */
public class Demo02 {

    public static void main(String[] args) {
        start();
        stop();

        start();
        stop();

        start();
        stop();

        start();
        stop();
    }

    // 起步
    public static void start() {
        // 起步
        System.out.println("++++++++++++++++++++++");
        System.out.println("踩刹车");
        System.out.println("松手刹");
        System.out.println("踩离合");
        System.out.println("挂档");
        System.out.println("松离合");
        System.out.println("踩油门");
    }

    // 停车
    public static void stop() {
        // 停车
        System.out.println("------------------------");
        System.out.println("踩刹车");
        System.out.println("踩离合");
        System.out.println("摘档");
        System.out.println("松离合");
        System.out.println("拉手刹");
        System.out.println("松刹车");
    }
}

2.2 方法的定义

语法格式:
[修饰符] 返回值类型 方法名( 参数类型 参数名 , 参数类型 参数名 , ……){
方法体
}

1)方法的修饰符有:public/protected/private/static/abstract/final/synchronized等
2)方法返回值类型是指调用方法时返回的值的类型,如:Math.random()中random()方法返回一个[0,1]之间的小数,random()方法的返回值类型就是double型。如sc,nextInt()中nextInt()方法从键盘上读取一个整数并返回,nextInt()方法的返回值类型就是int类型。如System.out.println()中的println()方法在屏幕上打印信息,没有返回值,如果方法没有返回值,它的返回值类型使用void来表示。
3)方法名是程序员起的名字,方法名一般是一个动词,第一个单词小写,其它每个单词的首字母大写
4)方法在完成某个功能时,可能需要一些数据,在定义方法时指定方法参数来接收这些数据。如在屏幕上打印信息,需要把要打印的信息传递给println()方法。在定义参数时,需要指定参数的类型和参数名,如果有多个参数,参数之间使用逗号分隔。方法也可以没有参数,如random()方法,但是小括弧不能省略。
5)方法体使用一对大括弧括起来。如果在定义方法时指定了方法的返回值类型不是void,表示方法有一个返回值,在方法体中需要通过return语句返回一个对应类型的值。

  • 定义一个没有参数没有返回值的方法
package com.bjpowernode.day07.demo04.methoddefination;
/*
 * 定义一个没有参数,没有返回值的方法
 */
public class Demo01 {

    public static void main(String[] args) {
        /*
         * 程序从main方法开始执行,可以在main方法中调用printRose()方法
         * 没有参数,没有返回值的方法,调用方法的语句作为单独的一条语句
         * 通过方法名来调用方法
         * 调用方法时,程序会转到方法内部去执行,在方法体执行完毕后再返回到调用的位置
         */
        printRose();            //调用无参数,无返回值的方法
    }
    /*
     *定义方法,在屏幕上打印一朵玫瑰
     * 1)方法定义的位置,在类中,在其它方法的外面,方法之间是并列的,不能再一个方法内部再定义另外的方法
     * 2)在屏幕上打印内容,不需要返回值,方法的返回值类型用void表示
     * 3)打印一朵玫瑰,也不需要传递数据,没有参数
     * 4)方法名:printRose是程序员自己定义的
     * 
     * 特别注意:
     *  定义了方法之后,仅仅是在类中添加了一组指令,这一组指令不会自动执行,需要进行方法的调用
     */

    public static void printRose() {
        System.out.println("{@}");
        System.out.println("\\|/");
        System.out.println(" | ");
    }
}
  • 定义一个有多个参数,没有返回值的方法
package com.bjpowernode.day07.demo04.methoddefination;

import java.util.Scanner;

/*
 * 定义一个有多个参数,没有返回值的方法
 */
public class Demo03 {

    public static void main(String[] args) {
        /*
         * 在调用方法时,传递的数据要与定义时指定的参数个数一致
         */
        max(18, 25);                                    //把18传递给num1,把25传递给num2

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入两个整数");
        int m = sc.nextInt();
        int n = sc.nextInt();
        max(m, n);                                      //把变量m的值传递给num1,把变量n的值传递给num2
    }

    /*
     * 定义一个方法,把两个整数的较大者打印到屏幕上
     * 不需要返回值,返回值类型就用void来表示
     * 求两个整数的较大者,需要通过两个参数来接收数据,参数之间使用逗号分隔
     */
    public static void max(int num1,int num2) {
        if ( num1>num2 ) {
            System.out.println(num1 + "和" + num2 + "中较大者是" + num1);
        }else {
            System.out.println(num1 + "和" + num2 + "中较大者是" + num2);
        }
    }
}
  • 定义一个方法,没有参数,有返回值
package com.bjpowernode.day07.demo04.methoddefination;
/*
 * 定义一个方法,没有参数,有返回值
 */
public class Demo04 {

    public static void main(String[] args) {
        /*
         * 1)通过方法名来调用方法
         * 2)如果方法有返回值,需要对这个返回值进行处理
         *      (1)可以把返回值打印到屏幕上
         *      (2)可以把返回值保存到一个变量中
         *      (3)可以把方法的返回值作为其它表达式的一部分
         */
        System.out.println( getRndInt() );
        int num = getRndInt();

        if ( getRndInt()%2==0) {
            System.out.println("随机生成了一个偶数");
        }else {
            System.out.println("随机生成了一个奇数");
        }

        System.out.println( num );

    }

    /*
     * 定义方法,返回[0,100]之间的随机整数
     * 返回值类型为int类型,指定了返回值类型之后,在方法体重必须通过return语句返回一个整数
     */
    public static int getRndInt() {
        return (int)(Math.random() * 10);
    }
}
  • 定义方法,有一个参数,有返回值
package com.bjpowernode.day07.demo04.methoddefination;
/*
 * 定义方法,有一个参数,有返回值
 */
public class Demo05 {

    public static void main(String[] args) {

        /*
         * 1)方法有返回值,需要对方法的返回值进行处理
         */
        System.out.println( isPrime(123) );

        //把1~100之间所有的素数打印到屏幕上
        for(int i=1; i<=100; i++) {
            if ( isPrime(i) ) {
                System.out.println( i );
            }
        }
    }
    /**
     * 判断一个数是否为素数,如果是素数返回true,不是素数返回false
     * @param num       接收一个整数
     * @return          返回num是否为素数
     */
    public static boolean isPrime(int num) {
        //对参数接收的数据进行验证
        if ( num<2 ) {
            return false;
        }
        //从2到num-1之间如果有一个数能把num整除,不是素数,返回false
        for (int x = 2; x < num; x++) {
            if ( num%x==0 ) {
                return false;
            }
        }

        return true;
    }
}
  • 定义方法,有多个参数,有返回值
package com.bjpowernode.day07.demo04.methoddefination;
/*
 * 1)定义方法,有多个参数,有返回值
 * 2)一个类中可以定义多个方法,方法之间可以相互调用
 */
public class Demo06 {

    public static void main(String[] args) {
        for( int m=1; m<=12; m++ ) {
            System.out.println( "2017年" + m + "月有" + getDaysOfMonth(2017,m) + "天" );
        }
    }

    /**
     * 定义方法,返回指定年、月的天数
     * @param year      接收年份
     * @param month     接收月份
     * @return          返回指定日期的天数
     */
    public static int getDaysOfMonth(int year,int month) {
        switch ( month ) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            return 31;
        case 4:
        case 6:
        case 9:
        case 11:
            return 30;
        case 2:
            if ( isLeapYear(year) ) {
                return 29;
            }else {
                return 28;
            }
        }
        return 0;
    }

    /*
     * 当方法定时时指定了返回值类型不是void,在方法体中必须保证return一个值
     */
    public static boolean isLeapYear(int year) {
        if ( year%4==0 && year%100!=0 || year%400==0 ) {
            return true;
        }

        return false;
    }
}

2.4 方法参数传递

1)在定义方法时,指定的参数称为形式参数,简称为形参;在调用方法时,给方法传递的参数称为实际参数,简称为实参
2)在定义方法时,形参没有分配存储空间,也没有值,相当于一个占位符;在调用方法时,传递的是实际的数据
3)定义了方法,方法不占存储空间,方法的形参和方法的局部变量也不占存储空间;只有在调用方法时,才会在栈区中给方法分配存储空间,然后给形参/局部变量分配存储空间;当方法执行结束,方法所占的栈空间会被释放,方法的形参/局部变量也会被释放
4)在调用方法时,是把实参的值传递给形参,实参与形参是相互独立的,在方法体中对形参进行了重新赋值,不会影响实参。

  • 方法的形参与实参是相互独立的
package com.bjpowernode.day07.demo05.methodargs;
/*
 * 方法的形参与实参是相互独立的
 */
public class Demo {

    public static void main(String[] args) {

        int x = 10;
        int y = 20;

        swap(x, y);                                     //x,y是实参
        System.out.println( "x==" + x + ",y==" + y );
    }
    /**
     * 定义方法,实现两个整数的交换
     * @param m     接收一个整数
     * @param n     接收另外一个整数
     */
    public static void swap(int m,int n) {              //m,n是形参
        int t = m;
        m = n;
        n = t;
    }
}
  • 方法的重载
package com.bjpowernode.day07.demo06.methodoverload;
/*
 * 方法的重载
 * 1)为什么重载?
 *      同一个类中,相同的功能使用相同的方法名
 * 2)如何实现重载?
 *      方法名相同,方法的参数类型或者参数个数不同
 * 在编译时,编译器会找与实参最匹配的方法执行
 */
public class Demo {

    public static void main(String[] args) {

        System.out.println(12);
        System.out.println(1.2);
        System.out.println(true);
        System.out.println('A');
        System.out.println("abc");
        //之所以能够打印不同数据类型的数据,就是因为println()方法已经实现了重载

        //在调用方法时,编译器会找到最匹配的方法执行
        System.out.println( sum(1,2));
        System.out.println( sum(1.5,2));
        System.out.println( sum(1,2.5));
        System.out.println( sum(1.5,2.5));
        System.out.println( sum(1,2,3));
    }

    /*
     * 定义方法,返回两个整数的和
     */
    public static int sum(int x,int y) {
        return x+y;
    }

    /*
     * 定义方法,返回三个整数的和
     */
    public static int sum(int x,int y,int z) {
        return x+y+z;
    }

    /*
     * 定义方法,返回两个小数的和
     */
    public static double sum(double x,double y) {
        return x+y;
    }
}
  • 递归调用
package com.bjpowernode.day07.demo06.methodoverload;
/*
 * 递归调用
 *  在方法体中又调用了它自身
 * 在定义方法时,主要确定两点
 *  1)找规律
 *  2)确定结束条件
 * 
 */
public class Demo01 {

    public static void main(String[] args) {
        long result = getFactorial(5);
        System.out.println( result );
    }

    /*
     * n! = (n-1)! * n
     * 1! = 1
     */
    public static long getFactorial(int n) {
        if ( n==1 ) {
            return 1;
        }
        return getFactorial(n-1)*n;
    }

    /**
     * 求一个数的阶乘
     * @param n     接收一个整数
     * @return      返回n!
     * 
     * 5!=1*2*3*4*5
     * 4!=1*2*3*4
     * n!=(n-1)!*n
     */
    public static long factorial(int n) {
        long res = 1;
        for(int x=1; x<=n; x++) {
            res *= x;
        }
        return res;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值