JavaSE入门篇:程序结构

程序的结构一般分为三种:

  1. 顺序结构。
  2. 选择结构。
  3. 循环结构。

一、顺序结构:这个不用多说吧,跟我们平时写文章的顺序一样,从上往下。

二、选择结构:从名字就能看出,要选择嘛,到底是要漂亮滴妹子,还是要有钱滴妹子呢!当然,如果是个吊丝码农滴话,那你就不要多想了,还是老老实实码代码吧···

三、循环结构:循环啊,就是一直转啊转啊转啊,转到出意外为止。

接下来还是老规矩,通过小示例来学习语法吧。

顺序结构:

一、输入姓名和年龄,输出自我介绍。

public static void main(String[] args) {
       //创建输入数据的对象,具体什么叫对象···,先不用管吧
       Scanner input = new Scanner(System.in);
       
       String name;    //姓名
       int age;        //年龄
       System.out.print("请输入姓名:");
       name = input.next();
       System.out.print("请输入年龄:");
       age = input.nextInt();
       
       System.out.println("大家好,我叫"+name+",今年"+age+"岁,请多关照。");
   }

注意:

这就是一个标准的顺序结构,代码会从上往下执行,如果你把int age;这句话放到最后,那就会在age = input.nextInt();这一行报语法错误了。

结果:

选择结构:

选择结构的语法有四种,我们通过下面的案例来了解。

一、输入你的存款,如果大于5000则加上“壕”的头衔。

public static void main(String[] args) {
       //创建输入数据的对象,具体什么叫对象···,先不用管吧
       Scanner input = new Scanner(System.in);
       
       String name;    //姓名
       int deposit;    //存款
       System.out.print("请输入姓名:");
       name = input.next();
       System.out.print("请输入存款:");
       deposit = input.nextInt();
       
       System.out.print("大家好,我叫"+name);
       if(deposit>5000){
           System.out.print("(壕)");
       }
       System.out.println("。");
   }

语法:

if( 条件 ){ 要执行的代码 }

注意:

条件成立时会执行{}中的所有代码。

结果:

二、输入你的存款,如果大于5000则加上“壕”的头衔,否则加上“穷13”的头衔。

if(deposit>5000){
           System.out.print("(壕)");
       }
       else{
           System.out.print("(穷13)");
       }

注意:别的代码不用动,只需要在if(){}结构上加上else{}就OK了,else{}表示条件不成立时的执行代码。

结果:

三、输入你的存款,如果大于50000,则加上“神壕”的头衔,否则如果大于30000,则加上“金壕”的头衔,否则如果大于10000,则加上“壕”的头衔,否则加上“穷13”的头衔。

if(deposit>50000){
           System.out.print("(神壕)");
       }
       else if(deposit>30000){
           System.out.print("(金壕)");
       }
       else if(deposit>10000){
           System.out.print("(壕)");
       }
       else{
           System.out.print("(穷13)");
       }

注意:这种语法叫多分支选择结构(一般用于选择情况大于2的场合,比如演唱会门票的级别、你的女神的胸肌是A还是BCDEF等)。

结果就不展示了。

四、查询余额请按1,套餐更改请按2,宽带业务请按3,企业业务请按4,人工服务请按5,其它业务请瞎按。

public static void main(String[] args) {
       //创建输入数据的对象,具体什么叫对象···,先不用管吧
       Scanner input = new Scanner(System.in);
       int num;
       System.out.print("1.查询余额请按1,"
               + "\n2.套餐更改请按2"
               + "\n3.宽带业务请按3"
               + "\n4.企业业务请按4"
               + "\n5.人工服务请按5"
               + "\n6.其它业务请瞎按"
               + "\n请选择:");
       num = input.nextInt();
       
       switch (num) {
       case 1:
           System.out.println("您的余额为0。");    break;
       case 2:
           System.out.println("改完了,请回吧。");    break;
       case 3:
           System.out.println("宽带装好了,请交钱1998¥。");    break;
       case 4:
           System.out.println("请上传企业注册资料。");    break;
       case 5:
           System.out.println("我们正在招聘服务人员,请稍等...");    break;

       default:
           System.out.println("乱按好玩吧...");    break;
       }
   }

