java基础控制语句、方法及递归

1选择结构

if单选择结构

/**
 * 测试if语句
 * @author Memorial
 *
 */
public class Test {
public static void main(String[] args) {
	double d =Math.random();//返回[0,1)之间的随机数
	System.out.println(d);
    System.out.println((int)(6*Math.random()+1));
    
    int h=(int)(6*Math.random()+1);
    if (h<=3) {
    	System.out.println("小");	
    }
    System.out.println("########################################");
    //通过掷三个骰子看看今天的手气如何?
    int i = (int)(6 * Math.random()) + 1;//通过Math.random()产生随机数
    int j = (int)(6 * Math.random()) + 1;
    int k = (int)(6 * Math.random()) + 1;
    int count = i + j + k;
    //如果三个骰子之和大于15,则手气不错
    if(count > 15) {
        System.out.println("今天手气不错");
    }
    //如果三个骰子之和在10到15之间,则手气一般
    if(count >= 10 && count <= 15) { //错误写法:10<=count<=15
        System.out.println("今天手气很一般");
    }
    //如果三个骰子之和小于10,则手气不怎么样
    if(count < 10) {
        System.out.println("今天手气不怎么样");
    }
    System.out.println("得了" + count + "分");
}
    
}

if-else选择结构

/**
 * 测试if-else语句
 * @author Memorial
 *
 */
public class Test2 {
public static void main(String[] args) {
	 //随机产生一个[0.0, 4.0)区间的半径,并根据半径求圆的面积和周长
    double r = 4 * Math.random();
   //Math.pow(r, 2)求半径r的平方
    double area = Math.PI * Math.pow(r, 2);
    double circle = 2 * Math.PI * r;
    System.out.println("半径为: " + r);
    System.out.println("面积为: " + area);
    System.out.println("周长为: " + circle);
    //如果面积>=周长,则输出"面积大于等于周长",否则,输出周长大于面积
    if(area >= circle) {
        System.out.println("面积大于等于周长");
    } else {
        System.out.println("周长大于面积");
    }
}
}

swicth选择结构

public class Test6 {
    public static void main(String[] args) {
        char c = 'a';
        int rand = (int) (26 * Math.random());
        char c2 = (char) (c + rand);
        System.out.print(c2 + ": ");
        switch (c2) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            System.out.println("元音");
            break;
        case 'y':
        case 'w':
            System.out.println("半元音");
            break;
        default:
            System.out.println("辅音");
        }
    }
}

2.循环结构

while语句

public class Test7 {
    public static void main(String[] args) {
        int  i = 0;
        int  sum = 0;
        // 1+2+3+…+100=?
        while (i <= 100) {
            sum += i;//相当于sum = sum+i;
            i++;
        }
        System.out.println("Sum= " + sum);
    }
}

do-while语句

public class Test8 {
    public static void main(String[] args) {
        int i = 0;
        int sum = 0;
        do {
            sum += i; // sum = sum + i
            i++;
        } while (i <= 100);//此处的;不能省略
        System.out.println("Sum= " + sum);
    }

for循环

public class Test10 {
    public static void main(String args[]) {
        int sum = 0;
        //1.求1-100之间的累加和
        for (int i = 0; i <= 100; i++) {
            sum += i;
        }
        System.out.println("Sum= " + sum);
        //2.循环输出9-1之间的数
        for(int i=9;i>0;i--){
            System.out.print(i+"、");
        }
        System.out.println();
        //3.输出90-1之间能被3整除的数
        for(int i=90;i>0;i-=3){
            System.out.print(i+"、");
        }
        System.out.println();
    }
}

嵌套循环

public class Test15 {
    public static void main(String args[]) {
        for (int i = 1; i < 10; i++) { // i是一个乘数
            for (int j = 1; j <= i; j++) { // j是另一个乘数
                System.out.print(j + "*" + i + "=" + (i * j < 10 ? (" " + i * j) : i * j) + "  ");
            }
            System.out.println();
        }
    }
}

break和continue语句

/**
 * 测试break和continue
 * @author 86176
 *
 */
public class Test3 {
public static void main(String[] args) {
	int total=0;//定义计数器
	System.out.println("Begin");
	while(true) {
		total++;//每循环一次计数器加1
		int i=(int)Math.round(100*Math.random());
		System.out.println(i);
		//当i=99时,退出循环
		if(i==99) {
			break;
		}
	}
	//输出循环的次数
	System.out.println("Game over,used "+total+"times.");
}
}

 

/**
 * 测试continue语句
 * @author Memorial
 *
 */
//把100~150之间不能被3整除的数输出,并且每行输出5个数
public class Test4 {
public static void main(String[] args) {
	int count=0;//定义一个计数器
	for(int i=100;i<=150;i++) {
		//如果是3的倍数,则跳过本次循环,继续下一次循环
		if(i%3==0) {
			continue;
		}
		//否则(不是3的倍数),输出该数值
		System.out.print(i+"、");
		count++;//每输出一个数,计数器加1
		if(count %5==0) {
			System.out.println();
		}
		
	}
}
}

带标签的break和continue语句

/**
 * 测试带标签break和continue
 * @author Memorial
 *
 */

//打印101-150之间的所有质数
public class Test5 {
public static void main(String[] args) {
	outer:for (int i=101;i<150;i++) {
		for(int j =2;j<i/2;j++) {
			if(i%j==0) {
				continue outer;
			}
		}
		System.out.print(i+" ");
	}
}
}

3.方法

/**
 * 测试方法的声明以及调用
 * @author Memorial
 *
 */
public class Test6 {
/**main方法:程序的入口**/
public static void main(String[] args) {
	int i=1;
	int j=2;
	//调用求和方法:将i和j的值传给add方法中的n1和n2
	//求和后将结果返回,用sum接受结果
	int sum=add(i,j);
	System.out.println("sum="+sum);//输出sum值
	//调用打印的方法,该方法没有返回值
	print();

}
private static int add(int n1, int n2) {
	// TODO Auto-generated method stub
	int sum=n1+n2;
	return sum;
}

private static void print() {
	// TODO Auto-generated method stub
System.out.println("CSDN博客...");	
}
}

4.方法的重载

