目录
1.分支循环
- 分支结构有 if 和 switch
- 循环条件有 for 和 while
1.1 if
全条件分支:
if( /* condition 1*/){ //order1 ; } else if ( /* condition 2*/) { //order2 ; } //...else if ( /* condition N*/){} else { //order N+1 ; }
if ( 逻辑表达式1 /* == true */) {
指令1
}
else if ( 逻辑表达式2 /* == true */) {
指令2
}
//....表示中间可能有很多其他的 else if
else {
指令n
}
1.1.1 单分支 if
if ( 逻辑表达式1 /* == true */) {
指令1
}
如果输入的条件满足,那么就执行方法体的指令,否则不执行
public class test {
public static void main(String[] args) {
if( 1 + 1 == 2){
System.out.println("条件为真");
}
}
}
1.1.2 多分支 if-else if
if ( 逻辑表达式1 /* == true */) {
指令1
}
else if ( 逻辑表达式2 /* == true */) {
指令2
}
- 如果输入的条件满足,那么就执行方法体的指令(下面的条件就不会判断)
- 不满足则一直向下陆续判断条件,直到出现为止
- 如果都不满足,则不执行
public class test {
public static void main(String[] args) {
if( 1 + 1 == 3){
System.out.println("条件1为真");
}
else if( 1 + 1 == 2 ){
System.out.println("条件2为真");
}
}
}
1.1.3 else
用于单分支或多分支之后的补充,相当于一种条件的补集(所有条件不满足必然执行)
public class test {
public static void main(String[] args) {
if( 1 + 1 == 3){
System.out.println("条件1为真");
}
else if( 1 + 1 == 1 ){
System.out.println("条件2为真");
}
else {
System.out.println("以上都不对");
}
}
}
1.2 switch
对于 if 循环 ,如果分支过多 或者 所有逻辑条件的被判断语句(变量1 == 变量2(或 整型常量))变量1相同且变量2为整型(case 的接收端不能为小数),即可使用switch结构
switch ( /*(int)Calculate*/ ){ case /*(int)result 1*/ : //order 1; break; case /*(int)result 2*/: //order 2; break; //... case /*(int)result N*/: //order N; break; default: // order N+1; }
1.2.1 switch中表达或情况
public class test {
public static void main(String[] args) {
//键盘输入一个字符,判断输出字符还是数字
java.util.Scanner scanf = new java.util.Scanner(System.in);
char ch = scanf.next().charAt(0);
switch (ch){
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
System.out.println("输入的是数字");break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'h':
System.out.println("输入的是字符");break;
default:
System.out.println("其他");break;
}
}
}
1.2.2 switch的一些性质
switch ( 16/7){
case 2:
System.out.println("switch 的表达式 输入端的计算类型被转换成int"); //会输出这个
break;
case 1:
case 0:
break;
default:System.out.println("switch 的表达式 输入端的计算类型被转换成float");
}
从上面的例子可以看出,switch和case会把后面跟随的变量或常量转换到int类型进行比较
1.3 for
带初始化的一种循环机制
1.3.1 普通for循环
可以提供下角标,支持数组索引遍历
for(/* Init */ ; /*condition*/ ;/*order 2*/){
//order 1
}
//Init 循环开始前初始化赋值(如果在这里创建变量,该变量为局部变量,生命周期为循环体内),只会执行一次
//condition 循环开始和继续 的逻辑条件
//order 1 循环中满足一次条件就执行一次的指令1
//order 2 每执行完一次就会执行一次条件2
//for内如果有多个语句用逗号间隔,order2可以为空
循环如下:
//1. 初始化(for区域1)
//2. 判断条件condition(for区域2)/*第1次进入循环*//*
3. 执行order 1(若满足)
4. 执行order 2
5. 判断条件condition(for区域2)*//*第2次进入循环*//*
6. 执行order 1(若满足)
7. 执行order 2
8. 判断条件condition(for区域2)*/...
..../*第N次进入循环*//*
3N. 执行order 1(若满足)
3N+1. 执行order 2
3N+2. 判断条件condition(for区域2) // 不满足则跳出*/
1.3.2 增强for循环
全遍历for循环,底层是迭代器,可以用于实现set接口类对象实例的遍历
for(/*ClassName*/ /*element*/:/*Collection*/){ //Order 1; }
1.4 while
1.3.1 普通while
先判断再执行
while ( /*condition*/){ //Order ; }
循环机制
//1. 判断条件condition
/*第1次进入循环*//*
2. 执行order 1(若满足)
3.判断条件condition
*//*第2次进入循环*//*
4. 执行order 1
5.判断条件condition
*/...
..../*第N次进入循环*//*
2N-1. 执行order 1
2N. 判断条件condition // 不满足则跳出*/
1.3.2 do-while
先执行再判断
do{ //Order ; }while ( /*condition*/)
循环机制
//1. 执行order 1
//2.判断条件condition
/*第1次进入循环*//*
3. 执行order 1(若满足)
4.判断条件condition
*//*第2次进入循环*//*
5. 执行order 1
6.判断条件condition
*/...
..../*第N次进入循环*//*
2N+1. 执行order 1
2N+2. 判断条件condition // 不满足则跳出*/
1.5 break,continue 关键字
1.5.1 break
可以终止指定位置的循环(常用作for 循环嵌套中),如果不指定默认终止最近位置的循环
1.5.2 continue
结束本次循环,进入下一次循环
2.数组
2.1. 一维数组
2.1.1 新建数组:
class Array_{
public static void main(String[] args) {
//创建存放与5个int大小的数组
int arr[]=new int[5]; // 也可写成int[] arr
//也可以先声明在定义
int arr2[];
arr2=new int[5];
//静态初始化
int[] arr3={1,2,3,4,5};//指定内容
}
}
2.1.2. 数组赋值特性
- 基本数据类型变量之间赋值是值传递
- 数组整体赋值默认是引用赋值,是赋值给地址
class Array_{
public static void main(String[] args) {
//创建存放与5个int大小的数组
int arr[]=new int[5]; // 也可写成int[] arr
int[] arr3={1,2,3,4,5};//指定内容
//引用传递
arr = arr3; //arr 指向arr3的内容(理解为arr为arr3的别名)
arr3[4] = 7; //改变 arr3 将改变 arr
System.out.println(arr[4]); //两个数组第五个元素都是7
arraytest(arr);
System.out.println(arr3[0]); //两个数组第一个元素都是20
}
static void arraytest(int[] inputarr){
//如果整个数组为形参,改变形参的值,会导致原数组的值改变
if(inputarr.length != 0){
inputarr[0] = 20;
}
}
}
2.2 二维数组
//2维数组(不能像c语言一样,本质上不是一维数组)
int[][] arr4 = new int[10][10];
arr4[1][2] = 1;
2.2.1 二维数组遍历:
//方法1:全遍历
for(int i = 0;i<arr4.length;i++){
for(int j = 0;j<arr4[i].length;j++){
System.out.print(arr4[i][j] +" ");
}
System.out.print('\n');
}
//方法2:增强for循环
System.out.print("== 分割线 ==" +"\n");
for(int line[]:arr4){
for(int ele:line){
System.out.print(ele+" ");
}
System.out.print('\n');
}
/* 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
== 分割线 ==
0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0*/