因此,赋值需要公共静态字符串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)让我从下面所示的想法开始,因为每个连接字符串的字符左移,很像数组移位。这是我到目前为止所知道的:
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
其余的元素为空。
作为参考,这是给我的“测试”案例:
String s1 = "Hello", s2 = "Java";
String[] strs = mobius(s1, s2);
for (String s : strs)
System.out.println(s);更新:(一开始忘记提到这一点,很抱歉)我不被允许使用循环来解决这个问题。感谢那些之前提供答案的人!
有没有更简单的方法(或者只是一个方法)来填充数组的其余部分(与测试用例无关,但与mobius方法和cycleLeftShift方法有关)?或者我是否遗漏了一些显而易见的东西?
提前感谢所有人和每一个人!另外,对于这个冗长的“问题”,我很抱歉
发布于 2016-11-22 00:50:54
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);
}
}发布于 2016-11-22 02:05:54
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到字符串末尾的子字符串,然后将当前的第一个字母追加到字符串的后面。
发布于 2016-11-23 01:15:37
首先,感谢所有帮助我解决这个问题的人!
其次,这是我得到的答案(来自朋友和更有经验的程序员的帮助和帮助:
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,那么这个数组就会被返回。
再次感谢所有帮助解决这个问题的人!
https://stackoverflow.com/questions/40724056
复制相似问题