Java基础
流程控制与数组
一、流程控制
1.1顺序结构
程序从上到下逐行执行,中间没有任何判断和跳转。
1.2分支结构
1.2.1 if条件语句
格式:
if(布尔表达式){
语句或语句块
}else if(布尔表达式){
语句或语句块
}else{
语句或语句块
}
示例:
public static void main(String[] args) {
int grade = 78;
if (grade < 0) {
System.out.println("成绩输入不合规,请重新输入!");
} else if (grade < 60) {
System.out.println("不及格");
} else if (grade >= 60 && grade < 80) {
System.out.println("良好");
} else if (80 <= grade && grade <= 100) {
System.out.println("优秀");
}
}
注:
if后面的括号里面只能是一个逻辑表达式,即表达式返回值只能是Boolean类型。
if 、else if 、else后面只有一行语句时可以省略“{}”,但是为了可读性一般不要省略。
在if语句中,总是把包含范围小的条件放在前面处理。如上面程序可以写为:
public static void main(String[] args) {
int grade = 800;
if (grade < 0 || grade > 100) {
System.out.println("成绩输入不合规,请重新输入!");
} else if (grade >= 80) {
System.out.println("优秀");
} else if (grade >= 60) {
System.out.println("良好");
} else if (grade < 60) {
System.out.println("不及格");
}
}
1.2.2 switch语句
switch语句由一个控制表达式和多个case组成。switch语句后面的控制表达式数据类型只能是byte,short,char,int (java SE 7开始支持String)和枚举类型,不能是Boolean类型。
语法:
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}
语法规则:① switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
② case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
③ 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
④ switch 语句可以包含一个 default 分支,一般是 switch 语句的最后一个分支。default 在没有 case 语句的值和变量值相等的时候执行。default 不需要 break 语句。
示例:
public static void main(String[] args) {
String name = "张三";
switch (name) {
case "张三":
System.out.println("这是张三");
break;
case "李四":
System.out.println("这是李四");
break;
default:
System.out.println("这人我不认识");
}
}
1.3循环结构
Java中有三种主要的循环结构: ①while 循环 ②do…while 循环 ③for 循环
1.3.1 while循环
语法格式:
while( 布尔表达式 ) {
//循环内容
}
只要布尔表达式为 true,循环就会一直执行下去。
示例:
public static void main(String[] args) {
int i = 1;
while (i < 10) {
System.out.println(i + "\n");
i++;
}
}
输出结果:
1
2
3
4
5
6
7
8
9
1.3.2 do…while 循环
语法格式:
do {
//代码语句
}while(布尔表达式);
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。
示例:
public static void main(String[] args) {
int i = 1;
do {
System.out.println(i + "\n");
i++;
} while (i < 10);
}
输出结果:
1
2
3
4
5
6
7
8
9
1.3.3 for 循环
语法格式:
for(初始化; 布尔表达式; 更新) {java
//代码语句
}
for循环执行的次数是在执行前就确定的。最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。 执行一次循环后,更新循环控制变量。再次检测布尔表达式。循环执行上面的过程。
示例:
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
System.out.println(i + "\n");
}
}
输出结果:
1
2
3
4
5
6
7
8
9
增强 for 循环
for(声明语句 : 表达式)
{
//代码句子
}
**声明语句:**声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
**表达式:**表达式是要访问的数组名,或者是返回值为数组的方法。
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
for (int x : numbers) {
System.out.print(x + " ");
}
System.out.print("\n");
String[] names = {"abc", "def", "ghi", "klm"};
for (String name : names) {
System.out.print(name + " ");
}
}
结果
10 20 30 40 50
abc def ghi klm
1.4 控制循环结构
break关键字
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
break 跳出最里层的循环,并且继续执行该循环下面的语句。
示例:
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
System.out.println(i + "\n");
if (i == 3) {
break;
}
}
}
结果:
1
2
3
continue 关键字
continue 适用于任何循环控制结构中。作用是让程序立刻终止本次循环跳转到下一次循环的迭代。 在 for 循环中,continue 语句使程序立即跳转到更新语句。在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
示例
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
if (i == 3) {
continue;
}
System.out.println(i + "\n");
}
}
结果:
1
2
4
5
6
7
8
9
二、数组类型
数组可用于存储多个数据,每个数组元素存放一个数据。再数组中要求所有的元素有相同的数据类型,即数组元素的类型是唯一的。
一旦数组被初始化完成,数组在内存中占用的空间将被固定下来,因此数组的长度不能改变。数组是一种引用类型。
声明数组变量
ataType[] arrayRefVar; // 首选的方法
或
dataType arrayRefVar[]; // 效果相同,但不是首选方法
注:声明数组变量的时候不能指定长度。
创建数组(数组的初始化)
Java中数组必先初始化,即为数组的元素分配内存空间,为每个元素赋初值,然后才能使用。
数组的初始化有以下两种方式:
①静态初始化:显式指定数组中每个元素的初始值,由系统决定数组的长度。
dataType[] arrayRefVar = {value0, value1, ..., valuek};
②动态初始化:指定数组的长度,由系统为数组元素分配初始值。
dataType[] arrayRefVar = new dataType[arraySize];
示例:
public static void main(String[] args) {
// 静态初始化
int[] intArr;
intArr = new int[]{1, 2, 3, 4, 5};
String[] strArr;
strArr = new String[]{"abc", "def"};
// 动态初始化
int[] intArr1 = new int[5];
String[] strArr1 = new String[5];
}
使用数组
public static void main(String[] args) {
// 初始化数组
// 静态初始化
int[] intArr;
intArr = new int[]{1, 2, 3, 4, 5};
// 动态初始化
String[] strArr = new String[3];
// 使用数组
// 给动态初始化数组赋值
strArr[0] = "Hello";
strArr[1] = "word";
strArr[2] = "java";
// 打印指定数组元素
System.out.println("intArr数组的第一个元素:" + intArr[0]);
System.out.println("strArr数组的第一个元素:" + strArr[0]);
// 遍历数组打印所有元素
for (int i = 0; i < strArr.length; i++) {
System.out.println("strArr1的第" + (i + 1) + "个元素是:" + strArr[i]);
}
// 计算数组元素总和
int total = 0;
for (int i = 0; i < intArr.length; i++) {
total += intArr[i];
}
System.out.println("数组intArr总和为:" + total);
}
结果:
intArr数组的第一个元素:1
strArr数组的第一个元素:Hello
strArr1的第1个元素是:Hello
strArr1的第2个元素是:word
strArr1的第3个元素是:java
数组intArr总和为:15
foreach循环(数组的加强for循环)
语法格式:
for(type element: array)
{
System.out.println(element);
}
示例:
public static void main(String[] args) {
// 加强for循环
int j = 1;
for (String str : strArr) {
System.out.println("strArr数组的第"+(j++) +"个元素是:"+str);
}
}
结果:
strArr数组的第1个元素是:Hello
strArr数组的第2个元素是:word
strArr数组的第3个元素是:java
多维数组
格式如下(以二维数组为例):
type[][] typeName = new type[typeLength1][typeLength2];
System.out.println(element);
}
示例:
```java
public static void main(String[] args) {
// 加强for循环
int j = 1;
for (String str : strArr) {
System.out.println("strArr数组的第"+(j++) +"个元素是:"+str);
}
}
结果:
strArr数组的第1个元素是:Hello
strArr数组的第2个元素是:word
strArr数组的第3个元素是:java
多维数组
格式如下(以二维数组为例):
type[][] typeName = new type[typeLength1][typeLength2];