数组的元素类型和数组的大小都是确定的,所以当处理数组元素时候,我们通常使用基本循环或者 foreach 循环。下面实例完整地展示了如何创建、初始化和操纵数组:

public class TestArray {
   public static void main(String[] args) {
      double[] myList = {1.9, 2.9, 3.4, 3.5};
 
      // 打印所有数组元素
      for (int i = 0; i < myList.length; i++) {
         System.out.println(myList[i] + " ");
      }
      // 计算所有元素的总和
      double total = 0;
      for (int i = 0; i < myList.length; i++) {
         total += myList[i];
      }
      System.out.println("Total is " + total);
      // 查找最大元素
      double max = myList[0];
      for (int i = 1; i < myList.length; i++) {
         if (myList[i] > max) max = myList[i];
      }
      System.out.println("Max is " + max);
   }
}

    运行结果为:


1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5

    JDK 1.5 引进了一种新的循环类型,被称为 foreach 循环或者加强型循环,它能在不使用下标的情况下遍历数组。下面实例用来显示数组myList中的所有元素:

public class TestArray {
   public static void main(String[] args) {
      double[] myList = {1.9, 2.9, 3.4, 3.5};
 
      // 打印所有数组元素
      for (double element: myList) {
         System.out.println(element);
      }
   }
}

    运行结果为:


1.9
2.9
3.4
3.5

    数组可以作为参数传递给方法。下面的例子就是一个打印 int 数组中元素的方法:

public static void printArray(int[] array) {
  for (int i = 0; i < array.length; i++) {
    System.out.print(array[i] + " ");
  }
}

    下面例子调用 printArray 方法打印出 3,1,2,6,4 和 2:

printArray 
   ( 
   new 
     
   int 
   [ 
   ] 
   { 
   3 
   ,  
   1 
   ,  
   2 
   ,  
   6 
   ,  
   4 
   ,  
   2 
   } 
   ) 
   ;


    再来看数组作为函数的返回值,以下实例中 result 数组作为函数的返回值:

public static int[] reverse(int[] list) {
  int[] result = new int[list.length];
 
  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
    result[j] = list[i];
  }
  return result;
}

    多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组,例如:

String 
     
   str 
   [ 
   ] 
   [ 
   ] 
    =  
   new 
     
   String 
   [ 
   3 
   ] 
   [ 
   4 
   ] 
   ;


    咱们再来看下多维数组的动态初始化(以二维数组为例),首先直接为每一维分配空间,格式如下:

type 
     
   arrayName 
    =  
   new 
     
   type 
   [ 
   arraylenght1 
   ] 
   [ 
   arraylenght2 
   ] 
   ;


    type 可以为基本数据类型和复合数据类型,arraylenght1 和 arraylenght2 必须为正整数,arraylenght1 为行数,arraylenght2 为列数,二维数组 a 可以看成一个两行三列的数组,实例如下:

int 
     
   a 
   [ 
   ] 
   [ 
   ] 
    =  
   new 
     
   int 
   [ 
   2 
   ] 
   [ 
   3 
   ] 
   ;


    再来呢,从最高维开始,分别为每一维分配空间,例如:

String s[][] = new String[2][];
s[0] = new String[2];
s[1] = new String[3];
s[0][0] = new String("Good");
s[0][1] = new String("Luck");
s[1][0] = new String("to");
s[1][1] = new String("you");
s[1][2] = new String("!");

    我们再来看解析。s[0]=new String[2] 和 s[1]=new String[3] 是为最高维分配引用空间,也就是为最高维限制其能保存数据的最长的长度,然后再为其每个数组元素单独分配空间 s0=new String("Good") 等操作。

    再来就是多维数组的引用(以二维数组为例),对二维数组中的每个元素,引用方式为 arrayName[index1][index2],例如:

num 
   [ 
   1 
   ] 
   [ 
   0 
   ] 
   ;


    还算是比较简单的吧。然后我们来看数组倒序实例:


public class Test2 {
    public static void main(String[] args){
        int[] test= {1,2,4,5,7};
        for (int i : test) {
            System.out.print(i+" ");
        }
        System.out.println("\n");
        test = Test2.reverse(test);
        for (int i : test) {
            System.out.print(i+" ");
        }
    }

    public static int[] reverse(int[] arr){
        int[] result = new int[arr.length];
        for (int i = 0,j=result.length-1; i < arr.length; i++,j--) {
            result[j] = arr[i];
        }
        return result;
    }
}

    我们再来实现数组和字符串的转换处理:


public class Test {
    public static void main(String args[]) {
        String str = "helloworld";
        char[] data = str.toCharArray();// 将字符串转为数组
        for (int x = 0; x < data.length; x++) {
            System.out.print(data[x] + "  ");
            data[x] -= 32;
            System.out.print(data[x] + "  ");
        }
        System.out.println(new String(data));
    }
}

    然后看冒泡排序:


