合計 昨日 今日

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

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: ak
[URL]
Date: 2017年5月18日(木) 16:05
No: 1
(OFFLINE)

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

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メソッドには、動作確認のためのコード(任意)を書いてください。



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

Name: かずま
[URL]
Date: 2017年5月18日(木) 18:20
No: 2
(OFFLINE)

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

次のように一つの「式」で書けました。
コード[Java]: 全て選択
1
2
3
    public static int count(String s) {
        return;
    }

動作確認のためのコードを書いてもらえれば、その「式」をお教えしましょう。

Name: かずま
[URL]
Date: 2017年5月19日(金) 18:40
No: 3
(OFFLINE)

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

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

コード[Java]: 全て選択
1
2
3
4
5
6
7
8
9
10
    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;
    }

普通は、このように文字列中の文字を一文字ずつ見ていくコードになるでしょう。
頑張ってください。

Name: かずま
[URL]
Date: 2017年6月02日(金) 01:16
No: 4
(OFFLINE)

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

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

結局、この質問者は何も返事してきませんでした。
これぐらい書いてほしかった。
コード[Java]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
    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文にする手もあります。
コード[Java]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
    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 を使うと短く書けます。
コード[Java]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
    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行になっていますが、一つの式にできます。
コード[Java]: 全て選択
1
2
3
4
    public static int count(String s) {
        return s.replaceAll("[^ABDOPQRabdegopq]", "").length()
             + s.replaceAll("[^B]", "").length();
    }

正規表現を使って、その他の文字を全部削除しています。
効率は良くないでしょう。


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[13人]