day05

1.练习题

        判断一个数是不是质数

public static void main(){
    System.out.println(isZS(7));
    
}

public static boolean isZS(int num){
    if(num == 1){
    return false;
        }
    for(int i = 2;i < num;i++){
        if(num%i != 0){
            return false; 
        }
    }
        return true;
}

2.数组

        2.1数组的定义

                数组,一种数据结构,连续存储,随机存取的特性,不能拓展,确定之后就不可以再修改了.

                数组的下表是从0开始,数组中有一个length来保存数组的长度属性.

                数组的查询修改的效率较高,但是增删的效率极低,因为要重新创建一个新的空间

                数组类似于数据结构的顺序表这个结构,增删的效率极低,但是具有随机存取的特性,

                与之相反的是链表,链表是不连续存储的数据结构,查找的效率极低,增删的效率相较于数组高上不少.           

        2.2数组的存储

                数组是引用数据类型的一种,(引用数据类型包含:类数组接口),数组在被定义好之后存储在堆内存中,在栈内存空间中存储仅仅是数组在堆内存空间中的地址

public static void main(){

        int age = 18;
        //main函数在栈内存中开辟的空间中存储的是age数值的大小
        int[] age = {18};
        //main函数在栈内存中开辟的空间中存储的是age数组在堆内存空间中的地址
}

        2.3数组使用

                2.3.1数组的声明

                        1.静态声明                    
public static void main(){//静态声明
        //数据类型[] 变量名 = {值...}
        int[] arr1 = {1,2,3,4};
        //数据类型 变量名[] = {值...}
        int arr2[] = {1,2,3,4}
        //数据类型[] arr3 = new int{值...}
        int[] arr3 = new int[]{1,2,3,4}//前两种方式是简写
}
                        2.动态声明             
public static void main(){
        //动态声明 声明一个int型数组,数组的大小是5,默认值是0
        int[] arr1 = new int[5];
        //整型的默认是0  小数的默认是0.0  引用数据的默认是null 
        //布尔类型的默认是false 字符 \u0000

}

                2.3.2获得数组数据                    

public static void main(){

    int arr[] = {1,2,3,4};
    System.out.println(arr[1]);//该条语句会打印2
    //获取数组的第二个元素
}

                2.3.3修改数组数据

public static void main(){
        int[] arr = {1,2,3};
        int result = arr[1];//通过result来接受arr数组中的整型值
}

                2.3.4给main函数传参

  右击

                2.3.5传值与传址

                        传值:传入的整型的值

                        传址:引用数据类型,传入的是地址,数据存在堆空间中                      

public static void main(){
    int age = 18;
    System.out.println(age);
    //传入algo的是局部变量,改变并不会影响main函数中的变量
    algo(age);//会先输出 17 然后输出18 
    int[] ages = {18};
    System.out.println(ages[0]);
    algo2(ages);//会输出两个19
    //引用数据类型传入的地址  
    
}

public static void algo1(age){
    age--
    System.out.println(age);
}
public static void algo2(int ages){
    ages[0] = 19;
    System.out.println(ages[0]);

}

                2.3.6数组异常

                最常见就是数组下标越界

//java.lang.ArrayIndexOutOfBoundsException: 22
//数组下标越界报错提示

                2.3.7数组遍历

                

public static void main(){
    int[] arr = {1,2,3,4,5};
    for(int i = 0;i<arr.length;i++){
        //通过for循环一次打印一维数组的值
        System.out.println(arr[i]);
    }

}

                2.3.8数组插入复制

public class Array05 {
//插入复制
	public static void main(String[] args) {
		int[] src = {1,2,3,4,5,6,7,8,9,10,11,12,13,14};
		int[] dest = {11,12,13,14,15,16,17,18,19,20,21,22,23,24};
		int srcIndex = 2;
		int destIndex = 3;
		int length  = 3;
		int[] newDest = copy(src, srcIndex, dest, destIndex, length);
		for (int i = 0; i < newDest.length; i++) {
			System.out.println(newDest[i]);
		}
	}
	/**
	 * 插入复制
	 * 
	 * @param src
	 *            源数组
	 * @param srcIndex
	 *            源数组起始位置
	 * @param dest
	 *            目标数组
	 * @param destIndex
	 *            目标数组起始位置
	 * @param length
	 *            复制个数
	 */

public static int[] copy(int src[],int srcIndex,int dest[],int destIndex,int length){
	//新数组的长度=目标数组(dest)+插入的个数(length)
		int[] newDest = new int [dest.length + length];
		//1.目标数组中的  0~起始索引先插入到新的数组之后
		for (int i = 0; i <= destIndex; i++) {
			 newDest[i] = dest[i];
		}
		//2.将src要插入的插入到newDest中,
		int index =  destIndex+1;
		for (int i = srcIndex; i < srcIndex+length; i++) {
			newDest[index]=src[i];
			index++;
		}
		//3.把dest数组剩余的都放到新的数组中
		//destIndex+1开始到dest.length结束
		for (int i = destIndex+1; i < dest.length; i++) {
			newDest[index] = dest[i];
			index++;
		}
		return newDest;
	}
}

                2.3.9数组替换复制


