2016-11-17 11 views
1

こんにちは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); 
    } 
} 
} 
+0

注: "c = c.substring(1)"を "c = c.substring(2)"に編集しました。 –

+0

奇数と偶数の両方の入力を持つsubstring文を試してデバッグしてください。 – nullpointer

+0

ごめんなさい、それはどういう意味ですか?デバッガを使うべきですか? –

答えて

1
、文字列の長さは、部分文字列を実行する前に、2以上であるかどうかを確認するために不足しています

substringを試す前にcをチェックする必要があるようです...長さが2未満の場合、はインデックス2から開始しようとしているため、StringIndexOutOfBoundsExceptionになりますが、インデックス2は存在する。これを試してください:

public int OneChar (String c) 
    { 

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

あなたは

公共int型OneChar(列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; 
    } 
} 
関連する問題