Java流程控制

7 篇文章 0 订阅

1.用户交互Scanner

Scanner对象:Java.util.Scanner是Java5的新特性,我们可以通过Scanner类来获取用户的输入。

基本语法:

 Scanner s=new Scanner(System.in);

通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。

 //next()
 //创建一个扫描器对象,用于接收键盘数据 
 Scanner sc=new Scanner(System.in);
 System.out.println("使用next方法接收:");
 //判断用户有没有输入字符串
 if(sc.hasNext()){
     //使用next方式接收
     String str=sc.next();
     System.out.println("输出的内容为:" + str);
 }
 //凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉
 sc.close();
  • next():

1、一定要读取到有效字符后才可以结束输入。

2、对输入有效字符之前遇到的空白,next()方法会自动将其去掉。

3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。

4、next()不能得到带空格的字符串。

 //nextLine()
 //从键盘接收数据
 Scanner scanner = new Scanner(System.in);
 System.out.println("请输入nextLine的内容:");
 //判断是否还有输入
 if(scanner.hasNextLine()){
     String s = scanner.nextLine();
     System.out.println("输出的内容是:" + s);
 }
 //关闭流
 scanner.close();
  • nextLine():

1、以Enter为结束符,nextLine()方法返回的是输入回车之前的所有字符。

2、可以获得空白。

Scanner有很多方法,例如nextInt(),next(),nextDouble(),nextLine(),nextBigDecimal()等,可以自行打开Scanner类查看。

练习:输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果。

 //我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果;
 Scanner scanner = new Scanner(System.in);
 ​
 //先初始化 个数,总和,平均数
 int quantity=0;
 double sum=0;
 double average=0;
 System.out.println("请输入你要计算的数字:");
 //用循环计算每次的结果
 while (scanner.hasNextDouble()){
     double num=scanner.nextDouble();
     sum=sum+num;
     quantity=quantity+1;
     average=sum/quantity;
     System.out.println("第"+quantity+"个数字为:" +num );
     System.out.println("总和为:" + sum);
     System.out.println("平均数为:" + average);
 }
 System.out.println("总共输入了" + quantity + "个数字,总和为:" + sum+",平均数为"+average);
 System.out.println("程序结束");
 //关闭流
 scanner.close();

2.顺序结构

Java的基本结构就是顺序结构,除非特别指明,否则就是按照顺序从上到下执行。

顺序结构就是最简单的算法结构,任何一个算法都离不开这种基本算法结构。

 public static void main(String[] args) {
     System.out.println("111");
     System.out.println("333");
     System.out.println("444");
     System.out.println("666");
     System.out.println("222");
 ​
 }

3.选择结构

1.if单选择结构

条件为true时,才会执行大括号中的内容,条件为false则不执行。

语法:

if (条件表达式) {

//条件为true时执行

}

 public static void main(String[] args) {
     Scanner scanner = new Scanner(System.in);
     System.out.println("请输入内容:");
     String s = scanner.nextLine();
     //equals:判断字符串是否相等
     if(s.equals("Hello")){
         System.out.println(s);
     }
     System.out.println("结束");
     //关闭流
     scanner.close();
 }

2.if双选择结构

语法:

if(条件表达式){

//条件为true时执行

}else{

//条件为false时执行

}

 //考试成绩大于60分就是及格,小于60分就是不及格
 Scanner scanner = new Scanner(System.in);
 System.out.println("请输入成绩:");
 double score=scanner.nextDouble();
 if(score>60){
     System.out.println("及格");
 } else {
     System.out.println("不及格");
 }
 ​
 scanner.close();

3.if多选择结构

语法:

if(条件表达式1){

//条件1为true时执行

} else if(条件2){

//条件2为true时执行

}else if(条件3){

//条件3为true时执行

}else{

//以上条件为false时执行

}

 //考试成绩大于60分就是及格,小于60分就是不及格
 Scanner scanner = new Scanner(System.in);
 ​
 System.out.println("请输入成绩:");
 double score=scanner.nextDouble();
 if(score==100){
     System.out.println("满分");
 } else if (score>=90 && score <100) {
     System.out.println("优秀");
 } else if (score>=75 && score <90) {
     System.out.println("良好");
 } else if (score>=60 && score <75) {
     System.out.println("中等");
 } else if (score>=0 && score <60) {
     System.out.println("不及格");
 } else {
     System.out.println("成绩不合法");
 }
 ​
 scanner.close();

4.嵌套if结构

语法:

if(条件表达式1){

//条件1为true时执行

if(条件表达式2){

//条件2为true时执行

}

}

5.switch多选择结构

switch case语句判断一个变量与一系列值中某个值是否相等,每个值成为一个分支。

语法:

 switch("表达式"){
     case "value1":
         //语句
         break;//可选
     case "value2":
         //语句
         break;//可选
          ....
         default://可选
         //语句
 }
  • switch语句中的变量类型可以是:

    • byte、short、int或者char

    • 从Jdk 7开始switch支持字符串String类型了

    • 同时case标签必须为字符串常量或者字面量

