控制语句分为三类:顺序,选择,循环
一、条件判断结构(选择语句)
1、if 语句 2、if-else
3、if -else if-else
/**
* 测试多选择结构
* @author 孙檬
*
*/
public class TestIfElseIfElse {
public static void main(String[] args) {
int age = (int)(100*Math.random());
System.out.print("年龄是"+age+",属于");
if(age<15) {
System.out.println("儿童,喜欢玩");
}else if(age<25) {
System.out.println("青年,要学习");
}else if(age<45) {
System.out.println("中年,要工作");
}else if(age<65) {
System.out.println("中老年,要补钙");
}else if(age<85) {
System.out.println("老年,多运动");
}else {
System.out.println("老寿星,古来稀");
}
}
}
4、switch多分支结构
/**
* 测试switch语句
*遇到多值判断时,推荐使用Switch,当然,switch完全可以使用ifelse代替!
* @author HIAPAD
*
*/
public class TestSwitch {
public static void main(String[] args) {//
int month = (int)(12*Math.random());
System.out.println("月份:"+month);
switch (month) {
case 1:
System.out.println("一月,过年啦!");
break;
case 2:
System.out.println("二月!开春啦!");
break;
default:
System.out.println("我是其它月份");
break;
}
System.out.println("################");
char c = 'a';
int rand = (int)(26*Math.random());
char c2 = (char)(c+rand);
System.out.println(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("辅音");
break;
}
}
}
二、循环结构
1、while循环
public class TestWhile {
public static void main(String[] args) {
//计算1+2+3+....+100,5050
//暴力!
int i = 1;
int sum = 0;
while(i<=100) {
sum = sum+i;
i++;
}
System.out.println(sum);
}
}
2、do-while循环
3、for循环
public class TestFor {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum = sum + i;
}
System.out.println(sum);
/*
* int i = 1; while(i<=1){ sum = sum+1; i++; }
*/
/**
* 1.执行初始化语句:i= 1; 2.判断i<=100; 3.执行循环体; 4步进迭代; 5回到第二步继续判断
*/
}
}
*for循环中可以用逗号运算符,在控制表达式的初始化和步进控制部分可以使用逗号分隔;
public class Test1{
public static void main (String[] args){
for(int i=1,j=i+10;i<5;i++,j=i*2){
System.out.println("i="+i+"j="+j);
}
}
}
for(;;)相当于while(true) 都指的是无限循环
for语句初始化部分声明的变量,作用域只能在循环体中,不能再循环外使用该变量
4、嵌套循环
public class TestWhileQianTao {
public static void main(String[] args) {
for(int i=1;i<=5;i++) {
for(int j=1;j<=5;j++) {
System.out.print(i+"\t");
}
System.out.println(i);
}
System.out.println("###################");
//打印九九乘法表
for(int n=1;n<=9;n++) {
for(int m=1;m<=n;m++) {
System.out.print(m+"*"+n+"="+"m*n"+"\t");
}
System.out.println();
}
System.out.println("#####################");
//用while循环分别计算100以内的奇数和偶数之和;
int sum01 = 0;
int sum02 = 0;
for(int i=1;i<=100;i++) {
if(i%2==0) {//偶数
sum01 +=i; // sum01=sum01+i
}else{//奇数
sum02+=i;
}
}
System.out.println("偶数和:"+sum01);
System.out.println("奇数和:"+ sum02);
//用while 循环或其他循环输出1-1000之间能被5整除得数,且每行5个
int p = 0;//方法二: 定义计数器
for(int i=1;i<=1000;i++) {
if(i%5==0) {
System.out.print(i+"\t");
p++;
}
if(p==5) {
System.out.println();
p = 0;
}
/*方法一
if(i%25==0) {
System.out.println();
}
*/
}
}
}
5、break和continue语句
5.1、break语句用于强退出循环,不执行循环中剩余的语句
public class TestBreak {
public static void main(String[] args) {
int total = 0; //定义计数器
System.out.println("Begin");
while(true) {
total++; //每循环一次,计数器加一
int i = (int) Math.round(100*Math.random());
System.out.println(i);
//i等于88时,退出循环
if(i==88) {
break;
}
}
//输出循环次数
System.out.println("Game over,used"+ total+"times.");
}
5.2、continue用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
/**
* 测试 continue
* continue用于结束本次循环,继续循环下一次
* @author HIAPAD
*
*/
public class TestContinue {
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();
count = 0;
}
}
}
}
带标签的break和continue语句
三、方法
1、方法就是用来一段用来完成特定功能的代码片段,从属于类和对象的
public class TestMethod {
public static void main(String[] args) {
//通过对象调用普通方法
TestMethod tm =new TestMethod();
tm.printHyz();
tm.printHyz();
tm.add(500, 20, 0);
int c= tm.add(500, 20, 0)+794;
System.out.println(c);
}
void printHyz() {
System.out.println("可爱的燕子");
System.out.println("活泼的燕子");
System.out.println("美丽的燕子");
}
int add(int a,int b,int c) {
int sum = a+b+c;
System.out.println(sum);
return sum; //renturn 两个作用:1结束方法的运行;2返回值
}
}
2、方法的重载
重载的方法,实际是完全不同的方法,只是名称相同而已
形参的类型,个数,顺序不同构成重载
public class TestOverload {
public static void main(String[] args) {
System.out.println(add(500,20));
System.out.println(add(500,20,1));
System.out.println(add(500.0,20));
System.out.println(add(500,20.0));
System.out.println();
System.out.println(1);
System.out.println(3.0);
}
//求和的方法
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 n2,double n1) {
double sum = n1+n2;
return sum;
}
/*
//编译错误:只有参数名称不同时,不构成方法重载
public static int add(int n2,int n1) {
double sum = n1+n2;
return sum;
//编译错误:只有返回值不同时,不构成方法重载
* public static int add(int n1,int n2) {
double sum = n1+n2;
return sum;
*/
3、递归结构
任何能用递归解决的问题都能用迭代解决。递归方法更加自然的反应问题,易于调试和理解,不强调效率时,可以使用递归放法。
在要求提高性能的情况下避免使用递归,它花时间又耗内存。