第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
代码如下:
package step1;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
String inStr = input.nextLine();
input.close();
//请在指定位置填写代码。
/********* Begin *********/
for(int i=0;i < inStr.length();)
{
System.out.println(inStr.charAt(i));
i+=2;
}
/********* End *********/
}
}
第2关:有限状态机之开心的蜗牛
任务描述
本关任务:简单了解什么是有限状态机,并根据本案例描述的“开心的蜗牛规则”实现一个简单的有限状态机。
相关知识
完成本关任务你需要掌握以下知识点:
-
有限状态机
-
开心的蜗牛游戏规则
有限状态机
有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。通俗的说,有限状态机就是规则的描述,包括“状态”和“状态的变化规律”。
举个简单的例子,对于人,我们可以定义四种简单的状态:清醒、昏睡、休克、死亡。同时对这个人,我们可以定义以下操作:电击、安眠药、枪击、拍打、催眠。
通过以上有限的操作,可以使得这个人在有限的状态之间按照一定的规律进行切换。例如,清醒的人,经过催眠会进入昏睡状态;休克的人,经过电击会进入清醒状态;清醒、昏睡、休克的人,经过枪击会进入死亡状态等等。
通过这样的定义(即有限的状态,有限的操作,状态改变规则),我们描述了极其简单的人的特性,并且发现这里的人会进入哪个状态,是由这个人当前的状态和相应的操作决定的。
开心的蜗牛
这里我们假设有一只行走在 01
串上的蜗牛,每当它走过 001
的时候,他会在最后这个 1
的位置上“哈”的笑一声,之后紧接着连续走过1
就连续发出“哈”声,直到碰到0
。
如果用有限状态机来描述这只开心的蜗牛,那么有四个状态:
- 不笑;
- 准备笑,走过第一个
0
; - 即将笑,走过一个
0
后,紧接着走过第二个0
; - 笑,连续走过两个
0
之后紧接着遇到连续的1
。
输入有两种可能:
- 走过
0
; - 走过
1
。
当蜗牛处于“笑”的状态时,会发出“哈”的一声,其余状态不发出声音,你可以尝试绘制一下状态转换图。
编程要求
根据提示,在右侧编辑器 Begin-End 区域补充代码,用有限状态机的思路实现这只开心的蜗牛,具体要求如下:
-
输入一串由只由
0
和1
组成的字符串,表示蜗牛行走的01
串; -
输出蜗牛发出的“哈哈”笑声,即蜗牛在满足条件时发出的笑声,具体请参考测试说明给出的测试样例;
-
输出笑声结尾不换行。
测试说明
平台会对你编写的代码进行测试:
测试输入:
00011010010001
预期输出:
哈哈哈哈
代码如下:
package step2;
import java.util.Scanner;
public class Main
{
final static int STATE_NO_SMALE = 0;
final static int STATE_PREPARE_SMALE = 1;
final static int STATE_READY_SMALE = 2;
final static int STATE_SAMLE = 3;
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
String inStr = input.nextLine();
input.close();
assert inStr.charAt(0) == '0';
assert inStr.charAt(1) == '0';
// 请在指定位置填写代码。
/********* 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 *********/
}
}