有时候你希望运行一个程序的时候再传递给它信息,这要靠传递命令行参数给main()函数实现。
在Demo.java文件中输入一下程序,我们尝试给main函数传参。
public class Demo{ public static void main(String[] args) { //args.length 数组长度 for (int i = 0; i < args.length; i++) { System.out.println("args["+i+"]:"+args[i]); } } }
①找到src文件夹,在前面加上cmd并回车:
②编译Demo.java文件
javac Demo.java
③命令行执行Demo,输入main函数所需String类型数组参数this is susieDreamer,回车即可看到显示args数组打印出来
java Demo this is susieDreamer
JDK1.5开始,Java支持传递同类型的可变参数给一个方法。
在方法声明中,在指定参数类型后加一个省略号(…)。
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
public class Demo{ public static void printMax(double... numbers){ //可变参数 if(numbers.length == 0){ System.out.println("No argument passed"); //为了程序的健壮性 return; } double result = numbers[0]; //排序! for (int i = 0; i < numbers.length; i++) { if(numbers[i] >= result){ result = numbers[i]; //不断寻找numbers数组里的最大值,然后更新result的值 } } System.out.println("The max value is "+result); } public static void main(String[] args) { //调用可变参数的方法 printMax(1,2,3,4,5); printMax(new double[]{6,7,8}); //参数为double的数组类型 } }
A方法调用B方法,我们很容易理解!递归就是:A方法调用A方法!就是自己调用自己
利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
递归结构包括两个部分:
**递归头:**什么时候不调用自身方法。如果没有头,将陷入死循环。
**递归体:**什么时候需要调用自身方法
求阶乘算法(经典递归):
import java.util.Scanner; public class Demo{ //递归思想 public static int func(int n){ if(n == 1){ return 1; //求1的阶乘,则返回1 }else{ return n*func(n-1); //返回n*(n-1)!反复调用直到n*(n-1)*(n-2)*···*2*1 = n! } } public static void main(String[] args){ System.out.println("请输入一个数字,我可以为您求它的阶层:"); Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int result = func(n); System.out.println(n+"的阶层是:"+result); } }