java基本语法(数组中-复制、反转和查找)
1.复制:深度复制(新建了一个空间)和浅度复制(两个数组名指向同一块地址)
package start;
public class YuFa {
public static void main(String[] args) {
// 对于单个变量,复制值的时候都是深度复制,是新开辟了一块空间
int a = 4;
int b = a;
// 改变a的值,但b的值不变
a = 2;
System.out.println("a的值变为2,此时b的值为:" + b);
// 数组的浅度复制(两个数组名指向同一块地址)
int[] c = new int[] {1,2,3};
int[] d = c;
c[0] = 0;
System.out.println("c[0]的值变为0,此时d[0]的值为:" + d[0]);
// 数组的深度复制(新建了一个空间)
c[0] = 1;//还原c数组
int[] e = new int[c.length];
for (int i = 0;i < c.length;i++) {
e[i] = c[i];
}
c[0] = 0;
System.out.println("c[0]的值变为0,此时e[0]的值为:" + e[0]);
}
}2.数组的反转
package start;
public class YuFa {
public static void main(String[] args) {
int[] a = {1,2,3,4,6,0,8};
// 数组反转 方法一,数组的对半替换,a[i]与 a[a.length - i - 1]交换位置
for(int i = 0;i < a.length / 2;i++) {
// 交换位置
int tmp = a[i];
a[i] = a[a.length - i - 1];
a[a.length - i - 1] = tmp;
}
// 打印出数组
for (int i = 0;i < a.length;i++) {
System.out.print(a[i] + " ");
}
System.out.println(" ");
// 数组反转 方法二,数组的对半替换,a[i]与 a[j]交换位置
for (int i = 0,j = a.length - 1;i < j;i++,j--) {
int tmp2 = a[i];
a[i] = a[j];
a[j] = tmp2;
}
// 打印出数组
for (int i = 0;i < a.length;i++) {
System.out.print(a[i] + " ");
}
}
}3.查找:包括线性查找和二分查找两种情况:
package start;
public class YuFa {
public static void main(String[] args) {
// 变量初始化,要查找的元素和数组
int[] a = new int[] {1,3,4,6,7,10,90,45};
int destination1 = 100;
String[] s = {"a","b","c","d","e","f","g"};
String destination = "c";
// 设置标志变量,方便判断是否找到
boolean isFlag = true;
// 线性查找
for(int i = 0;i < s.length;i++) {
if(s[i].equals(destination)) {
isFlag = false;
System.out.println("已经找到该元素,其下标(索引)为: " + i);
break;
}
}
if(isFlag) {
System.out.println("抱歉,数组中不存在该元素");
}
// 二分查找,查找的前提是数组是顺序排列的
isFlag = true;
// 定义查找的范围,以及查找的中间元素
int head = 0;
int end = a.length - 1;
while(head <= end) {
int middle = (head + end) / 2;
if(a[middle] == destination1) {
isFlag = false;
System.out.println("已经找到该元素,其下标(索引)为: " + middle);
break;
}
else
if(a[middle] > destination1){
end = middle -1;
}
else {
head = middle + 1;
}
}
if(isFlag) {
System.out.println("抱歉,数组中不存在该元素");
}
}
}
