任务描述
本关任务:根据控制台接收的数据,创建数组,使用 fill 方法替换数组中的部分数据,并输出最后结果。
相关知识
为了完成本关任务,你需要掌握:
- Arrays 类的作用;
- Arrays 类常用方法。
Arrays类
java.util.Arrays 类提供多种方法用来操作数组,比如排序和替换等。 我们要想使用它,只需两个步骤:
-
使用
import java.util.Arrays;
导入该类; -
使用
Arrays.方法名(数组)
操作数组。
下面我们来了解一下它的常用方法。
Arrays 类常用方法
方法名 | 用法 |
---|---|
toString 方法 | 该方法主要返回数组元素的字符串形式 |
fill 方法 | 该方法主要用于替换数组中的元素 |
sort 方法 | 该方法主要用于给数组元素排序 |
copyOf 方法 | 该方法主要用于复制数组 |
copyOfRange 方法 | 该方法主要用于复制数组,需要指定起始位置 |
binarySearch 方法 | 该方法主要用于查找指定元素索引值 |
fill 方法详细介绍
fill 方法用来替换数组中的元素。它既可以直接替换数组中所有元素,也可以通过指定索引范围来替换部分元素。
直接替换数组中所有元素:
fill(arr, value)
参数说明:
- 第一个参数(arr)为数组;
- 第二个参数(value)为替换值。
示例:把数组中所有元素替换成 8。
public static void main(String[] args) {
int [] arr={2,3,4,8,-2,0,-43,88};
Arrays.fill(arr,8); // 使用fill方法把数组中所有值替换成8
System.out.println(Arrays.toString(arr)); // 打印新数组中的值
}
执行结果:
[8, 8, 8, 8, 8, 8, 8, 8]
替换部分元素
fill(arr, fromIndex,toIndex, value)
参数说明:
- 第一个参数(arr)为数组;
- 第二个参数(fromIndex)为数组中需要被替换的起始索引值(包含);
- 第三个参数(toIndex)为数组中需要被替换的结束索引值(不包含);
- 第四个参数(value)为替换值。
示例:把数组中部分元素替换成 8。
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
int [] arr={2,3,4,8,-2,0,-43,88};
Arrays.fill(arr,1,5,8); // 使用fill方法把数组中部分值替换成8
System.out.println(Arrays.toString(arr)); // 打印新数组中的值
/********** End **********/
}
执行结果:
[2, 8, 8, 8, 8, 0, -43, 88]
sort 方法详细介绍
sort 方法用于给数组元素排序,默认排序方式为升序。
示例:
public static void main(String[] args) {
int [] arr={8,2,7,84,12,1,786,92,34}; // 定义原数组
Arrays.sort(arr); // 对数组元素排序
System.out.print(Arrays.toString(arr)); // 打印数组
}
执行结果:
[1, 2, 7, 8, 12, 34, 84, 92, 786]
copyOf 方法和 copyOfRange 方法详细介绍
copyOf 方法和 copyOfRange 方法都用于复制数组,其中 copyOfRange 方法需要指定起始位置。 示例:
public static void main(String[] args) {
int [] arr={8,2,7,84,12,1,786,92,34}; // 定义原数组
int[] ints = Arrays.copyOf(arr, 4);// 复制数组,第二个参数指定新数组长度
// 复制数组,当指定新数组长度大于原数组时,会填充默认值
int[] ints1=Arrays.copyOf(arr,10);
System.out.println(Arrays.toString(ints)); // 打印数组
System.out.print(Arrays.toString(ints1)); // 打印数组
int[] ints2 = Arrays.copyOfRange(arr, 2, 4); // 复制数组,第二、三个参数指定索引值
// 复制数组,当指定新数组长度大于原数组时,会填充默认值
int[] ints3 = Arrays.copyOfRange(arr, 0, 10);
System.out.println(Arrays.toString(ints2)); // 打印数组
System.out.print(Arrays.toString(ints3)); // 打印数组
}
执行结果:
[8, 2, 7, 84]
[8, 2, 7, 84, 12, 1, 786, 92, 34, 0]
[7, 84]
[8, 2, 7, 84, 12, 1, 786, 92, 34, 0]
binarySearch 方法
binarySearch 方法用于查找指定元素索引值。因为该方法使用的是二分法查找,所以在调用该方法之前,必须先调用 sort() 方法进行排序,如果数组没有排序,那么结果是不确定的。
示例:
public static void main(String[] args) {
int [] arr={8,6,84,12,3,786,7,34}; // 定义原数组
int i = Arrays.binarySearch(arr, 7); // 未对数组排序,直接查找元素
System.out.println(i); // 打印索引值
Arrays.sort(arr); // 对原数组排序
System.out.println(Arrays.toString(arr)); // 打印排序后的数组
int x = Arrays.binarySearch(arr, -2); // 排序后查找数组中不存在的元素,不存在则会输出-1
int y = Arrays.binarySearch(arr, 7); // 排序后查找数组中存在的元素
System.out.println(x); // 打印索引值
System.out.print(y); // 打印索引值
}
执行结果:
-3
[3, 6, 7, 8, 12, 34, 84, 786]
-1
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 个元素为初始替换值; - 输出替换后的数组。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
例: 测试输入:
12 56 566 452 63 656 356 26 256 256 85876 575 45 %
预期输出:
[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 **********/
}
}