Java之数组类型(定义数组、使用数组、深入数组、浮点数转换成人民币读法字符串)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_38358499/article/details/98640247

定义数组

  • 数组是一种引用类型的变量,因此使用数组定义一个引用变量相当于定义一个指针,定义时还未指向任何有效的内存,因此定义数组时不能指定数组的长度,当对数组进行初始化后才可以使用
  • 数组初始化:
  1. 静态初始化
    public class ArrayTest {
    	public static void main(String[] args)
    	{
    		//定义一个int数组类型的变量,变量名为intArr,并静态初始化
    		int[] intArr;
    		intArr = new int[] {5,6,8,20};
    		
    		//定义一个Object数组类型的变量,变量名为objArr,并静态初始化
    		Object[] ObjArr;
    		ObjArr = new String[] {"Java","李刚"};
    		Object[] ObjArr1;
    		ObjArr1 = new Object[] {"Java","李刚"};
    	}
    }

    说明:数组定义和初始化同时完成,简写:int[] a = {5,6,7,9};

  2. 动态初始化

        语法:int[] prices = new int[5]; Object[] books = new String[4];

使用数组(foreach循环)

访问数组元素,对数组元素进行赋值和取出数组元素值。注意:访问数组元素时的指定索引小于0,或者大于等于数组的长度,编译程序不会出现任何错误,但运行时会出现异常 。

foreach循环自动遍历数组和集合的每个元素,使用如下:

public class ForEachTest 
{
	public static void main(String[] args)
	{
		String[] books = {"疯狂Java讲义","李刚","使用forEach循环遍历"};
		for (String book : books)
		{
			System.out.println(book);
		}
	}
}

注意:无需获得数组和集合的长度,无需根据索引来访问数组元素和集合元素,foreach中循环变量相当于一个临时变量,并不是数组元素,如果希望改变数组元素的值,不能使用foreach循环

 深入数组

  • 内存中的数组:实际数组存储在堆中,如果引用该数组对象的数组引用变量,则被存储在栈中。堆内存中的对象不会随方法的结束而销毁,栈随方法的执行结束被自然销毁
    public class ArrayInRam
    {
    	public static void main(String[] args)
    	{
    		int[] a = {5, 3, 4, 8};
    		int[] b = new int[4];
    		System.out.println(a.length);
    		System.out.println(b.length);
    		for(int i = 0; i < a.length; i++) 
    		{
    			System.out.println(a[i]);
    		}
    		for(int i = 0; i < b.length; i++) 
    		{
    			System.out.println(b[i]);
    		}
    		b = a;
    		System.out.println(b.length);
    	}
    }
    注意:当未定义b中的元素值时,输出为o。for大循环的后面跟不跟“;”,程序照常执行,不会报错
  • 引用类型数组的初始化:先定一个Person类,得到不同人的年龄和身高
    class Person
    {
    	public int age;
    	public int heigth;
    	public void info()
    	{
    		System.out.println("我的年龄是:" + age + ", 我的身高是:" + heigth);
    	}
    }
    
    public class ReferenceArrayTest
    {
    	public static void main(String[] args)
    	{
    		Person[] students = new Person[2];
    		
    		Person zhang = new Person();
    		zhang.age = 15;
    		zhang.heigth = 168;
    		
    		Person lee = new Person();
    		lee.age = 17;
    		lee.heigth = 170;
    		
    		students[0] = zhang;
    		students[1] = lee;
    		
    		students[0].info();
    		students[1].info();
    	}
    }

    注意:当定义一个对象时后跟(),使用一种方法是后跟(),student[0]和zhang访问Person实例的实例变量和方法效果完全一样

  • Java中没有多维数组,Java语言里的数组类型是引用类型。当数组元素引用再次指向真是的数组内存,这样看上去像多维数组。多维数组初始化时,可以只定义最左边维的大小,也可以一次指定每一维的大小

 功能:将浮点数转换成人民币读法字符串

import java.util.Arrays;

public class Num2Rmb 
{
	private String[] hanArr = {"零","壹","二","叄","肆","伍","陆","柒","捌","玖"};
	private String[] unitArr = {"十","百","千"};
	//将整数和小数部分分开
	private String[] divide(double num)
	{
		long zhengshu = (long)num;
		long xiaoshu = Math.round((num - zhengshu) * 100);
		return new String[] {String.valueOf(zhengshu) + "", String.valueOf(xiaoshu)};
	}
	//把一个四位的数字字符串变换成汉字
	private String toHanStr(String numStr)
	{
		String result = "";
		int numLen = numStr.length();
		for(int i = 0; i < numLen; i++)
		{
			//char型数字转换成int型数字
			int num = numStr.charAt(i) - 48;
			if(i != numLen -1 && num !=0)
			{
				result += hanArr[num] + unitArr[numLen - 2 - i];
			}
			else
			{
				result += hanArr[num];
			}
		}
		return result;
	}
	
	public static void main(String[] args)
	{
		Num2Rmb n = new Num2Rmb();
		System.out.println(Arrays.toString(n.divide(236711125.123)));
		System.out.println(n.toHanStr("6109"));
	}
}

说明:Math.round()把一个数字四舍五入为最接近的整数;.charAt()返回指定位置的字符串,单个字符串;String.valueOf()返回string类型的值;Arrays.toString将一个数组转换成一个字符串

猜你喜欢

转载自blog.csdn.net/qq_38358499/article/details/98640247