给定以下数组,我们通过Java实现四个操作(查询、增加、删除、修改)
int[] myArr = {14,56,21,10,9,17,62,36,11,2};
1、查询
(1)给定值返回序号
(2)给定序号返回值
(3)查询整个数组最大值、最小值
(1)给定值返回序号 (通过for循环遍历数组,在通过if判断语句判断是否在该数组里面),代码如下:
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
int[] myarr={14,56,21,10,9,17,62,36,11,2}; //创建数组
System.out.println("请输入你要查询的数字");
Scanner in =new Scanner(System.in);
int goal=in.nextInt();
for (int i = 0; i <myarr.length ; i++) {
if (goal==myarr[i]){
System.out.println("你要查询的数字的序号为:"+i);
break; //查询到跳出循环
}
else {
System.out.println("你查询的数字不在该数组中");
break;//如果不在也要跳出循环
}
}
}
}
(1)给定值,判断该数字是否在该数组中,返回序号 (采用二分法查)
注意采用二分法,数组必须有序
//给定值返回序列号
import java.util.Arrays;
import java.util.Scanner;
public class Test2 {
public static int digui(int[] arr,int left,int right,int key){
if (left<=right){
int mid=(left+right)/2;
//需要找到数字刚好在中间
if (arr[mid]==key){
return mid;
}
//数组现在是从小到大,目标值大于中间值,证明目标值在右边
else if(arr[mid]<key) {
left = mid + 1;
return digui(arr, left, right, key);
}
else{
right=mid-1;
return digui(arr,left,right,key);
}
}
return -1;
}
public static void main(String[] args) {
int[] myarr={14,56,21,10,9,17,62,36,11,2}; //创建数组
System.out.println("请输入你要查询的数字");
Scanner in =new Scanner(System.in);
int goal=in.nextInt();
//采用冒泡排序的方法,使数组从小到大排序
//冒泡排序主要搞清楚外层for循环,内层for循环的含义
//外层for循环:确定一个数组需要好多次操作才能排完
//内容for循环:确定每次操作需要比较多少次
for (int i = 0; i <myarr.length-1 ; i++) {
for (int j = 0; j <myarr.length-i-1; j++) {
if (myarr[j]>myarr[j+1]){ //这个if判断确定是从大到小,还是从小到大,这里我们是从小到大
//进行数据交换,需要引入中间变量
int temp=myarr[j];
myarr[j]=myarr[j+1];
myarr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(myarr)); //打印新数组
//然后在采用二分法,查找数字(若存在,打印该数字在数列中,若不存在,打印该数字不在数组中)
//二分查找的关键是在给定数组的左、右端点
int index=digui(myarr,0,myarr.length-1,goal);
if (index==-1){
System.out.println("目标元素不存在");
}
else {
System.out.println("目标元素的下标为:" + index);
}
}
}
(2)给定序号返回值
//给定序号返回值
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
int[] myarr = {14, 56, 21, 10, 9, 17, 62, 36, 11, 2}; //创建数组
System.out.println("请输入你要查询序号");
Scanner in = new Scanner(System.in);
int goal = in.nextInt();
if (goal>myarr.length-1||goal<0){
System.out.printf("你查询的序号超过范围");
}
else {
for (int i = 0; i <myarr.length ; i++) {
if (myarr[goal]==myarr[i]){
System.out.println("你查找的序号的数字为:"+myarr[i]);
break;
}
}
}
}
}
(3)查询整个数组最大值、最小值
public class Test2 {
public static void main(String[] args) {
int[] myarr = {14, 56, 21, 10, 9, 17, 62, 36, 11, 2}; //创建数组
int min =myarr[0]; //给最小值赋一个初始值
int max = myarr[0]; //给最大值赋一个初始值
for (int i = 0; i <myarr.length ; i++) {
if(min>myarr[i]){
min=myarr[i];
}
else if(max<myarr[i]){
max=myarr[i];
}
}
System.out.println("最小值为:"+min+"\n"+"最大值为:"+max);
}
}
2、在数组中添加一个数
import java.util.Scanner;
//在某个位置上添加一个数字
public class Test2 {
public static void main(String[] args) {
int[] myarr = {14, 56, 21, 10, 9, 17, 62, 36, 11, 2}; //创建数组
int[] newmyarr= new int[myarr.length+1]; //创建新数组,因为数组的长度发生了变化
System.out.println("请输入你要添加的数字:");
Scanner in =new Scanner(System.in);
int value=in.nextInt();
System.out.println("请输入你要插入数字的位置:");
int index=in.nextInt();
for (int i = 0; i < newmyarr.length; i++) {
if(i<index){
newmyarr[i]=myarr[i]; //拷贝之前不需要改变的数字
}
else if(i==index){
newmyarr[i]=value; //将需要添加位置的,添加相应的数字
}
else {
newmyarr[i]=myarr[i-1]; //因为循环的是新数组的长度,而我们添加一个数字,就需要-1
}
}
System.out.println(Arrays.toString(newmyarr)); //打印新的数组
}
}
3、在数组中删除一个数(可以仿照添加的思路)
import java.util.Arrays;
import java.util.Scanner;
//在某个位置上删除一个数字
public class Test2 {
public static void main(String[] args) {
int[] myarr = {14, 56, 21, 10, 9, 17, 62, 36, 11, 2}; //创建数组
int[] newmyarr= new int[myarr.length-1]; //创建新数组,因为数组的长度发生了变化
Scanner in =new Scanner(System.in);
System.out.println("请输入你要删除数字的位置:");
int index=in.nextInt();
for (int i = 0; i < newmyarr.length; i++) {
if(i<index){
newmyarr[i]=myarr[i]; //拷贝之前不需要改变的数字
}
else {
newmyarr[i]=myarr[i+1]; //因为循环的是新数组的长度,而我们删除一个数字,就需要+1
}
}
System.out.println(Arrays.toString(newmyarr)); //打印新的数组
}
}
4、在数组中修改一个数
import java.util.Arrays;
import java.util.Scanner;
//在某个位置上修改数字的值
public class Test2 {
public static void main(String[] args) {
int[] myarr = {14, 56, 21, 10, 9, 17, 62, 36, 11, 2}; //创建数组
Scanner in =new Scanner(System.in);
System.out.println("请输入你要修改数字的位置:");
int index=in.nextInt();
System.out.println("请输入你要修改数字的值:");
int value=in.nextInt();
for (int i = 0; i < myarr.length; i++) {
if(i==index){
myarr[i]=value; //找到需要修改的数字
}
}
System.out.println(Arrays.toString(myarr)); //打印数组
}
}