JAVA程序的逻辑控制及输入输出
为什么会有逻辑控制?
我们把我们想实现的功能转化成程序让计算机辅助我们达到预期的效果。程序本身是按照代码顺序自上而下顺序的一条条执行的,但我们的思维并不是直线式的。
比如今天不下雨,我会出门爬山;今天下雨,我会在家煲剧。这是依据一定的前提条件作出的不同行为。对应于程序,假设我们想让计算机判定输入的a,b两个数据的大小,当a>b时,输出a是较大数字;当a<b时,输出b是较大数字;当a=b时,输出a和b是相等的。根据不同的结果条件,分两个或多个方向,执行不同的内容,分支语句可以实现这样的需求。
比如面包店要生产蓝莓、草莓、巧克力三种口味的面包各30个,面包师一次做一个面包,从蓝莓开始做起,完成30个之后才能开始做另一个口味。这里,面包师在当前面包数不满足要求数量时,需要重复的进行同一个动作,这就是一种简单的循环状态。对应于程序,我想输出1-1000范围内的所有整数,运用单条输出语句,我需要把1-1000这些数字都打印一遍。但如果我加入一个循环,从数字1开始,每进入一次循环就打印一次,同时1自增一次;通过这样的一个代码块就可以依次打印出1-1000,而不需要一条一 条输入。
目录
1、输入输出
1.1输出到控制台
1.1.1三种常用输出方式
1.1.2格式化字符串
1.2从键盘输入
1.2.1使用scanner读取字符串、整数、浮点数。
1.2.2读取实例
2、顺序结构
3、分支结构
3.1if语句
3.1.1语法格式
3.1.2代码示例
3.1.3注意事项
3.2switch语句
3.1.1语法格式
3.1.2代码示例
3.1.3break说明
4、循环结构
4.1while循环
4.1.1语法格式
4.1.2代码示例
4.1.3break与continue
4.2for循环
4.2.1语法格式
4.2.2代码示例
4.2.3其他写法
4.3do while循环
4.3.1语法格式
4.3.2代码示例
1、输入输出
1.1输出到控制台
1.1.1三种常用输出方式
String str="hello";//输出一个内容带换行System.out.println(str);//输出一个内容不带换行System.out.print(str);//格式化输出,不同的类型对于不同的格式化字符System.out.printf("%s",str);
1.1.2格式化字符串
转换符 |
类型 |
举例 |
输出结果 |
d |
十进制整数 |
(“%d”,100) |
100 |
x |
十六进制整数 |
(“%x”,100) |
64 |
o |
八进制整数 |
(“%o”,100) |
144 |
f |
定点浮点数 |
(“%f”,100f) |
100.000000 |
e |
指数浮点数 |
(“%e”,100f) |
1.000000e+02 |
g |
通用浮点数 |
(“%g”,100f) |
100.000 |
a |
十六进制浮点数 |
(“%a”,100) |
0×1.9p6 |
s |
字符串 |
(“%x”,100) |
100 |
c |
字符 |
(“%c”,1) |
1 |
b |
布尔值 |
(“%b”,100) |
true |
h |
散列码 |
(“%h”,100) |
64 |
% |
百分号 |
(“%.2f%%”,2/7f) |
0.29% |
1.2从键盘输入
1.2.1使用scanner读取字符串、整数、浮点数。
package t;
import java.util.Scanner;
//需要导入util包
public class test {public static void main(String[] args) {//调用scanner方法Scanner scanner=new Scanner(System.in);//键盘获取byte类型值byte num1 =scanner.nextByte();//键盘获取short类型值short num2=scanner.nextShort();//键盘获取int类型值int num3=scanner.nextInt();//键盘获取long类型值long num4=scanner.nextLong();//键盘获取float类型值float num5=scanner.nextFloat();//键盘获取double类型值double num6=scanner.nextDouble();//键盘获取String类型值String str=scanner.next();}
}
1.2.2读取实例
例1:从键盘输入一个数字
package t;
import java.util.Scanner;
//需要导入util包
public class test {public static void main(String[] args) {//调用scanner方法Scanner scanner=new Scanner(System.in);//提示用户输入数字System.out.println("请输入一个数字:");//键盘获取int类型值int num=scanner.nextInt();}
}
结果:
例2:输入语文、数学、英语三科成绩
package t;
import java.util.Scanner;
//需要导入util包
public class test {public static void main(String[] args) {//调用scanner方法Scanner scanner=new Scanner(System.in);//提示用户输入语文成绩System.out.println("请输入您的语文成绩:");//键盘获取int类型值int Chinese=scanner.nextInt();//提示用户输入数学成绩System.out.println("请输入您的数学成绩:");//键盘获取int类型值int Math=scanner.nextInt();//提示用户输入英语成绩System.out.println("请输入您的英语成绩:");//键盘获取int类型值int English=scanner.nextInt();}
}
结果:
2、顺序结构
按照代码书写顺序一行一行一次执行
输入1:你好中国!
package t;
public class test {public static void main(String[] args) {System.out.println("你");System.out.println("好");System.out.println("中");System.out.println("国");System.out.println("!");}
}
结果:
输入2:中国你好!
package t;
public class test {public static void main(String[] args) {System.out.println("中");System.out.println("国");System.out.println("你");System.out.println("好");System.out.println("!");}
}
结果:
3、分支结构
3.1if语句
3.1.1语法格式
基本语法格式1:
if(条件){
满足条件时执行语句
}
基本语法格式2:
if(条件){
满足条件时执行语句
}else{
不满足条件时执行语句
}
基本语法格式3:
if(条件1){
满足条件1执行该语句
}else if(条件2){
满足条件2时执行该语句
}else if(条件3){
满足条件3时执行该语句
}
......//中间可插入多条分支
else{
所有条件都不满足时执行该语句
}
注意:条件必须为布尔表达式
3.1.2代码示例
例1:判定一个数是正数还是负数
package t;
public class test {public static void main(String[] args) {int num=10;if(num>0){System.out.println("这是一个正数!");}else if(num<0){System.out.println("这是一个负数!");}else{System.out.println("这个数是0!");}}
}
结果:
例2:输入一个数字,判断改数是奇数还是偶数
package t;import java.util.Scanner;public class test {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);System.out.println("请输入一个整数:");int num=scanner.nextInt();if(num%2==0){System.out.println("这是一个偶数!");} else{System.out.println("这是一个奇数!");}}
}
结果:
例3:输入一个年份,判断该年份是否是闰年
package t;import java.util.Scanner;public class test {public static void main(String[] arg){Scanner scanner=new Scanner(System.in);System.out.println("请输入一个年份:");int num=scanner.nextInt();if(num%100==0){//判定世纪闰年if(num%400==0){System.out.println("闰年");}else {System.out.println("不是闰年");}}else //判定普通闰年{if(num%4==0){System.out.println("闰年");}else {System.out.println("不是闰年");}}}
}
结果:
3.1.3注意事项
注意事项1:悬垂else问题
if语句悬垂,即条件判断语句后不加花括号
package t;import java.util.Scanner;public class test {public static void main(String[] arg){int a=15;int b=19;int c=13;//选择出a、b、c中的最大值,悬垂写法if(a>b)if(a>c)System.out.println("a为最大值");elseSystem.out.println("c为最大值");elseif(b>c)System.out.println("b为最大值");elseSystem.out.println("c为最大值");} }
if语句不悬垂对比
package t;import java.util.Scanner;public class test {public static void main(String[] arg){int a=15;int b=19;int c=13;//选择出a、b、c中的最大值,加括号写法if(a>b){if(a>c){System.out.println("a为最大值");}else{System.out.println("c为最大值");}}else{if(b>c){System.out.println("b为最大值");}else{System.out.println("c为最大值");}}} }
if语句的悬垂,此时else和最接近的if匹配,在语法上没有任何的错误,但直观性很弱,通常不采用此写法。
注意事项2:代码风格问题
风格1:
int a=15;int b=19;//a与b输入不同值if(a>b){System.out.println("a数值大");}else{System.out.println("b数值大");}
风格2:
int a=15;int b=19;//a与b输入不同值if(a>b){System.out.println("a数值大");}else{System.out.println("b数值大");}
两种写法都是合法的,推荐使用风格1,结构上更加紧凑,但实际写法因人而异。
注意事项3:分(;)号问题
错误示范:
int a=15;int b=19;//a与b输入不同值if(a>b); //!!!!!警告:这里多了一个分号{System.out.println("a数值大");}else{System.out.println("b数值大");}
错误结果 :
错误分析:
报错原因是有if没有else,我们源码中输入了else,为什么会出现这样的结果呢?原因是,JAVA语句中的“;”代表一个语句的结束,for条件之后的分号,把for循环分割成两块互不相干的内容。
3.2switch语句
3.1.1语法格式
switch(整数|枚举|字符|字符串){
case 内容1:{
内容满足时执行语句;
break;
}
case 内容2:{
内容满足时执行语句;
break;
}
......
default:{
内容都不满足时执行语句;
break;
}
}
说明:1、break必不可少;
2、switch中的类型只有整数、枚举、字符、字符串四种,且一般不输入过于复杂的 条件。
3.1.2代码示例
例:输入1-7中的一个数字,输出对应的星期
package t;import java.util.Scanner;public class test {public static void main(String[] arg){Scanner scanner=new Scanner(System.in);System.out.println("输入1-7数字:");int day =scanner.nextInt();switch (day){case 1:System.out.println("今天是星期一");break;case 2:System.out.println("今天是星期二");break;case 3:System.out.println("今天是星期三");break;case 4:System.out.println("今天是星期四");break;case 5:System.out.println("今天是星期五");break;case 6:System.out.println("今天是星期六");break;case 7:System.out.println("今天是星期日");break;default://防止错误输入!System.out.println("输入错误!");break;}}
}
结果:
3.1.3break说明
break有什么作用?我们首先看一下去除break之后的代码及其结果
package t;import java.util.Scanner;public class test {public static void main(String[] arg){Scanner scanner=new Scanner(System.in);System.out.println("输入1-7数字:");int day =scanner.nextInt();switch (day){case 1:System.out.println("今天是星期一");case 2:System.out.println("今天是星期二");case 3:System.out.println("今天是星期三");case 4:System.out.println("今天是星期四");case 5:System.out.println("今天是星期五");case 6:System.out.println("今天是星期六");case 7:System.out.println("今天是星期日");default://防止错误输入!System.out.println("输入错误!");}} }
结果:
很显然,代码块失去了“多分支选择的”效果。
break的作用是执行到此语句后,跳出当前的switch代码块。
4、循环结构
4.1while循环
4.1.1语法格式
while(循环条件){
循环语句;
}
4.1.2代码示例
例1:循环输出1-5结果
package t;public class test {public static void main(String[] arg){int a=1;while (a<=5){System.out.println(a);a++;}}
}
结果:
例2:输出1-100的和
package t;public class test {public static void main(String[] arg){int a=0;for (int i=1;i<=100;i++){a=a+i;}System.out.println(a);}}
结果:
例3:计算5的阶乘
package t;public class test {public static void main(String[] arg){int s=1;int i=1;while (i<=5){s=s*i;i++;}System.out.println(s);}}
结果:
4.1.3break与continue
break:让循环提前结束
continue:跳过此次循环,进入下一次循环
break示例:找到100-200中的第一个3的倍数
package t;public class test {public static void main(String[] arg){int num=100;while (num<=200){if(num%3==0){System.out.println(num);break;//找到打印输出之后,退出循环}num++;}}}
结果:
continue示例:输出100-200之间所有3的倍数
package t;public class test {public static void main(String[] arg){int num=100;while (num<=200){if(num%3!=0){num++;continue;//只要不满足3的倍数条件就不执行后面的打印语句}System.out.println(num);num++;}}}
结果(部分):
4.2for循环
4.2.1语法格式
for(表达式1;表达式2;表达式3){
满足条件执行语句;
}
说明:表达式1——初始化循环变量;
表达式2——循环条件;
表达式3——更新循环变量。
4.2.2代码示例
例1:输出1-100的和
package t;public class test {public static void main(String[] arg){int result=0;for (int i=0;i<=100;i++){result=result+i;
}System.out.println(result);}}
结果:
例2:输出5的阶乘
package t;public class test {public static void main(String[] arg){int result=1;for(int i=1;i<=5;i++){result=result*i;}System.out.println(result);}}
结果:
例3: 输出1!+2!+3!+4!+5!结果
package t;public class test {public static void main(String[] arg){int result=0;for(int i=1;i<=5;i++){int temp=1;for(int j=1;j<=i;j++){temp =temp*j;}result=result+temp;}System.out.println(result);}}
结果:
4.2.3其他写法
for(表达式1;表达式2;表达式3),这些表达式不一定要在此位置说明,只要说明了这三个表达式,在其他位置也是合理的。
写法1:
int num=0;for(;num<=10;num++){System.out.println(num);}
写法2:
int num=0;for(;;){if(num>10){break;}System.out.println(num);
4.3do while循环
4.3.1语法格式
do{
条件符合执行语句;
}while(循环执行条件);
说明:不管是什么条件,循环体总会被执行一次。
4.3.2代码示例
例:循环输出1-5数字
package t;public class test {public static void main(String[] arg){int result=0;int num=1;do {System.out.println(num);num++;}while (num<=5);}}
结果:
JAVA程序的逻辑控制及输入输出相关推荐
- Java程序逻辑控制
Java程序逻辑控制 1. 顺序结构 2.分支结构 2.1 if 语句 2.2 switch 语句 3.循环结构 3.1 while 循环 3.2 break 3.3 continue 3.4 for ...
- Java程序 实验小全
Java程序中的main方法声明中的参数类型是一个字符串数组,运行时,存放接收的参数,和C语言不同,第一个参数存放在下标为0的位置,第二个参数存放在下标为1的位置,其它的一次类推.下面的程序说明了参数 ...
- 从Java程序员进阶到架构师,6大核心技能要领详解
" java架构师技能将分为如下6大环节:数据结构和算法,Java高级特性,Java web核心,数据库,Java框架与必备工具,系统架构设计. 希望能真正帮助到从程序员进阶到架构师之路的朋 ...
- 【note】Java程序设计基础第五版(上)
第 1 章 Java语言概述 Java语言有哪些特点? 答:简单易学.面向对象.平台无关性.可靠性.安全性.支持多线程.支持网络编程.编译与解释并存 什么是Java的虚拟机? 答:任何一种可以运行Ja ...
- JAVA程序员笔试面试题汇总及答案 .
1.面向对象的特征有哪些方面 (1)抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只 是选择其中的一部分,暂时不用部分细节. ...
- 来自Java程序员的Python新手入门小结
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 欣宸是个Java程序员,最近正在学习Pyth ...
- Java程序设置的目的_java程序设计教学大纲的课程性质与目的.doc
java程序设计教学大纲的课程性质与目的 <Java程序设计> Java Language Programming Design 教学大纲 一.课程性质与目的 JAVA程序设计是计算机专业 ...
- java程序设计特点_Java编程语言的特点
原标题:Java编程语言的特点 Java具有简单性.面向对象.分布式.健壮性.安全性.平台独立与可移植性.多线程.动态性等特点.Java可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用 ...
- 编程浅谈-以一个初出茅庐的Java程序员视角
编者是一个从事Java开发的普通软件攻城狮,迄今为止,粗粗算来不过刚刚进入编程的世界不过两年,但在这两年的光阴里,每当我抬头仰望星空(苦命加班)时脑海里总有这样一个疑问--"什么是编程&qu ...
最新文章
- mysql 锁测试_mysql行级锁测试 - echowu007的个人空间 - OSCHINA - 中文开源技术交流社区...
- 数据结构(C语言实现)勘误
- 阿里HBase的数据管道设施实践与演进
- 计算机二级关于数据结构的题目,计算机二级MS OFFICE 练习题(一五三)
- 互联网1分钟 |1022
- 为什么Kubernetes要引入pod的概念,而不直接操作Docker容器
- 武魂觉醒s系列服务器,斗罗大陆武魂觉醒斗罗大陆9服开服时间表_斗罗大陆武魂觉醒新区开服预告_第一手游网手游开服表...
- Mac Pro 使用 ll、la、l等ls的别名命令
- 【背包问题】基于matlab离散粒子群算法求解背包问题【含Matlab源码 423期】
- X-Scan介绍和使用方法
- 中国 AI 天才养成计划:清华姚班和 100 个「张小龙」
- 基、维数和坐标 过渡矩阵与坐标变换
- win10怎么关机 win10关机快捷键大全
- 批量插入图片到Excel中批注中,Excel插件 E灵
- 【React】9、使用create-react-app(CRA)创建react项目
- 中标麒麟B040版本桌面系统root密码破解
- 视频丨中兴通讯齐聚全球合作伙伴的力量 拥抱最好的时代
- mysql网络数据库操作模块_15.mysql数据库操作与Paramiko模块
- Mixly数码管TM1637时钟实验
- 一本通OJ 1034:计算三角形面积