版权声明:中华人民共和国持有版权 https://blog.csdn.net/Fly_Fly_Zhang/article/details/83180781
作业1
public class He{
/*
1、{1,2,3,4,5,6}
* 将奇数放在偶数前面 大小顺序不要求
*/
//方法一:
public static int[] sum(int[] array1) {
int[] array2= new int[array1.length];
int a= 0;
int b= 0;
for(int i=0;i<array1.length;i++)
{
if(array1[i] % 2 !=0)
{
array2[a]=array1[i];
a++;
}else
{
array2[array1.length-1-b]=array1[i];
b++;
}
}
return array2;
}
//方法二:
public static int[] sum1(int[] array2) {
int a= 0;
int b= 0;
int i=0;
while(i<array2.length-1-b) {
if ((array2[i] % 2 == 0) ){
a = array2[i];
array2[i] = array2[array2.length - 1 - b];
array2[array2.length - 1 - b] = a;
b++;
} else {
i++;
}
}
return array2;
}
// 2、一个数组是有序的,给定一个key:数字 有两个数字的和加起来等于key
// 找到这两个数字的下标
public static void He (int[] array4,int key) {
Arrays.sort(array4);
int i =0;
int a=0;
for(i=0;i<array4.length;i++){
for( a=i;a<array4.length;a++){
if(key==array4[i]+array4[a])
System.out.println("两个下标为:"+i+";"+a+";");
}
}
}
//3、题目:一个整形数组,除了两个数字只出现一次外,
//其他数字都是两次。{1,3,1,2,3,4} 找到这两个数字
public static void one (int[] array5) {
int i=1;
Arrays.sort(array5);
System.out.print("这两个数字为:");
while(i<array5.length){
if(array5[i]!=array5[i-1]){
System.out.print(array5[i-1]+" ;");
i++;
} else {
i=i+2;
}
if(i==array5.length){
System.out.print(array5[array5.length-1]+";");
}
}
}
public static void main(String[] args) {
int[] array1 = new int[]{6,8,-7,3,0,-1,9,-8};
System.out.println(Arrays.toString(sum(array1)));
System.out.println(Arrays.toString(sum1(array1)));
int key =15;
He(array1,key);
int[] array5=new int[]{8,-1,7,1,0,-1,8,7};
one(array5);
}
}
作业2:
熟悉Arrays这个类里面的方法:
- 2.2:如何排序数组并插入某个元素?
- 2.5:如何搜索数组中的最小值和最大元素?
- 如何合并两个数组(合并到一个新的数组)?
- 如何填充数组(一次填充,部分填充)?
- 2.10:如何删除数组指定元素?
- 2.11: 如何从数组中查找常见的元素?
import java.util.*;
public class TestArrays {
//2.2:如何排序数组并插入某个元素?
public static void copy(int []array1 ,int key) {
Arrays.sort(array1);
int [] array2=new int[array1.length+1];
array2=Arrays.copyOfRange(array1,0,array2.length);
array2[array2.length-1]=key;
Arrays.sort(array2);
System.out.println(Arrays.toString(array2));
}
//2.5:如何搜索数组中的最小值和最大元素?
public static void maxmin(int[] array2) {
Arrays.sort(array2);
int Max=array2[array2.length-1];
int Min=array2[0];
System.out.println("Max="+Max+" "+"Min="+Min);
}
//如何合并两个数组(合并到一个新的数组)?
public static void two(int[] array1,int[]array2) {
int [] array3=new int[array1.length+array2.length];
System.arraycopy(array1,0,array3,0,array1.length-1);
System.arraycopy(array2,0,array3,array1.length,array1.length-1);
System.out.println("新数组为:"+Arrays.toString(array3));
}
//如何填充数组(一次填充,部分填充)?
public static void fill(int val1,int val2) {
int [] array4= new int[10];
int [] array5=new int[10];
Arrays.fill(array4,val1);
System.out.println("一次填充:"+Arrays.toString(array4));
Arrays.fill(array5,0,6,val2);
System.out.println("部分填充:"+Arrays.toString(array5));
}
//2.10:如何删除数组指定元素?
public static void DeleteData(int[] array5,int key1) {
Arrays.sort(array5);
int b=0;
int a = Arrays.binarySearch(array5, key1);
if (a < 0) {
System.out.println("数组中没有要删除的指定元素");
}
while (a >= 0) {
for (int i = a + 1; i < array5.length; i++) {
array5[i - 1] = array5[i];
}
a = Arrays.binarySearch(array5, key1);
b++;
}
int [] array6=new int[array5.length-b];
System.out.println("删除指定元素后的数组为:" + Arrays.toString(Arrays.copyOf(array5,array6.length)));
}
public static void BinarySreach(int[]array6,int key2) {
Arrays.sort(array6);
int a = Arrays.binarySearch(array6, key2);
if(a<0) {
System.out.println("数组中没有指定元素");
}
else{
System.out.print("数组中指定元素的角标为:");
System.out.print(a+"; ");
for (int i = a + 1; i < array6.length; i++) {
if(array6[a]==array6[i]) {
System.out.print(i + "; ");
}else{
break ;
}
}
}
}
public static void main(String[] args) {
int[] array5=new int[]{5,9,6,4,2,8,-1,5};
Scanner scan= new Scanner(System.in);
int key1=scan.nextInt();
int key2=scan.nextInt();
DeleteData(array5,key1);
int[] array6=new int[]{5,9,6,4,2,8,-1,5};
BinarySreach(array6,key2);
System.out.println();
int[] array1 = new int[]{5, 9, -6, 4, -1, 6};
int key = 2;
copy(array1, key);
int[] array2 = new int[]{5, 9, -6, 4, -1, 6};
maxmin(array2);
two(array1, array2);
int val1 = 2;
int val2 = 3;
fill(val1, val2);
}
}
四种拷贝;
拷贝方式 | 表达形式 | 是否产生对象 | 深拷贝/浅拷贝 | java底层表现形式 |
---|---|---|---|---|
Arrays.copyOf/Arrays.copyOfRange | (array,length)/(array,[from,to)) | 是 | 基本:深。引用:浅。 | 用System.arraycopy方法进行copy,可以进行T[](泛型)copy; |
System.arraycopy | (src,srcPos,dest,destPost,length) | 否 | / | 底层是c/c++写的,native表示本地方法 |
数组名.clone | 是 | / | 用System.arraycopy方法进行copy,也是本地方法,object类 | |
for | 一次for循环 | 否 | / |
可变参数编程:数组
public static int sum3(int... array) { //就是三个点,可以输入数组,也可以输入整型数。
int sum = 0;
for(int i : array) {
sum += i;
}
return sum;
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
sum3(1,2,3,4,5);
sum3(1,2);
sum3(array);
sum3(new int[]{1,2,3,4});