gpt4 book ai didi

java - 如何使用递归循环从 char[] 数组返回字符串。(java)

转载 作者:行者123 更新时间:2023-12-02 08:25:21 25 4
gpt4 key购买 nike

我不擅长递归...

我需要仅使用递归将 char[] 数组转换为字符串 - 不使用 for()while() 等等循环。例如,如果我有一个 char 数组:

a[0]='H', a[1]='e', a[2]='l',a[3]= 'l',a[4]= 'o'

它返回H e l l o

我做错了什么?

 public String toFormattedString(char[] a)
{
int temp =a.length;
if (a == null)
return "null";
if (a.length == 0)
return "0";
if( a.length == 1 )
else if( a[0] == a[a.length] )
return toFormattedString (a[a.length -1])+a[a.length];

最佳答案

在递归中,方法使用原始调用的修改数据调用自身。这样做直到达到某种基本情况,在这种情况下不再可能修改数据。

在您的情况下,基本情况是 char 数组仅包含一个元素。这个字符将是字符串。否则,它是第一个元素,其余元素附加在递归调用中。

字符串"Hello"'H'toFormattedString({'e','l','l','o'})附加。因此,如果您的 char 数组仅包含一个元素 (length==1)只需将此元素作为字符串值返回即可。

否则,获取第一个元素并递归到没有第一个元素的剩余 char 数组。递归直到只剩下一个元素。

    public static String toFormattedString(char[] a)
{
if (a.length==1) return String.valueOf(a[0]);
else
return a[0]+toFormattedString(Arrays.copyOfRange(a,1,a.length)) ;

}

你甚至可以将方法体放在一个不可读的行中(不推荐,我提到它只是为了好玩):

return((a.length==1)?String.valueOf(a[0]):a[0]+toFormattedString(Arrays.copyOfRange(a,1,a.length)));

更新: A switch - 语句在本例中给出了可读的代码:

public static String toFormattedString(char[] a)
{
switch (a.length)
{case 0 : return "";
case 1 : return String.valueOf(a[0]);
default: return a[0]+toFormattedString(Arrays.copyOfRange(a,1,a.length));
}
}

用法:

 public static void main (String[] args) throws java.lang.Exception
{
System.out.println(toFormattedString("Hello".toCharArray()));
}

关于java - 如何使用递归循环从 char[] 数组返回字符串。(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4633297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com