第一关:
相关知识
本关需要你完成数组的复制操作,可以分三个步骤来实现。
-
创建一个数组
arr2
,数组长度和数组arr1
相同; -
使用循环将数组
1
中的每一个数据赋值给数组2
中对应的那一项。(即arr2[0] = arr1[0]
); -
循环输出复制之后
arr2
中的所有数据。
编程要求
在右侧编辑器Begin-End
中填充代码,将arr1
数组中的数据全部复制给arr2
数组,最后输出arr2
中所有的数据。
测试说明
我会对你的程序进行测试,如下:
测试输入:1
,3
,12
预期输出: 1
3
12
测试输入:2
,13
,11
预期输出: 2
13
11
代码实现:
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
//动态构建arr1
int[] arr1 = new int[3];
Scanner sc = new Scanner(System.in);
for(int i = 0 ; i< arr1.length ; i++){
arr1[i] = sc.nextInt();
}
/********** Begin **********/
//创建数组arr2
int[] arr2=new int[3];
//使用for循环将arr1的数据复制给arr2
for(int i=0;i<arr1.length;i++){
int k=arr1[i];
arr2[i]=k;
}
//输出arr2
for(int j=0;j<arr2.length;j++){
System.out.println(arr2[j]);
}
/********** End **********/
}
}
第二关:
相关知识
为了完成本关任务,你需要知道:如何判断两个字符串是否相等。
如何判断字符串相等
我们之前判断两个数是否相等使用的是==
符号,我们判断字符串是否相等能否用==
符号呢?我们来看一段代码。
输出结果:
为什么呢? 是因为==
比较的是两个对象的内存地址,我们知道变量被创建的时候就相当于在内存中开辟空间,而案例中str
和str1
就是占用的两块不同的空间,所以他们的内存地址是不一致的,在用==
符号判断的时候就不相等了,即为false
。
也许你会这样子尝试:
这又是什么原因呢?是因为定义String str = "hello"
和String str1 = "hello"
没有进行对象的创建,而是同时指向的一个对象,所以他们的内存地址是相同的。
问题来了,既然==
不能用,那我们应该用什么呢?
在Java
中判断两个字符串是否相等,需要使用equals方法;
语法:字符串1.equals(字符串2)
如果字符串1
等于字符串2
返回true
,否则返回false
; 例如:
输出: str与str1是否相等true
编程要求
在右侧编辑器Begin-end
处填充代码,实现在数组中查找指定字符串位置的功能。
测试说明
测试输入:张三
预期输出:张三在数组的第1个位置
测试输入:张富贵
预期输出:张富贵在数组的第5个位置
代码实现:
import java.util.Scanner;
public class HelloWorld {
public static <Sting> void main(String[] args) {
Scanner sc = new Scanner(System.in);
//str为要查找的字符串
String str = sc.next();
/********** Begin **********/
//创建数组 arr 给数组赋值 {"张三","张三丰","张无忌","王二麻子","张富贵"}
String[] arr={"张三","张三丰","张无忌","王二麻子","张富贵"};
for(int i=0;i<arr.length;i++){
String str1=arr[i];
int k=i+1;
if(str.equals(str1)){
System.out.println(str+"在数组的第"+k+"个位置");
}
}
/********** End **********/
}
}
第三关:实现两个数交换
任务描述
本关任务:完成两个数(a
与b
)的交换。
相关知识
看到这个问题,也许你的第一想法就是:
int a = 3;
int b = 4;
a = b;
b = a;
System.out.println(a);
System.out.println(b);
问题真有那么简单吗?猜猜这段程序输出的结果吧!
我们在之前的章节中提到过,变量就相当于一个杯子,每一个变量相当于不同的杯子,本关要完成的两个变量的交换,可以看做是将两个杯子中装的液体进行交换,请你思考一下如何将两个杯子中的液体交换呢?
只有两个杯子能不能完成呢?
如果是三个杯子呢?
编程要求
是时候检验一下啦,在右侧编辑器Begin-end
中填充代码,完成两个变量的交换吧。
测试说明
测试输入:3
,5
预期输出: 5
3
测试输入:4
,2
预期输出: 2
4
代码实现:
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
/********** Begin **********/
//将a的值赋给b b的值赋给a
int temp;
temp=a;
a=b;
b=temp;
/********** End **********/
System.out.println(a);
System.out.println(b);
}
}
简单的数据交换,引入第三个变量即可。当然也可以选择用数组实现:
代码如下:
/********** Begin **********/
//将a的值赋给b b的值赋给a
Scanner scan = new Scanner(System.in);
int[] arr=new int[2];
int x=0;
int y=0;
for(int i=0;i<arr.length;i++) {
arr[i] = scan.nextInt();
x=arr[0];
y=arr[1];
}
System.out.println(y);
System.out.println(x);
/********** End **********/
第四关:选择排序
任务描述
本关任务:实现数组从大到小的排序(降序排序)。
相关知识
为了解决数组排序的问题你需要先了解:选择排序。
选择排序
关于选择排序,你可以理解为一个循环打擂台的过程,还记得我们在上一章节中求数组中的最大值吗?
我们运用打擂台的原理,可以求出数组中的最大值。 核心代码:
int max = scores[0];
for (int i = 1; i < scores.length; i++) {
if(max < scores[i]){ //求最大值
max = scores[i];
}
}
这样一轮循环之后我们就可以求出数组scores
的最大值。 第一轮擂台赛求出最大值之后,我们可以对接下来的数据再进行打擂台的操作,就出剩下数据的最大值(也就是第二大的值),以此类推,就可以实现数组从大到小的排序。
编程要求
在右侧Begin-End
区域中添加代码,实现对数组arr
的降序排序,并输出排序后的arr
数组。
测试说明
我会对你的程序进行测试; 预期输入:6
,6
,5
,0
,2
,8
,9
预期输出:[9, 8, 6, 5, 2, 0]
预期输入:4
,3
,12
,1
,13
预期输出:[13, 12, 3, 1]
import java.util.Arrays;
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//动态创建数组
int[] arr = new int[sc.nextInt()];
for(int i = 0 ; i< arr.length ; i++) {
arr[i] = sc.nextInt();
}
// System.out.println(Arrays.toString(arr));
/********** Begin **********/
for(int k=0;k<arr.length-1;k++) {
int max =k;
for(int j=1+k;j<arr.length;j++) {
if (arr[max] < arr[j]) {
int temp = arr[max];
arr[max] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
/********** End **********/
}
}
要点就是取数组第一个值设为最大值,然后依次与后面的元素比较,如果后面的元素比初始设置的最大值大就和它进行交换。
第五关:冒泡排序
任务描述
本关任务:使用冒泡排序实现数组的升序排序(从小到大)。
相关知识
看完上图,相信你已经能明白冒泡排序的原理了。
将序列当中的左右元素,依次比较,如果左边的元素大于右边元素则交换位置,保证右边的元素始终大于左边的元素;( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;)对序列当中剩下的n
-1个元素再次执行步骤1
。对于长度为n
的序列,一共需要执行n
-1轮比较。
在代码中实现一轮比较:
输出结果:[5, 8, 0, 2, 6, 9]
编程要求
在编辑器Begin-end
处填充代码,使用冒泡排序对数组arr
进行升序排序,最后输出排序之后数组arr
中的数据。
测试说明
预期输入:6
,9
,5
,8
,0
,2
,6
预期输出:[0, 2, 5, 6, 8, 9]
预期输入:4
,3
,12
,13
,0
预期输出:[0, 3, 12, 13]
代码实现:
import java.util.Arrays;
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//动态创建数组
int[] arr = new int[sc.nextInt()];
for(int i = 0 ; i< arr.length ; i++){
arr[i] = sc.nextInt();
}
/********** Begin **********/
for(int k=0;k<arr.length;k++) {
for (int j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
/********** End **********/
}
}
创作不易,如果对各位美女帅哥有用的话动手点个赞!!!