 重载的方法,实际是完全不同的方法,只是名称相同而已!

      构成方法重载的条件:

      1.不同的含义:形参类型、形参个数、形参顺序不同

      2.只有返回值不同不构成方法的重载

      3.只有形参的名称不同,不构成方法的重载

/**
 * 测试方法的重载
 * @author Memorial
 *
 */
//重载方法,实际是完全不同的方法,只是名称相同
//在形参类型、形参个数、形参顺序不同的情况下构成重载
public class Test7 {
	public static void main(String[] args) {
        System.out.println(add(3, 5));// 8
        System.out.println(add(3, 5, 10));// 18
        System.out.println(add(3.0, 5));// 8.0
        System.out.println(add(3, 5.0));// 8.0
        // 我们已经见过的方法的重载
        System.out.println();// 0个参数
        System.out.println(1);// 参数是1个int
        System.out.println(3.0);// 参数是1个double
    }
    /** 求和的方法 */
    public static int add(int n1, int n2) {
        int sum = n1 + n2;
        return sum;
    }
    // 方法名相同,参数个数不同,构成重载
    public static int add(int n1, int n2, int n3) {
        int sum = n1 + n2 + n3;
        return sum;
    }
    // 方法名相同,参数类型不同,构成重载
    public static double add(double n1, int n2) {
        double sum = n1 + n2;
        return sum;
    }
    // 方法名相同,参数顺序不同,构成重载
    public static double add(int n1, double n2) {
        double sum = n1 + n2;
        return sum;
    }
    //编译错误:只有返回值不同,不构成方法的重载
    public static double add(int n1, int n2) {
        double sum = n1 + n2;
        return sum;
    }
    //编译错误:只有参数名称不同,不构成方法的重载
    public static int add(int n2, int n1) {
        double sum = n1 + n2;         
        return sum;
    }  
}

5.递归

递归结构包括两个部分:

      1.定义递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环,也就是递归的结束条件。

      2.递归体。解答:什么时候需要调用自身方法。

/**
 * 测试递归
 * @author Memorial
 *
 */
public class Test8 {
public static void main(String[] args) {
	a();
}
static int count=0;
static void a() {
	System.out.println("a");
    count++;
    if(count<10) {
    	a();
    }
    else {
    	return;
    }
}
static void b() {
	System.out.println("b");
}
}
/**
 * 测试递归
 * @author 86176
 *
 */
//求阶乘
public class Test9 {
public static void main(String[] args) {
	long d1=System.currentTimeMillis();//当前时间
	
	System.out.printf("%d阶乘的结果:%s%n",10,factorial(10));
	long d2=System.currentTimeMillis();
	System.out.printf("递归费时:%s%n",d2-d1);//耗时
}
/**求阶乘的方法**/
static long factorial(int n) {
	if (n==1) {//递归头
		return 1;
	}
	else {//递归体
		return n*factorial(n-1);//n!=n*(n-1)!
	}
}
}

1.从结构化程序设计角度出发,程序有三种结构:顺序结构、选择结构和循环结构

  2.选择结构

     (1)if单选择结构 if-else双选择结构 if-else if-else多选择结构

     (2)switch多选择结构

  3.多选择结构与switch的关系:当布尔表达式是等值判断的情况,可使用多重选择结构或switch结构,如果布尔表达式区间判断的情况,则只能使用多重选择结构

     (1) 循环结构

     (2)当型:while与for

     (3)直到型:do-while

  4.while与do-while的区别,在布尔表达式的值为false时while的循环体一次也不执行,而do-while至少执行一次

  5.break可以在switch与循环结构中使用,而continue只能在循环结构中使用

  6.方法就是一段用来完成特定功能的代码片段,类似于其它语言的函数

  7.方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。 调用时,会根据不同的参数自动匹配对应的方法

  8.任何能用递归解决的问题也能使用迭代解决。在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值