语法
if:
1,对具体的值进行判断。
2,对区间判断。
3,对运算结果是boolean类型的表达式进行判断。
switch:
1,对具体的值进行判断。
2,值的个数通常是固定的。
对于几个固定的值判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存,效率相对高一点。
break:跳出。
break作用的范围:要么是switch语句,要么是循环语句。
记住:当break语句单独存在时,下面不要定义其他语句,因为执行不到。
break跳出所在的当前循环。
如果出现了循环嵌套,break想要跳出指定的循环,可以通过标号来完成。
break li
continue:继续。
作用的范围:循环结构。
continue:结束本次循环,继续下次循环。
如果continue单独存在时,下面不要有任何语句,因为执行不到。
For循环嵌套
大圈套小圈思想
for(int x=0; x<4; x++)//外循环控制的是行数
{for(int y=0; y<5; y++)}//内循环控制的是每一行的个数
for(int x=1; x<=5; x++){for(int y=x; y<=5; y++){System.out.print("*");}System.out.println();}多的朝上for(int x=1; x<=5; x++){for(int y=1; y<=x; y++){System.out.print("*");}System.out.println();}多的朝下
函数
定义函数的格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...) {
执行语句;
return 返回值;
}
特殊情况:
功能没有具体的返回值,这时return的后面直接用分号结束。
返回值类型怎么体现呢?因为没有具体值,所以不可以写具体的数据类型。
在java中只能用一个关键字来表示这种情况。关键字是:void.
总结:没有具体返回值时,返回值类型用void来表示。
注意:如果返回值类型是void,那么函数中的return语句可以省略不写。
需求1: 定义一个功能,完成两个整数的和的获取。
思路:既然定义功能,就是可以用函数来体现。
如何定义一个函数呢?
通过两个明确来完成。
是和。是功能的结果,所以该功能的返回值类型是int 。
其实就是在明确函数的返回值类型。
有,加数和被加数。这就是函数的参数列表(参数的个数,参数的类型)
其实就是在明确参数列表。
注意:返回值类型和参数类型没有直接关系。
需求2: 定义一个功能,画一个矩形在控制台。
没有结果,因为直接打印到了,控制台,并未返回给调用者。
用void表示。
有,行和列不确定。两个。整数 int.
需求3: 定义一个功能,比较两个数是否相等。
有,boolean.
有,两个整数。
函数的重载
1,同一个类,
2,同名。
3,参数个数不同。or 参数类型不同。
4,函数重载和返回值类型无关。
5,java是严谨性语言,如果函数出现的调用的不确定性,会编译失败。
数组
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
局部代码块。限定局部变量的生命周期
{ int age = 3;
System.out.println(age);
}
int[] arr = new int[3];
arr[0] = 89;
for(int x=0; x<3; x++){System.out.println(arr[x]);}
输出:89、0、0,初始化为零
int[] arr = new int[3]; System.out.println(arr[3]);//ArrayIndexOutOfBoundsException: 当访问到数组中不存在的角标时,就会发生该异常。 arr = null; System.out.println(arr[0]);//NullPointerException 当引用型变量没有任何实体指向时,还在用其操作实体。就会发生该异常。
内存的划分:
1,寄存器。 相当于Cpu
2,本地方法区。 相当于不同的操作系统,如windows,苹果
3,方法区。存放方法和静态变量,也叫共享数据区,方法调用完毕后从栈内存回到方法区(弹栈)
4,栈内存。
存储的都是局部变量或者代码块
而且变量所属的作用域一旦结束,该变量就自动释放。
5,堆内存。
存储是数组和对象(其实数组就是对象) 凡是new建立在堆中。
特点:
1,每一个实体都有首地址值。
2,堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同。整数是0,小数0.0或者0.0f,boolean false char '\u0000'
3,垃圾回收机制。
格式1
需要一个容器,但是不明确容器的具体数据。
int[] arr = new int[3];
格式2
需要一个容器,存储已知的具体数据。
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
int[] arr = new int[]{89,34,270,17};
int[] arr = {89,34,270,17};
对数组操作最基本的动作就是存和取、遍历
核心思想:就是对角标的操作。
int[] arr = {89,34,270,17};System.out.println("length:"+arr.length); for(int x=0; x<arr.length ; x++) { System.out.println("arr["+x+"] = "+arr[x]+";");//arr[0] = 89; 角标从小到大 } for(int x=arr.length-1; x>=0; x--) { System.out.println("arr["+x+"] = "+arr[x]+";");//arr[0] = 89; 角标从大到小 }
数组的使用
获取数组中的最大值。
思路:
1,需要进行比较。并定义变量记录住每次比较后较大的值。if
2,对数组中的元素进行遍历取出,和变量中记录的元素进行比较。for
如果遍历到的元素大于变量中记录的元素,就用变量记录住该大的值。
3,遍历结果,该变量记录就是最大值。
定义一个功能来是实现。
明确一,结果。
是数组中的元素。int .
明确二,未知内容。
数组.
public static void main(String[] args) { int[] arr = { -12, -13, -54, -24, -56, -34 }; int max = getMax(arr); // max这里可以随便写成其他,只是为了输出 System.out.println("最大值为:" + max); // System.out.println("最大值为:"+getMax(arr));也可这样 } public static int getMax(int[] arr) { // int max=0,不要怎么写 int max = arr[0]; // 定义变量为数组里任何一个任何数都行 for (int x = 1; x < arr.length; x++) { // 如果x=0,和自己比较没什么意义 if (arr[x] > max) max = arr[x]; } return max; }
// 通过角标获取最大值 private static int getMax2(int[] arr) { int dex = 0; for (int i = 1; i < arr.length; i++) { if (arr[i] > arr[dex]) { dex = i; } } System.out.println(arr[dex]); return arr[dex]; }
选择排序
//排完序后需要遍历数组,为了好看点写了下面的方法public static void printArray(int[] arr) { System.out.print("["); for (int x = 0; x < arr.length; x++) { if (x != arr.length - 1) System.out.print(arr[x] + ", "); else System.out.println(arr[x] + "]"); } }
public static void selectSort(int[] arr) { for (int x = 0; x < arr.length - 1; x++) { for (int y = x + 1; y < arr.length; y++) { if (arr[x] > arr[y]) { // 一个循环替换见图 int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } } }
这里的的转换也可以定义一个方法
public static void swap(int[] arr,int a,int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; }//然后public static void selectSort(int[] arr) { for(int x=0; x<arr.length-1; x++) { for(int y=x+1; y<arr.length; y++) { if(arr[x]>arr[y]) { swp(arr,x,y) }
另一种选择排序,提高性能
冒泡排序 相邻两个元素相比,arr[0]与arr[1]相比,arr[1]与arr[2]相比........ 最值首先出现在最末尾
private static void bubbleSort(int[] arr) { for (int x = 0; x < arr.length - 1; x++) { //外圈 for (int y = 0; y < arr.length - x - 1; y++) {// -x:比较元素减少,-1:避免角标越界 if (arr[y] > arr[y + 1]) { int temp = arr[y]; arr[y] = arr[y + 1]; arr[y + 1] = temp; } } } }
这只是面试的时候用到,在Java有个工具类就可以排序 Arrays.sort(arr);
查找功能
一般查找方式
这里的-1:如果数组里没有一个数和查找的数相匹配,就返回个-1,
而下脚标没-1,所以结果是-1,意为着没有数组里没有这个数
、
折半查找 可以提高效率,但是数组必须有序
private static int halfSearch(int[] arr, int key) { int min, max, mid; min = 0; max = arr.length - 1; mid = (min + max) / 2; while (arr[mid] != key) { if (key > arr[mid]) { min = mid + 1; } else if (key < arr[mid]) { max = mid - 1; } if (min > max) { return -1; } mid = (min + max) / 2; } return mid; }
折半查找的第二种方式 可以提高效率,但是数组必须有序
private static int halfSearch_2(int[] arr, int key) { int min, max, mid; min = 0; max = arr.length - 1; // mid = (min + max)/2; while (min <= max) { mid = (min + max) / 2; if (key > arr[mid]) { min = mid + 1; } else if (key < arr[mid]) { max = mid - 1; } else return mid; } return -1; }
总结:
/**建立一个用于操作数组的工具类,其中包含着常见的对数组操作的函数如:最值,排序等 。@author 张三 ()@version V1.0 (版本)*/public class ArrayTool{
private ArrayTool(){}//该类中的方法都是静态的,所以该类是不需要的创建对象的。为了保证不让其他成创建该类对象 ,可以将构造函数私有化。
/** 获取整型数组的最大值。 @param arr 接收一个元素为int类型的数组。 (参数) @return 该数组的最大的元素值 */ public static int getMax(int[] arr) { int maxIndex = 0; for(int x=1; x<arr.length; x++) { if(arr[x]>arr[maxIndex]) maxIndex = x; } return arr[maxIndex]; } /** 对数组进行选择排序。 @param arr 接收一个元素为int类型的数组。
*/ public static void selectSort(int[] arr) { for(int x=0; x<arr.length-1; x++) { for(int y=x+1; y<arr.length; y++) { if(arr[x]>arr[y]) swap(arr,x,y); } } }
/* 用于给数组进行元素的位置置换。 @param arr 接收一个元素为int类型的数组。 @param a @param b */ private static void swap(int[] arr,int a,int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } /** 获取指定的元素在指定数组中的索引. @param arr 接收一个元素为int类型的数组。 @param key 要找的元素。 @return 返回该元素第一次出现的位置,如果不存在返回-1. */ public static int getIndex(int[] arr,int key) { for(int x=0; x<arr.length; x++) { if(arr[x]==key) return x; } return -1; } /** 将int数组转换成字符串。格式是:[e1,e2,...] @param arr 接收一个元素为int类型的数组。 @return 返回该数组的字符串表现形式。 */ public static String arrayToString(int[] arr) { String str = "["; for(int x=0; x<arr.length; x++) { if(x!=arr.length-1) str = str + arr[x]+", "; else str = str + arr[x]+"]"; } return str; }}class ArrayToolDemo{ /* 保证程序的独立运行。 */ public static void main(String[] args) { int[] arr = {4,8,2,9,72,6};
// ArrayTool tool = new ArrayTool();// int max= ArrayTool.getMax(arr);//System.out.println("max="+max); int index = ArrayTool.getIndex(arr,8); System.out.println("index="+index); }}
二维数组
int[][] arr = new int[3][2];//创建一个二维数组,该数组中有3个一维数组,每一个一维数组中有2个元素。
求数组的和
int sum = 0; int[][] arr = {{3,1,7},{5,8,2,9},{4,1}};for(int x=0; x<arr.length; x++) { for(int y=0; y<arr[x].length; y++) { sum += arr[x][y]; } } System.out.println("sum="+sum);