C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: +1 について


(過去ログ 81 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■47745 / inTopicNo.1)  +1 について
  
□投稿者/ ゆうな (5回)-(2010/03/12(Fri) 20:37:08)

分類:[その他の言語] 

こんにちは。いつもお世話になっております。またすごく基礎的な疑問が出てしまったのでご質問させて頂きます><

ColdFusionを今使っているのですが、cfloopのindexの値に+1するとどういった処理がされるのでしょうか?
具体的には下記のようなコードです。
----------------
<cfset nCount = 0>
<cfloop index="loop" from="1" to="#nameCount#">

<cfif loop+1 lTE nameCount>
<cfif namelist.SHAIN_CD[loop] neq namelist.SHAIN_CD[loop+1]>
<cfset nCount += 1>
</cfif>
<cfelse>
<cfset nCount += 1>
</cfif>

</cfloop>
----------------

言い訳ですが、開発環境が今エディタで、既存のコードを修正しているので値を変更しても処理結果が表示されないだけで詳細のエラーがわかりません >< 入門と入力して調べてみたりDocで調べてみたのですがなかなか思うように検索できずわかりませんでした。

具体的には、indexに+1をするとどういう処理をするのかということがわかりません。
単純にループが+1されるのか、それともloopに1を代入して別の値としている?のか(謎ですみません・・・)

CFMLだけに限らないことかもしれませんが、ご存知の方がいらっしゃいましたらアドバイス頂けると幸いです。
よろしくお願い致しますm(__)m



引用返信 編集キー/
■47749 / inTopicNo.2)  Re[1]: +1 について
□投稿者/ やじゅ (1548回)-(2010/03/12(Fri) 21:32:49)
やじゅ さんの Web サイト
No47745 (ゆうな さん) に返信

VBに変換するとこんな感じ、CFタグを使わなくてもcfscriptでも使えるはず。

uCount = 0
For loop = 1 To nameCount
 If loop + 1 <= nameCount Then
   If namelist.SHAIN_CD[loop] <> namelist.SHAIN_CD[loop+1] Then
     nCount += 1
   End If
 Else
   nCount += 1
 End If
Next

引用返信 編集キー/
■47776 / inTopicNo.3)  Re[2]: +1 について
□投稿者/ ゆうな (6回)-(2010/03/15(Mon) 09:29:39)
No47749 (やじゅ さん) に返信
やじゅ様
アドバイスありがとうございました。
VBに変換した場合はどうなるのかというのは理解できましたが、それ以前に。。。
この1はどういう意味なのかわかりません。
loopをプラス1、つまり2回ループするということでよろしいのでしょうか??

アドバイスいただいた
namelist.SHAIN_CD[loop+1]
この部分でいうと、loopを2回分格納するということなのでしょうか?

基礎的なことも分からず申し訳ございません。
アドバイスいただけると幸いです。よろしくお願い致しますm(__)m




> ■No47745 (ゆうな さん) に返信
>
> VBに変換するとこんな感じ、CFタグを使わなくてもcfscriptでも使えるはず。
>
> uCount = 0
> For loop = 1 To nameCount
> If loop + 1 <= nameCount Then
> If namelist.SHAIN_CD[loop] <> namelist.SHAIN_CD[loop+1] Then
> nCount += 1
> End If
> Else
> nCount += 1
> End If
> Next
引用返信 編集キー/
■47782 / inTopicNo.4)  Re[3]: +1 について
□投稿者/ 中博俊 (1373回)-(2010/03/15(Mon) 11:33:02)
.SHAIN_CD[loop+1]
ここの部分が分からないのかな?

次のレコードと社員コードが一緒かを調べているのだと思いますよ。
引用返信 編集キー/
■47787 / inTopicNo.5)  Re[3]: +1 について
□投稿者/ やじゅ (1555回)-(2010/03/15(Mon) 12:19:05)
やじゅ さんの Web サイト
2010/03/15(Mon) 12:20:12 編集(投稿者)

No47776 (ゆうな さん) に返信
私が質問の意図を読み違えていたようですね。

>この1はどういう意味なのかわかりません。
>loopをプラス1、つまり2回ループするということでよろしいのでしょうか??

2回ループはしないです。表現がよく理解できてないですけど…
loopをプラス1するのは、配列の次の値を参照しているだけです。

SHAIN_CDの中身
001:鈴木
002:田中
003:佐藤

nameCount = 3 の場合

