有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当字符串长度为奇数时使用递归打印字符串的java基本情况

我的程序使用递归以三角形的形式打印字符串:

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);
  }
}

共 (3) 个答案

  1. # 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空格,从str打印leftLen字符,所有字符都从rightIdx开始。如果未完成,则以较少的缩进、左侧的缩进和右侧的缩进提前一个字符进行递归

    查看示例输出,对于length10和length9indent的值应该是4,因此(str.length() - 1) / 2将计算该值

    第一个调用应该总是从左边打印1字符,所以这很简单

    现在,偶数长度的rightIdx的初始值应为9,因此将打印j,奇数长度的9也应为9,因此不会打印任何内容。因此,对于长度10/9,我们减去1得到9/8,然后设置最低位(| 1),使其成为9/9

  2. # 2 楼答案

    请检查以下打印功能的修改版本

    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);
    }
    
  3. # 3 楼答案

    尝试使用两种方法

    1. for even , e.g, 
    
        if(string.length()%2==0)
    
        {
        //Method for Even
        }
    
    2. for odd , e.g, 
    
        else
    
        {
        //Method for odd
        }