第1关:Java 循环结构之 for 循环
任务描述
使用本关所学知识,实现一个自然数N
的阶乘。
相关知识
本关我们来学习Java
中最常用的循环语句——for
循环,for
循环的功能和while
循环大致相同,只是写法上有区别。如下:
具体使用方式:
for(初始化语句;条件;控制循环次数){
<若干语句>
}
输出:
做了1个俯卧撑
做了2个俯卧撑
做了3个俯卧撑
做了4个俯卧撑
做了5个俯卧撑
编程要求
是不是会用了呢?来试试吧,在右侧编辑器Begin-End
中填充代码,用for
循环实现一个自然数N
的阶乘。
例如:给定一个数数N=5
,那么它的阶乘为1*2*3*4*5
。 效果图如下:
测试说明
平台会对你编写的代码进行测试,若与预期输出一致,则算通关。
开始你的任务吧!
代码:
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请给定一个自然数N:");
int N = sc.nextInt();//获取输入的整数N
int sum = 1;
for(int i=1;i<=N;i++){
sum*=i;
}
System.out.println("自然数N的阶乘为" + sum);
}
}
第2关:for循环的进阶使用-嵌套循环
任务描述
本关需要你编写一个小程序。能打印出两个三角形。
相关知识
相信你经过上一关你对于循环的嵌套已经比较熟悉了,本关要实现的效果就是将上一关的矩形切掉了一半,那应该怎么实现呢?
可以发现,要打印出三角形,第一次要打印一颗*
第二次两颗**
依次类推,这有什么规律呢,相信你已经明白了。
对于本关你可以这样尝试:
- 可以先尝试打印出一个
3*3
的正三角形,像这样;
- 然后把这个
3*3
的三角形改成10*10
的正三角形;
- 最后再尝试打印一个
10*10
的倒三角形。
把问题拆分一个个的小部分,这样子是不是就没有那么难了呢?
编程要求
请在右侧编辑器Begin-End
中填充代码,实现两个三角形的打印输出,效果图如下:
测试说明
平台会对你编写的代码进行测试,若与预期输出一致,则算通关。
开始你的任务吧,good luck!
代码:
package step2;
public class Test {
public static void main(String[] args) {
/*****start*****/
//在这里打印出正三角形
for(int i=1;i<=10;i++){
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
System.out.println("——————————我是华丽的分界线——————————");
//在这里打印出倒三角形
for(int i=1;i<=10;i++){
for(int j=10;j>=i;j--){
System.out.print("*");
}
System.out.println();
}
/*****end*****/
}
}
第3关:冒泡排序
任务描述
本关任务:使用冒泡排序实现数组的升序排序(从小到大)。
相关知识
冒泡排序
看完上图,相信你已经能明白冒泡排序的原理了。
将序列当中的左右元素,依次比较,如果左边的元素大于右边元素则交换位置,保证右边的元素始终大于左边的元素;( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;)对序列当中剩下的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]
开始你的任务吧,祝你成功!
代码:
package step3;
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 j=1;j<arr.length;j++){
for(int i=0;i<arr.length-1;i++){
if(arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}}
System.out.println(Arrays.toString(arr));
/********** End **********/
}
}
第4关:substring()方法与indexOf()方法的使用 - 姓名
任务描述
成为班长的小明最近好不忙,刚统计好了全班的花名册,班主任又交给了他一项任务。班主任的电脑不幸中了病毒,有一个文件变成了一堆乱码,但是班主任仔细查看了文件后发现,在这堆毫无意义的乱码中,还是有零散的班上同学的姓名穿插其中,现在班主任让小明将其位置找出来。
相关知识
substring()方法
在String
类中有两个substring()
方法,第一种如下:
String str;
str.substring(int start)
其中,start
为要开始截取的位置的索引,方法将返回一个字符串,内容为原字符串从start
位置开始到原字符串结束位置的数据。
例如:
String str = "hello word!";
System.out.println(str.substring(1));
System.out.println(str.substring(3));
System.out.println(str.substring(6));
执行以上代码,结果如下:
ello word!
lo word!
ord!
如果start
大于字符串的长度,将会抛出越界异常。
第二种substring()
方法:
String str;
str.substring(int start, int end)
其中,start
为开始位置索引,end
为结束为止索引,方法将返回一个字符串,内容为原字符串从start
位置开始到end
位置结束中间的数据。
例如:
String str = "hello word!";
System.out.println(str.substring(1, 4));
System.out.println(str.substring(3, 5));
System.out.println(str.substring(0, 4));
执行以上代码,结果如下:
ell
lo
hell
indexOf()方法
indexOf()
方法用于在String
类的对象中查找子字符串,方法返回一个整数值,为子字符串的开始位置,若存在多个子字符串,返回数值最小的整数值;如果没有找到子字符串,返回-1
,需要注意的是原字符串的第一个字母的位置是0,请看示例:
String str = "abcdefghijklmnabc";
System.out.println(str.indexOf("c")); //结果为2,为字符"c"第一次出现的位置
System.out.println(str.indexOf("x")); //结果为-1,没有找到字符"x"
编程要求
本关的编程任务是补全右侧代码片段中Begin
至End
中间的代码,具体要求如下:
-
data
变量为乱码文件的文本数据,由命令行读入; -
name
变量为需要查找的姓名,由命令行读入; -
你将被要求输出若干行,每一行为查找到的姓名的位置。
评测说明
平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。
以下是测试样例:
测试输入:我嗨李四各位哦给李四复位后发我肥沃李四放我访问后李樊红伟四分嚄嚄嚄范围李四佛为红包蓝色配个好玩李四
李四
预期输出:2
8
17
35
47
专注于你的目标,做积极的人、相信就在你身边。不要让其他事情分心了你的目标,这些都无助于实现你的目标。
开始你的任务吧,祝你成功。
代码:
package step4;
import java.util.Scanner;
public class NameSearch {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
/********** Begin *********/
String data=scanner.nextLine();
String name=scanner.nextLine();
int count=0;
while(data.indexOf(name)!=-1){
System.out.println(data.indexOf(name)+count);
count+=data.indexOf(name)+name.length();
data=data.substring(data.indexOf(name)+name.length());
}
/********** End *********/
}
}