何が間違っているのかわかりません(質問掲示板

投稿:   1 mini 闇さん 投稿:2011/07/03 22:23:03(最新:2011/07/04 12:26:04)
case speakWithSelect(3,"イチゴジュース","パンケーキ","イチゴクッキー",
"何を作りますか?\n\n?\n")
when 0
if getFlag("eレシピ")
E=getItemIndexWithId(7261)
if E==-1
speak("材料が足りません")
else
m=getItemIndexWithId(7262)
if m==-1
speak("材料が足りません")
else
removeItemWithIndex(m)
removeItemWithIndex(E)
speak("料理は成功した")
giveItem(7264)
end
end
else
E=getItemIndexWithId(7261)
if E==-1
speak("材料が足りません")
else
m=getItemIndexWithId(7262)
if m==-1
speak("材料が足りません")
else
removeItemWithIndex(m)
removeItemWithIndex(E)
speak("料理は失敗した")
giveItem(7265)
end
end
end
when 1
if getFlag("pレシピ")
s=getItemIndexWithId(7263)
if s==-1
speak("材料が足りません")
else
k=getItemIndexWithId(7276)
if k==-1
speak("材料が足りません")
else
m=getItemIndexWithId(7262)
if m==-1
speak("材料が足りません")
else
removeItemWithIndex(m)
removeItemWithIndex(s)
removeItemWithIndex(k)
speak("料理は成功した")
giveItem(7278)
end
end
else
s=getItemIndexWithId(7263)
if s==-1
speak("材料が足りません")
else
k=getItemIndexWithId(7276)
if k==-1
speak("材料が足りません")
else
m=getItemIndexWithId(7262)
if m==-1
speak("材料が足りません")
else
removeItemWithIndex(m)
removeItemWithIndex(s)
removeItemWithIndex(k)
speak("料理は失敗した")
giveItem(7277)
end
end
end
when 2
if getFlag("kレシピ")
s=getItemIndexWithId(7263)
if s==-1
speak("材料が足りません")
else
k=getItemIndexWithId(7276)
if k==-1
speak("材料が足りません")
else
E=getItemIndexWithId(7261)
if E==-1
speak("材料が足りません")
else
removeItemWithIndex(E)
removeItemWithIndex(s)
removeItemWithIndex(k)
speak("料理は成功した")
giveItem(7277)
end
end
else
s=getItemIndexWithId(7263)
if s==-1
speak("材料が足りません")
else
k=getItemIndexWithId(7276)
if k==-1
speak("材料が足りません")
else
E=getItemIndexWithId(7261)
if E==-1
speak("材料が足りません")
else
removeItemWithIndex(E)
removeItemWithIndex(s)
removeItemWithIndex(k)
speak("料理は失敗した")
giveItem(7279)
end
end
end
end
このような内容でエラーが出るのですが何が間違っているのでしょうか
2, 3 action : syntax error, コードに文法的な間違いがあります。 line(行): 56
17, 5 action : syntax error, コードに文法的な間違いがあります。 line(行): 57

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Logo mini hightoller(投稿日:2011/07/04 12:26, 履歴)
when 0
E=getItemIndexWithId(7261)
m=getItemIndexWithId(7262)
  if E==-1||m==-1
  speak("材料が足りません")
  else
  removeItemWithIndex(m)
  removeItemWithIndex(E)
    if getFlag("eレシピ")
    speak("料理は成功した")
    giveItem(7264)
    else
    speak("料理は失敗した")
    giveItem(7265)
    end
  end

when0 の中身整理するとこんな感じ?
条件文多すぎると、後から見直しても訳分からなくなるから、
まとめられるのはまとめた方がいいかな。
Logo1 mini fmy(投稿日:2011/07/04 10:43, 履歴)
面倒かもだけどendの後ろにコメント付けてみたらどうかなー。
	if m==-1 
		speak("なんとかかんとか")
	else 
		speak("なんとかかんとか")
	end # if m==-1 のend


そんな事よりも気になったのはcase文のwhenに並んでelseが使えてるだとっ!?
   _, ,_
  ( ゚д゚ ) ガタッ
  .r   ヾ
__|_| / ̄ ̄ ̄/_
  \/     /
そんな便利文法リファレンスに無かったすよakasata社長!!

Cのswitchに対するdefaultみたいに使ってもいいのかな?
   mini ___(投稿日:2011/07/04 07:50, 履歴)
だから長文コードの時は{{{code}}}をですねー。

とりあえずRmake記法に則り、{{{code}}}を使用して、
そんでインデントをつけてみればいいと思います。
文法的に間違ってるところがボロボロ出てくると思いますよ。
endも付けりゃいいってものじゃあ無いですからねぇ。
# 例
if(A==B)
 speak("分岐")
 if(C==D)
  speak("終わり")
 elsif(E==F)
  speak("分岐")
  if(E==G)
   if(H==I)
    speak("終わり")
   end
  end
 else
  speak("ifには当てはまらなかった")
 end
end
  1 mini 闇さん(投稿日:2011/07/04 03:53, 履歴)
case speakWithSelect(3,"イチゴジュース","パンケーキ","イチゴクッキー",
"何を作りますか?\n\n?\n")
when 0
if getFlag("eレシピ")
E=getItemIndexWithId(7261)
if E==-1
speak("材料が足りません")
else
m=getItemIndexWithId(7262)
if m==-1
speak("材料が足りません")
else
removeItemWithIndex(m)
removeItemWithIndex(E)
speak("料理は成功した")
giveItem(7264)
end
end
end
else
E=getItemIndexWithId(7261)
if E==-1
speak("材料が足りません")
else
m=getItemIndexWithId(7262)
if m==-1
speak("材料が足りません")
else
removeItemWithIndex(m)
removeItemWithIndex(E)
speak("料理は失敗した")
giveItem(7265)
end
end
end
end
when 1
if getFlag("pレシピ")
s=getItemIndexWithId(7263)
if s==-1
speak("材料が足りません")
else
k=getItemIndexWithId(7276)
if k==-1
speak("材料が足りません")
else
m=getItemIndexWithId(7262)
if m==-1
speak("材料が足りません")
else
removeItemWithIndex(m)
removeItemWithIndex(s)
removeItemWithIndex(k)
speak("料理は成功した")
giveItem(7277)
end
end
end
else
s=getItemIndexWithId(7263)
if s==-1
speak("材料が足りません")
else
k=getItemIndexWithId(7276)
if k==-1
speak("材料が足りません")
else
m=getItemIndexWithId(7262)
if m==-1
speak("材料が足りません")
else
removeItemWithIndex(m)
removeItemWithIndex(s)
removeItemWithIndex(k)
speak("料理は失敗した")
giveItem(7278)
end
end
end
end
when 2
if getFlag("kレシピ")
s=getItemIndexWithId(7263)
if s==-1
speak("材料が足りません")
else
k=getItemIndexWithId(7276)
if k==-1
speak("材料が足りません")
else
E=getItemIndexWithId(7261)
if E==-1
speak("材料が足りません")
else
removeItemWithIndex(E)
removeItemWithIndex(s)
removeItemWithIndex(k)
speak("料理は成功した")
giveItem(7278)
end
end
end
else
s=getItemIndexWithId(7263)
if s==-1
speak("材料が足りません")
else
k=getItemIndexWithId(7276)
if k==-1
speak("材料が足りません")
else
E=getItemIndexWithId(7261)
if E==-1
speak("材料が足りません")
else
removeItemWithIndex(E)
removeItemWithIndex(s)
removeItemWithIndex(k)
speak("料理は失敗した")
giveItem(7278)
end
end
end
end
end
このように直したのですが下のようなエラーが・・・
2, 3 action : syntax error, コードに文法的な間違いがあります。 line(行): 36
イチゴジュースを選ぶとなぜか何も起こらず
パンケーキを選ぶとイチゴジュースを作るのです
  1 mini 闇さん(投稿日:2011/07/04 03:14, 履歴)
ありがとうございます
endの付け忘れに気がつきませんでした
同じようなところをコピーして貼り付けるを繰り返すうちに消えていったんだと思います
今後注意していきたいです
Logo1 mini fmy(投稿日:2011/07/04 01:26, 履歴)
エラー文の箇所そのものはifに対してelseを2回しようとしてる為だからちょっとわかりにくいよね(汗

多分やりたい事から察するに逆にendが足りてないんじゃないかなーと予想。
ってみんな言ってたねw

場所は自分で見つけられたらそれはスキルアップしてる証拠なので頑張ってー。

ちょっと関係ないけどそういえば
スクリプトのテキスト入力フォーム?は行数って表示されてませんねぇ。

タブキーとかアンドゥとかちょっと使いづらいなと思ったら
社長には悪いけど割り切って自分でテキストエディタを用意してみてはいかがでしょうー。
User icon mini 退会したユーザー(投稿日:2011/07/04 01:05, 履歴)
すみません、訂正です。
if文の中にif文を入れるのはぜんぜん大丈夫でした。
でも、それをどんどん複雑にすればするほど
end忘れなどのケアレスミスは多くなりがちですので、
そこは注意するべきです。
半角スペースを使って整頓すると分かりやすくなりますよ。
Nyan mini rurun9(投稿日:2011/07/04 00:52, 履歴)
文法的な間違いがある、て出てるんだから何が間違っているのかは判明してるじゃないですか。

少なくともwhen 1の中のif文がいくつかENDで閉じていませんよ。
if (条件式ア)
 (アの場合の処理)
else
 (アではない場合の処理)
end #アここまで
という感じで閉じるendにコメントを付けていくと、後から見直す時に判り易くなって良いかと。
User icon mini 退会したユーザー(投稿日:2011/07/04 00:50, 履歴)
えっと、とりあえず整理しますね。
case speakWithSelect(3,"イチゴジュース","パンケーキ","イチゴクッキー", 
"何を作りますか?\n\n?\n") 
when 0 
if getFlag("eレシピ") 
E=getItemIndexWithId(7261) 
if E==-1 
speak("材料が足りません") 
else 
m=getItemIndexWithId(7262) 
if m==-1 
speak("材料が足りません") 
else 
removeItemWithIndex(m) 
removeItemWithIndex(E) 
speak("料理は成功した") 
giveItem(7264) 
end 
end 
else 
E=getItemIndexWithId(7261) 
if E==-1 
speak("材料が足りません") 
else 
m=getItemIndexWithId(7262) 
if m==-1 
speak("材料が足りません") 
else 
removeItemWithIndex(m) 
removeItemWithIndex(E) 
speak("料理は失敗した") 
giveItem(7265) 
end 
end 
end 
when 1 
if getFlag("pレシピ") 
s=getItemIndexWithId(7263) 
if s==-1 
speak("材料が足りません") 
else 
k=getItemIndexWithId(7276) 
if k==-1 
speak("材料が足りません") 
else 
m=getItemIndexWithId(7262) 
if m==-1 
speak("材料が足りません") 
else 
removeItemWithIndex(m) 
removeItemWithIndex(s) 
removeItemWithIndex(k) 
speak("料理は成功した") 
giveItem(7278) 
end 
end 
else 
s=getItemIndexWithId(7263) 
if s==-1 
speak("材料が足りません") 
else 
k=getItemIndexWithId(7276) 
if k==-1 
speak("材料が足りません") 
else 
m=getItemIndexWithId(7262) 
if m==-1 
speak("材料が足りません") 
else 
removeItemWithIndex(m) 
removeItemWithIndex(s) 
removeItemWithIndex(k) 
speak("料理は失敗した") 
giveItem(7277) 
end 
end 
end 
when 2 
if getFlag("kレシピ") 
s=getItemIndexWithId(7263) 
if s==-1 
speak("材料が足りません") 
else 
k=getItemIndexWithId(7276) 
if k==-1 
speak("材料が足りません") 
else 
E=getItemIndexWithId(7261) 
if E==-1 
speak("材料が足りません") 
else 
removeItemWithIndex(E) 
removeItemWithIndex(s) 
removeItemWithIndex(k) 
speak("料理は成功した") 
giveItem(7277) 
end 
end 
else 
s=getItemIndexWithId(7263) 
if s==-1 
speak("材料が足りません") 
else 
k=getItemIndexWithId(7276) 
if k==-1 
speak("材料が足りません") 
else 
E=getItemIndexWithId(7261) 
if E==-1 
speak("材料が足りません") 
else 
removeItemWithIndex(E) 
removeItemWithIndex(s) 
removeItemWithIndex(k) 
speak("料理は失敗した") 
giveItem(7279) 
end 
end 
end 
end 

このようなコードだとend不足(多すぎ)がほとんどです。
endをまとめて書いていると、if文の実行中にendにぶつかる前に
下のifにぶつかっている所があるかもです。
  • 簡単な例
if getFlag("A")
speak("A")
if getFlag("B")#この時点でアウト
speak("B")
else
speak("C")
end#endが1つ足りていないが、上のミスを直さないと表示されない

(スクリプトは基本上から下に実行される)
if文などの文は終わらせるタイミングで
endを書くようにするのがいいと思います。