盛大な独り言日記・自分用メモ2010.11.17~
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ものそい色々修正したのでこれだけじゃないかもしれませんが…
同じ文字が出てくる原因は、2gramファイル内に該当文字がある場合の処理関数内での、if文の条件がおかしかったのが原因でした。
point→num(開始文字の回数以下の乱数。0<=point<開始文字の回数)
no→初期値0,開始文字と2gramファイルの文字を比較して一致したときに1ずつ増える。
(開始文字に指定された文字がファイル内に存在すればn=n+1)
(最初の入力文字以外の連鎖は必ずファイル内に存在するはず?)
の2つ変数があって
forループ(2gramファイルの全体の行数分の回数){
①開始文字とファイル内の文字の行の頭を比較して、一致したらno+1をする
(最大で開始文字で始まる2gramの数までnが増える)
↓
②noとpointを比較して、一致したら
1、その行の二文字を2gramファイルから取り出して格納する。
2、forループをぬける
}
という順番で処理をしたときに、
①で文字が見つかればno+1となり、初期値が0のため noの値の範囲はno>=1になる。そうすると
②の比較をするさいにpointが0だった時、絶対にif文の条件が満たされなくなってしまう。
②が満たされないとforループの条件がすむまでループを抜けられなくなり、
その結果、point=0のときに2行目の頭を選んでくるようになってしまってた…ていうことでいいのかな…
なので②の条件式を、no==pointからno==point+1に書きかえるとうまく動くようになりました。
pointの元々の範囲は0から開始文字未満なので、たぶんこれで逆に大きすぎるとかの問題は起こらないはず…
いったん記事保存
同じ文字が出てくる原因は、2gramファイル内に該当文字がある場合の処理関数内での、if文の条件がおかしかったのが原因でした。
point→num(開始文字の回数以下の乱数。0<=point<開始文字の回数)
no→初期値0,開始文字と2gramファイルの文字を比較して一致したときに1ずつ増える。
(開始文字に指定された文字がファイル内に存在すればn=n+1)
(最初の入力文字以外の連鎖は必ずファイル内に存在するはず?)
の2つ変数があって
forループ(2gramファイルの全体の行数分の回数){
①開始文字とファイル内の文字の行の頭を比較して、一致したらno+1をする
(最大で開始文字で始まる2gramの数までnが増える)
↓
②noとpointを比較して、一致したら
1、その行の二文字を2gramファイルから取り出して格納する。
2、forループをぬける
}
という順番で処理をしたときに、
①で文字が見つかればno+1となり、初期値が0のため noの値の範囲はno>=1になる。そうすると
②の比較をするさいにpointが0だった時、絶対にif文の条件が満たされなくなってしまう。
②が満たされないとforループの条件がすむまでループを抜けられなくなり、
その結果、point=0のときに2行目の頭を選んでくるようになってしまってた…ていうことでいいのかな…
なので②の条件式を、no==pointからno==point+1に書きかえるとうまく動くようになりました。
pointの元々の範囲は0から開始文字未満なので、たぶんこれで逆に大きすぎるとかの問題は起こらないはず…
いったん記事保存
PR
この記事にコメントする