首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用递归在Java中创建Mobius环

使用递归在Java中创建Mobius环
EN

Stack Overflow用户
提问于 2016-11-21 23:46:30
回答 3查看 356关注 0票数 2

因此,赋值需要公共静态字符串mobius( String[] s1,String s2)方法。假设s1 = "Hello“和s2 =”Java“,输出示例如下:

HelloJava

elloJavaH

lloJavaHe

loJavaHel

oJavaHell

JavaHello

avaHelloJ

vaHelloJa

aHelloJav

这个问题(Shifting characters in a string to the left)让我从下面所示的想法开始,因为每个连接字符串的字符左移,很像数组移位。这是我到目前为止所知道的:

代码语言:javascript
复制
public static String[] mobius(String s1, String s2) {
    String combo = new String(s1 + s2);
    String[] mobius = new String[combo.length()];

    mobius[0] = s1 + s2;
    if (method4count < mobius.length) {

        mobius[method4count] = cyclicLeftShift(s1 + s2, method4count++);

        mobius(s1, s2);

    } else {
        return mobius;
    }
    return mobius;

}

public static String cyclicLeftShift(String s, int k) {
    k = k % s.length();
    return s.substring(k) + s.substring(0, k);
}

对于这个问题,输出是(当打印出String[]的索引时):

HelloJava

elloJavaH

其余的元素为空。

作为参考,这是给我的“测试”案例:

代码语言:javascript
复制
String s1 = "Hello", s2 = "Java";
    String[] strs = mobius(s1, s2);
    for (String s : strs)
        System.out.println(s);

更新:(一开始忘记提到这一点,很抱歉)我不被允许使用循环来解决这个问题。感谢那些之前提供答案的人!

有没有更简单的方法(或者只是一个方法)来填充数组的其余部分(与测试用例无关,但与mobius方法和cycleLeftShift方法有关)?或者我是否遗漏了一些显而易见的东西?

提前感谢所有人和每一个人!另外,对于这个冗长的“问题”,我很抱歉

EN

回答 3

Stack Overflow用户

发布于 2016-11-22 00:50:54

代码语言:javascript
复制
public class NewClass1 {

    private static int method4count = 1;
    static String[] mobius ;

    public static void main(String args[]){
        String s1 = "Hello", s2 = "Java";
        mobius = new String[(s1+s2).length()];

        String[] strs = mobius(s1, s2);        
        for (String s : strs)
            System.out.println(s);
    }
    public static String[] mobius(String s1, String s2) {      
        mobius[0] = s1 + s2;
        if (method4count < mobius.length) {
            mobius[method4count] = cyclicLeftShift(s1 + s2, method4count++);
            mobius(s1, s2);
        } else {
            return mobius;
        }
        return mobius;
    }

    public static String cyclicLeftShift(String s, int k) {
        k = k % s.length();
        return s.substring(k) + s.substring(0, k);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2016-11-22 02:05:54

代码语言:javascript
复制
private static void cycle(String s, int cases) {
    if (cases > 0) {
        String temp = cases == s.length() ? s : s.substring(1, s.length()) + s.charAt(0);
        System.out.println(temp);
        cycle(temp, cases - 1);
    }
}

这将执行您请求的操作。它使用递归和一个整数来表示还需要执行多少个案例。它所做的就是从索引1到字符串末尾的子字符串,然后将当前的第一个字母追加到字符串的后面。

票数 0
EN

Stack Overflow用户

发布于 2016-11-23 01:15:37

首先,感谢所有帮助我解决这个问题的人!

其次,这是我得到的答案(来自朋友和更有经验的程序员的帮助和帮助:

代码语言:javascript
复制
static int method4count = 1;
static String combine = "";
static String[] array;

public static String[] mobius(String s1, String s2) {
    combine = s1 + s2;

    if (method4count == 1) {
        array = new String[combine.length()];
        array[0] = s1 + s2;
    }
    if (method4count < combine.length()) {
        array[method4count] = cyclicLeftShift(s1 + s2, method4count++);
        mobius(s1, s2);
    }

    return array;
}

public static String cyclicLeftShift(String s, int k) {
    k = k % s.length();
    return s.substring(k) + s.substring(0, k);
}

测试用例不包括在上面的工作中;TA和我得出的结论是,对于从1开始的静态int组合,有一个条件语句,如果返回true,则将字符串数组初始化为连接的字符串“method4count”的长度。然后,通过第二个if语句中的递归调用填充数组,该语句检查计数器是否小于"combine“的长度,如果为真,则在将method4count递增1并递归调用mobius方法之前,在mobius环中分配字符串的下一个变量(通过方法cyclicShiftLeft)。一旦这个数组被填充并且第二个if语句被证明为false,那么这个数组就会被返回。

再次感谢所有帮助解决这个问题的人!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40724056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档