数组应用

数组

一种数据结构/类型,是“数据组”的简称,也就是“一组数据”的意思。这组数据可以有多种排列方式。比如可以排成一排;也可以排成一个矩阵,成为一个平面;当然也可以从二维拓展到三维。
总而言之,把一坨同属一个类别的数据放在一起,就是“数组”。而P图,P的就是像素的数组。

旋转图片的像素对应

  /************************************************
         * 旋转前,旧图片的信息
         ************************************************/
        int[][] oldPixelArray = source.getPixelArray();     // 旧图片数组
        int oldHeight = oldPixelArray.length;               // 旧图片高度
        int oldWidth = oldPixelArray[0].length;             // 旧图片宽度

        /************************************************
         * 旋转前,旧图片的信息
         ************************************************/
        int newHeight = oldWidth;                               // 新图片高度等于旧图片宽度
        int newWidth = oldHeight;                               // 新图片宽度等于旧图片高度
        int[][] newPixelArray = new int[newHeight][newWidth];   // 为新图片新建一个数组,行数是newHeight,列数是newWidth

        /************************************************
         * 新旧数组的像素对应关系
         ************************************************/
        for (int yNew = 0; yNew < newHeight; yNew++) {
            for (int xNew = 0; xNew < newWidth; xNew++) {
                int yOld = xNew;
                int xOld = oldWidth - yNew - 1;
                newPixelArray[yNew][xNew] = oldPixelArray[yOld][xOld];
            }
        }

        return new GImage(newPixelArray);
    }

图片在电脑上是由一个个像素点组成的,旋转图片也就是把这些像素点按照旋转后的样子重新排列了一遍。

值类型和引用类型

public class Array {
	static void incArray(int[] a) { a[0]++; }
	//incArray(int[] a),(括号里的代表参数,包括数据类型和变量名)                

	static void incInt(int a) { a++; }

	static void rebindArray(int[] a) { a = new int[]{9,9,9}; }

	public static void main(String[] args) {
		/* Code snippet 1 */
		int foo = 5;	// now foo=5
		//这是一个值类型
		incInt(foo);
		/*函数参数所传进去的,是一个值,5	。然后在函数里,a++自加,这个过程中,函数新建了一
		个内存地址,并在这个内存地址中运算,这和函数外面的内存地址无关。且随着函数的出栈,这个变量会
		销毁。*/         
		System.out.println("foo=" + foo);
		//所以这里打印的是5。

		/* Code snippet 2 */
		int[] bar = new int[]{1,2,3};	// now bar[0]=1
		//这是一个引用类型,指向一个内存地址
		incArray(bar);
		/*函数参数所传进去的,是一个内存地址。然后在函数中a[0]++,这个过程中,函数操作的还是外面那
		块内存地址,所以即使函数出栈,但外面那块内存地址中的东西已经被改变了*/
		System.out.println("bar[0]=" + bar[0]);
		//所以这里是2

		/* Code snippet 3 */
		rebindArray(bar);
		/*函数参数所传进去的,是一个数组型的内存地址。但在函数中, a = new int[]{9,9,9};这个过
		程中,a重新绑定了一个新的内存地址,所以和外面那个内存地址已经无关了。随着函数的出栈,a也被
		销毁*/
		System.out.println("bar[0]=" + bar[0]);
		//所以这里还是2

		/* Code snippet 4 */
		int baz = bar[1];	// now baz=bar[1]=2
		/*现在把bar[1]这个值赋值给int baz,是新建了一个内存地址,且是一个值类型,已经和bar[1]的
		内存地址无关了*/
		baz++;
		/*baz++,这种值类型的运算,并不是在原来的内存地址中修改,而是新建一个内存地址,或者说新绑
		定一个内存地址,然后销毁原来内存地址。*/
		System.out.println("bar[1]=" + bar[1]);
		//所以这里bar[1]还是原来那个,是2
	}
}

java中数据在使用的时候分为两种类型,一种是值类型,一种是引用类型。应该可以认为8种基本类型为值类型。上面讲的是函数参数两种类型的结果,如果是在函数外面已经定义了的变量,不作为参数传给函数,而是在函数中直接使用的话。也就是没有声明,在函数里不会给他分配一个新的内存地址,变量所作的修改会覆盖原声明变量的赋值。

类和对象,我可以简单理解为,类就是概括了一类对象属性和行为的模板,对象就是类的实例化。
变量是程序中基本的存储单元,是内存中的一块存储区域,用来存放数据。
创建一个对象会用到new关键字,但是给一个基本类型变量赋值却不是用new. 因为基本类型是Java语言里的一种内置的特殊数据类型,并不是某个类的对象。
给基本类型的变量赋值的方式叫做 字面值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值