引数で渡された文字列のアルファベットに含まれる穴の数を算出するプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ak

引数で渡された文字列のアルファベットに含まれる穴の数を算出するプログラム

#1

投稿記事 by ak » 8年前

javaの課題です。

アルファベットの文字には、穴のある文字が幾つか存在します。
例えば、A,B,D,O,P,Q,R,a,b,d,e,g,o,p,qなどがそうです。

アルファベットで構成された文字列を受け取ったら、その文字列中にある穴の数の総和を求め、返すプログラムを作成してください。

注意点として、「B」には穴が2つある.
<問題の制約>
プロジェクト名:「AlphabetHoleCounter」
メインクラス名:「jp.ac.ait.oop1.k00000.AlphabetHoleCounter」
処理を記述するメソッド名:「count」
public static int count(String s)
mainメソッドには、動作確認のためのコード(任意)を書いてください。



さっぱりわかりません。教えて下さい

かずま

Re: 引数で渡された文字列のアルファベットに含まれる穴の数を算出するプログラム

#2

投稿記事 by かずま » 8年前

次のように一つの「式」で書けました。

コード:

    public static int count(String s) {
        return 式;
    }
動作確認のためのコードを書いてもらえれば、その「式」をお教えしましょう。

かずま

Re: 引数で渡された文字列のアルファベットに含まれる穴の数を算出するプログラム

#3

投稿記事 by かずま » 8年前

さっぱりわからない人にその「式」を見せても、ますますわからなくなるでしょう。

コード:

    public static int count(String s) {
        int k = 0;
        int n = s.length();
        for (int i = 0; i < n; i++) {
            int c = s.charAt(i);
            // c が 'B' なら、k を 2 増やす。
            // c が 'A' か 'D' か ... 'q' なら、k を 1 増やす。
        }
        return k;
    }
普通は、このように文字列中の文字を一文字ずつ見ていくコードになるでしょう。
頑張ってください。

かずま

Re: 引数で渡された文字列のアルファベットに含まれる穴の数を算出するプログラム

#4

投稿記事 by かずま » 8年前

2週間前のトピックで申し訳ありませんが、訂正です。
int c = s.charAt(i); の int を char にします。
int でも動くはずですが、charAt は char を返しますから。

結局、この質問者は何も返事してきませんでした。
これぐらい書いてほしかった。

コード:

    public static int count3(String s) {
        int k = 0, n = s.length();
        for (int i = 0; i < n; i++) {
            char c = s.charAt(i);
            if (c == 'B')
                k += 2;
            else if (c=='A' || c=='D' || c=='O' || c=='P' || c=='Q' ||
                     c=='R' || c=='a' || c=='b' || c=='d' || c=='e' ||
                     c=='g' || c=='o' || c=='p' || c=='q')
                k++;
        }
        return k;
    }
switch文にする手もあります。

コード:

    public static int count4(String s) {
        int k = 0, n = s.length();
        for (int i = 0; i < n; i++)
            switch (s.charAt(i)) {
            case 'B':
                k++;
            case 'A': case 'D': case 'O': case 'P': case 'Q':
            case 'R': case 'a': case 'b': case 'd': case 'e':
            case 'g': case 'o': case 'p': case 'q':
                k++;
            }
        return k;
    }
indexOf を使うと短く書けます。

コード:

    public static int count2(String s) {
        int k = 0, n = s.length();
        for (int i = 0; i < n; i++) {
            char c = s.charAt(i);
            if (c == 'B')
                k += 2;
            else if ("ADOPQRabdegopq".indexOf(c) >= 0)
                k++;
        }
        return k;
    }
長いので 2行になっていますが、一つの式にできます。

コード:

    public static int count(String s) {
        return s.replaceAll("[^ABDOPQRabdegopq]", "").length()
             + s.replaceAll("[^B]", "").length();
    }
正規表現を使って、その他の文字を全部削除しています。
効率は良くないでしょう。

返信

“C言語何でも質問掲示板” へ戻る