Java⼊门-数组进阶
第1关:数组的复制
任务描述
本关任务:完成将⼀个数组的值复制给另⼀个数组。
相关知识
本关需要你完成数组的复制操作,可以分三个步骤来实现。
创建⼀个数组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
开始你的任务吧,祝你成功!
参考代码:
package step1;
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<arr2.length;i++){
arr2[i]=arr1[i];
System.out.println(arr2[i]);
}
//输出arr2
/********** End **********/
}
}
第2关:数组中元素的查
任务描述
本关任务:完成查字符串数组中指定字符串位置的⼩程序。
相关知识
为了完成本关任务,你需要知道:如何判断两个字符串是否相等。
如何判断字符串相等
我们之前判断两个数是否相等使⽤的是==符号,我们判断字符串是否相等能否⽤==符号呢?我们来看⼀段代码。
输出结果:
为什么呢?
是因为==⽐较的是两个对象的内存地址,我们知道变量被创建的时候就相当于在内存中开辟空间,⽽案例中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个位置
开始你的任务吧,祝你成功!
参考代码:
package step2;
import java.util.Scanner;
public class HelloWorld {
public static 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++){
if(arr[i].equals(str))
System.out.println(str+"在数组的第"+(i+1)+"个位置");}
/********** End **********/
}
}
第3关:交换算法
任务描述
本关任务:完成两个数(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
开始你的任务吧,祝你成功!
参考代码:
package step3;
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 c;
c=a;
a=b;
b=c;
/
********** End **********/
System.out.println(a);
System.out.println(b);
}
}
第4关:选择排序
任务描述
本关任务:实现数组从⼤到⼩的排序(降序排序)。
相关知识
为了解决数组排序的问题你需要先了解:选择排序。
选择排序
关于选择排序,你可以理解为⼀个循环打擂台的过程,还记得我们在上⼀章节中求数组中的最⼤值吗?
我们运⽤打擂台的原理,可以求出数组中的最⼤值。
java定义一维数组并赋值核⼼代码:
int max = scores[0];
for (int i = 1; i < scores.length; i++) {
if(max < scores[i]){ //求最⼤值
max = scores[i];
}
}
这样⼀轮循环之后我们就可以求出数组scores的最⼤值。
第⼀轮擂台赛求出最⼤值之后,我们可以对接下来的数据再进⾏打擂台的操作,就出剩下数据的最⼤值(也就是第⼆⼤的值),以此类推,就可以实现数组从⼤到⼩的排序。
实现过程
为了实现选择排序,我们需要求出最⼤值,并且和相⽐较的数据交换位置:接下来我们对数组int[] arr = {6,5,8,0,2,9}来进⾏第⼀趟循环,将最⼤值移动到数组的第⼀位。
代码实现:
int[] arr = {6,5,8,0,2,9};
for (int i = 0; i < arr.length-1; i++) {
if(arr[0] < arr[i+1]){
int temp = arr[0];
arr[0] = arr[i+1];
arr[i+1] = temp;
}
}
⼀次循环操作就可以出数组中的最⼤值,并将其移动到数组的⾸位,所以对于⼀个长度为6的数组,我们只需要进⾏5(length-1)次上
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论