输入与输出+方法

一、输出

1、System.out.println("需要换行");
2、System.out.print("不用换行");
3、System.out.printf("%s","需要格式化输出");

二、输入 

基本格式:
Scanner scanner=new Scanner(System.in);
int age= scanner.nextInt();//输入一个整数

注意:

1、

​​ Scanner scanner=new Scanner(System.in);
        int age= scanner.nextInt();
        System.out.println("年龄: "+age);
        Scanner scanner1=new Scanner(System.in);
        String name= scanner.nextLine();  
        System.out.println("姓名: "+age);
  

nextLine不能用在第二个输出,因为它表示输出一行,会把第一次输出的回车读掉;所以可以先输出姓名,在输出年龄

2、

 Scanner scanner=new Scanner(System.in);
        String name= scanner.next();
        System.out.println("姓名: "+name);
        Scanner scanner1=new Scanner(System.in);
        int age= scanner.nextInt();
        System.out.println("年龄: "+age);
    

 next读到空格就会自动结束,所以会出现编译错误

 当输入数据时,优先处理字符串输入

 3、多次循环输入整数

ublic static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNextInt()) {      //hasNextInt是输入整数的
            int age = scanner.nextInt();
            System.out.println("年龄: " + age);
        }
    }
}

  IDEA上用Ctrl+D结束字符串的输入

三、方法(用小驼峰表示)

方法定义:

public  static  返回值类型  方法名(形式参数列表){

方法体;

}

(1)方法的调用:

函数无返回值类型:

public static void add(int x,int y){
        System.out.println(x+y);        //无返回值类型直接输出
    }
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int a= scanner.nextInt();
        int b= scanner.nextInt();
        add(a,b);
    }

函数有返回值类型: 

public static int  add(int x,int y){
        return x+y;                      //有返回值类型必须return
}
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int a= scanner.nextInt();
        int b= scanner.nextInt();
        int ret=add(a,b);
        System.out.println(ret);
    }

分析:局部变量作用域为什么会在函数里面?

只要调用方法,就会在虚拟栈上开辟一块栈帧,这个栈帧也会分配内存给里面的局部变量,当遇到函数遇到return表示函数结束,这个栈会被回收,而栈里面的局部变量也会被销毁。

(2)实参与形参的关系

1、 形参是实参的临时拷贝,对形参的改变不会改变到实参

2、局部变量在栈中存储,而Java是在堆中,不能获取栈上的地址,要想在Java中交换a和b两个变量,必须把他们放在堆上。数组是在栈上存放的

 四、方法的重载

定义:

1、方法名称必须一致

2、方法参数(数据类型   个数    顺序)不一样

3、返回值没有过多要求

优点:不需要记住太多方法名,降低成本

 

五、递归 

方法在执行过程中调用自身,起始条件也是终止条件。

1、求 N 的阶乘
法一:递归
public static int fac(int n){
        if(n==1){
            return 1;
        }
        return n*fac(n-1);
    }
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n= scanner.nextInt();
        int ret=fac(n);
        System.out.println(ret);
    }

 法二:方法

public static int fac1(int y){
        int ret=1;
        for (int i = 1; i <=y ; i++) {
            ret*=i;
        }
        return ret;
    }
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n= scanner.nextInt();
        int a=fac1(n);
        System.out.println(a);
    }

2、按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)

public static void print(int x) {
        if (x < 10) {
            System.out.println(x);
        } else {
            print(x / 10);
            System.out.println(x % 10);
        }
    }
    public static void main(String[] args){
        int a = 1234;
        print(a);
    }

3、求打印的每一位之和

public static int sum(int x) {
        if (x < 10) {
            return x;   //返回1与后面相加
        }
            int tmp = x % 10 + sum(x / 10);
            return tmp;
        }
        public static void main (String[]args){
            int d=1234;
            int ret = sum(d);
            System.out.println(ret);
        }

4、递归求 1 + 2 + 3 + ... + 10

public static int sum4(int x){
        if (x==1){
            return 1;
        }
        return x+sum4(x-1);
        }
    public static void main(String[] args) {
        int g=sum4(4);
        System.out.println(g);
    }

5、求斐波那契数列的第 N

例如:1   1  2    3   5  8  13  21

法1:循环,程序的执行效率大大提高

public static int fib(int n) {
        int a = 1;
        int b = 1;
        int c = 0;
        for (int i = 3; i <=n; i++) {
            c=a+b;
            a=b;
            b=c;
        }
        return c;
    }
    public static void main(String[] args) {
       int ret= fib(6);
        System.out.println(ret);
    }

 法2:递归  (效率不高,多次重复运算)

public static int fib1(int n) {
        if (n==1||n==2){
            return 1;
        }
        return fib1(n-1)+fib1(n-2);
    }
    public static void main(String[] args) {
        int ret= fib1(2);
        System.out.println(ret);
    }  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值