循环结构
循环类型
- while循环
语法:
int i=1;//循环的变量初始化
while(条件表达式){//条件i<=10
循环体语句;//输出语句i
//改变循环变量的值
i++;//++i
}
执行流程: 1)判断条件表达式的值,如果为true则执行循环体语句
2)改变循环变量的值,再次判断条件表达式的值,如果为true则执行循环体语句
改变循环变量的值,再次判断条件表达式的值,如果为true则执行循环体语句 …
3)直到某个时刻,改变循环变量的值之后,条件表达式的值为false则退出循环体语句 **-
do-while循环**
语法:
do
{
循环体语句;
}while(条件表达式);
执行流程: 1)先执行语句块一次
2)再计算条件表达式的值,如果为true,再次执行循环体语句,如此循环往复,直到条件表达式的值为false时,退出循环
- for循环
语法:
for(表达式1;表达式2;表达式3){
循环体语句4;
}
表达式1:循环变量的初始化 例如int i=1;
表达式2:条件表达式 i<=100
表达式3:改变循环变量的值
执行流程: 先1–>2—>4—>3—>2—>4…
直到某个时刻,3执行完毕时,表达式2的值为false,则退出for循环
三种循环的区别:
do-while至少会执行一次循环体
for和while只有在条件成立上才会去执行循环体
for和while的区别:控制条件语句中所控制的那个循环变量在for循环之后,就不被访问了,而while结束后,继续使用
关键字break和continue:
1.break的使用场景:
在选择结构 switch语句中
在循环语句中
离开使用场景的存在是没有意义的,不能单独使用
break作用:
循环中:跳出单层循环(当前所在循环)
2.continue:只能用在循环语句中
离开使用场景的存在是没有意义的
continue的作用:结束本次循环,进入循环的下一次
随机数的产生:
和前面Scanner一样,要先import一个包——import java.util.Random;
再创建一下——Random rd = new Random(); 称为将类实例化
int identifyCode = rd.nextInt(10); 定义了一个 identifyCode,并且产生一个0到9的随机数;
如果要产生1-10的随机数则再其后面加1
例:
计算n!,要求n从键盘输入。
public class Result{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你想要求阶乘的整数");
int num = sc.nextInt();
int result =1;
//利用了for循环
for(int i=1;i<=num;i++)
{
result*=i;
}
System.out.println("最后的结果为"+result);
}
}
例:
打印如下图形:要求行数从键盘录入(并做相关的条件约束)
*********
*******
*****
***
*
***
*****
*******
*********
程序最后:询问用户是否继续的情况
用了for循环和do - while循环
public class Triangle{
public static void main(String[] args) {
boolean flag1;
Scanner sc = new Scanner(System.in);
//利用do循环是为了确保一定可以先执行一次
do{
System.out.println("请输入你想要的行数");
int line = sc.nextInt();
//输出上面的倒三角形
System.out.println("行数为奇数时的图形如下:");
for(int i=0;i<(line+1)/2;i++){
//上行数可直接除以2,取整
for(int j=0;j<i;j++){
//空格与行数的关系是少一
System.out.print(" ");
}
for(int k=line-2*i;k>0;k--){
//*号跟总行数的关系是两倍两倍的少
System.out.print("*");
}
System.out.println();
}
//输出下面的正三角形
for(int i=0;i<(line-1)/2;i++){
//下三角一共(line-1)/2行
for(int j=0;j<(line-1)/2-i-1;j++)
//下三角的空格数是下面的行数-i;{
System.out.print(" ");
}
for(int k=0;k<2*i+3;k++) //每一行的*是比两倍的行数加3
{
System.out.print("*");
}
}
System.out.println();
System.out.println("请输入你是否想继续:Y||N");
String str1 = sc.next();
flag1 = str1.equals("Y");
}while(flag1); //利用了do while来确定是否还要继续,继续则再次循环
System.out.println("不进行继续,则退出");
}
}
例:
模拟购物流程
这里用了do - while循环,还有switch进行选择
import java.util.Scanner; //导入包
public class Shopping{
public static void main(String[] args) {
//确定继续购买商品的
boolean flag;
//用来计算每一次的总计
double sum = 0.0;
Scanner sc = new Scanner(System.in);
//打印菜单
System.out.println("****************************");
System.out.println("请选择购买的商品的编号:");
System.out.println("1.T恤 2.网球鞋 3.网球拍");
System.out.println("****************************");
System.out.println();
System.out.println("商品价格:");
System.out.println("T恤:450.0 网球鞋:570.0 网球拍:360.0");
//进行一个do while的循环,首先执行一次购买过程
do{
System.out.println("请输入商品编号:");
int id = sc.nextInt();
//定义字符串时,要给它进行初始化
String things = null;
//定义双精度时,也要进行初始化;
double price =0.0;
double tshirtPrice = 450.0;
double shoesPrice = 570.0;
double racketPrice = 360.0;
//进行选择买哪件商品
switch(id){
case 1:
things = "T恤";
price = 450.0;
break;
case 2:
things = "网球鞋";
price = 570.0;
break;
case 3:
things = "网球拍";
price = 360.0;
break;
default:
System.out.println("选择序号有误,请重新选择");
break;
}
System.out.println("请输入购买数量:");
int number = sc.nextInt();
System.out.println(things+":¥"+price+"\t数量"
+number+"\t合计:¥"+(number*price));
//此处用来叠加最后的价格,sum定义在循环外,则一直有新值覆盖
sum += number*price;
System.out.print("是否继续:Y/n\t");
String str = sc.next();
//字符串的比较
flag = str.equals("Y");
}while(flag); //循环语句的条件
System.out.println(); //打印一个换行
//通过键盘接受要打的折扣
System.out.println("折扣:");
double discount = sc.nextDouble();
System.out.println("应付金额"+sum*discount);
System.out.println("实付金额:");
double realMoney = sc.nextDouble();
System.out.println("找钱:"+(realMoney-sum*discount));
}
}
```
循环结构就酱紫?
还没有评论,来说两句吧...