public class Array06 {
//替换复制
	public static void main(String[] args) {
		int[] src = { 1, 2, 3, 4, 5, 6 };
		int[] dest = { 11, 12, 13, 14, 15, 16 };
		int srcIndex = 1;
		int destIndex = 2;
		int length = 2;
		copy(src, srcIndex, dest, destIndex, length);
		// 调用API
		//System.arraycopy(src, srcIndex, dest, destIndex, length);
		for (int i = 0; i < dest.length; i++) {
			System.out.println(dest[i]);
		}
	}
	/**
	 * 替换复制
	 * 
	 * @param src
	 *            源数组
	 * @param srcIndex
	 *            源数组起始位置
	 * @param dest
	 *            目标数组
	 * @param destIndex
	 *            目标数组起始位置
	 * @param length
	 *            复制个数
	 */
	public static void copy(int src[],int srcIndex,int dest[],int destIndex,int length){
		    //src的srcIndex是用来替换的,从srcIndex开始,长度为length要被替换到
            //dest数组中以destIndex开始,length结束的地方
            for (int i = 0; i < length; i++) {
			dest[destIndex] = src[srcIndex];
			srcIndex++;
			destIndex++;
		}
		
	}
}

      3.二维数组

                3.1定义

                        二维数组中存储都是一维数组,以此类推,

                        三维数组中存储都是二维数组                   

public static void main(){
    int[][] arr = {{1,2,3},{2,3,4}};
    //在arr这个二维数组中,有两个一维数组,并且这俩一维数组都有三个元素
    
}

                3.2命名

                        命名方式类似于一维数组,也是分为静态,动态

public static void main(){
   //静态声明
    int[][] arr = {{123},{123}};
    //动态声明
    int[][] arr1 = new int[5][5];
    //动态定义一个 可以存储六个一维数组
    //并且每一个一维数组都最多可以存储六个元素

}

                3.3查询

public static void main(){
        int[][] arr = {{1,2,3}{4,5,6},{7,8,9}};
        int[] arr_1 = arr[1];//用一个一维数组来接受 二维数组的第一个元素
        //因为二维数组的每一个元素都是由一维数组组成
        //再用一个int 来接受这个int变量
        int arr__1 = arr_1[1]
        //上面做法得到的结果等于下面这行代码
        int arr__2 = arr[1][1];

}

                3.4修改

public static void main(){
    int[][] arr = {{1,2,3}{4,5,6},{7,8,9}};
    arr[1][1] = 2;//会把二维数组arr的第二个一维数组的第二个元素变为2 {4,2,6}
}

                3.5遍历

public static void main(){
    int[][] arr = {{1,2,3}{4,5,6},{7,8,9}};
    for(int i = 0;i<arr.length;i++){
        for(int j = 0; j< arr[i].length;j++){
        //使用双层for循环,就类似于,每一行代表一个一维数组
            System.out.print(arr[i][j] + " ");
        }
        System.out.println(" ");
    }    

}

                3.6二维数组锯齿状                      

public static void main(){
    int[][] arr = new int[4][];
    //这个时候打印,会打印一个五行五列的0
    for(int i=0;i<=arr.length;i++){
        arr[i] = new int[i+1];
    //这个时候打印会出现,第一行一个0,第二行2个0,以此类推
    }
}

        4.交换变量值

                

package _05_Array;

public class Array09 {
	//交换变量值
	public static void main(String[] args) {
		int a = 9;
		int b = 10;
		// 1 中间变量(开发常用)
		int temp = a;
		a = b;
		b = temp;

		// 2 加减法
		a = 9;
		b = 10;
		a = a + b;  
		b = a - b;//这个时候  a已经变成了a+b 用 a+b - b = a 所以 b = a  a还是a+b
		a = a - b;//再用  a+b -b(b是a),就得到了a=b
		// 3 位异或//a^a = 1
		a = 9;
		b = 10;
		// a=9 0 000 1001
		// b=10 0 000 1010

		// a= 0 000 0011
		a = a ^ b;
		// b= 0 000 1001
		b = a ^ b;
		// 0 000 1010
		a = a ^ b;
		System.out.println("a=" + a + " , b=" + b);
	}
}

                

            

                

                        

               

      

                                                       

                                  


              

                                                       

                                  

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值