注意:

  1. switch语法一般用于数值类型和布尔类型等值判断的场合,最新版的JDK支持String类型了。小伙伴们可以自己试试。
  2. 每个case后的语句执行完后都有个小尾巴(break;),表示从这儿退出switch结构,大家可以把这个小尾巴去掉看看结果有什么不一样。

结果:

循环结构:

循环结构常用的有四种:while、do...while、for、foreach(后面讲集合时再介绍)。

对应的语法都很简单,我们通过求100以内的奇数和来了解一下,后面再来分析一个经典案例。

public static void main(String[] args) {
       //求100以内的奇数和
       
       //1.while循环
       int i = 1;    //循环的初值
       int s = 0;    //保存和
       while (i<=100) {    //循环的条件
           s += i; //循环的内容
           i += 2;    //循环的步长(也就是循环变量的值如何变化)
       }
       System.out.println("while循环结果:"+s);
       
       //变量值还原
       i = 1;
       s = 0;
       //2.do...while循环
       do {
           s += i;
           i += 2;
       } while (i<=100);
       System.out.println("do...while循环结果:"+s);
       
       //变量值还原
       s = 0;
       //3.for循环
       for (i = 1; i <= 100; i+=2) {
           s += i;
       }
       System.out.println("for循环结果:"+s);
   }

执行结果:

从上面的语法应该可以看出,循环主要有四个点:初值、条件、步长、循环体(内容)。那么这三种循环的语法有什么区别呢?

while循环:侧重于不确定循环次数的场合,先判断,如果条件成立则进入循环。

do...while循环:侧重于不确定循环次数的场合,先执行一次,之后如果条件成立则时入循环。

for循环:侧重于确定循环次数的场合。

与循环配合使用的还有两个关键字:continue和break;

他们的作用,看代码和结果吧:

public static void main(String[] args) {
       for (int i = 0; i < 10; i++) {
           if(i==5){
               continue;
           }
           System.out.print(i+",");
       }
       System.out.println("\n=======================");
       for (int i = 0; i < 10; i++) {
           if(i==5){
               break;
           }
           System.out.print(i+",");
       }
   }

结果:

注意到两个的区别了吧

运行continue后,就不再执行循环里面continue后面的代码,直接运行i++去了。

而运行break后,则直接跳出了循环,后面的都不执行了。

经典案例:登录功能,如果账号密码输入正确则登录成功,否则请再次输入密码。

分析:

登录时要输入几次账号密码?很明显不知道啊!!!所以for循环被排除了。

然后再判断,是要先输入账号密码后判断,还是先判断后再输入账号密码呢?

这也很明显,要先输入了才需要判断啊!!!所以while循环也被排除了。

最后就剩下do...while循环了。代码如下:

public static void main(String[] args) {
       //模拟登录功能
       //分析过程:
       //1.定义保存账号和密码的变量
       Scanner input = new Scanner(System.in);
       String inLoginID;
       String inLoginPWD;
       //2.因为还没学习数据库,所以定义两个变量保存正确的账号和密码
       String loginID = "liergou";
       String loginPWD = "haha250";
       //3.输入账号和密码
       do{
           System.out.print("请输入账号:");
           inLoginID = input.next();
           System.out.print("请输入密码:");
           inLoginPWD = input.next();
           //4.判断输入的账号和密码与正确的是否相同(判断字符串是否相等使用equals方法),
           //如果相同等提示登录成功,循环结束,否则提示重新输入
           if(inLoginID.equals(loginID) && inLoginPWD.equals(loginPWD)){
               System.out.println("登录成功!");
               break;
           }
           else{
               System.out.println("账号和密码不匹配,请重新输入!");
           }
       }while (true);
   }

如果你非要使用while和for,那··············当然也是可以滴,只不过代码复杂度会上升,特别是使用for来写的话会很奇怪,大伙可以看看:

这是使用while的写法

