数组相关题目练习:
题目一:
现在有如下一个数组:
int[] oldArr={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
要求将以上数组中的0项去掉,将不为0的值存入一个新的数组,生成新的数组为
int[] newArr={1,3,4,5,6,6,5,4,7,6,7,5};
方法一:
分析:
- 首先计算出老数组中不为0的元素的个数,即为新数组的长度。
- 然后定义一个新数组
- 将老数组中不为0的元素赋给新数组
- 打印新数组即可
代码实现:
public static void method4() {
int[] oldArr = {1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5};
int len = 0;
for (int i = 0; i < oldArr.length; i++) {
if (oldArr[i] != 0) {
len++;
}
}
System.out.println("数组不为零的个数为:" + len);
int[] newArr = new int[len];
int j = 0;
for (int i = 0; i < oldArr.length; i++) {
if (oldArr[i] != 0) {
newArr[j] = oldArr[i];
j++;
}
}
System.out.println("新数组打印为:");
System.out.println(Arrays.toString(newArr));
}
方法二:
分析:
- 首先定义一个中间数组arr,假设长度和oldArr一致
- 把不为0的元素赋给arr
- 打印中间数组arr
- 把arr拷贝到newArr,数组长度是不为0元素的个数(index),然后打印newArr即可!
代码实现:
public static void task2() {
int[] oldArr = {1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5};
//首先定义一个中间数组arr,假设长度和oldArr一致
int[] arr = new int[oldArr.length];
int index = 0;
for (int i = 0; i < oldArr.length; i++) {
//把不为0的元素赋给arr
if (oldArr[i] != 0) {
arr[index] = oldArr[i];
index++;
}
}
//打印arr
System.out.println(Arrays.toString(arr));
//把arr拷贝到newArr,数组长度是不为0元素的个数(index)
int[] newArr = Arrays.copyOf(arr, index);
System.out.println(Arrays.toString(newArr));
}
题目二:
int array [] = {2,432,5221,235,2,5352,1,53,5,3,5364,2,2,63,3533,2,53,532,532};
- 求所有元素和。
- 输出所有奇数下标元素。如:array[1]
- 输出所有元素中,值为奇数的。
- 将所有元素乘二。
- 将奇数位置元素存到B数组中
- 偶数元素存到C数组中
- 分别逆序输出B数组和C数组
代码实现:
package com.codeyancy.qy28.test;
import java.util.Arrays;
public class TaskDemo6 {
public static void main(String[] args) {
int[] array = {2, 432, 5221, 235, 2, 5352, 1, 53, 5, 3, 5364, 2, 2, 63, 3533, 2, 53, 532, 532};
method22(array);
}
//求所有元素和。
public static void method1(int[] arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println("所有元素和为:" + sum);
}
//输出所有奇数下标元素。如:array[1] 方法一:
public static void method2(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (i % 2 != 0) {
System.out.println("奇数下标元素:" + arr[i]);
}
}
}
//方法二:(推荐使用)
public static void method21(int[] arr) {
for (int i = 1; i < arr.length; i += 2) {
System.out.println("奇数下标元素:" + arr[i]);
}
}
//输出所有偶数下标元素。如:array[0]
public static void method22(int[] arr) {
for (int i = 0; i < arr.length; i += 2) {
System.out.println("偶数下标元素:" + arr[i]);
}
}
/**
* 输出所有元素中,值为奇数的
* 此时不需要数组的索引,使用增强for循环
*/
public static void method3(int[] arr) {
for (int a : arr) {
if (a % 2 != 0) {
System.out.println(a);
}
}
}
//将所有元素乘二
public static void method4(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] * 2;
}
System.out.println(Arrays.toString(arr));
}
//将奇数位置元素存到B数组中。
//int[] array = {2,432,5221,235,2,5352,1,53,5,3,5364,2,2,63,3533,2,53,532,532};
public static void method5(int[] arr) {
//偶数下标长度
int evenLength = (arr.length + 1) / 2;
System.out.println("数组长度:" + arr.length);
System.out.println("偶数下标的长度:" + evenLength);
System.out.println("奇数下标的长度:" + (arr.length - evenLength));
//偶数下标长度 = 奇数位置元素个数(B数组长度)
int[] bArray = new int[evenLength];
int bIndex = 0;
for (int i = 0; i < arr.length; i += 2) {
bArray[bIndex] = arr[i];
bIndex++;
}
System.out.print("B数组为:");
System.out.println(Arrays.toString(bArray));
//B数组逆序输出
System.out.print("B数组逆序输出:");
for (int i = bArray.length - 1; i >= 0; i--) {
System.out.print(bArray[i] + "\t");
}
}
//偶数元素存到C数组中
public static void method6(int[] arr) {
int cLength = 0;
int cIndex = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 == 0) {
cLength++;
}
}
System.out.println("C数组的长度为:" + cLength);
int[] cArray = new int[cLength];
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 == 0) {
cArray[cIndex] = arr[i];
cIndex++;
}
}
System.out.print("C数组为:");
System.out.println(Arrays.toString(cArray));
//C数组逆序输出
System.out.print("C数组逆序输出:");
for (int i = cArray.length - 1; i >= 0; i--) {
System.out.print(cArray[i] + "\t");
}
}
}
题目三
在歌唱比赛中,共有10位评委进行打分,在计算歌手得分时,去掉一个最高分,去掉一个最低分,然后剩余的8位评委的分数进行平均,就是该选手的最终得分。输入每个评委的评分,求某选手的得分
方法一:
分析:
- 这里随机生成十个分数
- 使用三目运算符求出最值
- 得出平均分
public static void task1() {
int[] score = new int[10];
int sum = 0;
for (int i = 0; i < score.length; i++) {
score[i] = (int) (Math.random() * 100);
sum += score[i];
System.out.println(score[i]);
}
//最大值 最小值去掉
int minIndex = 0, maxIndex = 0;
for (int i = 1; i < score.length; i++) {
maxIndex = (score[i] > score[maxIndex] ? i : maxIndex);
minIndex = (score[i] < score[minIndex] ? i : minIndex);
}
System.out.println("最大值的索引" + maxIndex);
System.out.println("最小值的索引" + minIndex);
System.out.println("平均分:" + (sum - score[maxIndex] - score[minIndex]) / 8);
}
方法二:
分析:
- 十位评委依次打分
- 定义一个最大值和最小值,假设为第一个元素
- 进行for循环求出最值即可
System.out.println("******歌唱比赛******");
Scanner sc = new Scanner(System.in);
int[] arr = new int[10];
int sum = 0;
for (int i = 0; i < arr.length; i++) {
System.out.print("请第" + (i + 1) + "位评委进行打分:");
int score = sc.nextInt();
arr[i] = score;
sum += arr[i];
}
int maxScore = arr[0];
int minScore = arr[0];
for (int i = 1; i < arr.length; i++) {
if (maxScore < arr[i]) {
maxScore = arr[i];
}
if (minScore > arr[i]) {
minScore = arr[i];
}
}
System.out.println("十位评委的总打分为:" + sum);
System.out.println("评委最高分为:" + maxScore);
System.out.println("评委最低分为:" + minScore);
double avg = (sum - maxScore - minScore) / (arr.length - 2);
System.out.println("该选手最终得分为:" + avg);
}