本帖最后由 wode1311 于 2015-7-31 22:44 编辑
笔记内容:数组的基础知识和应用
笔记来源:毕向东Java基础视频第5天
正文:
1、基础概念: [url=]
数组是存储多个同一类型数据元素的容器 , 数组中的元素会被自动从0开始编号,方便我们获取。 分类: 一维数组(4种定义格式): int[] arr =new int[2]; int arr[] = new int[2]; int[] arr = new int[]{1,2,3,7}; //大括号内可以没有任何东西 int[] arr = {3,4,65,4}; //大括号内可以没有任何东西
二维数组(三种定义格式):
第一种定义通过定义长度的方式定义了二维数组的长度,并且定义了一维数组的长度 int[][] arr = new int[6][3] 第二种定义通过长度仅定义了二维数组的长度,没有初始化一维数组int[] [] arr= new int[2][] 第三种定义通过直接给出元素定义了二维数组的长度和每一个一维数组的长度 int[][] arr = {{2,23},{33}} 2、数组操作: 1、数组遍历:
for(int i=0;i<arr.length;i++){
System.out.print(arr+"\t");
}
2、获取数组最值
public int getMax(int[] arr){
int temp=arr[0];
for(int i=1;i<arr.length;i++){
if(arr>temp){
temp=arr;
}
}
return temp;
}
3、数组查找:给定一个值,查找该值在数组中对应的索引
public static int indexFirst(int[] arr, int num) {
for (int i = 0; i < arr.length; i++) {
if (arr == num) {
return i;
}
}
return -1;
}
3、数组应用:
[/url] 1 、利用数组自定义一个可变长度的容器,可存储不同的数据。 - import java.util.Scanner;
- class Container {
- Object[] src;// 存放数据的数组
- /** 通过add方法将val添加到容器内 */
- public void add(Object val) {
- if (src != null) {
- Object[] arr1 = new Object[src.length + 1];
- for (int i = 0; i < src.length; i++) {
- arr1[i] = src[i];
- }
- arr1[src.length] = val;
- src = new Object[arr1.length];
- for (int i = 0; i < src.length; i++) {
- src[i] = arr1[i];
- }
- } else {
- src = new Object[1];
- src[0] = val;
- }
- }
- /** 通过给get方法传递一个索引,可以获取到该索引位置对应的值 */
- public Object get(int index) {
- return src[index];
- }
- /** 通过lenth()可以获取该容器中存储了多少个数据 */
- public int length() {
- return src.length;
- }
- }
- class Contain {
- public static void main(String[] args) {
- Container c = new Container();
- int tip;
- Object o;
- while (true) {
- System.out.println("请输入一个数据(1整型2浮点型3布尔型4字符串0停止):");
- Scanner sc = new Scanner(System.in);
- tip = sc.nextInt();
- if (tip == 0) {
- break;
- } else {
- o = setContent(tip);
- c.add(o);
- }
- }
- for (int i = 0; i < c.length(); i++) {
- System.out.println("第" + i + "个数据是:" + c.get(i));
- }
- System.out.println("共有" + c.length() + "个数据");
- }
- public static Object setContent(int tip) {
- Scanner sc = new Scanner(System.in);
- int i;
- double d;
- boolean b;
- String s;
- Object o = null;
- while (true) {
- if (tip == 1) {
- i = sc.nextInt();
- o = i;
- break;
- } else if (tip == 2) {
- d = sc.nextDouble();
- o = d;
- break;
- } else if (tip == 3) {
- b = sc.nextBoolean();
- o = b;
- break;
- } else if (tip == 4) {
- s = sc.next().toString();
- o = s;
- break;
- } else {
- System.out.println("输入非法数据,请重新输入...");
- break;
- }
- }
- return o;
- }
- }
复制代码
2、数组拷贝,获取数据在数组中的位置,以及从某个位置开始获取某个元素的相对位置 - public static void main(String[] args)
- {
- int[] a=new int[]{1,2,3,4,5,8,5};
- int[] b=new int[a.length];
- ArrayCopy(a,b);
- char[] c=new char[]{'a','b','c','d','e'};
- char d='d';
- int location=indexOf(c,d);
- System.out.println(d+"在字符数组中的位置是第"+(location+1)+"个元素");
- char[] arr=new char[]{'1','2','3','4','6','9'};
- int position=indexOf(arr,2,'4');
- System.out.println("从第二个位置开始,4所在的位置是第"+position+"个元素");
- }
- //数组拷贝
- public static void ArrayCopy(int[] a,int[] b){
- for(int i=0;i<a.length;i++){
- b[i]=a[i];
- }
- }
- //获取元素位置
- public static int indexOf(char[] chs, char ch){
- for(int i=0;i<chs.length;i++){
- if(chs[i]==ch){
- return i;
- }
- }
- return -1;
- }
- //获取元素的相对位置
- public static int indexOf(char[] chs,int startIndex,char ch){
- int count=1;
- for(int i=startIndex-1;i<chs.length;i++){
- if(chs[i]==ch){
- return count;
- }
- count++;
- }
- return -1;
- }
复制代码
3 、房间案例 (二维数组): 一栋楼有7层,每层有10个房间,那么就把大楼看成一个二维数组,里面的每层是一维数组。
- class RoomDemo
- {
- public static void main(String[] args)
- {
- int[][] room = new int[7][10];
- for(int i=0; i<room.length; i++)
- {
- int[] floor = room[i];
- for(int j=0; j<floor.length; j++)
- {
- System.out.println("正在第"+(i+1)+"层中的第"+(j+1)+"个房间");
- }
- }
- }
- }
复制代码
|