学习-Java数组之Arrays类操作数组之填充替换数组元素

任务描述

本关任务:根据控制台接收的数据,创建数组,使用 fill 方法替换数组中的部分数据,并输出最后结果。

相关知识

为了完成本关任务,你需要掌握:

  • Arrays 类的作用;
  • Arrays 类常用方法。

Arrays类

java.util.Arrays 类提供多种方法用来操作数组,比如排序和替换等。 我们要想使用它,只需两个步骤:

  • 使用 import java.util.Arrays;导入该类;

  • 使用Arrays.方法名(数组)操作数组。

下面我们来了解一下它的常用方法。

Arrays 类常用方法

方法名 用法
toString 方法 该方法主要返回数组元素的字符串形式
fill 方法 该方法主要用于替换数组中的元素
sort 方法 该方法主要用于给数组元素排序
copyOf 方法 该方法主要用于复制数组
copyOfRange 方法 该方法主要用于复制数组,需要指定起始位置
binarySearch 方法 该方法主要用于查找指定元素索引值

fill 方法详细介绍

fill 方法用来替换数组中的元素。它既可以直接替换数组中所有元素,也可以通过指定索引范围来替换部分元素。

直接替换数组中所有元素:

 
 
  1. fill(arr, value)

参数说明:

  • 第一个参数(arr)为数组;
  • 第二个参数(value)为替换值。

示例:把数组中所有元素替换成 8。

 
 
  1. public static void main(String[] args) {
  2. int [] arr={2,3,4,8,-2,0,-43,88};
  3. Arrays.fill(arr,8); // 使用fill方法把数组中所有值替换成8
  4. System.out.println(Arrays.toString(arr)); // 打印新数组中的值
  5. }

执行结果:

 
 
  1. [8, 8, 8, 8, 8, 8, 8, 8]

替换部分元素

 
 
  1. fill(arr, fromIndex,toIndex, value)

参数说明:

  • 第一个参数(arr)为数组;
  • 第二个参数(fromIndex)为数组中需要被替换的起始索引值(包含);
  • 第三个参数(toIndex)为数组中需要被替换的结束索引值(不包含);
  • 第四个参数(value)为替换值。

示例:把数组中部分元素替换成 8。

 
 
  1. public static void main(String[] args) {
  2. // 请在Begin-End间编写代码
  3. /********** Begin **********/
  4. int [] arr={2,3,4,8,-2,0,-43,88};
  5. Arrays.fill(arr,1,5,8); // 使用fill方法把数组中部分值替换成8
  6. System.out.println(Arrays.toString(arr)); // 打印新数组中的值
  7. /********** End **********/
  8. }

执行结果:

 
 
  1. [2, 8, 8, 8, 8, 0, -43, 88]

sort 方法详细介绍

sort 方法用于给数组元素排序,默认排序方式为升序。

示例:

 
 
  1. public static void main(String[] args) {
  2. int [] arr={8,2,7,84,12,1,786,92,34}; // 定义原数组
  3. Arrays.sort(arr); // 对数组元素排序
  4. System.out.print(Arrays.toString(arr)); // 打印数组
  5. }

执行结果:

 
 
  1. [1, 2, 7, 8, 12, 34, 84, 92, 786]

copyOf 方法和 copyOfRange 方法详细介绍

copyOf 方法和 copyOfRange 方法都用于复制数组,其中 copyOfRange 方法需要指定起始位置。 示例:

 
 
  1. public static void main(String[] args) {
  2. int [] arr={8,2,7,84,12,1,786,92,34}; // 定义原数组
  3. int[] ints = Arrays.copyOf(arr, 4);// 复制数组,第二个参数指定新数组长度
  4. // 复制数组,当指定新数组长度大于原数组时,会填充默认值
  5. int[] ints1=Arrays.copyOf(arr,10);
  6. System.out.println(Arrays.toString(ints)); // 打印数组
  7. System.out.print(Arrays.toString(ints1)); // 打印数组
  8. int[] ints2 = Arrays.copyOfRange(arr, 2, 4); // 复制数组,第二、三个参数指定索引值
  9. // 复制数组,当指定新数组长度大于原数组时,会填充默认值
  10. int[] ints3 = Arrays.copyOfRange(arr, 0, 10);
  11. System.out.println(Arrays.toString(ints2)); // 打印数组
  12. System.out.print(Arrays.toString(ints3)); // 打印数组
  13. }

执行结果:

 
 
  1. [8, 2, 7, 84]
  2. [8, 2, 7, 84, 12, 1, 786, 92, 34, 0]
  3. [7, 84]
  4. [8, 2, 7, 84, 12, 1, 786, 92, 34, 0]

binarySearch 方法

binarySearch 方法用于查找指定元素索引值。因为该方法使用的是二分法查找,所以在调用该方法之前,必须先调用 sort() 方法进行排序,如果数组没有排序,那么结果是不确定的。

示例:

 
 
  1. public static void main(String[] args) {
  2. int [] arr={8,6,84,12,3,786,7,34}; // 定义原数组
  3. int i = Arrays.binarySearch(arr, 7); // 未对数组排序,直接查找元素
  4. System.out.println(i); // 打印索引值
  5. Arrays.sort(arr); // 对原数组排序
  6. System.out.println(Arrays.toString(arr)); // 打印排序后的数组
  7. int x = Arrays.binarySearch(arr, -2); // 排序后查找数组中不存在的元素,不存在则会输出-1
  8. int y = Arrays.binarySearch(arr, 7); // 排序后查找数组中存在的元素
  9. System.out.println(x); // 打印索引值
  10. System.out.print(y); // 打印索引值
  11. }

执行结果:

 
 
  1. -3
  2. [3, 6, 7, 8, 12, 34, 84, 786]
  3. -1
  4. 2

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,接收控制台数据创建数组,并替换数组中部分数据,具体要求如下:

  • 接收给定的一行整数(如:12 56 566 452 63 656 356 26 256 256 85876 575 45 %。其中第一个数代表数组长度,其余数为数组元素,最后的 % 用于判断终止控制台输入,中间用空格分隔);
  • 把给定数据创建数组,并替换部分元素,比如有数组[2,5,6,7,8,45,56,45],把它替换成[18,5,6,7,18,45,56,45],即每隔3 个元素替换 1 个元素的值为 18,第 1 个元素为初始替换值;
  • 输出替换后的数组。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。

例: 测试输入:

 
 
  1. 12 56 566 452 63 656 356 26 256 256 85876 575 45 %

预期输出:

 
 
  1. [18, 566, 452, 63, 18, 356, 26, 256, 18, 85876, 575, 45]

开始你的任务吧,祝你成功!

参考答案


import java.util.Arrays;
import java.util.Scanner;
public class ArrTest {
    public static void main(String[] args) {
        // 请在Begin-End间编写完整代码
        /********** Begin **********/
        // 第一步:从控制台获取输入值(当输入值为%时,终止获取),并给数组赋值
        Scanner scanner = new Scanner(System.in);
        int m= scanner.nextInt();
        int [] arr=new int[m];     // 定义一维数组
        int n=0;
        while(!scanner.hasNext("%")){
          arr[n] = scanner.nextInt();
          n++;
    }
        // 第二步:替换数组
        for(int i=0;i<arr.length;){
            Arrays.fill(arr,i,i+1,18);
            i+=4;
        }
        // 第三步:输出替换后的数组
        System.out.print(Arrays.toString(arr));
        /********** End **********/
    }
}

Guess you like

Origin blog.csdn.net/qq_53149358/article/details/121401128