Java基础2_流程控制
一.流程控制
(一)用户交互Scanner
基本语法:
Scanner scanner=new Scanner(System.in);
通过Scanner类的next()和nextLine()方法获取输入的字符串,在数去前我们一般需要使用hasNext()和hasNextLine()判断是否还有输入的数据
Scanner 对象
next():
- 一定要读取到有效字符后才可以结束输入;
- 对输入有效字符之前遇到的空白,next()方法会自动将其去掉;
- 只输入有效字符后才能将其后面输入的空白作为分隔符或者结束符;
- next()不能得到带有空格的字符串。
import java.util.Scanner; public class Demo01 { public static void main(String[] args) { //创建一个扫描对象,用于接收键盘数据 Scanner scanner=new Scanner(System.in); System.out.println("使用next方式接收:"); //判断用户有没有输入字符串 if (scanner.hasNext()){ String str=scanner.next(); System.out.println("输出的内容为:"+str); } //凡是属于io流的类,用完之后要关闭,不然会占用资源 scanner.close(); } }
nextLine():
- 以enter为结束符,也就是说,nextLine()方法返回的输入回车之前的搜友字符;
- 可以获得空白。
import java.util.Scanner; public class Demo02 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println("使用nextline方式接收:"); if (scanner.hasNextLine()){ String str=scanner.nextLine(); System.out.println("输出的内容为:"+str); } scanner.close(); } }
练习:
可以输入多个数字,并求其综合与平均数,每输入一个数字回车确认,通过输入非数字来结束程序;
import java.util.Scanner; public class Demo05 { public static void main(String[] args) { //我们可以输入多个数字,并求其综合与平均数,每输入一个数字回车确认,通过输入非数字来结束程序; Scanner scanner=new Scanner(System.in); //和 double sum =0; //计算输入了多少个数字 int m=0; System.out.println("请输入数字:");
//循环接收数据,求和 while (scanner.hasNextDouble()){ double x= scanner.nextDouble(); m =m+1; sum=sum+x; System.out.println("你当前输入了"+m+"个数据;当前数据的和为:"+sum); } System.out.println(m+"个数和为"+sum); System.out.println(m+"个数的平均值"+(sum/m)); scanner.close(); } }
(二) 顺序结构
Java的基本结构就是顺序结构,除非特别指明,否则就按照一句一句执行,顺序结构是最简单的算法结构。
(三)选择结构
- if单选择结构
语法: if (布尔表达式){//如果表达式为ture将执行的语句 }
public class IfDemo01 { public static void main(String[] args) { Scanner scanner =new Scanner(System.in); System.out.println("请输入内容:"); String s =scanner.nextLine(); //利用if判断输入的字符是否等于“hello” if (s.equals("hello")){ System.out.println(s); } System.out.println("end"); scanner.close(); } }
- if双选择结构
语法: if(布尔表达式){ //如果布尔表达式的值为ture }else{ //如果布尔表达式的值为false }
import java.util.Scanner; public class IfDemo02 { public static void main(String[] args) { //输入成绩大于60及格,小于60不及格 Scanner scanner=new Scanner(System.in); System.out.println("请输入考试成绩:"); int score=scanner.nextInt(); if (score>60){ System.out.println("及格"); }else { System.out.println("不及格"); } scanner.close(); } }
- if多选择结构
语法: if(布尔表达式1){ //如果布尔表达式1的值为ture执行代码 }else if(布尔表达式2){ //如果布尔表达式2的值为ture执行代码 }else if(布尔表达式3){ //如果布尔表达式3的值为ture执行代码 }else{ //如果布尔表达式的值都不为ture代码 }
import java.util.Scanner; public class IfDemo03 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); //利用if语句判断成绩的等级 System.out.println("请输入成绩:"); int score=scanner.nextInt(); if (score==100){ System.out.println("满分"); }else if (score>90&&score<100){ System.out.println("A级!"); }else if (score<90&&score>80){ System.out.println("B级"); }else if (score<80&&score>70){ System.out.println("C级"); } else if (score<70&&score>60){ System.out.println("D级"); }else if (score==60){ System.out.println("及格"); } else if (score>0&&score<60){ System.out.println("不及格"); }else { System.out.println("成绩不合法"); } scanner.close(); } }
- 嵌套的if结构
语法: if(布尔表达式1){ //如果布尔表达式1的值为ture执行代码 if(布尔表达式2){//如果布尔表达式2的值为ture执行代码 } }
import java.util.Scanner; public class IfDemo03 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println("请输入成绩:"); int score=scanner.nextInt(); if (score<100&&score>0){ if (score>=80){ System.out.println("优秀"); }else if (score>=60&&score<79){ System.out.println("及格"); }else { System.out.println("不及格"); } }else { System.out.println("请输入合法的成绩"); } scanner.close(); }
}
- switch多选择结构
import java.util.Scanner; public class SwitchDemo02 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println("请输入内容:"); String name=scanner.nextLine(); switch (name){ case "zheng": System.out.println("zheng"); break; case "juan": System.out.println("juan"); break; default: System.out.println("未匹配到"); } } }
(四)循环结构
while循环
while(布尔表达式){ //循环内容 }
- 只要布尔表达式为ture,循环就一直执行下去。
- 我们大多数情况是会让循环停止下来的,我们需要一个表达式失效的方式来结束循环。
- 少数部分情况需要循环一直执行下去,比如服务器的请求监听等。
- 循环条件一直为徒惹就会造成无限循环,我们正常的业务变成中应该尽量避免死循环,会影响程序性能或者造成程序卡死崩溃。
public class WhileDemo02 { public static void main(String[] args) { int i=0; int sum=0; while (i<=100){ sum=sum+i; i++; } System.out.println(sum); } }
do while循环
do{ //代码语句 }while(布尔式表达);
public class DoWhileDemo01 { public static void main(String[] args) { int i=0; while (i<0){ System.out.println(i); i++; } System.out.println("===================="); do { System.out.println(i); }while (i<0); } }
for循环
for循环语句是支持迭代的一种通用结构,是最有效,最灵活的循环结构 语法: for(初始化;布尔值表达式;更新{ //代码语句 }
//九九乘法表 public class ForDemo04 { public static void main(String[] args) { for (int j =1; j <= 9; j++) { for (int i = 1; i <=j; i++) { System.out.print(j+"*"+i+"="+(j*i)+"\t"); } System.out.println(); } } }
//1000以内除以5为整数,每行3个 public class ForDemo03 { public static void main(String[] args) { for (int i = 0; i <=1000; i++) { if (i%5==0){ System.out.print(i+"\t"); } if (i%(5*3)==0){ System.out.println(); //System.out.println("\n"); } } //println 输出后会换行 //print输出后不会换行 } }
(五)break&continue
break:在任何循环语句的主体部分,均可用break控制循环的流程,用于强制退出循环不执行剩余的循环流程。
public class DreakDemo01 { public static void main(String[] args) { int i=0; while (i<100){ i++; System.out.println(i); if (i==30){ break; } } System.out.println(" -----------------"); } }
contiune: 在循环语句的主体中,用于终止某次循环,跳过未执行的流程,继续执行新的循环。
public class DreakDemo01 { public static void main(String[] args) { int i=0; while (i<100){ i++; if (i%10==0){ System.out.println(); continue; } System.out.print(i+"\t"); } } }
练习:打印一个三角形
public class TestDemo01 { public static void main(String[] args) { for (int i = 1; i <= 5; i++) { for (int j = 5; j >=i; j--) { System.out.print(" "); } for (int j = 1; j <=i; j++) { System.out.print("*"); } for(int j=1;j<i;j++){ System.out.print("*"); } System.out.println(); } } }