遍历
for/each 强化for循环;
int[] num = {1,23,3};
for(int a : num){}
就是把num数组中每一个量挨个传给a;
int a[] = new int[]{1,2,3,3}
使用场景:传递参数为字面量\;
比较字符串使用squals方法,不能使用==;
比较基本类型是比较值,而引用类型(类,数组,接口)是比较内存地址;
传值和传应用
传值指的是基本类型的传递;
两个值互不相关;
传引用指引用类型的传递;
传递的是地址;
public static void mian(String[] args){
int i =2;
m1(i);
System.out.println(i);// 2
int[] arr = (1,2,3);
m2(arr);
System.out.println(arr[0]);// 100
}
public static void m1(int i ){
i++;
System.out.println(i);// 3 传值
}
public static void m2(int[] arr){
arr[0] = 100;
System.out.prinln(arr[0]);// 100 传引用
}
System.arraycopy(复制源数组,源数组起始位置(包含),目标数组,目标数组起始位置(包含),复制个数);
复制是替换复制;
二维数组长度表示内部有多少个一维数组;
因为二维数组中保存的是一维数组,所以获取的时候要使用一维数组的类型进行接收;
一维数组中可能有个数不一致的情况;
int[][] b = new int[3][];
b[0] = new int[1];
b[1] = new int[2];
分别对每个数组进行初始化;
二维数组加两个循环能够形成一个表;
Java中没有多维数组,只有数组的数组;
多维数组也不一定要是规则的矩形;
System.out.println()中,println是属于out的;
System.in标准控制台输入;
使用一个类,必须先找到类名,然后用包名.类;
js中有eval可以识别字符串中的运算;
JDK自带的类可以实现调用JS的功能;
String str = scanner.nextLine();
ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
doublic result = (double)jse.eval(str);
排序
冒泡排序(升序为例):比较相邻的两个元素,如果第一个比第二个大,就交换位置;对每一对相邻元素做相同工作,一轮之后,最大的元素就移动到最后了;针对所有元素重复以上步骤,除了最后一个;每次循环的一对元素越来越少,直到只剩下一个元素,终止。
外层循环决定循环的次数,内层循环是决定每次循环的比较次数;
int count = 0;
for(int i = 0;i<num.length-1;i++){
for(int j =0;j<num.length-1-i;j++){
if(a[j]>a[j+1]){
int temp = a[j+1];
a[j+1]=a[j];
a[j+1]=temp;
}
}
}
选择排序(升序为例):每次把最小的放最左边;先拿出第一个元素,假设是最小的,挨个和后面元素比较;比较一轮之后直到谁最小,然后换位;重复执行;
for(int i =0;i<a.length;i++){
int min=i;// 假设第一个元素最小
for(int j=i+1;j<a.length;j++){// j不能从0开始
if(a[min]>a[j]){
// 循环一次后,min是最小元素的下标
min=j;
}
}
if(min!=i){
// 判断min=i;如果等于i说明i是最小的,不是,说明有比i还小的进行换位
int temp = a[min];
a[min]=a[i];
a[i]=temp;
}
}
API排序,就是Arrays.sort(数组名),就是只能升序,不能进行降序;字符串在里面排序是按照ASCII码进行排序,比较第一位然后比较第二位,以此类推。
二分法查找
确定起始,结束和中间;
目标数值m与中间数据进行比较;
如果m大于中间值,则起始值变成中间值+1,结束值不变;
如果m小于中间值,则结束值变成中间值-1,起始值不变;
目标数据相同,返回中间值;
若起始大于结束,返回-1,表示没有查找到;
适用于不经常变动而查找频繁的有序列表;
while(startPos<=endPos){
if(num==a[m]){
return m;
}else if(num>a[m]){// 查后半截
startPos=m+1;
}else{
endPos = m-1;// 查前半截
}
m=(startPos+endPos)/2;//重新生成中间值
}
return -1;