public class BubbleSort {
/**
 * N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数。
 * @param args
 */
    public static void main(String[] args) {
        int arr[] = {26,15,29,66,99,88,36,77,111,1,6,8,8};
        for(int i=0;i < arr.length-1;i++) {//外层循环控制排序趟数
            for(int j=0; j< arr.length-i-1;j++) {
                        //内层循环控制每一趟排序多少次
                // 把小的值交换到前面
                if (arr[j]>arr[j+1]) {
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
            System.out.print("第"+(i+1)+"次排序结果:");
                                //列举每次排序的数据
            for(int a=0;a<arr.length;a++) {
                System.out.print(arr[a] + "\t");
            }
            System.out.println("");
        }
        System.out.println("最终排序结果:");
        for(int a = 0; a < arr.length;a++) {
            System.out.println(arr[a] + "\t");
        }
    }
}

    在来看选择排序:(比冒泡排序更快,运行次数更少):


public class Start
{
    public static void main(String[] args)
    {
        int[] arr={20,60,51,81,285,12,165,51,81,318,186,9,70};
        for(int a:arr)
        {
            System.out.print(a+" ");
        }
        
        System.out.println("\n"+"---------------从大到小---------------");
        
        arr=toSmall(arr);
        for(int a:arr)
        {
            System.out.print(a+" ");
        }
        
        System.out.println("\n"+"---------------从小到大---------------");
        
        arr=toBig(arr);
        for(int a:arr)
        {
            System.out.print(a+" ");
        }
    }
//    从大到小
    public static int[] toSmall(int[] arr)
    {
//遍历数组里除最后一个的其他所有数,因为最后的对象没有与之可以相比较的数
        for(int i=0;i<arr.length-1;i++)
        {
/*遍历数组里没有排序的所有数,并与上一个数进行比较
 *“k=i+1”因为自身一定等于自身,所以相比没有意义
 *而前面已经排好序的数,在比较也没有意义
 */
            for(int k=i+1;k<arr.length;k++)
            {
                if(arr[k]<arr[i])//交换条件(排序条件)
                {
                    int number=arr[i];
                    arr[i]=arr[k];
                    arr[k]=number;
                }//交换
            }
        }
        return arr;
    }
//    从小到大
//和前面一样
    public static int[] toBig(int[] arr)
    {
        for(int i=0;i<arr.length-1;i++)
        {
            for(int k=i+1;k<arr.length;k++)
            {
                if(arr[k]>arr[i])
                {
                    int number=arr[i];
                    arr[i]=arr[k];
                    arr[k]=number;
                }
            }
        }
        return arr;
    }
}

    最后我们来实现一个小游戏。就是程序随机产生5个按一定顺序排列的字符,作为猜测结果。玩家可以猜测多次,每猜一次,若猜测的完全正确则游戏结束,并计算玩家的游戏得分并输出。若没有猜对,则提示猜测结果,如猜对了几个字符,以及猜对了几个字符的位置信息,并提示玩家游戏继续。若中途输入EXIT,则游戏提前结束。

    大概明白了么???我们来结合代码感受下哦:


import java.util.Scanner;

//猜字符小游戏
public class Guessing {
    private static Scanner scan;
    // 主方法
    public static void main(String[] args) {
        scan = new Scanner(System.in);
        char[] chs = generate();
        System.out.println(chs);
        int count = 0; // 猜错的次数
        while (true) { // 自造死循环
            System.out.println("猜吧!");
            String str = scan.next().toUpperCase(); // 获取用户输入的字符串
            if (str.equals("EXIT")) { // 判断字符串内容相等
                System.out.println("下次再来吧!");
                break;
            }
            char[] input = str.toCharArray(); // 将字符串转换为字符数组
            int[] result = check(chs, input);
            if (result[0] == chs.length) { // 对
                int score = 100 * chs.length - 10 * count;
                System.out.println("恭喜你,猜对了!得分为:" + score);
                break;
            } else {
                count++;
                System.out.println("字符对个数为:" + result[1] + ",位置对个数为:" + result[0]);
            }
        }
    }
    // 生成随机字符数组chs
    public static char[] generate() {
        char[] chs = new char[5];
        char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
                'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
                'W', 'X', 'Y', 'Z' };
        boolean[] flags = new boolean[letters.length];
        for (int i = 0; i < chs.length; i++) {
            int index;
            do {
                index = (int) (Math.random() * letters.length);
            } while (flags[index] == true);
            chs[i] = letters[index];
            flags[index] = true;
        }
        // i=0 index=0 chs[0]='A' flags[0]=true
        // i=1 index=25 chs[1]='Z' flags[25]=true
        // i=2 index=0/25/0/25/1 chs[2]='B' flags[1]=true
        return chs;
    }

    // 对比:随机字符数组chs与用户输入的字符数组input
    public static int[] check(char[] chs, char[] input) {
        int[] result = new int[2]; // (0,0)
        for (int i = 0; i < chs.length; i++) {
            for (int j = 0; j < input.length; j++) {
                if (chs[i] == input[j]) {
                    result[1]++;
                    if (i == j) {
                        result[0]++;
                    }
                    break;
                }
            }
        }
        return result;
    }
}

    好啦,这次就到这里了哦。