ただいまJavaScriptの基本中の基本の段階を、
解説サイトを見ながら勉強しています。
その中でわからないことがあったので教えてください。

以下、サイト文の引用

************************************************

例えば「0から10までの偶数の和を、変数a求めたい」場合。

   a=0;
   for(i=0; i<11; i++)
     { if(i%2==1)continue;
      a+=i; }
   alert(a);

 と記述します。

 まず変数aを0で初期化します。
 続いてforループを開始します。 最初に変数iを0で初期化します。
 次にループの条件判定を行い、iが11未満ならばループを続行します。

 さらにループ内でif文の条件分岐をして、iを2で割った余りが0以外の場合はcontinue命令が実行され、 ループの先頭に戻ります。 もしiを2で割った余りが0の場合は、a+=i;の処理が実行されて変数aに変数iの値が加算されます。

************************************************

上のif文について、解説では
「iを2で割った余りが0以外の場合はcontinue命令が実行」
「iを2で割った余りが0の場合は、a+=i;の処理が実行されて変数aに変数iの値が加算」
となっていますが、この意味がよくわかりません。

i%2==1
というのは「iを2で割った余りが1と等しい」なのに、
なぜ0以外の場合、0の場合という"0"で判断しているのでしょうか?

それと、
「iを2で割った余りが1の場合、
continue処理をして、変数aはa+iの値となる」
・・・というこちらの勝手な解釈のどこが間違っていますか?

初心者なのでくだらない質問かもしれませんがよろしくお願いします。

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

A 回答 (3件)

確かに、0以外の場合、0の場合というのは厳密に書くとNo.1の方が書かれたようになります。



「iを2で割った余りが1の場合、
continue処理をして、変数aはa+iの値となる」
と書いてありますが、
continue処理はそれ以下の命令を無視して再びループの先頭に戻るので、余りが1の場合はa+=1は実行されません。
余りが1でないときはcontinue処理をしないのでa+=1が実行されます。
「iを2で割った余りが1の場合、
continue処理をして、
iを2で割った余りが1でない場合、
変数aはa+iの値となる」
の方が正しいです。

for文の場合はcontinue処理でiの増減がありますが、
while文ではiの値が変わらないことに注意。
    • good
    • 0
この回答へのお礼

continue処理というのは、この場合、
条件に当てはまれば、上のfor文の処理を続け、
条件に当てはまらなければ、次のa+=iを実行する
ということですね。
よくわかる説明、どうもありがとうございました<(_ _)>

お礼日時:2003/09/10 11:56

>iを2で割った余りが0以外の場合は~


解説文から、プログラムをすれば以下の3通りになると思います。

1.if(i%2!=0)continue;
※以前、年配の方からプログラムのコーディングでノットイコール(!=)を極力使用しないように聞いた事があります。これは、他の言語等でノットイコールが無いとか複合条件する時にややこしくなるとか聞いた覚えがあります。(確かそんなだったと思います、うろ覚え)
2.if(i%2==0){}else{continue;}
※elseを記述するだけ見辛くなる。
3.if(i%2==1)continue;
※解説文通りではないですけど、シンプルでまとまってます。

3での記述方法にしていると言うことは、年配の方がかかれている解説ではないのでしょうか。いわゆる記述癖っていうことだと思います。

3にするのであれば、解説文を「iを2で割った余りが1の場合は~」が正しくなりますね。
    • good
    • 0
この回答へのお礼

いろいろ記述方法があるんですね。
この場合、0 か 1 の2者択一なので、
3番目の方法が一番シンプルですが、
もし3つ以上の選択肢がある場合にはややこしくなりそうですね。
1番目2番目の方法は、どう処理するのかがわかりやすいです。
1番目を使いたいところですが、ご教授どおり、なるべく使わないように心がけます。

どうもありがとうございました<(_ _)>

お礼日時:2003/09/10 12:08

解説文のとおりにすると、


