学习重点
一维阵列多维阵列(阵列内含有阵列,形成多层结构)列表(java.util.ArrayList类)阵列的宣告
int [] id;//宣告阵列名称为id & 资料型态为int
id = new int[3];//确保阵列能保存的内容数
也可以写成一行
int [] id = new int[3];
也可以直接指定内容
int [] id = {1,2,3};
或是利用index值填入资料如下:
id[0] = 1;
id[1] = 2;
id[2] = 3;
在阵列的第一个位置填入1,第二个位置填入2,第三个位置填入3
用length方法调查阵列长度
int size = id.length;
此案例的size会等于3
建立Sample2_1.java练习看看
class Sample2_1 { public static void main(String[] args) { char[] c; //宣告阵列 c = new char[3]; //作成 int[] i = new int[3]; //一行搞定宣告&作成 String str[] = {"AAA","BBB","CCC"}; //宣告、作成并赋值。 c[0] = 'A';c[1] = 'B';c[2] = 'C'; i[0] = 100;i[1] = 200;i[2] = 300; System.out.println("str的长度为:" + str.length); System.out.println("c[0] :" + c[0]); System.out.println("i[1] :" + i[1]); }}
编译后执行,可能会发现"str的长度为:"这行变成乱码
这是因为CMD环境的编码不一致
如果只想暂时性改变CMD环境编码,可使用以下指令
chcp 950
※chcp = chang code page。950是繁体中文的号码,utf-8则是65001。
此设定在关闭画面之后就会恢复为预设值。
疑问:不知道为什么,编译时用utf-8编译,CMD环境也设为utf-8,执行时中文却还是显示乱码。非得设成繁体中文才行。(使用指令chcp 950)
如果想永久修改CMD环境编码
1.Win+R,输入regedit开启登录档编辑器
2.找到 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor
3.右键新建一个字串值(S),取名叫Autorun,值设为@chcp 950>nul
延伸1-阵列预设值
建立Sample2_2.java
class Sample2_2 { public static void main(String[] args) { int i ; System.out.println("i的值为:" + i); int [] array = new int[5]; System.out.println("array[0]的值为:" + array[0]); }}
以上的程式码由于i虽然被宣告了,但里面没有值所以会报错。
把以下这行注解掉再试一次
//System.out.println("i的值为:" + i);
会发现array[0]虽然没有指定值,但是自动被预设为0了。
这是因为在new一个阵列时,会先自动填入预设值。
多维阵列
建立Sample2_3.java档案并写入以下内容
class Sample2_3 { public static void main(String[] args) { int[][] array; array = new int[3][4]; //阵列里有三个物件,每个物件又内含四个物件。 array[0][0] = 100; array[0][3] = 200; System.out.println("array[0][0]的值:" + array[0][0]); System.out.println("array[0][3]的值:" + array[0][3]); }}
依照下面的步骤将java档编译后执行,就跟之前做的一样。
如果怕忘记或找不到指令,可以用记事本记起来。
cd C:\Users\userXXX\Desktop\java //移动到案件资料夹
javac -encoding utf-8 Sample2_3.java //编译(使用utf-8以避免中文乱码)
java Sample2_3 //执行
基本上多维阵列的概念就跟windows的资料夹一样,
每个资料夹里面都可能还有不定数量的资料夹或档案。
再看一个範例:
class Sample2_4 { public static void main(String[] args) { /* int[][] array = new int[3][]; //阵列里有三个物件,每个物件里的东西尚不指定。 array[0] = new int[3]; //指定array[0]里面有三个存放int资料的空间 array[1] = new int[5]; //指定array[1]里面有五个存放int资料的空间 array2] = new int[2]; //指定array[2]里面有二个存放int资料的空间 */ //创建阵列并赋值 int[][] array = {{10,20,30},{50,60,70,80,90},{100,200}}; System.out.println("array[0][0]的值:" + array[0][0]); System.out.println("array[1][4]的值:" + array[1][4]); }}
这个範例说明了创建阵列时,不一定要一次把所有条件都指定好。 而且每个阵列的长度也可以不一样。 可以先规定好阵列的大小后,一一赋值,也可以直接创立阵列并赋值。 本案例就用了/*和*/符号把一开始三行的程式码注解掉。 直接创立阵列并赋值
列表
JAVA利用java.util.ArrayList类实现了可变长的列表功能。
方才的阵列长度是固定不可变的,例如:
array = new int[3];
这行程式码就确保了记忆体中,预留了3个保存int资料的空间。不能增加也不能减少。
但ArrayList类可以。
工具类
JAVA里面有很多既有的工具类可使用,ArrayList类就是其中一种。要使用这些工具,需要先import。
像是把工具从仓库拿到工作檯来一样。
ArrayList的使用流程如下:
可以发现这边赋值和取值的方式和阵列不一样,
在JAVA的工具类中,每个类都有自己的使用方法,不会用的时候就用关键字google吧。
基本资料类型与物件
在新增一个ArrayList时,<>内只能存放物件,不能放int,double等基本资料型态。
像下面这行程式码因为放了int就会报错:
ArrayList<int> array = new ArrayList<int>();
为了解决这个问题,JAVA有提供一些物件来包覆基本资料型态如下表:
利用cast指定资料类型
利用get方法取出资料时,JAVA会自动检查来源与目标的资料型态是否可以互换。
如果无法确认来源资料是什么类型,就会在编译时报错。如下例:
ArrayList<int> array = new ArrayList<int>();array.add(10);int num = array.get(0);
由于无法确认array里面会拿出什么东西来,所以报错,应修改成下面的样子:
int num = (Integer)array.get(0);
利用()来指定资料型态,像是过海关一定要填申报单一样。
省略写法
新建ArrayList的时候,左右都要重複写一次资料类型很麻烦,
所以在JAVA SE7版本之后,右边的资料类型可以省略不写。如下例:
ArrayList<int> array = new ArrayList<>();
引数的使用
在CMD画面执行指令的时候,可以在指令后面给予引数,告诉电脑一些额外资讯。例如档案路径也是引数的一种。
https://imgur.com/UI0L2Vh
在执行「java」这个指令时,第一个引数会被当成要执行的路径或档案名称,
第二个以后的引数则会被传进执行的程式里,保存在String[] args列表里面。
我们可以在程式里对这些引数做一些处理。处理完的结果就跟上图一样。
class Sample2_5 { public static void main(String[] args) { System.out.println(args[0]); System.out.println(args[1]); System.out.println(args[0] + args[1]); }}
※JAVA里的引数预设被保存为String形式,如果要转换成数字,可以使用以下方法
int num = Integer.parseInt(args[0]);
在CMD画面里有许多可以直接使用的指令,这些指令常常会需要搭配引数来使用。
我们也可以自己写指令,就如同Sample2_5一样,自己定义指令后面的各个引数该如何被使用。
以上 是第二章 阵列与列表的学习纪录
下一章会讲演算子与分歧文(if)
参考教材: JAVAプログラマSilver SE8 - 山本 道子