javaをやってます。

開発環境はeclipseです。

コンパイルエラーで分からないことがあります。

for(int i=0 [i]<cx.length; i++)
cx[i] -= 2;
if(cx[i]<-409) cx[i] = 480;
g.drawImage(img_coloud, cx[i], cy[i], mainwindow);

例えばこの文です。本を見ながら同じように記述しているのですが、

i=0 [i]<cxとか i++)とかに赤破線が引かれてしまいます。(例えばです)

その文を消すと全く違うところに破線が出るみたいになります。

エラーは基本的には文法が間違ってるというのは一応知ってます。

どう間違ってるのかよく分かりません。

こういうときはどう対処したらいいですか?

このQ&Aに関連する最新のQ&A

A 回答 (5件)

> エラーは基本的には文法が間違ってるというのは一応知ってます。



それなら、なぜ、その文法を見直さないのですか?
エラーメッセージは読んでますか?大抵のヒントはそこにあります。

> 本を見ながら同じように記述しているのですが

本の例題を入力するなら「同じように」ではなく「同じに」である必要があるだろうし、
自作のものなら、本の内容を理解した上で、本当に「同じよう」なのかを考える必要があります。

> その文を消すと全く違うところに破線が出るみたいになります。

本来必要なはずのものを消せば、他に影響が出るのは当り前です。
対処方は「正しく直す」ことです。


> for(int i=0 [i]<cx.length; i++)

・forの文法をよーーーく見てください。あきらかに足りないものがあります。
・[i]等と[]を単独で使うことは(この例では)まずありません。意味を考えて正しいものにしましょう。

あと、よくあることなのです
> for(int i=0; i<cx.length; i++)
> cx[i] -= 2;
> if(cx[i]<-409) cx[i] = 480;

for文には
・for(..) 単文 ;
・for(..) {文1 ; 文2 ;....}
と {}を使う場合と使わない場合があります。前者は{}を使えば
・for(..){ 単文 ;}
です。つまり、このforは

for(int i=0; i<cx.length; i++){
cx[i] -= 2;
}
if(cx[i]<-409) cx[i] = 480;

であり、ループするのは cx[i] -= 2; だけです。
また、変数iはfor文中で宣言しているので、有効範囲はforの中だけです。if文以降の変数iは未定義です。

同様の{}の問題は while, if 等でも起ります。
    • good
    • 0
この回答へのお礼

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

基礎からやり直したいと思います。

一番初めだったということでベストアンサーにさせていただきました。

どの回答も親切で分かりやすいものばかりでした。

また質問するときはよろしくお願いします。

皆さん大変ありがとうございました

お礼日時:2011/04/22 13:04

皆さんが回答していることがごもっともですが、


初心者の方は最初にどのような参考書を買うかで理解度も変わってきますね。

まずは基本的な文法の確認から…
おそらくDoubleHeadさんの解釈が正しいと思いますのでこちらを引用させていただきます。
文法前の1~7(:前)は行番号だと思ってください。

1:for (int i = 0; i < cx.length; i++) {
2: cx[i] -= 2; 
3: if (cx[i] < -409) {
4: cx[i] = 480;
5: }
6: g.drawImage(img_coloud, cx[i], cy[i], mainwindow);
7:}

【1行目~】
for文は反復(ループ)構文です。
条件文である()内には左より初期値、継続条件、継続処理を記述します。
反復する内容は条件文後の{}の中です。今回の場合は以下の通りですね。
 初期値:int i = 0(for文内でのみ使用できるiを定義⇒値は0から)
 継続条件:i < cx.length(iがcxの長さより小さくなるまで)
 継続処理:i++(継続条件を満たさない場合にiを1ずつ増やす)
      ちなみにi+=2(iを2ずつ増やす)など割と自由に記述できます
 処理する内容:2~7行目

【2行目】
cx変数のi番目の値を2減少させるという意味です。これは以下の式と同じ意味ですよ。
 cx[i] = cx[i] - 2;

【3行目~】
if文は条件構文です。一般的な構文は以下になります。
if(条件式1) {
条件式1を満たす場合に実行される処理
} else if(条件式2) {
条件式1を満たさないが条件式2を満たす場合に実行される処理
} else {
どの条件も満たさない場合に実行される処理
}

