一维数组
实例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型数组array
System.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 }; //定义一个带有初始值的整型数组array
int 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) { // 如果第一次循环,将数组中的第一个元素赋给变量min
min = array[0];
flag = 0;
} else {
// 将变量min与其它的数组元素相比较,如果min的值大于其他数组元素,则将数组元素的值赋给min
if (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++) { // 设置每个人都在圈内的状态为1
person[i] = 1;
}
int i = 0; // 表示第几个人
int k = 0; // 表示报数
int count = 0; // 表示出圈的人数
while (true) {
i = i % 17; // 为了确保i的值永远在0~16之间
if (person[i] == 1) { // 如果此人还在圈中则报数
k++; // 报数加1
if (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复制给数组copy2
System.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("");
else
System.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++) { // 初始化brray
brray[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;
}
}