Java课堂篇2_递归_连续逐个输入若干字符,以 #号结束,实现结束时 输出 输入字符的逆序(借此问题形象理解递归、字符串的 == 和 equals()的区别)

一、题目描述

课堂上的一个问题,输入的要求是 一个字符 按一下回车 接着继续输入字符,以#号结束,当结束的时候 逆序依次 输出 输入的字符

需要使用递归实现

关于递归

在这里插入图片描述

递归这里不再多说,就是自己调用自己,调用自己逐次压栈,当遇见 递归截止 的条件(一般为 return ...

然后逐次出栈,出栈的时候会给相邻未出栈 的 一个 return 结果,(谁调用的你,你最起码给他一个答复啊~)从而 保证 下一个函数 也能出栈

(递归思想简单理解就是分块,分成能操作的一块 + 暂时不能操作的一块,然后不能操作的一块,也分成 他的 能操作的一块他的 不能 操作的一块…)

解题的思路

当输入的不是 # 字符时,就进入递归函数的递归分支中,开始输入的元素会依次压栈(一般设置 进入下层递归 在 return 语句之前),直到 输入 #return结束递归

举个形象的小例子:

可以简单理解不得到return 誓不罢休,把每次递归比作增加士兵,return 就相当于 战斗胜利,直到战斗胜利,才停止增多兵力,开始撤兵

而最前面的士兵 才知道战斗是否胜利,胜利之后,只能告诉相邻 后边 的士兵 …

结束递归的最后一层有了return ,也就是 调用最后一层 的 倒数第二层 有了结果(也就是倒数第二层的任务已经完成,他的任务就是 使 倒数 第一层 有结果)

  • 那么栈顶的元素就能出栈

  • 栈顶的能出栈,栈顶压着的相邻也能出栈

如果还是不太明白,先搞清递归的定义和栈的相关知识~

二、代码
package two.test;

import java.util.Scanner;

public class Demo1_DiGuiNiXuZIFuChuan {
    public static void main(String[] args) {
        System.out.println("请逐个输入字符(每个字符后面一个回车,结束字符为 # ):");
        diGui();
    }

    private static void diGui() {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();

        //注意这里用 == 是不行的,对于字符串 == 比较的是内存中的地址,需要用equals()函数
        if(str.equals("#")){
            return;
        }
        else{
            diGui();
            System.out.println(str);
            return;
        }
    }
}

三、== 和 equals()

这里需要注意,正如前面代码所说那样,为何 == 不能正确结束,而必须要用equals()

参考往期博客:https://blog.csdn.net/qq_24654501/article/details/108859275

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SISE高考预录数据信息管理系统 java课程设计题目及代码 项目名称:SISE高考预录数据信息管理系统 业务需求:根据每一部分的需求采取Web页面或者Java GUI对考生信息进行管理(主要是增删改查),考生信息可以写入数据库或者文本文件。项目需要实现的功能模块列举如下: 模块一: 2019年学院高考招生录取开始,招生办6月20日得到第一批学生成绩明细表文件格式如下: 表一 该汇总表共有学生25人,由于缺少总分计算需要将汇总表里的每个学生考试成绩进行总分计算;6月27日学院又获得第二批学生成绩明细表文件,格式同上述一样,第二批学生人数为30人,现在需要将两份文件学生按照总分大小从高分到低分排序,并且写入下列文件student.txt中或者数据库表中: 表二 由于软件工程专业对英语要求很高,希望从上述汇总文件student.txt或者数据库中挑选出英语超过100分且总分成绩超过300分的学生名单按照英语成绩由低分到高分排序,写入文件English.txt或者数据库中。文件内容格式不变。 模块二: 由于输入的文件太多,现在招生办委托并设计一个高考成绩输入系统,输入格式: 考 姓名 语文 数学 英语 可以用图形用户界面来实现输入。所输入的数据写到student.txt文件中或者数据库表中,对student内文件数据按照总分由高到低重新排序。当用户输入任一考,查出该学生的考试信息及总分成绩。 注意:用户可以一次性输入多个学生成绩。 模块三: 高考的学生分为文、理、艺术类三种考生,每一考生的学生信息除了考、中文姓名以外,还包括生源地区,性别,年龄,中学名称等等信息;每一考生的考试信息除了语文、数学、英语以外,若为艺术生,增加一门美术科目考试;若为文科生,增加两门考试科目:历史和地理;若为理科生,增加一门考试科目物理。 将student文件中的信息按照下列要求补充完整: ① 按照生源地区分类显示;(如:深圳、广州、汕头、等等) ② 同按照考生类型(文、理、艺术)分类显示; ③ 同每一分类按照总分由高分到低分排列。 ④ 完整显示每一考生的学生信息和考试信息: 最后Student文件格式显示如下: 深圳地区: 文科 考 姓名 年龄 性别 中学名称 语文 数学 英语 历史 地理 总分 。。。 理科 考 姓名 年龄 性别 中学名称 语文 数学 英语 物理 总分 。。。 艺术 考 姓名 年龄 性别 中学名称 语文 数学 英语 美术 总分 广州地区: 文科 考 姓名 年龄 性别 中学名称 语文 数学 英语 历史 地理 总分 。。。 理科 考 姓名 年龄 性别 中学名称 语文 数学 英语 物理 总分 。。。 艺术 考 姓名 年龄 性别 中学名称 语文 数学 英语 美术 总分 模块四: 在图形用户或者Web界面中增加下列输入查询功能帮助用户从文件student中分别按照考、姓名查询想要的结果并展示。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

scl、

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

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

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

打赏作者

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

抵扣说明:

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

余额充值