loopの値 条件の比較
1 namelist.SHAIN_CD[1] <> namelist.SHAIN_CD[1+1] → 001:鈴木 <> 002:田中
2 namelist.SHAIN_CD[2] <> namelist.SHAIN_CD[2+1] → 002:田中 <> 003:佐藤
3 loop + 1 <= nameCount → 3+1 <= 3 となって条件に満たない
引用返信 編集キー/
■47790 / inTopicNo.6)  Re[1]: +1 について
□投稿者/ biac (176回)-(2010/03/15(Mon) 13:10:58)
biac さんの Web サイト
> 具体的には、indexに+1をするとどういう処理をするのかということがわかりません。
> 単純にループが+1されるのか、それともloopに1を代入して別の値としている?のか(謎ですみません・・・)

どちらも違います。
loop という変数に格納されている値に、1 を足したら幾つになるか、を計算しているだけです。
loop という変数に格納されている値自体も、 index という変数に格納されている値自体も変化しません。


>   <cfif loop+1 lTE nameCount>
>     <cfif namelist.SHAIN_CD[loop] neq namelist.SHAIN_CD[loop+1]>
>       <cfset nCount += 1>
>     </cfif>			

↑のコードは、 loop+1 の計算結果を別の変数に格納するようにした↓コードと同じですよ。

    <cfset currentIndex = loop>
    <cfset nextIndex = loop+1>
    <cfif nextIndex lTE nameCount>
      <cfif namelist.SHAIN_CD[currentIndex] neq namelist.SHAIN_CD[nextIndex]>
        <cfset nCount += 1>
      </cfif>			
# こういう代入文 (cfset) の書き方ができるかどうかは知らない f(^^;

loop         という変数に格納されている値が 3 のとき、
currentIndex という変数に格納されている値は 3 になり、
nextIndex    という変数に格納されている値は 4 になります。

引用返信 編集キー/
■47800 / inTopicNo.7)  Re[2]: +1 について
□投稿者/ ゆうな (7回)-(2010/03/15(Mon) 16:29:20)
皆様アドバイスありがとうございます。
「配列」とアドバイスを頂き何かすっきりした感じですが、また考え直したらもっと混乱してしまいました><
わからない部分は、相変わらず+1の部分についてなのですが、配列で単純に比較しているということはわかりました。
でもその比較の意図がわからなくなりました。

----------------
<cfset nameCount = 50>
<cfset nCount = 0>
<cfloop index="loop" from="1" to="#nameCount#">
<cfif loop+1 lTE nameCount>
<cfif namelist.SHAIN_CD[loop] neq namelist.SHAIN_CD[loop+1]>
<cfset nCount += 1>
</cfif>
<cfelse>
<cfset nCount += 1>
</cfif>

</cfloop>
※ちなみに、このコードは重複している名前を一元化して1行に出力するというコードの一部です。
----------------
仮にnameCountを50とした場合に、4行目はloopに+1をして比較しています。
でもloopは50であるのにわざわざ<if 50+1 neq 50>と比較する必要があるのでしょうか?
そのように比較しなければならない理由とはなんでしょうか・・・?
これはもしかしてjavaは0からintを数えるから0で登録したデータがないDBのデータのためにプラス1をしているとか・・・(まさかとは思いますが^^;)

すみません、本当に混乱していまして、もしかしたら「海ってなぜ海というの?」みたいな質問をしているかも知れませんが
理解できずに苦しんでいます>< 頭が悪すぎる自分が憎いです・・・泣
質問がわかりにくい場合は訂正いたしますので、どうかアドバイスの程よろしくお願い致しますm(__)m)
引用返信 編集キー/
■47813 / inTopicNo.8)  Re[3]: +1 について
□投稿者/ やじゅ (1556回)-(2010/03/15(Mon) 21:25:04)
やじゅ さんの Web サイト
No47800 (ゆうな さん) に返信
> 仮にnameCountを50とした場合に、4行目はloopに+1をして比較しています。
> でもloopは50であるのにわざわざ<if 50+1 neq 50>と比較する必要があるのでしょうか?
> そのように比較しなければならない理由とはなんでしょうか・・・?

「neq(<>)」ではなく、「lte(<=)」 ですよね。
50個ある箱に対して、50+1個をアクセスすると51箱目が無いので、箱(配列)が無いとエラーになります。
とすれば、if 50+1 <= 50 を行う理由は、namelist.SHAIN_CD[50+1]を処理しないためです。
そうすれば、エラーになる前に処理が終わらせれるからです。


> 「海ってなぜ海というの?」
http://oshiete1.goo.ne.jp/qa1091344.html
引用返信 編集キー/
■47858 / inTopicNo.9)  Re[4]: +1 について
□投稿者/ ゆうな (8回)-(2010/03/16(Tue) 18:02:40)
No47813 (やじゅ さん) に返信

アドバイスありがとうございました!
おかげさまでスッキリ致しました。(まだ、なぜこういう処理をするに至ったかという思考まではたどり着いていないのですが^^;)
本当にありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -