今日重点 循环结构
一.循环
重复做多次相同或有规律的事情
1.while循环--先判断后执行
1.语法结构
while(布尔表达式){
循环体;
}
循环流程:布尔表达式的值有两个,一个是真,一个是假,为真的时候进入循环,循环体执行之后再次判断布尔表达式,若布尔表达式不成立,跳出循环.
package com.bjsxt;
public class Test01 {
public static void main(String[] args) {
int i=1;//初始化一个变量
while(i<=20){//设置循环条件
System.out.println("hello world"+i);//循环体
i++;//循环体
}
}
}
2.死循环
//布尔表达式里面的值一直为true,就一直执行
while(true){
}
3.小节实战案例
//求1~100的和
package com.bjsxt;
public class Test03 {
public static void main(String[] args) {
int i=1;
int sum=0;
while(i<=100){
sum+=i;
i++;
}
System.out.println(sum);
}
}
推荐代码运行完之后使用debug跑一下,代码流程更加清晰!
2.do while
1.do while循环--先执行一次,再判断
语法:
do{
循环体;//先走这里
}while(布尔表达式);
2.总结:while与do-while的区别
- while循环先判断再循环,循环体可能一次也没执行,也可能执行了多次。
- do-while循环先执行再判断,循环体至少执行一次
- 两种循环效率上没有差别
3.小节实战案例
//分支语句用switch
package com.bjsxt;
import java.util.Scanner;
public class Test05 {
public static void main(String[] args) {
String name="";
double price=0.0;
System.out.println("欢迎使用建议超市管理系统");
System.out.println();
Scanner sc=new Scanner(System.in);
do{
System.out.println("请选择您的操作");
System.out.println("1.录入商品");
System.out.println("2.查看商品");
int num=sc.nextInt();
switch(num){
case 1:
System.out.println("请输入商品名称");
name=sc.next();
System.out.println("请输入商品的价格");
price=sc.nextDouble();
case 2:
System.out.println("商品名称:"+name+"价格"+price);
break;
}
}while(true);
}
}
//分支语句用if else
package com.bjsxt;
import java.util.Scanner;
public class Test06 {
public static void main(String[] args) {
System.out.println("欢迎使用简易超市管理系统");
System.out.println();
String name="";
double price=0.0;
do{
System.out.println("请选择你的操作");
System.out.println("1.录入商品");
System.out.println("2.查看商品");
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
if(num==1){
System.out.println("请输入商品名称");
name=sc.next();
System.out.println("请输入商品的价格");
price=sc.nextDouble();
}else if(num==2){
System.out.println("商品名称:"+name+"价格"+price);
}else{
System.out.println("请输入有效编号");
}
}while(true);
}
}
3.for循环
1.语法结构
for(初始表达式(变量初始化);布尔表达式(循环的判断条件);迭代因子(循环的迭代条件)){
循环体;}
快捷键:fori自动生成for循环
2.小结
package com.bjsxt;
public class Test07 {
public static void main(String[] args) {
for(int i=0;i<=20;i++){
System.out.println("hello world"+i);
}
}
}
3.break return continue
☞ break:结束当前正在执行的循环 ☞ return:结束当前正在执行的方法 ☞ continue:跳出某次循环
4.练习
package com.bjsxt;
//从键盘录入10个整数,统计有多少个奇数
import java.util.Scanner;
public class Test08 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int count=0;
for(int i=0;i<10;i++){
System.out.println("请输入第"+(i+1)+"个整数");
int a=sc.nextInt();
if(a%2==1){
System.out.println("奇数"+a);
count++;
}
}
System.out.println("一共有"+count+"个奇数");
}
}
package com.bjsxt;
//从键盘录入10整数,如果录入了一个0,则提前停止录入,统计已经录入了多少个奇数
import java.util.Scanner;
public class Test09 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int count=0;
for(int i=0;i<10;i++){
System.out.println("请输入第"+(i+1)+"个数");
int a=sc.nextInt();
if(a==0){
System.out.println("输入的数为0,循环结束");
break;
}
if(a%2!=0){
System.out.println("奇数"+a);
count++;
}
}
System.out.println("一共有"+count+"个奇数");
}
}
package com.bjsxt;
//1+2+3....+100,当和超过3000时退出循环(break), 同时输出加到了第多少位
public class Test10 {
public static void main(String[] args) {
int sum=0;
for(int i=0;i<=100;i++){
sum+=i;
if(sum>3000){
System.out.println("此时的和>3000,为第"+i+"位");
break;
}
}
System.out.println(sum);
}
}
package com.bjsxt;
//使用continue实现输出1--100直接能被5整除的数
public class Test11 {
public static void main(String[] args) {
for(int i=0;i<=100;i++){
if(i%5!=0){
continue;
}
System.out.println(i);
}
}
}
5.多重循环
外层循环一次,内层循环一轮
6.练习
package com.bjsxt;
//打印9*9
public class Test12 {
public static void main(String[] args) {
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+(j*i)+" ");
}
System.out.println();
}
}
}
package com.bjsxt;
public class Test13 {
public static void main(String[] args) {
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
System.out.print(i+"*"+j+"="+(i*j)+"\t");
}
System.out.println();
}
}
}
package com.bjsxt;
public class Test14 {
public static void main(String[] args) {
for(int i=1;i<=9;i++){
for(int j=i;j<=9;j++){
System.out.print(i+"*"+j+"="+(i*j)+"\t");
}
System.out.println();
}
}
}
7.标记
标记的用法:通过内层循环去结束外层循环
public static void main(String[] args) {
o:for (int i = 1; i <= 9; i++) {
for (int j = 1; j <=i ; j++) {
if(i ==5){
break o;
//continue o;
}
System.out.print(j+"*"+i+"="+i*j+"\t");
}
System.out.println();
}
System.out.println("执行结束");
}