第1关:for 循环遍历字符串
任务描述
本关任务:编写一个程序,打印指定金字塔形状。
相关知识
for 循环语法
for 循环是一种简明写法, 例如以下 while 循环语句:
int i = initialValue;
while(i < endValue){
// Loop Body
...
i++;
}
可以替换以下 for 循环形式:
for(int i = initialValue; i<endValue; i++){
// Loop Body
...
}
for 循环的一般语法如下所示:
for(初始操作; 循环继续的条件; 每次迭代后的操作){
// 循环体
语句(组)
}
通过对比可以发现,使用 for 循环语句,将 while 语句中原本用于循环控制的语句从循环体中抽离了出来。这样做虽然在一定程度上降低了循环控制的灵活性,但是增加了代码的规整性。
遍历
遍历是编程中经常涉及到的一个操作,通俗来讲,遍历操作就是“依次访问所有,不重不漏”的操作。遍历经常涉及到“列表”这样一种结构,即依次访问列表中的每个元素。
例如在日常生活中的“点名”就是一种典型的遍历操作。
在 Java 语言里,实现遍历最常用的方法就是使用 for 语句,通过使用下标来访问元素的方式实现遍历时,往往将下标作为循环控制的变量,此时循环控制就是简单的“下标加 1 ”。因此,使用 for 语句能够使我们在循环体中更关注对元素的操作。
编程要求
根据提示,在右侧编辑器 Begin-End 区域补充代码,使用 for 循环语句实现要求的遍历字符串的功能,具体要求如下:
·输入一个字符串,依次输出第奇数个字符,具体查看示例;
·输出字符时,一个字符占一行,最后一个字符后需要换行。
测试说明
平台会对你编写的代码进行测试:
测试输入
Welcome to Java!
预期输出:
W
l
o
e
t
a
a
开始你的任务吧,祝你成功!
答案
//请在指定位置填写代码。
/********* Begin *********/
for(int i=0;i<inStr.length();i=i+2)
{
System.out.println(inStr.charAt(i));
}
System.out.println();
/********* End *********/
第2关:有限状态机之开心的蜗牛
任务描述
本关任务:简单了解什么是有限状态机,并根据本案例描述的“开心的蜗牛规则”实现一个简单的有限状态机。
相关知识
完成本关任务你需要掌握以下知识点:
1.有限状态机
2.开心的蜗牛游戏规则
有限状态机
有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。通俗的说,有限状态机就是规则的描述,包括“状态”和“状态的变化规律”。
举个简单的例子,对于人,我们可以定义四种简单的状态:清醒、昏睡、休克、死亡。同时对这个人,我们可以定义以下操作:电击、安眠药、枪击、拍打、催眠。
通过以上有限的操作,可以使得这个人在有限的状态之间按照一定的规律进行切换。例如,清醒的人,经过催眠会进入昏睡状态;休克的人,经过电击会进入清醒状态;清醒、昏睡、休克的人,经过枪击会进入死亡状态等等。
通过这样的定义(即有限的状态,有限的操作,状态改变规则),我们描述了极其简单的人的特性,并且发现这里的人会进入哪个状态,是由这个人当前的状态和相应的操作决定的。
开心的蜗牛
这里我们假设有一只行走在 01 串上的蜗牛,每当它走过 001 的时候,他会在最后这个 1 的位置上“哈”的笑一声,之后紧接着连续走过1就连续发出“哈”声,直到碰到0。
如果用有限状态机来描述这只开心的蜗牛,那么有四个状态:
1.不笑;
2.准备笑,走过第一个0;
3.即将笑,走过一个0后,紧接着走过第二个0;
1.笑,连续走过两个0之后紧接着遇到连续的1。
输入有两种可能:
1.走过0;
2.走过1。
当蜗牛处于“笑”的状态时,会发出“哈”的一声,其余状态不发出声音,你可以尝试绘制一下状态转换图。
编程要求
根据提示,在右侧编辑器 Begin-End 区域补充代码,用有限状态机的思路实现这只开心的蜗牛,具体要求如下:
·输入一串由只由0和1组成的字符串,表示蜗牛行走的01串;
·输出蜗牛发出的“哈哈”笑声,即蜗牛在满足条件时发出的笑声,具体请参考测试说明给出的测试样例;
·输出笑声结尾不换行。
测试说明
平台会对你编写的代码进行测试:
测试输入:
00011010010001
预期输出:
哈哈哈哈
开始你的任务吧,祝你成功!
答案
// 请在指定位置填写代码。
/********* Begin *********/
int flag=0;
int count=0;
for (int i=0;i<inStr.length();i++)
{
if (i+1<inStr.length())
{
if (0==(int) inStr.charAt(i)-48&&0==(int) inStr.charAt(i+1)-48)
{
flag=2;
}
}
if (1==(int) inStr.charAt(i)-48&&flag>=2)
{
count++;
if (i+1<inStr.length())
{
if (0==(int) inStr.charAt(i+1)-48)
{
flag=0;
}
}
}
}
for(int j=1;j<=count;j++)
{
System.out.print("哈");
}
/********* End *********/