public static void main(String[] args) {
       //模拟登录功能
       //分析过程:
       //1.定义保存账号和密码的变量
       Scanner input = new Scanner(System.in);
       String inLoginID;
       String inLoginPWD;
       //2.因为还没学习数据库,所以定义两个变量保存正确的账号和密码
       String loginID = "liergou";
       String loginPWD = "haha250";
       //3.输入账号和密码
       System.out.print("请输入账号:");
       inLoginID = input.next();
       System.out.print("请输入密码:");
       inLoginPWD = input.next();
           
       while (true){
           //4.判断输入的账号和密码与正确的是否相同(判断字符串是否相等使用equals方法),
           //  如果相同等提示登录成功,循环结束,否则提示重新输入
           if(inLoginID.equals(loginID) && inLoginPWD.equals(loginPWD)){
               System.out.println("登录成功!");
               break;
           }
           else{
               System.out.println("账号和密码不匹配,请重新输入!");
               //下面的代码重复了
               System.out.print("请输入账号:");
               inLoginID = input.next();
               System.out.print("请输入密码:");
               inLoginPWD = input.next();
           }
       }
   }

下面是使用for的写法

for (;true;){
           //4.判断输入的账号和密码与正确的是否相同(判断字符串是否相等使用equals方法),
           //  如果相同等提示登录成功,循环结束,否则提示重新输入
           if(inLoginID.equals(loginID) && inLoginPWD.equals(loginPWD)){
               System.out.println("登录成功!");
               break;
           }
           else{
               System.out.println("账号和密码不匹配,请重新输入!");
               //下面的代码重复了
               System.out.print("请输入账号:");
               inLoginID = input.next();
               System.out.print("请输入密码:");
               inLoginPWD = input.next();
           }
       }

最后,再布置几个练习,各位看官自己分析并练习练习吧,看具体使用哪种循环最好。

1. 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

2. 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

3. 球从100M高度自由落下,每次落地后反跳回原高度的一半,再落下,求它在第10次落地时,共经过多少M?第10次反弹多高?

4. 任意输入一个整数(小于6位),求它的位数询问

5. “我爱你,嫁给我吧?”,选择“你喜欢我吗?(y/n):",如果输入为y则打印”我们形影不离“,若输入为n,则继续询问

本文分享自微信公众号 - Java团长(javatuanzhang)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-09-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【专业技术】C++ RTTI及“反射”技术

RTTI   RTTI(Run-Time Type Information)运行时类型检查的英文缩写,它提供了运行时确定对象类型的方法。面向对象的编程语言,象C...

37250
来自专栏企鹅号快讯

Python笔记·第一章——Python基础(一)

Python的简介 1、Python的由来与版本 1.1 python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989...

25070
来自专栏技术记录

通讯协议序列化解读(一) Protobuf详解教程

前言:说到JSON可能大家很熟悉,是目前应用最广泛的一种序列化格式,它使用起来简单方便,而且拥有超高的可读性。但是在越来越多的应用场景里,JSON冗长的缺点导致...

11940
来自专栏小狼的世界

Linux下不同文件编码的转换

字符编码(Character Encoding)可以说就是让某一字符序列匹配一个指定集合中的某一东西,常见的例子包括长短电键组合起来表示的摩斯电码(Morse ...

12920
来自专栏Java成长之路

三、JVM之对象的创建

上篇博文中已经介绍过了jvm内存的概况,接下来我们从jvm的角度来重新来认识一下Java对象是如何创建。 Java是一门面向对象的语言,在Java程序运行的...

11020
来自专栏三丰SanFeng

Linux64位程序移植

1 概述 Linux下的程序大多充当服务器的角色,在这种情况下,随着负载量和功能的增加,服务器所使用内存必然也随之增加,然而32位系统固有的4GB虚拟地址空间限...

32470
来自专栏nimomeng的自我进阶

《Objective C编程》笔记

1.为什么main()总是返回0?可以将main()的返回结果视为“粗欧文报告”,这样0就是好消息,没有错误就是成功。 2.消息:消息发送(指令)必须写在一对...

11730
来自专栏学习力

《Java从入门到放弃》JavaSE入门篇:程序结构 推荐

19240
来自专栏大内老A

yield在WCF中的错误使用——99%的开发人员都有可能犯的错误[上篇]

在定义API的时候,对于一些返回集合对象的方法,很多人喜欢将返回类型定义成IEnumerable<T>,这本没有什么问题。这里要说的是另一个问题:对于返回类型为...

19280
来自专栏算法channel

面试被问到动态内存分配时需要注意哪些坑,该怎么回答?

面试时,面试官问我们Java,Python这种语言那是必须要准确回答的,很多系统如果对性能要求高的话,底层一般会用到C/C++语言,因此被问到底层语言的相关知识...

17130

扫码关注云+社区

领取腾讯云代金券