控制语句分为三类:顺序、选择、循环
if单选择结构
Math类的使用
- java.lang包中的Math类提供了一些用于数学计算的方法。
- Math.random()该方法用于产生一个0到1区间的double类型的随机数,但是不包括1.
/**
* 测试If单选择结构
* @author PengHao
*
*/
public class TestIf {
public static void main(String[] args) {
//通过掷三个骰子看看今天的手气如何?
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) {
System.out.println("今天手气很一般");
}
//如果三个骰子之和小于10,则手气不怎么样
if(count < 10) {
System.out.println("今天手气不怎么样");
}
System.out.println("得了"+count+"分");
}
}
IfElse双选择结构
/**
* 测试IfElse双选择结构
* @author PengHao
*
*/
public class TestIfElse {
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("周长大于面积");
}
}
}
IfElseIfElse多选择结构
/**
* 测试ifelseifelse多选择结构
* @author PengHao
*
*/
public class TestIfElseIfElse {
public static void main(String[] args) {
int age = (int)(100*Math.random());
System.out.println("年龄是:"+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("老寿星,古来稀!");
}
}
}
switch多选择结构
switch语句中case标签在JDK1.5之前必须是整数(long类型除外)或者枚举,不能是字符串,在JDK1.7之后允许使用字符串(String).
/**
* 测试switch语句
* @author PengHao
*
*/
public class TestSwitch {
public static void main(String[] args) {
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("辅音");
}
}
}
while循环
/**
* 测试While循环
* @author PengHao
*
*/
public class TestWhile {
public static void main(String[] args) {
//计算1+2+3+……+100的和
int i = 1;
int sum = 0;
while(i <= 100) {
sum += i;
i++;
}
System.out.println(sum);
}
}
do-while循环
For循环
/**
* 测试For循环
* @author PengHao
*
*/
public class TestFor {
public static void main(String[] args) {
int sum = 0;
for(int i=1;i<=100;i++) {
sum += i;
}
System.out.println(sum);
}
}
嵌套循环
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
for(int i=1;i<=5;i++) {
for(int j=1;j<=5;j++) {
System.out.print(i+"\t");
}
System.out.println();
}
打印九九乘法表
for(int i=1;i<=9;i++) {
for(int j=1;j<=i;j++) {
System.out.print(j+"*"+i+"="+(j*2)+'\t');
}
System.out.println();
}
Break语句
/**
* 测试循环语句中的Break
* @author PengHao
*
*/
public class TestBreak {
public static void main(String[] args) {
int total = 0;//定义计数器
int rand;
while(true) {
rand = (int)(100*Math.random()+1);
total++;
if(rand==88) {//当等于88时,结束循环!
break;
}
}
System.out.println("总共循环了"+total+"次");
}
}
Continue语句
int count = 0;//定义计数器
for(int i=100;i<=150;i++) {
if(i%3==0) {//如果i能被3整除,则跳过本次循环
continue;
}
count++;//计数器加一
System.out.print(i+"\t");
if(count==5) {
System.out.println();
count=0;
}
}
带标签的Break和Continue语句
//打印100-150之间的所有质数
outer:for(int i=100;i<150;i++) {
for(int j=2;j<i/2;j++) {
if(i%j==0) {
continue outer;
}
}
System.out.println(i);
}
方法的定义_形参_实参_返回值_语句块
方法:一段用来完成特定功能的代码片段,类似于其它语言的函数
通过对象调用普通方法
/**
* 测试方法的基本使用
* @author PengHao
*
*/
public class TestMethod {
public static void main(String[] args) {
//通过对象调用普通方法
TestMethod tm = new TestMethod();
tm.print();
int a = tm.add(30, 40, 50)+1000;
System.out.println(a);
}
void print() {
System.out.println("Hello,World");
}
int add(int a,int b,int c) {
int sum = a+b+c;
return sum;//return两个作用:1.结束方法的运行。2.返回值
}
}
方法的重载
重载的方法,实际是完全不同的方法,只是名称相同而已
只有返回值不同,不构成重载。
只有参数名称不同,不构成重载。
/**
* 测试方法重载
* @author PengHao
*
*/
public class TestOverload {
public static void main(String[] args) {
System.out.println(add(3,5));
System.out.println(add(3,5,10));
System.out.println(add(3.0,5));
System.out.println(add(3,5.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(int n1,double n2) {
double sum = n1 + n2;
return sum;
}
//方法名相同,参数顺序不同,构成重载
public static double add(double n1,int 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) {
int sum = n1 + n2;
return sum;
}
*/
}
递归
递归必须包括两部分:
- 定义递归头:什么时候不调用自身方法
- 递归体:什么时候需要调用自身方法
/**
* 测试递归
* @author PengHao
*
*/
public class TestRecursion01 {
public static void main(String[] args) {
System.out.printf("%d的阶乘是%s%n", 10,factorial(10));
}
/** 求阶乘的方法 */
static long factorial(int n) {
if(n==1) {
return 1;
}else {
return n*factorial(n-1);
}
}
}