質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.62%

偶数に反応するプログラム

解決済

回答 3

投稿

  • 評価
  • クリップ 2
  • VIEW 1,084

siranui

score 38

したいこと/現状

数字 〇(〇は0~9)と言われ、
その数が2で割って余りがなければ
偶数のフラグを立てて、

「それ、偶数だよ...ね?あってるよね?」

と反応するものを作ろうとしました。

が、現在、どの数字にも無反応となってしまいます。

エラーコード/プログラムの場所

  • エラーコード
    code: 'MODULE_NOT_FOUND'  です。
    が、これは他のうまくいくプログラムにも(なぜか)出るものなので、あまりあてにならないかもしれません。

  • プログラム
    ここの2548に書いてあります

問題のプログラム

var 数字 = (0||1||2||3||4||5||6|7||8||9)
if( ( 数字 % 2 ) == 0 ) {
  偶数 = true;
}
if (message.content.includes('数字') && 偶数) {
  message.channel.send('それ、偶数だよ...ね?あってるよね?');
  偶数 = false;
  return;
}

みたいな感じです。
フラグ(偶数)は、もっと上に
let 偶数 = false;
と書かれています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • siranui

    2018/10/23 23:25

    ありがとうございますw  こんなんですが、頑張りますw

    キャンセル

  • dice142

    2018/10/24 11:27

    「var 数字 = (0||1||2||3||4||5||6|7||8||9)」ってこのまま使っているんですか? もしくは「0-9」のどれかが入るって意味で、実際は「var 数字 = 3」のように使ってるんでしょうか?

    キャンセル

  • siranui

    2018/10/24 17:21

    そうですね。「0~9」のどれかが入るって意味で使ってい...たつもりです。もっといい方法とかってあるんですか?

    キャンセル

回答 3

+4

数字 〇(〇は0~9)と言われ、
その数が2で割って余りがなければ、
偶数のフラグを立てて、 

と、コードが合致していません。↑の通り書きましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/24 00:06

    実は、これを書いているところはDiscordというところでして、
    (言うのが遅れてすみません><)
    if (message.content.includes('ナンチャラ')) {
    は必要みたいなんです。

    一応、外してやってみましたが、無反応でした

    キャンセル

  • 2018/10/24 00:13

    ということは、質問に書いてある「したいこと」は本当にしたいこととは違うと言うことですね。

    キャンセル

  • 2018/10/24 17:25

    そうなってしまうかもしれません。すみません、言葉足らずでした

    キャンセル

+2

まずは何をしたいのか整理しませんか?

1.こんなことしたいのかな という内容をコメントにしてみました。
違うのなら直して下さい。

//下準備
//"数字"が何かを定義する
var 数字 = (0 || 1 || 2 || 3 || 4 || 5 || 6 | 7 || 8 || 9)

//”数字”のうち、偶数のものに”偶数”フラグをtrueにする。
if ((数字 % 2) == 0) {
  偶数 = true;
}

//message.contentに”数字”が含まれていて、かつ その数字が偶数だったら
//'それ、偶数だよ...ね?あってるよね?'とメッセージを返して
//”偶数”フラグをfalseにして,runCommand()を抜ける
if (message.content.includes('数字') && 偶数) {
  message.channel.send('それ、偶数だよ...ね?あってるよね?');
  偶数 = false;
  return;
}

2.コメントの内容と実際の動きが正しいか調べてみて下さい。
JavaScript - JSのおすすめ教材、本を教えてください。|teratailの”デバッグ方法”を見ると良いです。

おかしい所色々有ります。

3.もっと単純に考えてみませんか?
要はmessage.contentに2か4か…が入ってたら…と考えると凄く簡単になりますよ。
ヒント:正規表現

4.数字2桁以上や複数数値があった時はどうするのか。

蛇足
Discardとかスクレイピング流行ってんですかね?流行る理由に興味が有ります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/24 20:36

    ご回答ありがとうございます!
    一つずつお答えしていきますね!

    ①:まさにその通りです!
    ②:コンソール系を今まで以上に充実させてみましたが、やはり特にエラーは出ません...
    ③:調べて回って、/[02468]/というものを見つけました。
      これで大丈夫ですかね?
    ④:なるほど....ない頭で考えてみたのですが、偶数奇数を知るだけですので、最後の数字を取得するだけで大丈夫だったりしませんかね?どうでしょうか

    キャンセル

checkベストアンサー

+1

var 数字 = (0||1||2||3||4||5||6|7||8||9)


この||の書き方は左から順に確認し、falseに相当するものであれば次の値を評価し、
trueに相当するものであればその値を評価するという書き方になります。
数値でいえば0false扱いとなり、それ以外はtrue扱いになり、
よって、これは毎回1数字という変数に代入されることになります。
これでは理想の表示ができないのは当然になりますね。

「0~9のどれかが入る」という意味が

  • プログラム側で固定で決める
  • プログラム側でランダムに値を決める
  • ユーザの入力によって決める

によってプログラム内での表現が全く異なります。

プログラム側の固定で良いなら

var 数字 = 3;


のように固定値を入れてあげればいいです。

プログラム側でランダムで決めるならMath.random()を使って
うまいこと0以上9以下の値を出してあげれば良いです。

ユーザの入力が必要であればフォームを用意するなどが必要ですが、
それで受け取った値を使えばやりたいことはできるでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/24 20:04

    ご回答ありがとうございます。
    1が反応してしまうのは、そういうことだったのですね!
    とてもすっきりしました

    ユーザー側の入力によって決めたいので、
    ```js
    if (message.content.includes('数字')) {
    var num;
    message.content.split().forEach(function(element) {
    if(element.match(/[0-9]/) != null) {
    num = parseInt(element, 10);
    message.channel.send('(1)成功 数字:' + num + ' 文字:' + element);
    }
    //続く
    ```

    のようにしてみましたが、どうも数字と取ってくれないので、困っています。
    どのようにすればよいでしょうか?

    キャンセル

  • 2018/10/24 20:13

    質問の主題である「偶数の判定」が解決されたのでしたら、一度質問を終えて別な質問を立てた方が良いです。
    今の追加の質問は「数字が取得できない」という別質問ですよね?あまりひとつの質問でいろんな要件を聞くのは振り返った時に混乱するだけです。

    キャンセル

  • 2018/10/24 21:20

    なるほど、確かにそうですね。

    それでは、var 数字 = (0||1||尺愛)を解決してくださったdice142様をベストアンサーとさせていただきたいと思います。
    理由としましては、var 数字 = (0||1||尺愛)の謎が解けた今ならば、
    偶数を判定するのも容易だからです。

    ありがとうございました

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る