java方法之命令行传递参数、可变参数及递归

java方法

1.命令行传递参数

  • 有时候希望运行一个程序时侯再传递给它消息。这要靠 传递命令行参数给main()函数实现
  • 注意
    • main函数后的参数是一个数组,string[] args,java中的数组和C语言中的有所不同,int a[]为C语言中的数组格式,而java中的数组是int[] a,数组名在后,数据类型在[]之前。
    • javac是编译命令后面跟.java文件;java是运行命令,后面直接跟文件名。

1.1 命令行传参演示:

package method;

public class Demo04 {
    public static void main(String[] args) {
        for (int i = 0; i <args.length ; i++) {

            System.out.println("args["+i+"]:"+args[i]);
        }

    }
}


运行结果

C:\Users\安\Desktop\Hello>cd src

C:\Users\安\Desktop\Hello\src>cd main

C:\Users\安\Desktop\Hello\src\main>cd java

C:\Users\安\Desktop\Hello\src\main\java>cd method

C:\Users\安\Desktop\Hello\src\main\java\method>java Demo04
错误: 找不到或无法加载主类 Demo04

C:\Users\安\Desktop\Hello\src\main\java\method>java method.Demo04

C:\Users\安\Desktop\Hello\src\main\java\method>java method.Demo04 this is dog
args[0]:this
args[1]:is
args[2]:dog


  • IDEA中Terminal(终端)传参步骤

    • 1.点开Terminal(终端)面板
    • 2.进入(cd)到类名(就是.java)的目录处
    • 3.编译java文件:javac 类名.java
    • 4.在.class字节码文件的包的上层包目录下运行:java 包名.类名 传递的参数
  • 在cmd 黑窗中传参步骤与终端传参一样,注意编译和运行时一定要找到确切的路径,不然会报:找不到或者无法加载主类的错误


——————————————————————————————————————————————————————————————————————

2.可变参数(不定项参数)

  • 当写方法时有很多不确定的参数,那么我们就需要写好多的方法,但是这样是特别的繁琐和麻烦的。在JDK1.5开始,java支持传递同类型的可变参数给一个方法
  • 在方法声明中,在指定参数类型后加一个省略号(...)
  • 注意: 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数都必须在它之前声明。

2.1 可变长参数以及非静态方法的调用演示:

package method;

public class Demo08 {
    public static void main(String[] args) {
        Demo08 demo08 = new Demo08();

        demo08.test(33,66,88,99,77,55);//此处用了对象.方法名 来调用方法
        // 加了static修饰的方法可以直接在同一个类下的main方法中直接调用,而没有加static修饰的方法需要new出类名对象,通过类名对象来调用非静态方法。
    }

    public void test(int...args){
        System.out.println(args[0]);
        System.out.println(args[1]);
        System.out.println(args[2]);
        System.out.println(args[3]);
        System.out.println(args[5]);


    }


}


运行结果

33
66
88
99
55

2.2 可变长参数以及寻找最大值简单调用演示:

package method;

public class Demo07 {
    public static void main(String[] args) {
        //        可变长参数
        max(10, 20,90,70,100);
        //max(new int[] {3,4,6,7,0});  //这里由于max定义了int a 所以并不是数组,也就无法new 新的数组
                                      //若想new新的数组需要把max 里的int a删除 或者重新写一个没定义的方法

    }
    public  static  void max(int a,int...ints){
        int result=ints[0];

        if(ints.length==0){
            System.out.println("没有数值");
            return;//终止方法

        }
        /*for (int i = 1; i <ints.length ; i++) {
            if(ints[i]>ints[0]){       //二者比较时是变化的不能写死了
                result=ints[1];

            }
        }
*/
        //排序寻找最大的数
        for (int i = 1; i <ints.length ; i++) {
            if(ints[i]>result){
                result=ints[i];

            }

        }

        System.out.println("输入的数值中最大的是"+result);

    }

}

运行结果

输入的数值中最大的是100

3.递归(自己调用自己)

  • A 方法调用 B 方法,我们很容易理解!

  • 递归就是:A 方法调用 A 方法!就是自己调用自己

  • 递归的作用

    • 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可貌似出解决过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
  • 递归结构包括两个部分:

    • 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。

    • 递归体:什么时候需要调用自身方法。

  • 递归适合小计算,如果太大量计算容易内存崩溃,死机


3.1 使用递归计算演示

package method;

public class Demo09 {
    public static void main(String[] args) {

        Demo09 demo09 = new Demo09();//记住new 的是类的对象
        System.out.println(demo09.f(5));//由于没有使用static 修饰 所以需要new对象后调用

    }
    //
    public int f(int n){
        if(n==1){
            return 1;
        }else {

            return n*f(n-1);
        }

    }

}


运行结果

120

4.案例

  • 写一个计算器,要求实现加减乘除功能,并且能够循环接收新的数据,通过用户交互实现

  • 思路推荐

    • 写4个方法:加减乘除
    • 利用循环+switch 进行用户交互
    • 传递需要操作的两个数
    • 输出结果

4.1 计算器演示

package method;

import java.util.Scanner;

public class Demo10 {
    public static void main(String[] args) {


        while (true) {//while 死循环的使用

                Scanner scanner = new Scanner(System.in);
                System.out.println("请您输入数据");
                double aDouble = scanner.nextDouble();
                System.out.println("请您输入操作方式");
                String next = scanner.nextLine();
                System.out.println("请您输入另一个数据");
                Double line = scanner.nextDouble();   //scanner  的学习使用


                switch (next) {   //switch  case 的学习使用
                    case "+":
                        double c = add(aDouble, line);  //方法调用后的引用
                        System.out.println(c);
                        break;

                    case "-":
                        System.out.println(subtract(aDouble,line));  //方法的直接使用
                        break;


                    case"*" :
                        System.out.println(ride(aDouble,line));
                        break;
                    case "/" :
                        System.out.println(division(aDouble,line));
                        break;
                    default:
                        System.out.println("数据无效");
                }

        }
    }

    //方法的学习使用

    public static double add(double a,double b){
        return a+b;
    }

    public static double subtract(double a,double b){
        return a-b;
    }

    public static double ride(double a,double b){
        return a*b;
    }
    public static double division(double a,double b){
        return a/b;
    }


}



运行结果

请您输入数据
34
请您输入操作方式
*
请您输入另一个数据
2
68.0
请您输入数据
77
请您输入操作方式
/
请您输入另一个数据
7
11.0
请您输入数据
888
请您输入操作方式
+
请您输入另一个数据
2
890.0
请您输入数据



5.更多参考

狂神说Java

posted @ 2022-05-08 13:23  哼哼哈¥  阅读(602)  评论(0编辑  收藏  举报