{ if(i%2!=0)continue;
てことになるのでしょうね。

2 で割った余りは、0 か 1 しかないので
1 = 0以外てことです。
    • good
    • 0
この回答へのお礼

0 か 1 の2通りしかないという点を
うっかり見過ごしていました(汗

どうもありがとうございました<(_ _)>

お礼日時:2003/09/10 11:47

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q0は奇数か偶数なのか?

数字の0は奇数か偶数かどちらなのでしょうか?理由も付けて回答をお願いします。

Aベストアンサー

偶数とは、2で割り切れる整数のことをいうので、ゼロは2で割り切れ(0÷2=0)るので、偶数

参考URL:http://ja.wikipedia.org/wiki/%E5%81%B6%E6%95%B0

Q&= ~0x0c; &= ~0x03; |=1;

JavaScriptで分からないコードがあるので教えてください。


■変数設定
var hoge = 0;


■変数格納
・キーを押した時の条件分岐
  ~なら hoge |= 1;
  または hoge |= 2;
  または hoge |= 3;
  または hoge |= 8;

・キーを離した時の条件分岐
  ~なら hoge &= ~0x0c;
  または hoge &= ~0x03;


■変数使用
・swithch文の条件分岐に利用
  (hoge&0x03)
  (hoge&0x0c)


■質問
・どういう意味でしょうか?
・文字コード?
・ビット演算?

Aベストアンサー

ビット演算してるわね

x = x + a

x += a
って書くことができるの

つまり
hoge |= 1

hoge = hoge | 1
のことね

~はNOTのこと

0x
はアスキーコードの16進数表記ねきっと

0x0c は改ページを意味していて
0x03 は文章の最後を意味している
と思われるわ
全文がないので推測だけど

Q16進数の偶数奇数の判別について

ウィキペディアによると、n 進法(ただしnは正の偶数)においてある整数が偶数であるかどうかは、1の位(n0 の位)を見るだけで判別できる。
と書いてありますが、何が存在すれば偶数奇数が判るのでしょうか。

また16進数の交換を偶数と奇数で分け、対象のもの同士で交換したいのですが、
その例が、
01なら0f、
2なら0e
らしいのですが、なぜそうなるのでしょう?
00なら0fの様な気がするのですが...

Aベストアンサー

偶数は下1桁が0,2,4,6,8,a,c,e
奇数はそれ以外

>また16進数の交換を偶数と奇数で分け、対象のもの同士で交換したいのですが、

「16進数の交換」とは何? 足して繰り上がるペアなら
1-f,2-e,3-d,...,7-9,8-8(変わらない)
0は0とペア、または交換できないとすべきか?
とにかく定義が分かりません。

Qfor(var i=0;...) の i の値を保持するには?

-----
<ul>
<li>test1</li>
<li>test2</li>
<li>test3</li>
</ul>

<script type='text/javascript'>
(function(){
var li = document.getElementsByTagName('li');

for(var i=0,max=li.length; i<max; i++){
li[i].onclick = function(){
alert(i);
};
}
})();
</script>
-----

上記スクリプトを実行すると、全てのli要素でクリックしたときに "3" がalertされます。
0,1,2 をそれぞれalertしたいのですが、どういった方法が考えられるでしょうか?

現在作成しているスクリプトでは、下記のようにidに値を保持しています。
もう少しスマートな方法がある気がするのですが…。

---
li[i].id = 'test' + i;
li[i].onclick = function(){
alert(this.id.replace(/^test(\d+)/, '$1'));
};
---

-----
<ul>
<li>test1</li>
<li>test2</li>
<li>test3</li>
</ul>

<script type='text/javascript'>
(function(){
var li = document.getElementsByTagName('li');

for(var i=0,max=li.length; i<max; i++){
li[i].onclick = function(){
alert(i);
};
}
})();
</script>
-----

上記スクリプトを実行すると、全てのli要素でクリックしたときに "3" がalertされます。
0,1,2 をそれぞれalertしたいのですが、どういった方法が考えられるでしょうか?

現在作成しているスクリプトでは、...続きを読む

Aベストアンサー

http://nanto.asablo.jp/blog/2005/12/04/165848
メモリーリークにみえて、そうでない・・・

>HTMLObjectに勝手にプロパティ
これはよくないことだじょ!そうおそわった。

ついでにいうと、いべんとをなんこもていぎするより
No3.みたいにおおもとにひとつでじゅうぶん。
innerHTMLで、ぜんたいをかきかえたとしてもOK!
と、TAGindex
http://www.tagindex.com/cgi-lib/q4bbs/patio.cgi
でおそわったじょ!

Q【奇数+偶数=奇数の証明】 これって間違いですか?

『奇数+偶数=奇数』の証明です。これは間違いでしょうか?

nを自然数とすると、偶数は2n、奇数は2n+1で表せるから、
2n+(2n+1)=4n+1
nは自然数だから、4nは偶数である。
よって4n+1は奇数となり、奇数+偶数=奇数である。

よろしくお願いします。

Aベストアンサー

これでは100点をあげられないなあ。
> nを自然数とすると、偶数は2n、奇数は2n+1で表せるから、
ここでは一般の偶数と奇数を考えているのだから,これではまずい。どうして偶数よりも1だけ大きい奇数しか考えないのか?

Qfor ( i = 0; i ・・の使い方?

下記は普通に動きますが、ラジオボタンの内容をデータベースによって変更しているためボタンが1個だけの場合があります。その場合にもエラーにならない書き方についてアドバイスいただけないでしょうか。

<SCRIPT language=JavaScript>
function set( n ) {
for ( i = 0; i < document.main.shori.length; i++ ) {
if ( document.main.shori[i].checked ) {
shori_value = document.main.shori[i].value
}
}
alert(shori_value)
}
</SCRIPT>
<body onLoad="set(0);">
<FORM NAME=main>
<INPUT TYPE="RADIO" NAME="shori" VALUE="1" onClick="set(0);" CHECKED>1 
<INPUT TYPE="RADIO" NAME="shori" VALUE="2" onClick="set(1);">2
</form>

下記は普通に動きますが、ラジオボタンの内容をデータベースによって変更しているためボタンが1個だけの場合があります。その場合にもエラーにならない書き方についてアドバイスいただけないでしょうか。

<SCRIPT language=JavaScript>
function set( n ) {
for ( i = 0; i < document.main.shori.length; i++ ) {
if ( document.main.shori[i].checked ) {
shori_value = document.main.shori[i].value
}
}
alert(shori_value)
}
</SCRIPT>
<body onLoad="set(0);">
<FORM NAME=main>
<INPU...続きを読む

Aベストアンサー

おはようございます。
スクリプトを、以下のようにしてみてはいかがでしょうか。

var shori_value;

function set( n ) {
if (document.main.shori.length){
for ( i = 0; i < document.main.shori.length; i++ ) {
if ( document.main.shori[i].checked ) {
shori_value = document.main.shori[i].value;
}
}
}
else {
if(document.main.shori.checked){
shori_value = document.main.shori.value;}
}
alert(shori_value)
}

上では、if(document.main.shori.length){}という条件で条件分岐を設定しています。 document.main.shori.lengthは、フォーム部品のラジオボタンが配列としてソートされている場合には真を返しますので、複数のラジオボタンが並んでいるときにはこれ以下の処理を実行します。 もし、ラジオボタンが一つしかない場合は、それは配列としてソートされないため、document.main.shori.lengthは未定義となり、偽を返すはずなので、そこでエラーを回避できると思います。
あとは、else文でラジオボタンが一つのケースで、そのラジオボタンがチェックされているかどうかと、チェックされている場合にそのvalue値を返す処理を別に用意してやれば良いのではないでしょうか。

参考になれば幸いです。 見当違いでしたらごめんなさい。

おはようございます。
スクリプトを、以下のようにしてみてはいかがでしょうか。

var shori_value;

function set( n ) {
if (document.main.shori.length){
for ( i = 0; i < document.main.shori.length; i++ ) {
if ( document.main.shori[i].checked ) {
shori_value = document.main.shori[i].value;
}
}
}
else {
if(document.main.shori.checked){
shori_value = document.main.shori.value;}
}
alert(shori_value)
}

上では、if(document.main.shori.length){}という条件で条件分...続きを読む

Qコンビネーションの偶数奇数判定ってできますかね

nCm コンビネーションについてですが、n,mが偶数か奇数かによって偶数奇数判定ってできないでしょうか?
分数が入ってると偶数か奇数かわからないような気がするのですが、

階乗計算をしないでできるだけ簡単にコンビネーションの偶数奇数判定をしたいのですが、

どなたか、知恵を御貸し下さい。
お願い致します。

Aベストアンサー

http://oshiete1.goo.ne.jp/qa2385467.html

Qreturn (A && B) || 0;

下記コードはどういう意味でしょうか?
・piyo[b] と piyo[b][a] または 0を返す?
・条件分岐もないのに?
・もしかして条件式を返す?
・あるいは、piyo[b] と piyo[b][a] を返す。または 0?
・ビット演算子?

hoge = function(a, b) {
 return (piyo[b] && piyo[b][a]) || 0;
};

Aベストアンサー

意味は「piyo[b][a]に入っている数値を安全に返したい」です

もしpiyo[b]が未定義ならpiyo[b][a]にアクセスしようとするとエラーになってしまいます
そのためまず、piyo[b] && piyo[b][a]で、piyo[b]が真、つまりオブジェクトならば、piyo[b][a]を評価します。
つまりpiyo[b] && piyo[b][a]はundefinedか、piyo[b][a]になることが期待できます

次に||0で、偽ならば0を返します
つまり、piyo[b]が未定義のときのundefinedや、piyo[b][a]が未定義のときのundefined、また、piyo[b][a]が0のときは偽と評価されるので0になります。

以上より、piyo[b] && piyo[b][a] || 0はpiyoの構造がある程度しっかりしてなくとも、安全に数値(初期値0)を返すことができます。
ただし、完璧に保証できるわけではありません。
例えば、piyo自体がnullやundefinedになる危険性がある場合はさらなるチェックが必要です。

よってこのコードからは、piyoは二次元数値配列であってほしいのだけど、添字が事前にわからないため、最初は一次元配列としてしか初期化していなくて、あとから追加していく形、でも取得するときは、まだ追加されていないときでも、安全に0を返したいのだと分かります。

意味は「piyo[b][a]に入っている数値を安全に返したい」です

もしpiyo[b]が未定義ならpiyo[b][a]にアクセスしようとするとエラーになってしまいます
そのためまず、piyo[b] && piyo[b][a]で、piyo[b]が真、つまりオブジェクトならば、piyo[b][a]を評価します。
つまりpiyo[b] && piyo[b][a]はundefinedか、piyo[b][a]になることが期待できます

次に||0で、偽ならば0を返します
つまり、piyo[b]が未定義のときのundefinedや、piyo[b][a]が未定義のときのundefined、また、piyo[b][a]が0のときは偽と評価されるの...続きを読む

Q偶数、奇数、倍数、約数について

いろいろ調べたんですが、人によって違っていたりして分からず困っています・・・。
高校までの範囲では
[1]偶数と奇数は負の範囲も含めて良いのでしょうか?。自分が調べた教科書や参考書によると、算数では、0以上の整数において偶数・奇数を定義しているのですが、中学・高校の数学では偶数・奇数についての定義は触れられていません。
[2]倍数に0は含めても良いのでしょうか?。算数の参考書などには、「ある整数に整数をかけてできる数のことを倍数、0の倍数やある数の0倍は考えないことにする」と書いてあります。人によっては、含めるだったり、含めないだったり・・・一体どうすれば・・・?。
[3]倍数・約数は負の範囲まで考えていいのでしょうか?。
[4]0の約数というのは考えても良いのでしょうか?。
以上4点です。どなたか詳しい方、教えてください。お願いしますm(__)m。

Aベストアンサー

[1]通常負の数を習った中学以降では偶数・奇数とも負の数を含みます。むしろ誤解の可能性がある場合は「正の偶数」とか、「負でない偶数」などの表現をしないといけません(まあ正である事が明らかな場合などは特にことわらない事もありますが)。

[2]0を含めて問題ありません。というか含めるのが普通です。これは[3]についても同様負の範囲も考えるのが普通です(中学以降)。ですから[1]同様正確さを期する時は「正の倍数」とか「負でない倍数」、「正の約数」などの表現をします。ただし、例によって正である事が問題の趣旨から明らかな場合はこういうった煩瑣な記述を省略する場合もあるだけです。(あくまで省略です)
ただし、ある数の倍数(0倍)として0を考えて良いのであって、0の倍数は下記[4]と同様の論拠で考えないのが普通です。

[4]そもそも約数の議論には0を加えない事が重要です。0=0×(任意の数)と表せるため、特殊すぎて0の約数を考える事に意義が見いだせないからです(むしろ議論をややこしくしてしまいます)論理的には0の約数といってもよいかもしれませんが、他の整数と整合性がとれないので、考えないのが普通です。

[1]通常負の数を習った中学以降では偶数・奇数とも負の数を含みます。むしろ誤解の可能性がある場合は「正の偶数」とか、「負でない偶数」などの表現をしないといけません(まあ正である事が明らかな場合などは特にことわらない事もありますが)。

[2]0を含めて問題ありません。というか含めるのが普通です。これは[3]についても同様負の範囲も考えるのが普通です(中学以降)。ですから[1]同様正確さを期する時は「正の倍数」とか「負でない倍数」、「正の約数」などの表現をします。ただし、例によって正であ...続きを読む

QmoveTo(0,0);

<script language="JavaScript">
<!--
function new1(){
newwind2=window.open("","newwind1","width=200,height=200");
newwind2.moveTo(0,0);
          }
//-->
</script>
上記のスクリプトの時、
ウインドウの位置が(0,0)の位置に表示されず、画面の真ん中に表示される、
なぜですか。

Aベストアンサー

そのソースに問題はなさそうです。
例えば、

 <input id=newwind2>
 <script language="JavaScript">
 newwind2=window.open("","newwind1","width=200,height=200");
 newwind2.moveTo(0,0);
 </script>

とすると、
 window.open("","newwind1","width=200,height=200");
は実行されるけど
 newwind2.moveTo(0,0);
は実行されません。


人気Q&Aランキング