dポイントプレゼントキャンペーン実施中!

processingで
String str="AAABBTGTTABTTTGAAABGBATTAAAT '' ;
としてこれのAの出現率とAAAの出現回数を標準出力したいのですが、どのようなプログラムにすれば良いか分かりません。教えてください。

A 回答 (4件)

> 先程作っていただきたプログラムをどのように変えればAが3以上連なってもきちんと出現回数を出力できるようになるのか教えて頂きたいです。



うーん、ちとメンドくせぇんだけど・・・。
こうすればいいかな?

// ここから

String str = "AAABBTGTTABTTTGAAABGBATTAAAAAT";
int len = 0;
int c = 0;

for (int i = 0; i < str.length(); i++) {
 if (str.charAt(i) == 'A') {
  while(str.charAt(i) == 'A') {
   len += 1;
   i++;
  }
  if (len == 3) {
   c++;
  }
  len = 0;
 }
}
println(c);

// ここまで

多分これで大丈夫かな?
ロジックとしては、'A'を発見した時点で内部的にwhile内でiを進めます。
'A'が続けば'A'が続いた数を変数lenを使ってカウントしていきます。
連続した'A'が終わった時に、長さが3ならカウンタcを増加、そうじゃない場合、結果を捨てます。そしてどのみちlenを0に戻して次のパターンが来るのを待つ。
これで大丈夫だとは思いますがね。
    • good
    • 0
この回答へのお礼

何度も回答していただきありがとうございます。とても助かりました。

お礼日時:2020/10/05 17:49

パターンマッチした結果を勘定すれば簡単です。


DNA 塩基配列のような大量データを扱うのでなければ問題ないでしょう。

int numA = matchAll(str, "A").length; // A の出現回数
int numAAA = matchAll(str, "AAA").length; // AAA の出現回数
println(1.0 * numA / str.length());
println(numAAA);
    • good
    • 0

> 回答ありがとうございます。

書いていただいたプログラムをそのままprocessingで実行してみたのですが、「Incompatible operand types char and String」というエラーがでてしまいました。どうしてでしょうか……

1. ヴァージョンはどうなってるでしょうか。
僕がインストールしてみたProcessingは(多分最新版の)3.5.4ですが、古いヴァージョンだったら入れ直して見て下さい。

2. コードはコピペしたんでしょうか?
もし、コピペじゃない場合、間違って

str.charAt(i) == 'A'



str.charAt(i) == "A"

と打ってたら仰ってるようなエラーが出ると思います。
Javaでは"何とか"は文字列で、'何とか'は文字になります。文字列と文字を比較しようとすると

Incompatible operand types char and String

と言うエラーが出ます。
シングルクオーテーションとダブルクオーテーションはJavaだと意味が違います。
    • good
    • 0
この回答へのお礼

自分が''A''にしてしまっていました。詳しく教えて頂きありがとうございます。
"AAABBTGTTABTTTGAAABGBATTAAAAAT '' というようにAが5つ連なるところをつくってみたのですが、この時のAAAの出現回数を求めたい時先程のプログラムだと3回にしたいところ、5回になってしまいました。先程作っていただきたプログラムをどのように変えればAが3以上連なってもきちんと出現回数を出力できるようになるのか教えて頂きたいです。

お礼日時:2020/10/03 22:48

processingってプログラミング言語は初めて聞いたんですが、多分こう書くんじゃないかしらん(言語的には簡易Javaってカンジ)。


やっつけですが。

// ここから
String str = "AAABBTGTTABTTTGAAABGBATTAAAT";

int c = 0;
for (int i = 0; i < str.length(); i++) {
 if (str.charAt(i) == 'A') {
  c++;
 }
}
println((float)c/str.length());

c = 0;
for (int i = 0; i < str.length(); i++) {
 if (str.charAt(i) == 'A') {
  if (str.charAt(i+1) == 'A' && str.charAt(i+2) == 'A') { // ただし、Aが3回以上続くケースに関してはチェックしてない
   c++;
  }
 }
}
println(c);

// ここまで

なお、どうも調べてみたら、Pythonも使えるみたいなんで、Pythonの方が色々とラク出来るかも、とは思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。書いていただいたプログラムをそのままprocessingで実行してみたのですが、「Incompatible operand types char and String」というエラーがでてしまいました。どうしてでしょうか……

お礼日時:2020/10/03 21:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!