文章目录

  • 前言
  • 一、输入输出
    • 1、输出
    • 2、输入
  • 二、流程控制
    • 1、条件语句
      • if else语句
        • ||(逻辑或)
        • &&(逻辑与)
        • !(逻辑非)
      • if else if...else语句
      • switch语句
    • 循环语句
      • while循环
      • do...while循环
      • for循环
      • foreach循环(强化型for循环)
  • 总结

前言

所有编程语言里流程控制都是最关键的一点,流程控制是实现算法的基础,无论多复杂的程序,归到底层都是由基本的流程控制语句来辅助实现的。完全掌握了流程控制对后期的学习会有极大的帮助。而在前期的学习过程中,输入输出语句更多是协助进行代码测试时使用的 。为了方便后续代码的编写本文将先介绍完输入输出后再进行流程控制的介绍
(毕竟这年头基本上命令行程序挺少见了…… )

一、输入输出

1、输出

输出相对于输入会简单很多,而且大部分的测试都是以输出结果来进行判断所以将优先介绍输出。

废话不多说,直接搂代码先:

/*** @author Silence_Lurker潜默*/
public class App{public static void main(String[] args){System.out.println("Hello World!");   // 没错,是各位最喜闻乐见的Hello Worldreturn;}
}

Java比较常见的几个输出方法为:

System.out.println();    // 和print方法不同的地方在于输出完内容后自动换行,根据情况自行决定使用哪一个就好。
System.out.print();
System.out.printf();    // 和C一样的printf方法,用法也一样,就不做过多解释了。// 以下为System.err中的方法,和out对象类似,但输出的文字为红色表示为错误信息(如果你希望一些信息更加引人注目些可以考虑使用,并不一定非得在有报错时使用。)System.err.println();
System.err.print();
System.err.printf();

在部分编辑器中可以通过sysout来快速补全System.out.println()方法。

2、输入

在Java中,通过命令行获取输入相对于C来说会麻烦一点,但是随着后续的学习和对面向对象编程的思想的理解,会更容易理解和接受。
在Java中,获取命令行内容的输入是通过Scanner类实现的,代码如下:

import java.util.Scanner;    // 从java.util包内导入 Scanner 类/*** @author Silence_Lurker潜默*/
public class App{public static void main(String[] args){Scanner sc = new Scanner(System.in);// 实例化一个Scanner类对象,这里还不需要深入了解System.in的具体含义。感兴趣可以自行搜索一下。System.out.print("请输入一个人名:");String name = sc.next();sc.nextLine();// 用于消除掉行位的换行符。System.out.print("请输入想对Ta说的真心话:");String secret = sc.next();sc.nextLine();// 用于消除掉行位的换行符。System.out.println(name + ",我想对你说:" + secret);sc.close();// 记得关闭sc,平时可能感觉不明显,但是在实际开发中为了安全性考虑记得随手加上。return;}
}

相对应的,Scanner类对象还有nextInt(),nextShort(),nextLong()之类的方法。根据所需要的数据内容选择相应的方法进行数据的获取即可。
注意一点,Scanner类对象在关闭之前可以一直使用以进行获取,若关闭则需重新实例化一个对象。(当初一堆人刚学习的时候为了获取一个数据,用循环玩了命的实例化Scanner对象,基本上一个变量一个Scanner类对象……用循环的还算不错,还有几个大聪明一个变量实例化一个,能想那么多名字也是不容易…… )


以上就是输入输出的基础了。


二、流程控制

1、条件语句

if else语句

if是最常见的的条件语句,具体使用方式如下:

import java.util.Random;/*** @author Silence_Lurker*/
public class App{public static void main(String[] args) {int r = new Random().nextInt();// 实例化一个随机类匿名对象随机获取一个整型数据if (r % 2 == 0) {System.out.println("随机数为偶数");} else {System.out.println("随机数为奇数");}}
}

如上,会根据if内的布尔型表达式判断是否执行,需要注意一个关键点,在C/C++中这个问题会更加明显,但是Java会相对好一些。即数据不能连续进行比较。如下例:

import java.util.Random;/*** @author Silence_Lurker*/
public class App{public static void main(String[] args) {int r = new Random().nextInt();if (1 <= r <= 2) {// 此处会报错:The operator <= is undefined for the argument type(s) boolean, int// 意为:你不能将int型数据和boolean型数据进行比较。// TODO:在[1,2]区间内} else {// TODO:其他情况}}
}

这里提一个知识点,在C语言中所有数据都是可以直接转成数值表达的,在C语言中布尔型数据true表示1,false表示0,非布尔型数据则是根据是否为0判断是否为真,在C语言中这种写法不会报错,但无论r的值为多少都会认为在[1,2]的区间里。因为1<=r无论是否为真都小于2(无论true(1)还是false(0)都是小于2的)。
在Java中只有同类型数据可以进行比较避免了这种问题的发生。所以在判断一个数是否存在于另外两个数据之间会相对麻烦一点,代码如下:

import java.util.Random;/*** @author Silence_Lurker*/
public class App{public static void main(String[] args) {int r = new Random().nextInt();if (1 <= r && r <= 2) {// TODO:在[1,2]区间内} else {// TODO:其他情况}}
}

这里我们要明确两个逻辑运算符:||和&&

||(逻辑或)

如同字面意思,使用方法:
[布尔型表达式1]||[布尔型表达式2]
逻辑或的意思即表达式1或表达式2中只要有任意一个表达式为真,即整个表达式为真。

&&(逻辑与)

和逻辑或相似,使用方法:
[布尔型表达式1]&&[布尔型表达式2]
逻辑与的意思即只有表达式1和表达式2均为真,整个表达式才为真。(也就是说只要有任意一个为假,则整个表达式为假。)

!(逻辑非)

和另外两个逻辑运算符不同,此为单目运算符,使用方法如下:
![布尔型表达式]
逻辑非也如其字面意思,即表达式本身为真时整个表达式为假,若表达式本身为假则整个表达式为真。

if else if…else语句

和if else相似,即一堆if else嵌套使用,如下:

import java.util.Random;/*** @author Silence_Lurker*/
public class App{public static void main(String[] args) {int r = new Random().nextInt();if (r <= 1) {System.out.println("小于等于1");} else if (r <= 2) {System.out.println("小于等于2");} else if (r <= 3) {System.out.println("小于等于3");} else {System.out.println("大于3");}}
}

若将所有的括号补全则会变成这样

import java.util.Random;/*** @author Silence_Lurker*/
public class App{public static void main(String[] args) {int r = new Random().nextInt();if (r <= 1) {System.out.println("小于等于1");} else {if (r <= 2) {System.out.println("小于等于2");} else {if (r <= 3) {System.out.println("小于等于3");} else {System.out.println("大于3");}}}}
}

这是按照代码所属关系进行缩进得到的结果,但是这样缩进很难看出来代码条件间的相关性,若对代码本身进行优化则得到以下缩进结果

import java.util.Random;/*** @author Silence_Lurker*/
public class App{public static void main(String[] args) {int r = new Random().nextInt();if (r <= 1) {System.out.println("小于等于1");} else if (r <= 2) {System.out.println("小于等于2");} else if (r <= 3) {System.out.println("小于等于3");} else {System.out.println("大于3");}}
}

代码的可读性会提高且更加美观。

switch语句

switch相对更适合顺序分级式处理,如下:

import java.util.Random;/*** @author Silence_Lurker*/
public class App{public static void main(String[] args) {int r = new Random().nextInt(4);switch(r){case 3:System.out.println("等于3");break;case 2:System.out.println("等于2");break;case 1:System.out.println("等于1");break;default:System.out.println("4!");}}
}

若无break语句截止则会自动向下执行,无论是否符合条件,但利用这个特性也可以优化代码。

循环语句

while循环和for循环是最常使用的循环,只要了解到一定程度后两者可以随意替换,看个人爱好吧(Java中增加了foreach用法,可以理解为增强型for循环,后面的内容中会讲)。

while循环

最常见的循环之一,用法如下:

/*** @author Silence_Lurker*/
public class App{public static void main(String[] args) {int sum = 1;while (sum < 10) {sum *= (sum + 1);// 随手写的个玩意,没细考虑啥意思}}
}

其中sum<10即循环条件,当循环条件为真时则执行一次循环。
注意,最好结束循环的条件和循环本身绑定,或多线程开发中循环条件为某布尔型变量,随变量的改变结束线程。一定要保留好结束循环的节点,否则会卡成死循环。

do…while循环

和while循环类似,用法如下:

/*** @author Silence_Lurker*/
public class App{public static void main(String[] args) {int sum = 1;do{sum *= (sum + 1);// 随手写的个玩意,没细考虑啥意思}while (sum < 10);}
}

和while循环的区别在于while循环是先判断后执行,do…while为先执行后判断,即不符合循环条件也先执行一次循环的操作内容(然后有的人就寻思利用do让不符合的条件强行符合?主动死循环? )

相比while和for循环do…while使用频率相对较少。

for循环

for循环相对来说会更节约代码量,且很容易取代while循环。
代码如下:


/*** @author Silence_Lurker*/
public class App {public static void main(String[] args) {// 举个例子求1~100的和int sum = 0;for(int i = 0 ; i < =100 ; i++){sum += i;}System.out.print("1~100的和为:" + sum);}
}

同样的功能用while写则为:

/*** @author Silence_Lurker*/
public class App {public static void main(String[] args) {// 举个例子求1~100的和int sum = 0;int i = 0;while(i < =100){sum += i;i++;}System.out.print("1~100的和为:" + sum);}
}

其中区别在于for循环可以直接在行内声明一个局部变量,也就是说变量i的声明周期仅存在于for循环内,离开for循环后,变量名i又被释放,可以再次利用(虽然并不推荐这样使用就是了……个人并不推荐 )且仅需一行就可以实现while三行才能实现的功能。但相对应如果只需要进行单个独立条件的判断的话while循环更加实用。
在后期学到数组需要通过循环来进行数据下标操作时for循环会更加实用。

foreach循环(强化型for循环)

其实个人感觉并不适合叫做强化型for循环,因为这种方法进行循环获取的数据是只读的,而且主要应用于数组。用法如下:

/*** @author Silence_Lurker*/
public class App {public static void main(String[] args) {int i[] = {1,2,3,4,5,6,8,9};for(int j : i){System.out.print(j + ",");}}
}

具体用法就是for([数据类型] [变量名] : [数组名])
这个方法的变量名也是局部变量且数据为只读,其中各种操作都不会改变原数据的内容。在仅需要对数据进行获取的情况下相对可以节约代码量。

总结

以上就是今天要讲的内容,本文简单Java的流程控制语句和基础输入输出操作。对流程控制的理解和应用的熟练在后期学习算法的时候会有很大的帮助(应该吧…… )

祝各位Java的学习能够轻松愉快。

Java随笔记录第二章:输入输出流程控制相关推荐

