比较运算符>逻辑运算符,"()"大于数学运算符。">
IT技术博客大学习 共学习 共进步

[Java基础教程]第七章-Java流程控制

孙豪杰的博客 2016-02-20 14:17:52 累计浏览 1,883 次

小明帮妈妈打酱油,临出门了妈妈就会说:"如果有瓶装的就买个瓶装的,否则就买一个袋装的。"这种场景在计算机中非常常见,一起来看下怎么用Java实现吧。

publicstaticvoidmain(String[] args) {
      booleanbottled = true;
      if(bottled) {
          System.out.println("打的瓶装酱油");
      } else{
          System.out.println("打的袋装酱油");
      }
  }  

上面实现的就是最常用的if,else语句的实现。
使用面向对象的方式,重构上述代码:

packagecom.sunhaojie.learntest.seventh;
/**
 * @ClassName Shop
 * @Description 售卖酱油的店铺
 *
 * @author sunhaojie 3113751575@qq.com
 * @date 2016年1月29日 上午11:00:10
 */
publicclassShop {
    /**
     * 瓶装酱油
     */
    privateintbottled = 1;
    /**
     * 袋装酱油
     */
    privateintbag = 2;
    publicvoidsell(inttype) {
        if(type == bottled) {
            System.out.println("销售一瓶酱油");
        } else{
            System.out.println("销售一袋酱油");
        }
    }
} 
 
publicstaticvoidmain(String[] args) {
    Shop shop = newShop();
    shop.sell(1);
 }

上面的代码新创建了一个Shop对象,并新增了一个sell方法,可以根据入参type销售不同类型的酱油。其中"type == bottled"是比较运算符,"=="两边的值相同返回true,否则返回false。
假如该店不仅只有瓶装和袋装两种类型,还包括纸袋装,自带瓶,等类型,上面的逻辑就被重构为:

publicvoidsell2(inttype) {
    if(type == bottled) {
        System.out.println("销售一瓶酱油");
    } elseif(type == bag) {
        System.out.println("销售一袋酱油");
    } elseif(type == paperBag) {
        System.out.println("销售一纸袋酱油");
    } else{
        System.out.println("销售一次无容器酱油");
    }
}

上面的代码看是不是比较累赘,并且不容易阅读,如果再加几种类型,有会增加一些if,else判断。Java对于这种场景有一个更好的支持:

 publicvoidswitchSell(inttype) {
        switch(type) {
        case1:
            System.out.println("销售一瓶酱油");
            break;
        case2:
            System.out.println("销售一袋酱油");
            break;
        case3:
            System.out.println("销售一纸袋酱油");
            break;
        case4:
            System.out.println("销售一次无容器酱油");
            break;
        default:
            System.out.println("没有这种类型");
            break;
        }
}

switch语句可以实现if else的效果,但是更优雅。其中注意点:每个case:后的语句执行了,如果没有"break;"语句,后面的所有case都会被执行,直到遇到"break;"或者代码结束。这种场景比较少见,大部分使用的是if else语句。

小明家是开饭店的,一次要买20袋酱油。程序实现,可以调用shop.sell(1);20次,但是这样太繁琐了,Java中有while和for两种方式支持循环。

publicstaticvoidmain(String[] args) {
    intcount = 0;
    Shop shop = newShop();
    while(count < 20) {
        shop.sell(1);
        count = count + 1;
    }
    for(inti = 0; i < 20; i++) {
        shop.sell(2);
    }
}

先看一个比较运算count < 20,左边的小于右边为true,否则为false;还有一些和小于"<"类似的,大于">",大于等于">=",小于等于"<="。

while语句,括号()中的语句为true,执行{}中的语句,直到()中的语句为false;
for语句,和while类似,但是代码更紧凑。语句" for (int i = 0; i < 20; i++)"中,"int i = 0"仅在首次执行,满足"i < 20;"执行{}中的语句,并且执行i++;for()内的语句分别对应了while的"int count = 0;",count < 20,count = count + 1;

小明要去买20袋酱油,每瓶10块钱,但是他只有100块钱,请问小明买到了多少酱油呢?代码如下:

publicstaticvoidmain(String[] args) {
       intcount = 0;
       intmoney = 100;
       Shop shop = newShop();
    
       while(count < 20) {
           if(money < 10) {
               break;
           }
           shop.sell(1);
           count++;
           money = money - 10;
       }
       count = 0;
       money = 100;
       while(count < 20&& money >= 10) {
           shop.sell(1);
           count++;
           money = money - 10;
       }
}

第一个while循环中有一个if判断,表示money<10的时候进入{},执行bread;语句,while循环结束。类似的有continue;语句,结束本次循环,while语句仍然可以继续执行。
第二个while循环中"count < 20 && money >= 10",出现了一个新的运算符,与"&&",这个符号的意思是&&左右两边分别为true时返回true,否则返回false。类似的运算符是"或||",||左右两边都为false时返回false,否则存在一个或者两个为true返回true。

目前一共介绍了3种运算符,数学运算符(+-*/%),比较运算符(<,>,<=,>=)和逻辑运算符(&&,||),基本能满足日常开发。当一起使用的时候优先级是:数学运算符>比较运算符>逻辑运算符,"()"大于数学运算符。
流程控制:分支流程if else,switch case,循环流程while和for,以及中断循环的语句break,和continue。

小练习:求打印输出5000以内的质数;
质数的定义:
质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。
根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2。

