2019-6-28 [JavaSE] [算法:二分查找].复制.Arrys的常用方法.[项目案例:图书管理系统]

1.算法:二分查找

在这里插入图片描述
在这里插入图片描述

//二分查找
		int [] arr = {1,9,3,7,5};
//升序排序
		int temp;
		for(int i = 0; i < arr.length - 1; i++) {
			for(int j = 0; j < arr.length-1-i; j++) {
				if(arr[j] > arr[j+1]) {
					temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
//排序后
		for(int a : arr) {
			System.out.print(a + ",");
		}
		System.out.println();
//查找
//二分查找法:
		Scanner superman = new Scanner(System.in);
		System.out.println("--输入要查找的数字:");
		int num = superman.nextInt();
		int start = 0;
		int end = arr.length -1;
		int mid = (start + end) / 2;
		while(start <= end) {
			if(num > arr[mid]) {
				start = mid + 1;
			}else if(num < arr[mid]) {
				end = mid -1;
			}else {
				System.out.println("存在,位置:" + mid);
				return;
			}
			mid = (start + end) / 2;//循环拆
		}
		System.out.println("不存在,位置:" + (-start-1));

2.复制

在这里插入图片描述

		int [] arr = {11,22,33,44,55};
//方法一:
		int [] arr1 = new int[arr.length];
		for(int i = 0; i < arr.length; i++) {
			arr1[i] = arr[i];
		}
//方法二:
		//创建一个新的数组
		int [] arr3 = new int[arr.length];
		// 要复制的原数组,原数组的起始位置,目标数组,目标数组的起始位置,复制的个数
		System.arraycopy(arr, 0, arr3, 0, 5);
//方法三:
		int [] arr2 = arr;// arr, arr2是同一个数组对象
//方法四:
		int [] arr4 = arr.clone(); // 对象的复制,对象的克隆  (Object类)

3.Arrays的常用方法

使用java.util.Arrays类

常用方法
①toString
②Sort
③binarySearch
④equals
⑤fill
⑥copyOf
equals()原码:

 public static boolean equals(int[] a, int[] a2) {
        if (a==a2)
            return true;
        if (a==null || a2==null)
            return false;

        int length = a.length;
        if (a2.length != length)
            return false;

        for (int i=0; i<length; i++)
            if (a[i] != a2[i])
                return false;
                
        return true;
    }

示例:

//             0 , 1, 2, 3, 4
		int [] arr = {111,44,33,22,55};
//1.toString把数组 转换成 字符串----------------------------
		String s = Arrays.toString(arr);
		System.out.println(s);//String [111, 44, 33, 22, 55]
//2.sort排序(升序排序)--------------------------------
		Arrays.sort(arr);
		System.out.println(Arrays.toString(arr));//[ 22, 33, 44, 55,111,]
       //           要排序的数组,起始位置,终止位置  [起始位置,终止位置)
		Arrays.sort(       arr,       1,      4);
		//ctrl  + / 单行注释
		System.out.println(Arrays.toString(arr));//[111, 22, 33, 44, 55]
//3.binarySearch二分查找法,前提 升序排序。 返回 元素的下标,不存在返回 -插入点-1
		System.out.println(Arrays.binarySearch(arr, 444));//-6
		System.out.println(Arrays.binarySearch(arr, 1, 4, 22));//-2
//4.equals两个数组是否相等 : 长度和对应位的元素值相等。相等 true-不相等false-------
		int [] a1 = {11,22,33};
		int [] a2 = {11,22,33,44};
		System.out.println(Arrays.equals(a1, a2));//true
//5.fill填充数组----------------------------------------------
		Arrays.fill(arr, 999);
		System.out.println(Arrays.toString(arr));//[999, 999, 999, 999, 999]
//6.copyOf复制------------------------------------
		int [] a3 = {11,22,33};//数组
		int [] a4 = Arrays.copyOf(a3, 5);
		System.out.println(a3);
		System.out.println(a4);
		System.out.println(Arrays.toString(a4));//[11, 22, 33]

4.项目案例:图书管理数组

import java.util.Arrays;
import java.util.Scanner;

public class Demo8 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int  num=0;
		int j = 0;
		int [] arr1=new int [100];
		String [] arr2=new String [100];
		double [] arr3=new double [100];
		System.out.println("-图书管理系统1.0版-");
		System.out.println("1.添加");
		System.out.println("2.修改");
		System.out.println("3.删除");
		System.out.println("4.查询");
		System.out.println("5.推出");
		while (num != 5) {
		System.out.println("* 输入菜单选择:");
		num = input.nextInt();	
		switch (num) {
		case 1://添加
			for (int i = 0; i < arr1.length; i++) {
				if (arr1[i] == 0) {
					j = i;//j把三个类目穿起来
					break;
				}
			}
			System.out.println("--输入图书编号:");
			arr1 [j] = input.nextInt();
			System.out.println("--输入图书名:");
			arr2 [j]= input.next();
			System.out.println("--输入图书价格:");
			arr3 [j] = input.nextDouble();
			System.out.println("添加成功!");
			break;
		case 2://修改
			System.out.println("--输入要修改的图书编号:");
			int k = input.nextInt();
			for(int i = 0;i < arr1.length; i++){
				if(arr1[i] == k){
					j = i;
					break;
				}
			}
			arr1 [j] = input.nextInt();
			System.out.println("--输入新的图书价格:");
			arr3 [j] = input.nextInt();
			System.out.println("修改成功!");
			break;
		case 3://删除
			System.out.print("输入要删除图书编号:");
			int m = input.nextInt();
			for(int i = 0;i < arr1.length; i++){
				if(arr1[i] == m){
					j = i;
					break;
				}
			}
			for(int i = j+1;i<arr1.length;i++){
				arr1[i-1] = arr1[i];
				arr2[i-1] = arr2[i];
				arr3[i-1] = arr3[i];
			}
			System.out.println("删除成功");
			break;
		case 4://查询
			System.out.println("图书编号"+"\t"+"图书名称"+"\t"+"图书价格");
			for (int i = 0; i < arr1.length; i++) {
				if (arr1[i] == 0) {
					break;
				}
				System.out.println(arr1[i]+"\t"+arr2[i]+"\t"+arr3[i]);
			}
			break;
		case 5:
			System.exit(0);
		}
		}	
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值