随机数
Math类的使用
- java.lang包中的Math类提供了一些用于数学计算的方法。
- Math.random()该方法用于产生一个0到1区间的double类型的随机数,但是不包括1.就是[x,y)
package cn.xjion.pro02;
import java.util.Scanner;
/**
* 测试猜大小,随机数
* @author xjion
*
*/
public class TestRandom {
public static void main(String[] args) {
// 系统随机生成1-100的随机数
int a = (int)(Math.random()*100)+1;
// 获取控制台
Scanner sc = new Scanner(System.in);
// 打印提示语句
System.out.println("请猜测一个数字");
// 接收用户输入
int num = sc.nextInt();
// 定义一个i保存用户猜测次数
int i = 1;
// 循环判断用户输入是否不等于随机数,num = sc.nextInt(),i++实现重新输入,次数累加
for(i=1;num!=a;num = sc.nextInt(),i++){
// 小于就提示猜小了重新输入
if(num<a){
System.out.println("猜小了,请重新猜测");
// 大于就提示猜小了重新输入
}
if(num>a){
System.out.println("猜大了,请重新猜测");
}
}
// 判断是否相等,相等就判断次数并打印
if(num==a){
if(i<=5){
System.out.println("第"+i+"次就猜中了,去买彩票吧");
}
if(i>5&&i<=10){
System.out.println("第"+i+"次就猜中了,今天手气不错哦");
}
if(i>10){
System.out.println("第"+i+"次才猜中了,手气也太差了吧");
}
}
}
}
一、选择结构
控制语句分三类:顺序,选择,循环
if单选择结构
语法结构:
if(布尔表达式){
语句块
}
流程:
if语句对布尔表达式进行一次判定,若判定为真,则执行{}中的语句块,否则跳过该语句块。
实例:
package cn.xjion.pro02;
/**
* 测试if,猜骰子大小
* @author xjion
*
*/
public class TestIf {
public static void main(String[] args) {
// 使用Math类的random()函数来调用
// 定义三个筛子
int sieve1 = (int)(Math.random()*6)+1;
int sieve2 = (int)(Math.random()*6)+1;
int sieve3 = (int)(Math.random()*6)+1;
// 定义一个变量存储三个筛子的总和
int sieveSum = sieve1 + sieve2 + sieve3;
// 判断比较大小,对其打印结果
if (sieveSum<=6) {
System.out.println("筛子总和为:"+sieveSum+",小赢");
}
if (sieveSum>6&&sieveSum<12) {
System.out.println("筛子总和为:"+sieveSum+",中赢");
}
if (sieveSum>=12) {
System.out.println("筛子总和为:"+sieveSum+",大赢");
}
}
}
if else双选择结构
语法结构:
if(布尔表达式){
语句块1
}else{
语句块2
}
流程:
当布尔表达式为真时,执行语句块1,否则,执行语句块2。也就是else部分。
实例:
package cn.xjion.pro02;
/**
* 测试if else双选择结构
* @author xjion
*
*/
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("周长大于面积");
}
}
}
if else if else多选择结构
语法结构:
if(布尔表达式1) {
语句块1;
} else if(布尔表达式2) {
语句块2;
}……
else if(布尔表达式n){
语句块n;
} else {
语句块n+1;
}
流程:
当布尔表达式1为真时,执行语句块1;否则,判断布尔表达式2,当布尔表达式2为真时,执行语句块2;否则,继续判断布尔表达式3······;如果1~n个布尔表达式均判定为假时,则执行语句块n+1,也就是else部分。
实例:
package cn.xjion.pro02;
/**
* 测试多选择结构
* @author xjion
*
*/
public class TestIfElseIfElse {
public static void main(String[] args) {
// 产生一个随机年龄
int age = (int)(100*Math.random());
System.out.println("年龄是:"+age+"属于");
// 利用多选择结构来判断并打印
if(age<12) {
System.out.println("儿童,喜欢玩!");
}else if(age<18) {
System.out.println("青年,要学习!");
}else if(age<40) {
System.out.println("中年,要工作!");
}else if(age<65) {
System.out.println("中老年,要养生!");
}else if(age<85) {
System.out.println("老年,多运动!");
}else {
System.out.println("老寿星,古来稀!");
}
}
}
switch分支结构
语法结构:
switch (表达式) {
case 值1:
语句序列1;
[break];
case 值2:
语句序列2;
[break];
… … … … …
[default:
默认语句;]
}
流程:
switch语句会根据表达式的值从相匹配的case标签处开始执行,一直执行到break语句处或者是switch语句的末尾。如果表达式的值与任一case值不匹配,则进入default语句(如果存在default语句的情况)。
实例:
package cn.xjion.pro02;
/**
* 测试switch语句
* @author xjion
*
*/
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("辅音");
}
}
}
二、循环结构
循环结构分两大类:一类是当型,一类是直到型。
当型:
当布尔表达式条件为true时,反复执行某语句,当布尔表达式的值为false时才停止循环,比如:while与for循环。
直到型:
先执行某语句, 再判断布尔表达式,如果为true,再执行某语句,如此反复,直到布尔表达式条件为false时才停止循环,比如do-while循环。
while循环
语法结构
while (布尔表达式) {
循环体;
}
流程:
在循环刚开始时,会计算一次“布尔表达式”的值,若条件为真,执行循环体。而对于后来每一次额外的循环,都会在开始前重新计算一次。语句中应有使循环结束的语句,否则会出现无限循环–––"死"循环。
实例:
package cn.xjion.pro02;
/**
* 测试while循环,1到100累加和
* @author xjion
*
*/
public class TestWhile {
public static void main(String[] args) {
// 定义一个变量为0,一个累加和为0
int i = 0;
int sum = 0;
// while循环,当i小于等于100时就执行sum += i,i++,否则就跳出循环
while(i<=100){
sum += i;
i++;
}
// 打印和,5050
System.out.println(sum);
}
}
do-while循环
语法结构
do{
循环体
}
while (布尔表达式) ;
流程:
do-while循环结构会先执行循环体,然后再判断布尔表达式的值,若条件为真,执行循环体,当条件为假时结束循环。do-while循环的循环体至少执行一次。
实例:
package cn.xjion.pro02;
/**
* 测试do-while循环,1到100累加和
* @author xjion
*
*/
public class TestDoWhile {
public static void main(String[] args) {
// 定义一个变量为0,一个累加和为0
int i = 0;
int sum = 0;
// do while循环,当i小于等于100时就执行do的语句,否则就跳出循环
do{
sum += i;
i++;
}
while(i<=100);
// 打印和,5050
System.out.println(sum);
}
}
for循环
语法结构
for (初始表达式; 布尔表达式; 迭代因子) {
循环体;
}
流程:
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。for循环在第一次反复之前要进行初始化,即执行初始表达式;随后,对布尔表达式进行判定,若判定结果为true,则执行循环体,否则,终止循环;最后在每一次反复的时候,进行某种形式的“步进”,即执行迭代因子。
实例:
package cn.xjion.pro02;
/**
* 测试for循环,1到100累加和
* @author xjion
*
*/
public class TestFor {
public static void main(String[] args) {
// 定义一个累加和为0
int sum = 0;
// for循环,当i小于等于100执行语句块
for (int i = 0; i <= 100; i++) {
sum += i;
}
// 打印和,5050
System.out.println(sum);
}
}
逗号运算符
package cn.xjion.pro02;
/**
* 测试逗号for循环,1到100累加和
* @author xjion
*
*/
public class TestdhFor {
public static void main(String[] args) {
// 定义一个累加和为0
int sum = 0;
// for循环,当i小于等于100执行语句块
for (int i = 0; i <= 100; sum += i,i++) {
}
// 打印和,5050
System.out.println(sum);
}
}
嵌套循环
在一个循环语句内部再嵌套一个或多个循环,称为嵌套循环。while、do-while与for循环可以任意嵌套多层。
实例:
package cn.xjion.pro02;
/**
* 测试嵌套循环
* @author xjion
*
1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6 6
7 7 7 7 7 7 7 7 7
8 8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9 9
*/
public class TestNestLoop {
public static void main(String[] args) {
// 外层控制行
for (int i = 1; i < 10; i++) {
// 内层控制列
for (int j = 1; j < 10; j++) {
// print打印不换行的结果i,\t 制表符
System.out.print(i+"\t");
}
// 打印换行
System.out.println();
}
}
}
九九乘法表
package cn.xjion.pro02;
/**
* 测试九九乘法表
* @author xjion
*
*/
public class MultiplicationTable {
public static void main(String[] args) {
// 外层循环控制行
for (int i = 1; i < 10; i++) {
// 内层循环控制列,只打印j小于等于i的那一部分
for (int j = 1; j <= i; j++) {
// 打印
System.out.print(j+"*"+i+"="+j*i+"\t");
}
// 换行
System.out.println();
}
}
}
到这各位还可以试下单循环打印for循环,一个for。
package cn.xjion.pro02;
/**
* 测试九九乘法表
* @author xjion
*
*/
public class DMultiplicationTable {
public static void main(String[] args) {
// 循环当i=1时,j<10时的结果
for(int i=1,j=1;j<10;i++){
// 打印
System.out.print(i+"*"+j+"="+i*j+"\t");
// 判断i与j是否相等,就是乘法表的斜线
if(i==j){
// 相等时,i归0,j+1,换行
i=0;
j++;
System.out.println();
}
}
}
}
break语句和continue语句
break
在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。
package cn.xjion.pro02;
/**
* 测试break
* @author xjion
*
*/
public class TestBreak {
public static void main(String[] args) {
// 死循环
while(true){
// 产生随机数
int num = (int)(Math.random()*100)+1;
// 打印
System.out.println(num);
// 当num==88,break跳出循环
if(num == 88){
break;
}
}
}
}
continue
package cn.xjion.pro02;
/**
* 测试continue语句,打印100到150不能被3整除的数,每5个换一行
* @author xjion
*
*/
public class TestContinue {
public static void main(String[] args) {
// time记打印次数
int time = 0;
// 循环100-150
for (int i = 100; i <= 150; i++) {
// 如果i除以3余数为0就continue,跳过本次循环
if (i % 3 == 0) {
continue;
}
// 每打印一次time次数就+1
System.out.print(i+"\t");
time++;
// 如果次数除以5等于0,就换行
if (time % 5 == 0) {
System.out.println();
}
}
}
}
带标签的continue和break语句
类似于goto语句
package cn.xjion.pro02;
/**
* 测试带标签的continue和break语句
* @author xjion
*
*/
public class TestConBreak {
public static void main(String[] args) {
//打印100-150之间的所有质数
outer:for(int i=100;i<150;i++) {
for(int j=2;j<i/2;j++) {
// 当这个数为质数时跳转到outer
if(i%j==0) {
continue outer;
}
}
System.out.println(i);
}
}
}
三、方法
https://blog.youkuaiyun.com/weixin_44077840/article/details/89675968
这里面我有详细的介绍有关方法及方法重载的内容。直接点击查看就行了
https://blog.youkuaiyun.com/weixin_44077840/article/details/89681842
这里面我有详细的介绍有关递归的内容。直接点击查看就行了
本章节的内容就到这里了,如有不妥欢迎大佬指出!