关于递归,Java 中的 for 循环。在这种情况下我的理解正确吗?

Posted

技术标签:

【中文标题】关于递归,Java 中的 for 循环。在这种情况下我的理解正确吗?【英文标题】:Regarding recursion, for loop in Java. Do my understand correct in this context? 【发布时间】:2022-01-03 12:36:32 【问题描述】:

下面写的代码是关于“分组一组单词”的问题:

public class module3_crypto 

    //part 1 - normalizing text
    public static void main(String[] args) 
        System.out.println(groupify("VJKUKUUQOGTGCNNAITGCVVGZV", 4 ));
    

    public static String groupify(String str_text, int nmbr_of_letters) 
        int pad = str_text.length()%nmbr_of_letters;

        //padding x's to string
        while(pad>0)
            str_text = str_text + 'x';
            pad--;
        
        //adding space
        for(int i=nmbr_of_letters;i<str_text.length();i=i+nmbr_of_letters)
            str_text = str_text.substring(0,i)+" "+str_text.substring(i,str_text.length());
            i++;
        
        return str_text;
    

我不太了解这部分:str_text = str_text.substring(0,i)+" "+str_text.substring(i,str_text.length());。特别是str_text.length()部分。调用值为4的方法,我知道i = 4。但是,str_text.length() 的值是多少?是否占用 String 的整个长度?因此它一直重复直到i = 16,最后只打印了最终输出VJKU KUUQ OGTG CNNA ITGC VVGZ Vx?也就是说,这段代码的逐渐“展开”是这样的?

VJKU KUUQOGTGCNNAITGCVVGZV
VJKU KUUQ OGTGCNNAITGCVVGZV
VJKU KUUQ OGTG CNNAITGCVVGZV
VJKU KUUQ OGTG CNNA ITGC VVGZV
VJKU KUUQ OGTG CNNA ITGC VVGZ Vx

【问题讨论】:

【参考方案1】:

我不确定你的问题是什么。

但我想,你问的是,当str_textfor 循环中发生变化时,str_text.length() 也在变化,那么str_text.substring(i, str_text.length()) 会发生什么(感染)?

str_text.length() 获取str_text 的字符串长度(不那么严肃地说,“字符数”)。是的,它在for 循环期间发生了变化。

根据String.substring(int, int)的文档,str_text.substring(i, str_text.length())会返回一个新的字符串,它的内容是从str_textistr_text.length()(即str_text的结尾)。

也就是说,这段代码的逐渐“展开”是这样的?

几乎是的,但有点错字。正确的“展开”是:

VJKU KUUQOGTGCNNAITGCVVGZVx
VJKU KUUQ OGTGCNNAITGCVVGZVx
VJKU KUUQ OGTG CNNAITGCVVGZVx
VJKU KUUQ OGTG CNNA ITGCVVGZVx
VJKU KUUQ OGTG CNNA ITGC VVGZVx
VJKU KUUQ OGTG CNNA ITGC VVGZ Vx
VJKU KUUQ OGTG CNNA ITGC VVGZ Vx

(请注意,在 for 循环之前添加了“x”。) 您可以通过在for 循环中添加System.out.println(str_text) 来测试“展开”步骤。

【讨论】:

以上是关于关于递归,Java 中的 for 循环。在这种情况下我的理解正确吗?的主要内容,如果未能解决你的问题,请参考以下文章

为什么递归循环中的局部变量被忽略? For循环中的Java递归循环

linux shell for循环解决递归循环目录结构

如何在 Python 中没有任何循环(例如:for、while 等)递归 JSON 文件

java关于集合的遍历与增强for循环(foreach)的使用

初识递归方法

JAVA中的for循环