【左京淳的JAVA学习笔记】第二章 阵列与列表

学习重点

  • 一维阵列
  • 多维阵列(阵列内含有阵列,形成多层结构)
  • 列表(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的使用流程如下:

  1. import java.util.ArrayList; //载入类
  2. ArrayList array; //宣告list
  3. array = new ArrayList(3); //确保领域,变数名 = new ArrayList<资料形式>(初期大小)
  4. array.add("Tom"); //用add方法赋值
  5. String name = array.get(0); //用get方法取值

可以发现这边赋值和取值的方式和阵列不一样,
在JAVA的工具类中,每个类都有自己的使用方法,不会用的时候就用关键字google吧。

基本资料类型与物件

在新增一个ArrayList时,<>内只能存放物件,不能放int,double等基本资料型态。
像下面这行程序码因为放了int就会报错:

ArrayList<int> array = new ArrayList<int>();

为了解决这个问题,JAVA有提供一些物件来包覆基本资料型态如下表:

基本资料型态 对应的wrapper class
boolean Boolean
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double

利用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 - 山本 道子


<<:  HP D2600 Storage AUC正常但第一颗硬碟亮灯

>>:  人生还有更重要的事! 善选CISSP应考策略!

Day9 盒模型

盒模型概念 所有的HTML元素就像是箱子一样(有宽度高度),并且具备以下六个属性: 宽度width...

浅谈人机结合

人的科技文明发展始终来自於人性 在现今的科技与资讯发达的社会,人手一机已不再是奢望,连小小年纪的小朋...

[Day 29] - 手把手跨出第一步!– 烧录闪烁程序到Arduino Part.2

17King 制造中,订阅一下吧(*´∀`)~♥ 今日影片长度:08 分 36 秒 上集重点条列: ...

予焦啦!Golang 执行期的锁

予焦啦!我们昨日实作完简易排程,确保 Golang 执行绪(M)都会被排到 CPU 资源。但是却有不...

如何衡量万事万物 (6) 衡量工具

今天⋯不太舒服⋯只摘要了 6 页 >"< 对很多人而言,「工具」一词代表一项「...