  1. Python编程高手之路——第二章:流程控制

    二.流程控制 2.1 运算方式 计算机的核心部件是CPU,CPU有两个功能,控制和运算: 2.1.1 数学运算 print(a ** b) # 幂 print(a // b) // 取整数 2.1.2 ...

  2. 尚硅谷Java入门视频教程第二章——Java基本语法

    尚硅谷Java入门视频教程第二章 第一章复习 课后习题 Java语言概述 第2章:Java基本语法 2.1 关键字和保留字 2.2 标识符(Identifier) 2.3 变量 2.3.1 变量基本概 ...

  3. 《SysML精粹》学习记录--第二章

    <SysML精粹>学习记录 第二章:系统建模语言概览 SysML介绍 SysML与UML SysML图概览 SysML通用图 小结 第二章:系统建模语言概览 SysML介绍   SysML ...

  4. 从零开始学JAVA:二、Java基本语法(四)——流程控制

    从零开始学JAVA:二.Java基本语法(四)--流程控制 程序流程控制 1.顺序结构 2.分支结构 2.1.if-else结构 2.2.switch-case选择结构 2.3.Scanner类的使用 ...

  5. 语言求余和乘除优先级_愉快地学Java语言:第二章基本程序设计 第2讲

    导读 本文适合Java入门,不太适合Java中高级软件工程师. 本文以<Java程序设计基础篇>第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述. 本篇文章只是这个系列中的一篇, ...

