我的程序使用递归以三角形的形式打印字符串:
Sample input: "abcdefghij"
Sample output:
aj
abij
abchij
abcdghij
abcdefghij
Sample input: "abcdefghi"
Sample output:
a
abi
abchi
abcdghi
abcdefghi
问题是仅当字符串长度为偶数时才有效。请问如何调整底座以打印中间字符? 这是我的代码:
public class DisplayTriangle
{
public static void main(String[]parms)
{
print ("abcdefghij");
}
public static void print(String str)
{
int mid = str.length()/2;
String first="";
String last="";
print(str,0,str.length()-1,first,last);
}
public static void print(String str, int start, int end,String first, String last)
{
if( start >= end || end <=start )
{
return;
}
first+=str.charAt(start);
last = str.charAt(end)+last;
System.out.println( first+ last );
print(str, (start+1), (end-1), first, last);
}
}
答案 0 :(得分:1)
这样做,没有过多的字符串连接,并且没有正确的缩进:
private static void print(String str) {
if (! str.isEmpty())
print(str, (str.length() - 1) / 2, 1, (str.length() - 1) | 1);
}
private static void print(String str, int indent, int leftLen, int rightIdx) {
for (int i = 0; i < indent; i++)
System.out.print(' ');
System.out.println(str.substring(0, leftLen) + str.substring(rightIdx));
if (leftLen < rightIdx)
print(str, indent - 1, leftLen + 1, rightIdx - 1);
}
输出
aj
abij
abchij
abcdghij
abcdefghij
a
abi
abchi
abcdghi
abcdefghi
说明的
第二种print
方法应该非常明显:打印indent
空格,打印leftLen
中的str
字符,以及rightIdx
开头的所有字符。如果没有这样做,可以减少一次缩进,左起一次,右起一次。
查看示例输出,对于indent
长度和4
长度,10
的值应为9
,因此(str.length() - 1) / 2
将计算该值。
第一次调用应始终从左侧打印1
个字符,这很简单。
现在,对于偶数长度rightIdx
,9
的初始值应为10
,因此j
将被打印,并且也应为9
}对于奇数长度9
,所以不会打印任何内容。因此,对于长度10
/ 9
,我们减去1
以获得9
/ 8
,然后设置最低位(| 1
)以使其成为9
/ 9
。
答案 1 :(得分:0)
请检查以下修改版本的打印功能
public static void print(String str, int start, int end,String first, String last)
{
if( start > end || end <start )
{
return;
}
if(start==end){
first+=str.charAt(start);
last = str.charAt(end+1)+last;
System.out.println( first+ last );
return ;
}
first+=str.charAt(start);
last = str.charAt(end)+last;
System.out.println( first+ last );
print(str, (start+1), (end-1), first, last);
}
答案 2 :(得分:0)
尝试使用2种方法
1. for even , e.g,
if(string.length()%2==0)
{
//Method for Even
}
2. for odd , e.g,
else
{
//Method for odd
}