数组的元素类型和数组的大小都是确定的,所以当处理数组元素时候,我们通常使用基本循环或者 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:
再来看数组作为函数的返回值,以下实例中 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;
}
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组,例如:
咱们再来看下多维数组的动态初始化(以二维数组为例),首先直接为每一维分配空间,格式如下:
type 可以为基本数据类型和复合数据类型,arraylenght1 和 arraylenght2 必须为正整数,arraylenght1 为行数,arraylenght2 为列数,二维数组 a 可以看成一个两行三列的数组,实例如下:
再来呢,从最高维开始,分别为每一维分配空间,例如:
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],例如:
还算是比较简单的吧。然后我们来看数组倒序实例:
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; } }好啦,这次就到这里了哦。如果感觉不错的话,请多多点赞支持哦。。。