Java学习之路——逻辑控制
本次学习Java程序中的逻辑控制语句和Java中的输入和输出方式
1. 顺序结构
顺序结构是在程序涉及中最常用到的结构,就是按照代码书写的顺序一行一行的进行执行的,在程序设计中扮演着重要的角色,因为大部分程序基本上都是按照这种由上而下的流程来设计的,在此就不进行详细的举例。
2. 选择(分支)结构
分支结构是根据判断条件是否成立在决定是否执行某些语句的一种结构,当判断条件为真(true)时,则执行其中的语句块,当判断条件为假(false),则执行其他语句块或直接到下一句语句。分支结构主要是根据布尔表达式的判断结果来决定是否执行某段代码,在Java里提供有两类分支结构:if分支结构和switch开关语句。
2.1 if分支结构
if语句的三种常用语法形式
形式1
if(布尔表达式){
//条件满足时执行代码
}
形式2
if(布尔表达式){
//条件满足时执行代码
}else{
//条件不满足时执行代码
}
形式3
if(布尔表达式){
//条件满足时执行代码
}else if(布尔表达式){
//条件满足时执行代码
}else{
//条件都不满足时执行代码
}
此处我们只列举上述中的形式3,多条件判断的例子,。
多条件判断
//判断一个数字是正数还是负数
public class Text {
public static void main(String[] args) {
int a = 10 ;
if (a > 0){
System.out.println("a是正数");
}else if (a == 0){
System.out.println("a是0");
}else{
System.out.println("a是负数");
}
}
}
代码中的悬挂else问题和分号问题
public class Text {
public static void main(String[] args) {
int a = 10;
int b = 20;
if(a == 10) //悬挂else问题
if (b == 20)
System.out.println("123");
else
System.out.println("456");
if (a == 100);{ //分号问题
System.out.println("啦啦啦");
}
}
}
从下图结果中我们可以看出if/else语句中可以不加大括号,也可以写语句,但是只能写一条语句,此时的else和最近的if匹配,但是实际中不建议这样写,要加上大括号。
第二个分号问题,在if的小括号后多加了一个分号,导致分号成了if语句的语句体,而{}中的代码与if已经无关,按照顺序结构直接执行了,输出了“啦啦啦”。
2.2 switch开关语句
switch语句的基本语法
switch(整数|枚举|字符|字符串){
case 内容1 :{
内容满足时执行语句;
[break;]
}
case 内容2 :{
内容满足时执行语句;
[break;]
}
… …
default:{
内容都不满足时执行语句;
[break;]
}
}
switch是一个开关语句,它根据内容进行判断,它只能判断数据(int,char,枚举,String),而不能判断布尔表达式。每个case中要使用break中断其余case的执行,保证程序不会在第一个满足条件后一直执行后面每一个case中的内容直到switch结束。
使用switch语句
public class Text {
public static void main(String[] args) {
int a = 2 ;
switch (a){
case 1:
System.out.println("数字1");
break;
case 2:
System.out.println("数字2");
break;
default:
System.out.println("其他数字");
break;
}
}
}
结果
3.循环结构
循环结构的主要特点是可以根据某些判断条件来重复执行某段程序代码的处理结构,Java中的循环结构分为两种类型:while循环结构和for循环结构。
3.1 while循环
while循环是一种比较常见的循环结构,利用while语句可以实现循环条件的判断,当判断条件满足时执行循环体的内容。
while循环的基础语法格式
while(循环条件){
循环语句;
}
利用whlie循环的嵌套可以实现一些复杂的代码
计算3!+4!+5!+6!
public class Text {
public static void main(String[] args) {
int num = 3;
int sum = 0;
while (num <= 6){
int fact = 1;
int a = num;
while (a >= 1){
fact *= a;
a--;
}
sum += fact;
num++;
}
System.out.println(sum);
}
}
结果
3.2 break和continue
breeak功能是让循环结束,执行到break就会直接让循环体结束。
continue的功能是跳过本次循环,直接执行下次循环。
体会break(找到50-100中第一个三的倍数)
public class Text {
public static void main(String[] args) { //找到50-100中第一个3的倍数
int num = 50;
while(num <= 100){
if(num%3 == 0){
System.out.println("100-200中第一个3的倍数是:" + num);
break;
}
num++;
}
}
}
结果
体会continue(找到50-100中所有3的倍数)
public class Text {
public static void main(String[] args) {
int num = 50;
while (num <= 100){
if(num%3 == 0){
System.out.printf("%d\t",num);
}
num++;
}
}
}
结果
3.4 for循环
while循环是依据判断条件的结果实现的循环控制,在明确知道循环次数的情况下,可以使用for实现循环控制。
for(表达式1;表达式2;表达式3){
循环体;
}
其中表达式1:用于初始化循环变量
表达式2:循环条件
表达式3:更新循环变量
使用for循环实现3!+4!+5!+6!
public class Text {
public static void main(String[] args) {
int sum = 0;
for(int i = 3; i <= 6 ; i++){
int fact = 1;
for (int j=i;j >= 1;j--){
fact *= j;
}
sum += fact;
}
System.out.println(sum);
}
}
结果
3.5从键盘输入
此处只说如何使用,不探究其背后的原理,使用前需先导入util包。
使用Scanner读取字符串/整数/浮点数
import java.util.Scanner;
public class Text {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = sc.nextLine();
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("请输入你的零花钱:");
double salary = sc.nextDouble();
System.out.println("你的基础信息如下:");
System.out.println("姓名" + name + "年龄" + age + "零花钱" + salary);
sc.close();
}
}
注意:如上述的程序中使用Scanner输入字符串时,如果使用sc.next()会遇到空格就结束,使用sc.nextLine()会读一行,有空格也没关系。
结果如下
scanner的使用案例
输入两个数字,如3和6,然后该程序会求出3!+4!+5!+6!的值为多少
public class Text {
public static void main(String[] args) {
int sum = 0;
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
for(int i = a; i <= b ; i++){
int fact = 1;
for (int j=i;j >= 1;j--){
fact *= j;
}
sum += fact;
}
System.out.println("结果为:" + sum);
}
}
输入3和5,计算出3!+4!+5!的值为150.