2016-11-06 6 views
0

特定の文字の発生回数を見つけ、そして文字がインスタンス ため を置かれている場所伝えるために、「ようこそ」と「e」の 戻り 「2 、7 "Javaメソッドは、私のコードは、文字列と文字を入力するようにユーザに促す必要がある

私のコードはどのように修正できますか?コードはこちらです。事前に感謝します(これは宿題ではありませんが、解決策を投稿したくない場合は、とにかく役に立つヒントもあります)。

import java.util.Scanner; 
public class Test { 
    public static void main(String[] args) { 
     System.out.println("Please enter a string and a character"); 
     Scanner input = new Scanner(System.in); 
     String s = input.nextLine(); 
     char ch = input.next().charAt(0); 

     System.out.println(count(ch)); 

    } 

    public static int count (String s, char a) { 
     int count = 0; 
     for (int i = 0; i < s.length(); i++) { 
      if (s.charAt(i) == a) { 
       count++; 
      } 
     } 
     return count; 

    } 
} 
+0

最初のヒント:コンマで区切られた数値のリストを返すようにするには、戻り値の型を 'int'ではなく' String'にする必要があります。 'int'は一つの数字です。 –

+0

@DavidWallaceが言っているように、あなたのプログラムが出力するのはintの出現数です。インデックスも印刷したい場合は、出現した文字の各インデックスを格納するint配列を作成し、forループを使用して印刷することができます。 –

+0

なぜ、findの代わりにcountという名前のメソッドを付けましたか? –

答えて

1

いくつかのミス:

  1. あなたのコードがコンパイルされませんが。コール:

    System.out.println(count(s, ch)); 
    

    代わりの

    System.out.println(count(ch)); 
    
  2. あなたは出現回数を数えます。代わりに、インデックスを保持する必要があります。 Stringを使用するか、リスト/配列に追加して後で必要なものに変換することができます。

    public static String count(String s, char a) { 
        String result = ""; 
        for (int i = 0; i < s.length(); i++) { 
         if (s.charAt(i) == a) { 
          result += (i+1) + ", "; 
         } 
        } 
        return result.substring(0, result.length() - 2); 
    } 
    

    インデックスはJavaで0で始めるので、私はi+1の代わりiを使用。

    また、すべての文字の後に,を追加したので、最後の2文字のない文字列result.substring(0, result.length() - 2)も返しました。

0

だけカウント方法に変更します。

public static ArrayList<Integer> count(String s, char a) { 
     ArrayList<Integer> positions = new ArrayList<>(); 
     for (int i = 0; i < s.length(); i++) { 
      if (s.charAt(i) == a) { 
       positions.add(i+1); 
      } 
     } 
     return positions; 
    } 
1

のJava 8 以来、あなたはを使用してこれを行うことができますストリーム:

public static String count(String s, char a) { 
    return IntStream.range(0, s.length()) 
      .filter(i -> a == s.charAt(i)).mapToObj(i -> i + "") 
      .collect(Collectors.joining(", ")); 
} 

このコードは、カンマでseprated、あなたの文字のインデックスを出力します。
ストリームについては、hereをJava 8のマニュアルで読むことができます。

関連する問題