JAVA范例 五)数组---一维数组
一维数组
实例55? 一维数组的创建与使用
import java.util.Random;public class OneArray_01 {public static void main(String[] args) {Random rd = new Random();// 创建Random对象int array[] = new int[10];// 创建一个长度为10的int型数组arraySystem.out.println(" \narray数组中的每个元素值如下:\n");for (int i = 0; i < array.length; i++) {// 给数组中的每个元素赋值array[i] = rd.nextInt(10);// 生成0~10之间的随机数System.out.print(" " + array[i] + " ");// 将数组中的元素输出if ((i + 1) % 5 == 0)// 每5个元素一行System.out.println();}}}
?
实例56? 按相反的顺序输出
public class OneArray_02 {public static void main(String[] args) {int[] row = { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 };System.out.println("\n入场顺序如下:");for (int i = 0; i < row.length; i++) {System.out.print(" 第七排" + row[i] + "号");if ((i + 1) % 5 == 0)System.out.println();}System.out.println("\n出场顺序如下:");for (int i = row.length - 1; i >= 0; i--) {System.out.print(" 第七排" + row[i] + "号");if (i % 5 == 0)System.out.println();}}}
?
实例57? 奇偶分组
import java.util.Random;public class OneArray_03 {public static void main(String[] args) {Random rd = new Random();// 创建Random对象int total[] = new int[30];// 创建一个长度为30的int型数组total(总数组)int odd[] = new int[30];// 创建一个长度为30的int型数组odd(奇数数组)int even[] = new int[30];// 创建一个长度为30的int型数组even(偶数数组)int j = 0, k = 0;System.out.println("总数组total的元素如下:");for (int i = 0; i < total.length; i++) {total[i] = rd.nextInt(100);// 为total数组赋初值if (total[i] % 2 == 0) {// 判断当前数组中的元素是否为偶数even[k] = total[i];k++;} else {odd[j] = total[i];j++;}System.out.print(" " + total[i]);if ((i + 1) % 5 == 0)// 每5个元素一行System.out.println();}System.out.println("\n奇偶相交替输出:");int max = j > k ? j : k;// 求j和k两者间的最大值int min = j > k ? k : j;// 求j和k两者间的最小值/* 下面是将奇数和偶数交替输出,并只将多出的奇数或偶数输出 */for (int x = 0; x < max; x++) {if (x >= min && j == min) {// 当x大于求出的最小值时,如果这个最小值等于奇数的个数,则输出多出的偶数System.out.print(" " + even[x]);} else if (x >= min && k == min) {// 当x大于求出的最小值时,如果这个最小值等于偶数的个数,则输出多出的奇数System.out.print(" " + odd[x]);} else if (x < min) {// 交替着输出奇数和偶数System.out.print(" " + odd[x] + "," + even[x]);}if ((x + 1) % 5 == 0)// 每5个元素一行System.out.println();}}}
?
实例58? 找宝
import java.util.Random;public class OneArray_04 {public static void main(String[] args) {Random rd = new Random();// 创建Random对象int len = rd.nextInt(20);// 百宝箱中珠宝的个数int[] box = new int[len];// 定义一个百宝箱(数组)System.out.println("百宝箱中共有" + len + "个珠宝,其所有的编号如下:");for (int i = 0; i < box.length; i++) {box[i] = rd.nextInt(20);// 给数组元素赋值System.out.print(box[i] + " ");if ((i + 1) % 5 == 0)System.out.println();}System.out.println();int index = searchBotey(box, 8);// 调用searchBotey方法if (index == -1) {System.out.print("此类宝石没有在该百宝箱中");} else {System.out.print("此类宝石百宝箱中的第" + (index + 1) + "格子中");}}public static int searchBotey(int[] box, int index) {// 其中box指的是数组参数,index指的是要查找的元素值int num = -1;for (int i = 0; i < box.length; i++) {if (index == box[i]) {num = i;}}return num;}}
?
实例59? 寻找最小数
public class OneArray_05 {public static void main(String[] args) {int array[] = { 12, 89, 51, 24, 5, 121, 63, 10, 23, 15 };//定义一个带有初始值的整型数组arrayint min = 0;int flag = 0;System.out.println("交换前数组元素如下:");for (int i = 0; i < array.length; i++) {System.out.print(array[i] + " ");if ((i + 1) % 5 == 0)System.out.println();}for (int i = 0; i < array.length; i++) {// 查找最小数if (i == 0) {// 如果第一次循环,将数组中的第一个元素赋给变量minmin = array[0];flag = 0;} else {// 将变量min与其它的数组元素相比较,如果min的值大于其他数组元素,则将数组元素的值赋给minif (min > array[i]) {min = array[i];flag = i;}}}// 最小值与最后的元素进行交换int n = array[flag];array[flag] = array[array.length - 1];array[array.length - 1] = n;System.out.println("\n交换后数组元素如下:");for (int i = 0; i < array.length; i++) {// 输出交换后数组System.out.print(array[i] + " ");if ((i + 1) % 5 == 0)System.out.println();}System.out.println("\n数组中的最小值为:" + min + " 它的下标为 " + flag);}}
?
实例60? 我的位置在哪里
public class OneArray_06 {public static void main(String[] args) {int[] person = getLocation();System.out.println("最后的结果如下:(其中,0表示已经离开圈子了,1表示还在圈中)");for (int i = 0; i < person.length; i++) {System.out.print(person[i] + " ");if ((i + 1) % 5 == 0)System.out.println();// 寻找哪个人的状态为1,则此人就是一直没有出圈的人,获取此元素的下标,就是此人原来位置的编号if (person[i] == 1) {System.out.println("这个人的原来位置编号为:" + i);}}}public static int[] getLocation() {int person[] = new int[17];// 创建一个由17个人组成的圈子for (int i = 0; i < person.length; i++) {// 设置每个人都在圈内的状态为1person[i] = 1;}int i = 0;// 表示第几个人int k = 0;// 表示报数int count = 0;// 表示出圈的人数while (true) {i = i % 17;// 为了确保i的值永远在0~16之间if (person[i] == 1) {// 如果此人还在圈中则报数k++;// 报数加1if (k % 3 == 0) {// 如果报的数是3的倍数person[i] = 0;// 此人的状态改为0,表示此人已经离圈count++;// 离圈的人自动加1}}if (count == 16) {// 如果已经有16个人离圈,则结束报数break;}i++;}return person;}}
?
实例61? 复制数组
public class OneArray_07 {public static void main(String[] args) {copy();}public static void copy() { // 数组复制int copy1[] = new int[] { 23, 12, 67, 89, 56, 47, 13 }; // 声明数组并初始化// 声明数组长度与copy1数组的长度相同的数组,也就是备份数组int copy2[] = new int[copy1.length]; System.out.println("数组copy1中的元素如下:");for (int i = 0; i < copy1.length; i++) {// 循环显示copy1数组元素System.out.print(copy1[i] + " ");if ((i + 1) % 4 == 0)System.out.println();}System.arraycopy(copy1, 0, copy2, 0, copy1.length); // 将数组copy1复制给数组copy2System.out.println("\n复制的新数组copy2中的元素如下:");for (int i = 0; i < copy2.length; i++) {// 循环显示copy2数组元素System.out.print(copy2[i] + " ");if ((i + 1) % 4 == 0)System.out.println();}}}
?
实例62? 插入新元素
import java.util.Scanner;public class OneArray_08 {public static void main(String[] args) {insertArray ();}public static void insertArray () {int i, j;int n = 5;int insertNum[] = new int[n + 1];// 定义一个数组for (i = 0; i < insertNum.length - 1; i++) {insertNum[i] = i + (1 + 2 * i);// 按从小到大的顺序给数组元素赋值}int length = insertNum.length; // 获得数组长度System.out.println("插入数字之前的数组为:");for (i = 0; i < length; i++)// 循环显示数组元素if (insertNum[i] == 0)System.out.print("");elseSystem.out.print(insertNum[i] + " ");System.out.println();System.out.println("请输入一个数字:");Scanner scan = new Scanner(System.in);// 键盘输入一个数int in = scan.nextInt();for (i = 0; i < length - 1; i++) { // 循环查找要插入新数的位置if (insertNum[i] > in)break;}for (j = length - 1; j > i; j--) {// 移动元素,为新数空出位置insertNum[j] = insertNum[j - 1];}insertNum[i] = in; // 将要插入的数保存到该位置System.out.println("\n将" + in + "插入insertNum数组后,该数组的元素为:");for (i = 0; i < length; i++)// 循环显示数组元素System.out.print(insertNum[i] + " ");System.out.println();}}
?
实例63? 数组的合并
public class OneArray_09 {public static void main(String[] args) {int a[] = {1,3,5,7,9};int b[] = {0,2,4,6,8};int c[] = combineArray (a,b);System.out.println("合并之后的新数组c的元素如下:");for (int k = 0; k < a.length + b.length; k++)//循环输出合并后的数组的元素System.out.print(c[k]+" ");System.out.println();}public static int[] combineArray (int[] a, int[] b) {int al = a.length;//获得参数a数组的长度int bl = b.length;//获得参数b数组的长度int length = al + bl;//获得合并数组的长度int i, j;System.out.println("需要被合并的a数组的元素如下:");for(i=0;i<al;i++)//循环显示a数组元素System.out.print(a[i]+" ");System.out.println("\n需要被合并的b数组的元素如下:");for(i=0;i<bl;i++)//循环显示b数组元素System.out.print(b[i]+" ");System.out.println();int[] c = new int[length];//创建存储合并后数据元素的c数组for (i = 0, j = 0; i < al && j < bl;){//循环查看元素进行比较if (a[i] < b[j]) {//判断两个数组元素值的大小c[i + j] = a[i];i++;} else {c[i + j] = b[j];j++;}}if (i == al)//将b数组从下标为j开始将值赋给c数组,放在c数组的al+j,bl-j之间System.arraycopy(b, j, c, al + j, bl - j);if (j == bl)//将a数组从下标为i开始将值赋给c数组,放在c数组的bl+i,al-i之间System.arraycopy(a, i, c, bl + i, al - i);return c;}}
?
实例64? 去除重复元素
import java.util.Arrays;import java.util.Random;public class OneArray_10 {public static int[] trim(int array[]) {int len = array.length; // 获得传入数组的长度int[] brray = new int[len]; // 声明一个数组,长度为传入数组的长度int newlen = len;for (int i = 0; i < len; i++) { // 初始化brraybrray[i] = 0;}for (int j = 1; j < len; j++) { // 记录重复的值if (array[j] == array[j - 1]) {brray[j] = 1;newlen--;}}int[] newArray = new int[newlen]; // 声明数组,长度为传入数组长度-重复数字的个数int newId = 0;for (int i = 0; i < len; i++) { // 循环将数组赋值if (brray[i] == 0) { // 数组元素等于1是存放重复数字newArray[newId++] = array[i];}}return newArray;}public static void main(String[] args) {Random rd = new Random();int[] array = new int[20]; // 声明数组System.out.println("没有去除重复数据的数组元素共有" + array.length + "个,它们的值分别为:");for (int i = 0; i < array.length; i++) {// 利用随机数随意产生20个0~20之间的随机数array[i] = rd.nextInt(20);// 给array数组赋值}Arrays.sort(array);// 对array数组进行升序排序for (int i = 0; i < array.length; i++) {// 将array数组中的数据输出System.out.print(" " + array[i]);if ((i + 1) % 5 == 0)System.out.println();}int c[] = trim(array); // 调用trim方法去掉重复数字System.out.println("\n去掉数组中重复数字,还剩有" + c.length + "个数字,它们的值分别为:");for (int i = 0; i < c.length; i++) { // 将去掉重复数字的数组元素输出System.out.print(c[i] + " ");}}}
?
实例65? 数组求和计算
import java.util.Random;public class OneArray_11 {public static void main(String[] args) {Random rd = new Random();int[] array = new int[20]; // 声明数组System.out.println("随机生成的数组中的元素值如下:");for (int i = 0; i < array.length; i++) {// 利用随机数随意产生20个0~20之间的随机数array[i] = rd.nextInt(20);// 给array数组赋值System.out.print(" " + array[i]);// 输出array数组中的元素值if ((i + 1) % 5 == 0)// 每5个元素一行System.out.println();}int sum = sumArray(array);// 调用sumArray方法,获取array数组中所有元素的和System.out.println("\n数组array中的所有元素的和为:" + sum);}public static int sumArray(int[] a) {// 计算数组中所有元素的和int sum = 0;for (int i = 0; i < a.length; i++) {sum = sum + a[i];// 每个元素值累加}return sum;}}
?
实例66? 求最大值、最小值和平均值
import java.util.Random;public class OneArray_12 {public static void main(String[] args) {Random rd = new Random();double a[] = new double[10];// 创建一个长度为10的double型数组System.out.println("数组中所有的元素如下:");for (int i = 0; i < a.length; i++) {// 为数组中的每个元素赋值a[i] = Math.rint(rd.nextDouble() * 100);// 获取与double值最相近的并且是整数的double值System.out.print(" " + a[i]);if ((i + 1) % 5 == 0)System.out.println();}System.out.println();double b[] = show(a);// 调用show方法System.out.println("数组a中的最大值max为:" + b[0]);// 显示最大值System.out.println("数组a中的最小值min为:" + b[1]);// 显示最小值System.out.println("数组a中的平均值ave为:" + b[2]);// 显示平均值}public static double[] show(double[] dou) {// 求数组元素中的最大值、最小值和所有元素的平均值double[] result = new double[3];// 创建一个长度为3的double型数组double max = dou[0], min = dou[0], sum = dou[0];for (int i = 1; i < dou.length; i++) {max = max > dou[i] ? max : dou[i];// 求最大值min = min < dou[i] ? min : dou[i];// 求最小值sum += dou[i];// 求所有元素的累加和}result[0] = max;result[1] = min;result[2] = sum / dou.length;// 求平均值return result;}}
?
?