如果case分支后没有用break,就会造成case穿透;会一直输出下方分支的语句,遇到break才会停止。

 //case 穿透 //switch 匹配一个具体的值
         char grade='c';
 ​
         switch (grade){
             case 'a':
                 System.out.println("优秀");
                 break;//可选
             case 'b':
                 System.out.println("良好");
                 break;
             case 'c':
                 System.out.println("中等");
                 break;//可选
             case 'd':
                 System.out.println("及格");
                 break;//可选
             case 'e':
                 System.out.println("挂科");
                 break;//可选
             default://可选
                 System.out.println("未知等级");
         }

//字符的本质还是数字,case 的value值是字符串时,本质存的是对应的hashCode值。

反编译 Java---class(字节码)文件----反编译(IDEA)

4.循环结构

1.while循环

只要表达式为true,循环就会一直执行。

语法:

while(布尔表达式){

//循环体

控制变量

}

 //计算1+2+3....+100=?
 int i=0;
 int sum=0;
 while(i<100){
     i++;
     sum=sum+i;
 }
 System.out.println(sum);

我们大多数情况会让循环停止下来,所以需要一个控制变量让表达式失效去结束循环。

少数情况需要循环一直执行,比如服务器的请求响应监听等。

循环条件一直为true时会造成死循环,会影响程序性能或者造成程序卡死崩溃!要尽量避免死循环!!

2.do...while循环

do...while循环无论条件是否满足,至少会执行一次循环。

while循环先判断后执行,do...while循环先执行后判断!

语法:

do{

//循环体

控制变量

}while(布尔表达式);

 //计算1+2+3....+100=?
 int i=0;
 int sum=0;
 do{
     i++;
     sum=sum+i;
 }while(i<100);
 System.out.println(sum);

3.for循环

for循环是支持迭代的一种通用结构,是最有效、最灵活的循环结构。

for循环的执行次数是在执行前就确定的。

语法:

for(初始化;循环条件;循环后操作){

//循环体

}

 //初始化   条件判断    迭代
 for (int i=1;i<=100;i++){
     System.out.println(i);
 }

注意:

最先执行初始化步骤,可以声明一种类型,但可以初始化一个或者多个循环控制变量,也可以是空语句。

然后检测循环条件,如果为true循环体就执行;如果为false循环就终止,开始执行循环体后面的语句。

执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减);再次检测循环条件,执行循环体。

练习:分别计算0到100之间的奇数和偶数的和

 //分别计算0到100之间的奇数和偶数的和
 int oddSum=0;
 int evenSum=0;
 ​
 for(int i=0;i<=100;i++){
     if(i%2==0){//偶数,能被2整除
         evenSum+=i;
     }else{//奇数
         oddSum+=i;
     }
 }
 System.out.println("奇数之和为:"+oddSum);
 System.out.println("偶数之和为:"+evenSum);

三种死循环写法:

 //while死循环
 while(true){
     //循环体;
 }
 ​
 //do...while死循环
 do{
     //循环体;
 }while(true);
 ​
 //for死循环
 for(;;){
     //循环体;
 }

4.增强for循环(java 5中引入的)

语法:

for(类型 变量名 :数组/集合名){

//循环体

}

 int[] nums={10,20,30,49,50};//定义了一个数组
 //遍历数组的元素
 for(int x:nums){
     System.out.println(x);
 }
 ​

5.break&continue

  • break

break在任何循环语句的主体部分 都可以用break控制循环的流程。

break用于强行退出循环,不执行循环中剩余的语句。(break也在switch语句中使用)

 int i=0;
 while(i<100){
     i++;
     System.out.println(i);
     if(i==30){
         break;//终止循环
     }
 }
 System.out.println(66);
  • continue

continue语句用在循环语句中,用于终止某次循环,即跳过循环体中未执行的语句,接着进行下一次循环。

 int i=0;
 while(i<100){
     i++;
     if(i%6==0){
         System.out.println("6的倍数不输出");
         continue;//跳出当前循环,继续下一次循环
     }
     System.out.println(i);
 }
  • goto关键字

goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的保留字,但是并未在语言中得到正式使用;Java没有goto。然后在break和continue这两个关键字上,可以看出一些goto的影子——就像带标签的break和continue。

”标签“是指后面跟一个冒号的标识符,例如:label:

对于Java来说唯一用到标签的地方是在循环语句之前。在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue通常只能中断当前循环,但若随同标签使用,他们就会中断到存在标签的地方。

 //打印101-150之前所有的质数  不建议使用!!!!!!!!!
         //质数是指在大于1的自然数中,除了1和它本身之外没有其他因数的自然数。
         int count=0;
         outer:for (int i = 101; i <150 ; i++) {
             for (int j = 2; j <i/2 ; j++) {
                 if(i%j==0){
                     continue outer;
                 }
             }
             System.out.print(i+"\t");
         }

6.练习

输出一个三角形

 //打印一个三角形
         for (int i = 1; i < 8; i++) {//外层循环控制行
             //内层循环控制列
             for (int j = 1; j <=8-i; j++) {//填充左边空白格
                 System.out.print(" ");
             }
             for (int k = 1; k <=i ; k++) {//三角形左半边
                 System.out.print("a");
             }
             for (int n = 1; n <i; n++) {//三角形右半边
                 System.out.print("a");
             }
             //换行
             System.out.println("");
         }
  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值