  6. c语言程序设计教程 许勇,C语言程序设计应用教程 教学课件 许勇 第3章 程序流程控制.pdf...

    第3章 程序流程控制 3.1 结构化程序设计的概念 3.2 顺序程序设计 3.3 选择程序设计 3.4 循环程序设计 3.1 结构化程序设计的概念 C程序结构 C程序 源程序文件1 源程序文件 ...

  7. Java基础入门第二章

    大二学的java,一个假期过去,学的差不多都忘光了,在这里再重学一遍,也算不上重学吧,相当于复习吧.第一章讲的是jdk及开发工具的安装,这里就不多赘述了,废话不多说,我们直接从第二章开始. 2.1Ja ...

  8. Java学习笔记(五)--流程控制

    文章目录 Java语言基础(三) 一.流程控制 1.1 复合语句 1.2 条件语句 1.2.1 if条件语句 二.switch多分支语句 三.循环语句 3.1 while 循环语句 3.2 do ·· ...

  9. JAVA入门基础(5)—— 流程控制

    前言 前面两篇已经了解了java语言基础,本篇开始对java的流程控制进行学习.流程控制对任何一门编程语言都是极为关键的,也是学好java基础中的基础,为控制程序步骤提供基本手段. 复合语句 java ...

  10. java基本语法(二)——流程控制

