递归地打印每个其他字符

时间:2016-11-17 04:20:45

标签: java char java.util.scanner

您好StackOverflow用户,我目前正在上一门关于java的HS课程,所以我至少可以说是java的新手。现在,为了我自己的使用,我正在编写一个程序来接受用户输入并递归打印出所有其他字母而不导入任何其他类但是Scanner。我的代码适用于奇数个字符,但不适用于偶数个字符。为什么会这样,你可以建议一个简单的修复,没有所有这些捕捉/扔东西,我不明白?我的代码发布在下面。谢谢,-A新手Java编码器

import java.util.Scanner;
public class PrintChars
{
 private String chunk;
public PrintChars ( )   
{
    chunk = "";
}

public static void main ( String [] args )  
{   
    PrintChars p = new PrintChars ( );
    p.GetPhrase ( );
    p.Deconstruct ( );
}

public void GetPhrase ( )  
{
    Scanner console = new Scanner ( System.in );
    do    
    {
        System.out.print ( "\n\nEnter a phrase: " );
        chunk = console.nextLine ( );
    } while ( chunk == null );
    System.out.println ( "\n\n" );
}

public void Deconstruct ( )  
{
    OneChar ( chunk );
    System.out.println ( "\n\n" );
}

public int OneChar ( String c )   
{

    if ( c.equals ( "" ) )
        return 1;
    else   
    {
        char first = c.charAt ( 0 );
        c = c.substring ( 2 );
        System.out.println ( first );
        return OneChar ( c );
    }
}
}

2 个答案:

答案 0 :(得分:1)

您似乎需要在尝试c之前检查substring ...如果它的长度小于2,您将获得{{1}因为你从索引2开始尝试StringIndexOutOfBoundsException,但索引2不存在。试试这个:

substring

答案 1 :(得分:0)

在执行子字符串

之前,您缺少检查字符串长度是否大于2

public int OneChar(String c){

    if (c.equals(""))
        return 1;
    else {
        char first = c.charAt(0);
        if (c.length() >= 2) {
            c = c.substring(2);
            System.out.println(first);
            return OneChar(c);
        }
        return 0;
    }
}