结构化程序设计的原则可表示为:程序=(算法)+(数据结构)。
结构化程序设计的三种基本结构是:顺序结构、选择结构和循环结构。
顺序结构表示程序中的各操作是按照它们出现的先后顺序执行的。
Java的基本结构就是顺序结构,除非特别指明,否则就都按照先后顺序一句一句执行,它是最简单的算法结构。
语句与语句之间都是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,顺序结构是任何一个算法都离不开的一种基本算法结构。
package cn.ara.structure;
//顺序结构演示
public class Order {
public static void main(String[] args) {
System.out.println("111");
System.out.println("222");
System.out.println("333");
System.out.println("444");
System.out.println("555");
}
}
这个程序中,代码就是一句一句的从上至下依次执行的,打印结果如下:
111
222
333
444
555
就是按照我们所编写的代码的顺序执行的,这个就是程序的顺序结构。
选择结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行。
当我们需要判断一个东西是否可行,如果可行我们就会执行一些语句的时候,我们就会用if单选择语句来表示,语法如下:
if(布尔表达式){
//如果布尔表达式的值为true时将执行的语句
}
//声明Scanner对象
Scanner scanner = new Scanner(System.in);
//判断输入是否为整数
if (scanner.hasNextInt()) {
int i = scanner.nextInt();
System.out.println("你输入的整数为:" + i);
}
//关闭输入流对象
scanner.close();
对于上述的代码,当我们输入为整数数据时,就会执行if结构中的语句,否则,就不会执行if结构中的语句。
当我们需要判断一个东西是否可行,如果可行我们就需要执行一段语句,如果不可行我们就需要执行另一段语句时,我们就会用if双选择语句来表示,语法如下:
if(布尔表达式){
//如果布尔表达式的值为true时将执行的语句
} else {
//如果布尔表达式的值为false时将执行的语句
}
//声明Scanner对象
Scanner scanner = new Scanner(System.in);
//判断输入是否为整数
if (scanner.hasNextInt()) {
int i = scanner.nextInt();
System.out.println("你输入的整数为:" + i);
} else {
System.out.println("你输入的不是整数");
}
//关闭输入流对象
scanner.close();
还是上述的程序,我们做了一些改进,当输入为整数时,输出你输入的整数为:(输入的整数)
,否则输出你输入的不是整数
当我们需要判断一个东西是否满足多种不同的条件,如果条件一满足我们就需要执行语句一,如果条件二满足我们就需要执行语句二,如果条件三满足我们就需要执行语句三 … 我们就会用if多选择语句来表示,语法如下:
if(条件1){
//条件1满足时执行
}else if(条件2){
//条件2满足时执行
}else if(条件3){
//条件3满足时执行
}
...
else{
//上述条件都不满足时执行
}
//声明Scanner对象
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩(0-100):");
//获得输入成绩
int score = scanner.nextInt();
//判断成绩
if (score <= 100 && score >= 90) {
System.out.println("优");
} else if (score < 90 && score >= 80) {
System.out.println("良");
} else if (score < 80 && score >= 60) {
System.out.println("及格");
} else if (score < 60 && score >= 0) {
System.out.println("不及格");
} else {
System.out.println("成绩不合法");
}
//关闭输入流
scanner.close();
这里的程序就会根据用户输入的不同数据而执行不同的语句。
if语句是可以嵌套的,嵌套时注意程序的整体结构,{
和}
需要对应,下面代码是对上面代码的改进版本:
//声明Scanner对象
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩(0-100):");
//判断输入是否合法
if (scanner.hasNextInt()) {
//获得输入成绩
int score = scanner.nextInt();
//判断成绩
if (score <= 100 && score >= 90) {
System.out.println("优");
} else if (score < 90 && score >= 80) {
System.out.println("良");
} else if (score < 80 && score >= 60) {
System.out.println("及格");
} else if (score < 60 && score >= 0) {
System.out.println("不及格");
} else {
System.out.println("成绩不合法");
}
}else{
System.out.println("请输入正确数据");
}
//关闭输入流
scanner.close();
Java中的switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。它的基本结构为:
switch(表达式){
case value1:
//语句1
break;//可选
case value2:
//语句2
break;//可选
...
case valuen:
//语句n
break;//可选
default: //可选
//语句n+1
}
表达式的值支持char,byte,short,int和它们的包装类Character,Byte,Short,Integer,和String(从Java SE 7开始支持String类型),enum。
case语句中的value值应该与对应的switch语句的表达式的值一致,当switch表达式的值“命中”某条case语句的值时,就会执行对应case语句中的代码,然后按照顺序结构来执行,直到break语句出现或者switch语句的结束来结束这个switch语句。
break语句表示结束,中止的意思,它在switch语句中表示结束这个switch语句,它在switch语句中一般都会与case配对,如不配对,就可能会出现case穿透现象。
default语句不需要vaule值,因为它只有它对应的switch的表达式未“命中”case语句或者“命中”后未“遇见”break语句时执行。
char grade = 'A';
switch (grade) {
case 'A': //匹配到A执行
System.out.println("优");
break; //结束switch语句
case 'B': //匹配到B执行
System.out.println("良");
break;
case 'C': //匹配到C执行
System.out.println("及格");
break;
case 'D': //匹配到D执行
System.out.println("不及格");
break;
default: //未匹配到时执行
System.out.println("等级有误!");
}
上述代码会根据grade值的不同执行不同的代码。
case穿透:因为switch表达式命中case语句之后,如果后续并未遇到break语句,它就会按照顺序结构执行下去,这个现象就称作case穿透(上述代码中去掉break就可明显观察到case穿透现象)。
循环结构表示程序反复执行某个或某些操作,直到某条件为真(或为假)时才可终止循环。
在Java中,while是最基本的循环,它的结构为:
其Java语法为:
while(布尔表达式){
//循环内容
}
int i = 1;
while (i <= 100) { //当i小于等于100时执行
System.out.println(i);
i++; //自增
}
上述代码就是打印1~100的循环结构。
do{
//循环代码
} while(布尔表达式);
do while循环与while循环相似,但唯一不同的是,do while循环至少会执行一次循环代码。
while与do while的区别:
所以说do while会至少执行一次循环语句。
int i = 0;
while (i < 0) {
System.out.println(i);
i++;
}
System.out.println("-------------");
do {
System.out.println(i);
i++;
} while (i < 0);
其执行结果如下:
-------------
0
我们发现,相对于条件不满足的情况,while未执行循环语句,但是do while执行了一次循环语句,这就是这两个循环的唯一区别。
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
其语法格式为:
for(初始化语句; 布尔表达式; 更新语句){
//循环语句
}
配合上面的流程图,我们就知道for循环的执行流程了,我们这里直接使用例子:
//打印 1~100的整数
for (int i = 1; i <= 100; i++) {
System.out.println(i);
}
我们可以把这段代码与上述的while循环代码对比,发现我们使用for循环更为简洁。
在Java5之后引入了一种主要用于数组或集合的增强for循环。它的语法格式如下:
for(声明语句 : 遍历对象){
//代码
}
int[] array = {1, 2, 3};
for (int i : array) {
System.out.println(i);
}
上述代码就是遍历数组的增强for循环。
既然选择了远方,留下来的就只能是背影。