    java有两种基本的流程控制结构:分支结构(条件选择执行的代码)和循环结构(根据循环条件约束来执行代码) 顺序结构 最常见的程序结构就是顺序结构,从上到下依次执行中间没有判断和跳转,按照代码的前后顺序 ...

最新文章

  1. GRE难句典型结构2
  2. dbms_xplan之display_cursor函数的使用
  3. 120万人同时在线考试,这么大的流量如何支撑
  4. HDoj-1863-畅通project-并查集
  5. linux中线程ptid,Linux 线程(1)线程创建
  6. 请求发送者与接收者解耦——命令模式(六)
  7. 目标检测---搬砖一个ALPR自动车牌识别的环境
  8. SharpDevelop 开发WPF教程
  9. 平面设计中的网格系统pdf_小白新手想要系统学习平面设计要看哪些书?
  10. 计算机管理 未分配磁盘,磁盘显示未分配怎么办?
  11. Halcon知识:binocular_disparity(双目视差)
  12. 正常人小气道上皮细胞 Small airway epithelial cells
  13. mov 指令用c语言写,汇编总结:mov指令
  14. 5G发展困难,贪婪的手机企业不愿降价,运营商无奈再开4G价格战
  15. 数据元素、数据项、组合项、数据结构
  16. swi 指令能用在C语言吗,ARM的SWI异常中断处理程序设计
  17. 国家税务总局全国增值税发票查验平台网站js逆向分析及全逆向算法还原
  18. 详谈redis命令之列表(List)
  19. python k线顶分型_顶分型和底分型的确认及K线包含处理
  20. sql server 三角函数

热门文章

  1. 假设有一张纸可对折无限次,它的厚度为0.1毫米,珠穆朗玛峰的高度为8848.86米,求这张纸对折多少次后它的厚度会超过珠峰的高度。
  2. 在Mac系统下配置端口映射
  3. AUTOCAD——打断命令、合并命令
  4. 你需要了解的JS框架 用途:构建数
  5. python模拟按键网游_Python 实现键盘鼠标按键模拟
  6. 如何主动退出小程序(微信小程序)
  7. 2、异常值(outliers)检测:业务法、Z-score、3σ准则、箱线图
  8. Mysql大字段blob返回是数字_innodb使用大字段text,blob的一些优化建议(转)
  9. Two-Stream Convolutional Networksfor Action Recognition in Videos——学习笔记
  10. 记一次失败的git截图工具使用经历——shareX