课程中的代码如下:

packagecom.sunhaojie.learntest.seventh;
/**
 * @ClassName DaJiangYou
 * @Description 实现打酱油程序
 *
 * @author sunhaojie 3113751575@qq.com
 * @date 2016年1月29日 上午10:52:01
 */
publicclassDaJiangYou {
    /**
     * @Title main
     * @Description 实现打酱油程序
     * @param args
     * @return void
     *
     * @author sunhaojie 3113751575@qq.com
     * @date 2016年1月29日 上午10:52:01
     */
    publicstaticvoidmain(String[] args) {
        booleanbottled = true;
        if(bottled) {
            System.out.println("打的瓶装酱油");
        } else{
            System.out.println("打的袋装酱油");
        }
    }
}
 
packagecom.sunhaojie.learntest.seventh;
/**
 * @ClassName Shop
 * @Description 售卖酱油的店铺
 *
 * @author sunhaojie 3113751575@qq.com
 * @date 2016年1月29日 上午11:00:10
 */
publicclassShop {
    /**
     * 瓶装酱油
     */
    privateintbottled = 1;
    /**
     * 袋装酱油
     */
    privateintbag = 2;
    /**
     * 纸袋酱油
     */
    privateintpaperBag = 3;
    /**
     * 没有容器
     */
    privateintnoContainer = 4;
    publicvoidsell(inttype) {
        if(type == bottled) {
            System.out.println("销售一瓶酱油");
        } else{
            System.out.println("销售一袋酱油");
        }
    }
    publicvoidsell2(inttype) {
        if(type == bottled) {
            System.out.println("销售一瓶酱油");
        } elseif(type == bag) {
            System.out.println("销售一袋酱油");
        } elseif(type == paperBag) {
            System.out.println("销售一纸袋酱油");
        } else{
            System.out.println("销售一次无容器酱油");
        }
    }
    publicvoidswitchSell(inttype) {
        switch(type) {
        case1:
            System.out.println("销售一瓶酱油");
            break;
        case2:
            System.out.println("销售一袋酱油");
            break;
        case3:
            System.out.println("销售一纸袋酱油");
            break;
        case4:
            System.out.println("销售一次无容器酱油");
            break;
        default:
            System.out.println("没有这种类型");
            break;
        }
    }
}
 
packagecom.sunhaojie.learntest.seventh;
/**
 * @ClassName DaJiangYou2
 * @Description 打酱油2
 *
 * @author sunhaojie 3113751575@qq.com
 * @date 2016年1月29日 上午11:04:22
 */
publicclassDaJiangYou2 {
    /**
     * @Title main
     * @Description 打酱油2
     * @param args
     * @return void
     *
     * @author sunhaojie 3113751575@qq.com
     * @date 2016年1月29日 上午11:04:22
     */
    publicstaticvoidmain(String[] args) {
        Shop shop = newShop();
        shop.sell(1);
        shop.sell2(3);
        shop.switchSell(4);
    }
}
 
packagecom.sunhaojie.learntest.seventh;
/**
 * @ClassName DaJiangYouWhile
 * @Description while循环打酱油
 *
 * @author sunhaojie 3113751575@qq.com
 * @date 2016年1月29日 下午2:38:45
 */
publicclassDaJiangYouWhile {
    /**
     * @Title main
     * @Description 循环打酱油20瓶子
     * @param args
     * @return void
     *
     * @author sunhaojie 3113751575@qq.com
     * @date 2016年1月29日 下午2:38:45
     */
    publicstaticvoidmain(String[] args) {
        intcount = 0;
        Shop shop = newShop();
        while(count < 20) {
            shop.sell(1);
            count = count + 1;
        }
        for(inti = 0; i < 20; i++) {
            shop.sell(2);
        }
    }
}
 
packagecom.sunhaojie.learntest.seventh;
/**
 * @ClassName UnionCompare
 * @Description 或和且运算
 *
 * @author sunhaojie 3113751575@qq.com
 * @date 2016年1月29日 下午3:39:29
 */
publicclassUnionCompare {
    /**
     * @Title main
     * @Description 或和且运算
     * @param args
     * @return void
     *
     * @author sunhaojie 3113751575@qq.com
     * @date 2016年1月29日 下午3:39:29
     */
    publicstaticvoidmain(String[] args) {
        intcount = 0;
        intmoney = 100;
        Shop shop = newShop();
        while(count < 20) {
            if(money < 10) {
                break;
            }
            shop.sell(1);
            count++;
            money = money - 10;
        }
        count = 0;
        money = 100;
        while(count < 20&& money >= 10) {
            shop.sell(1);
            count++;
            money = money - 10;
        }
    }
}

建议继续学习

  1. 使用线框图来简化你的产品设计流程 (累计阅读 3,926)
  2. 产品UI设计流程 (累计阅读 3,286)
  3. 研发流程中与其他岗位协作效率的提升 (累计阅读 2,946)
  4. 产品UED流程及交付物 (累计阅读 2,906)
  5. 也谈前端开发流程 (累计阅读 2,803)
  6. 线下项目工作流程(归纳篇) (累计阅读 2,804)
  7. 产品评审那点事 (累计阅读 2,603)
  8. 线下项目工作流程(分析篇) (累计阅读 2,585)
  9. 关注前端开发流程 (累计阅读 2,504)
  10. 说说产品开发到发布过程中的问题 (累计阅读 2,204)