头歌-Java-for循环

第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 *********/
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DbillionBUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值