else if()はif以下にいくつでもつなげて記述可能で、複数条件を満たす場合は上位に記述している条件が優先されます。ただしelseは1つしか記述できません。
もちろん、今回のようにifのみ記述することも可能です。今回の場合、意味は以下のようになります。
 cxのi番目の値が-409未満のとき、{}内(4行目)の処理を実行する

【4行目】
 cx変数のi番目の値を480にする

【6行目】
 gのdrawImage関数を実行する
内容がわからないので引数が何を意味しているのかわかりませんが、ひとまず関数(メソッド)の内容が実行されます。


っとeclipse_9さんがどの程度理解されているのかわからないので全体的に書きました。
もしわからなかったらおっしゃってください^^;

基本的に条件式を書く構文には{}がいります。
これはその構文がどの範囲まで有効か?ということをはっきりさせるためなので必ず記述するように心掛けてください。

後は・・・地道に構文を理解していくしかないですね。。。
eclipseなどは様々なサポートがある分、初心者はなんとなく~で理解することが多いと思います。
まずは純粋にJavaをコマンドプロンプトでコンパイル⇒実行の手順を踏むほうが構文の内容をしっかり理解できるようになると思いますよ。
    • good
    • 0
この回答へのお礼

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

基礎からやり直したいと思います。

また質問するときはよろしくお願いします。

お礼日時:2011/04/22 12:58

確かに構文が滅茶苦茶です・・・



まず、その構文が何を意味し、どう動作していうかということを理解しなければなりません。

>> 本を見ながら同じように記述しているのですが、
本当に本のとうりに記述しているのですか?
変数iに値を代入しているのですが、[i]というのは何ですか?
iと言うのはこの場合、後に配列の何番目かを取得するためのint型の数値です。
後にcxと言う配列の何番目かを指定するための・・・

意図するところの意味を考えれば、ANo.3 の方の構文が正しいです。
ANo.2 さんが言っておられるように、理解しきっていないうちからの短縮タイプの使用などはよくないです。
まず基本をみっちりとされた方がよいと思います。

プログラミングは、java であれ c であれ方法論はほぼ同じようなものです。
一つの言語を理解すれば大体ほとんどの言語が理解できます。
言語によって記述方法が少々違いますが・・・
(java のように ポインター変数が無いとか)

あまりよく分からないうちは、eclipse のようなIDEではなく、まず
テキストエディターを使いソースコードを書き
それをコマンドコンパイルするようなオーソドックスなやり方の方が
本質的な理解が速いと思います。
    • good
    • 0
この回答へのお礼

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

基礎からやり直したいと思います。

また質問するときはよろしくお願いします。

お礼日時:2011/04/22 12:57

きついこと言いますが、


めちゃくちゃですよ・・・

もう一度よーーく目をよく開けてその本をよく読むことをお勧めします。
for 文 の括弧の中がめちゃくちゃですし、
[i] ってなんですか。
どこからどこまでが for の繰り返しなのかの指定もないし。
だからこのままでは if 文も意味がなしてないし。

for (int i = 0; i < cx.length; i++) {
cx[i] -= 2;
if (cx[i] < -409) {
cx[i] = 480;
}
g.drawImage(img_coloud, cx[i], cy[i], mainwindow);
}

こうじゃないですか?
    • good
    • 0
この回答へのお礼

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

基礎からやり直したいと思います。

また質問するときはよろしくお願いします。

お礼日時:2011/04/22 12:59

老婆心ですが、if,while,forなどで単文で済む場合でも、複文「{}」で記述することをおすすめします。


その方が、後でプログラムの変更などで、文を追加した場合などに思いがけないバグに会う可能性が減ります。

個人的には単文での繰り返し文が続くと繰り返しの開始と終了の範囲が見にくくなるというのもありますが。
    • good
    • 0
この回答へのお礼

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

基礎からやり直したいと思います。

また質問するときはよろしくお願いします。

お礼日時:2011/04/22 13:00

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


人気Q&Aランキング