• ベストアンサー

forループの評価(条件)式について

以下のようなソースを書きました。 するとEclipseが「演算子<は引数の型int,Stringで未定義です」というエラーを出します。 エラーになる箇所は、下の方のループのroadInfoPo[5]を条件式にしている部分と、roadInfoPo[pointer+1]を条件指定としている部分です。 ループの評価をする条件式に、配列が指定できないとは考えにくいのですが。 私はまだまだJava初心者PGです。 おまえけに一人で作業をしており、周囲にJavaが分かる人もいません。 どうしたら解消できるのか、どなたか教えてくださいませm(__)m よろしくお願い致しますm(__)m roadInfoCountはint型です。 roadInfoValuesは長い文字列のString型です。 for (int j=1; j<=roadInfoCount; j++) { String[] roadInfoPo = roadInfoValues[j].split(","); //<re> Element re = document.createElement("re"); re.setAttribute("tp", roadInfoPo[0]); re.setAttribute("dv", roadInfoPo[1]); re.setAttribute("tt", roadInfoPo[2]); re.setAttribute("ds", roadInfoPo[3]); re.setAttribute("co", roadInfoPo[4]); rt.appendChild(re); //<sn> Element sn=document.createElement("sn"); sn.appendChild(document.createTextNode(roadInfoPo[5])); re.appendChild(sn); int pointer = 6; for (int k=0; k<roadInfoPo[5]; k++) { String tp = roadInfoPo[pointer]; String pn = roadInfoPo[pointer+1]; for (int n=0; n<roadInfoPo[pointer+1]; n++) { } }

  • Java
  • 回答数4
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • liwet
  • ベストアンサー率72% (18/25)
回答No.2

エラーになっている、for文内の比較で、int と String を比較しているのでエラーになっています。 演算子 "<" で比較するには、int と int のように数値で比較しないとコンパイルエラーになります。 roadInfoPo[5] の中身が、たとえ "3" のような数字であったとしても、Java から見ると文字列なので、k の値と"<"で比較することは出来ません。 数値同士で比較するには、Integer.parseInt() といったメソッドを使って、文字列から数値(この場合はint型)へ変換してください。 この場合は、for文を for (int k=0; k<Integer.parseInt(roadInfoPo[5]); k++) のように書き換えます。 なお、もしroadInfoPo[5]の中身に数字以外のものがあり、数値へ変換できない場合は、NumberFormatException が発生します。

fatcatchoco
質問者

補足

回答ありがとうございます。 早速、書き直して見ます。 ご推察の通り、配列のこのインデックス番号の箇所には、常に数字が入るので、 それを条件にループをまわしたかったのです。 Javaがデータ型に凄く厳密であること。 肝に銘じて、頑張ってみます。

その他の回答 (3)

  • yuchi-co
  • ベストアンサー率60% (29/48)
回答No.4

No.2の方がおっしゃったように、 Integer.paseInt();を使えばString型をint型に変換できます。 for (int k=0; k<Integer.paseInt(roadInfoPo[5]); k++)と指定してあげればきちんと評価できますが、もし配列の中に数字が入っていなかった場合、例外が発生します。 必ず、数字が入っている仕様だとは思いますが、もしも万が一入っていなかったら例外が発生しちゃうので、自分であれば、下記の様にするかもしれません。 int len = 0;//配列の条件の変数0で初期化 try{ //例外が発生する可能性があるのでtry~catchする len = Integer.paseInt(roadInfoPo[5]); }catch(NumberFormatException){ } for (int k=0; k<len; k++){ ・・・ こんな風にすれば、数字が入っていればその数字がint型に変換され、入っていなければ0になるのでエラー及び例外が出るのは避けられます。 ※やり方はこの限りではないのでいろいろやってみてください。

fatcatchoco
質問者

補足

何度もありがとうございますm(__)m おかげさまで先に進みました。 おっしゃる通り、確実に数字が入ります。 この数字が次の<タグ>~</タグ>のループ回数になるのですよ。 ありがとうございました。 不安な一人作業が、救われます。

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.3

int型のnとString型のroadInfoPoをそのまま比較することはできません。 おそらく文字列roadInfoPo[pointer+1]の長さと比較したいのだと思われるので、 roadInfoPo[pointer+1].lentgh() と書き換えればいいと思います。roadInfoPo[5]も同様に。 length()の意味するところはAPIリファレンスでしっかり理解してくださいね。

fatcatchoco
質問者

補足

ご回答いただき、ありがとうございます。 データ型が異なるモノ同士を比較している意識がありませんでした。 ありがとうございました。

  • yuchi-co
  • ベストアンサー率60% (29/48)
回答No.1

for (int k=0; k<roadInfoPo[5]; k++) とfor (int n=0; n<roadInfoPo[pointer+1]; n++) の部分でroadInfoPoの配列を k(n)< の後ろに指定していますが、コードを見るとroadInfoPoはString型のようです。String型は<演算子で比較できません。 for文の書き方は for(初期処理,継続条件,継続処理)です。 ここで k < とn <の右側に来るのは当然int型でないと なりません。 数字が文字列より小さければという条件は評価できませんよね。 どのような条件で繰り返し処理を行いたいのでしょうか?

fatcatchoco
質問者

補足

早速のご回答、本当にありがとうございます。 おっしゃる通りです。 自分の間違いはわかりました。 私がしたいこととゆーのは、 String型のこの配列のこのインデックスの場所には、 String型だけれど数字が入っていまして、 この数をループが回る条件にしたいのです。 もちろん配列の各要素値は、毎回変わります。 ループの条件式に設定する寸前でint型変数に一時的に代入するような形にすればいいのでしょうか?

関連するQ&A

  • カウントアップ

    xmlの勉強中にわからないことがでてきたので質問します xmlを使用しての掲示板の作成中なのですが 以下のようなソースを記述しました。 //カウントアップ処理 Count count = new Count(); //ノードを作成し、文字列を代入 contribute.setAttribute("no", "1"); Element titlenode= document.createElement("title"); contribute.appendChild(titlenode); titlenode.appendChild(document.createTextNode(title)); Element namenode= document.createElement("name"); contribute.appendChild(namenode); namenode.appendChild(document.createTextNode(name)); Element mailnode= document.createElement("mail"); contribute.appendChild(mailnode); mailnode.appendChild(document.createTextNode(mail)); Element hpnode= document.createElement("hp"); contribute.appendChild(hpnode); hpnode.appendChild(document.createTextNode(hp)); Element urlnode= document.createElement("url"); contribute.appendChild(urlnode); urlnode.appendChild(document.createTextNode(url)); Element textnode= document.createElement("text"); contribute.appendChild(textnode); textnode.appendChild(document.createTextNode(text)); contribute.setAttribute("no", "1"); この行の"1"の部分を1~10などのようにカウントアップさせたいのですが ネットなどで調べてもわかりません。 条件として、Countという別のクラスを作成しそちらでカウントアップしたものを上記ソースで読み込むという処理がしたいのです。 初歩的な質問で情けないのですが、よろしくお願いします。

    • 締切済み
    • XML
  • for 3ループについて教えて

    for 3ループについて教えて * ** *** **** * ** *** **** * ** *** **** と表示させたいのですが、 #include<stdio.h> int main(void) { int i,j,k; for(i=1; i<=4; i++) { for(j=1; j<=i; j++){ // for(k=1; k<=3; k+=i){ } printf("*"); } printf("\n"); } return 0; } * ** *** **** このように表示されてしまいます。//の所が違うなと思います。が、分かりそうで分かりません。 もし、分かるかたがいましたら、教えてください。 よろしくおねがいします。

  • javascriptでカレンダーを作る方法

    下に書いてあるjavascriptを書き換えて、一番上のマスごとにはsun・mon・tue・wed・thu・fri・satと書かれ、その下の水曜日(wed)のマスから順に1~30まで一マスごとに数字を入れられ、sun・5・12・19・26は赤文字で書かれ、1より前のマスや30以降のマスは空欄のカレンダーを作るにはどうすればいいでしょうか? <!DOCTYPE html> <html lang="java"> <head> <meta charset="utf-8"> <title>sample</title> </head> <body> <script> var table=document.createElement("table"); table.setAttribute("border",1); var tbody=document.createElement("tbody"); for(var i=0;i<4;i++){ var tr=document.createElement("tr"); for(var j=0;j<7;j++){ var td=document.createElement("td"); var txt=i*7+j+1; td.appendChild(document.createTextNode(txt)); tr.appendChild(td); } tbody.appendChild(tr); } table.appendChild(tbody); document.getElementsByTagName("body")[0].appendChild(table); </script> </body> </html>

  • for in と 接続演算子について

    <!-- function check(){ var flag = 0; if(document.registform.user.value==""){ flag = 1; var error1 = document.getElementById("error1"); if(error1 == null){ var element1=document.createElement("div"); element1.innerHTML='<span class="error0" id="error1">ユーザー名を入力してください。</span>'; var ojbody1=document.getElementById("td_error1"); ojbody1.appendChild(element1); } } if(document.registform.pass.value==""){ flag = 1; var error2 = document.getElementById("error2"); if(error2 == null){ var element2=document.createElement("div"); element2.innerHTML='<span class="error0" id="error2">パスワードを入力してください。</span>'; var ojbody2=document.getElementById("td_error2"); ojbody2.appendChild(element2); } } if(document.registform.pass2.value==""){ flag = 1; var error3 = document.getElementById("error3"); if(error3 == null){ var element3=document.createElement("div"); element3.innerHTML='<span class="error0" id="error3">パスワード(確認)を入力してください。</span>'; var ojbody3=document.getElementById("td_error3"); ojbody3.appendChild(element3); } } if(flag == 0){ return true; }else{ return false; } } //--> javascript初心者です。 この処理をfor(key in array)を使って簡単にできるかも... と思ったんですが接続演算子の使い方がよくわかりません。 プログラム自体初心者独学で手探りでやっているため考え方が間違っている場合などありましたらアドバイス等もいただけたらうれしいです。 if(document.registform.user(☆).value==""){ flag = 1; var error1(☆) = document.getElementById("error1(☆)"); if(error1(☆) == null){ var element1(☆)=document.createElement("div"); element1(☆).innerHTML='<span class="error0" id="error1(☆)">ユーザー名(☆)を入力してください。</span>'; var ojbody1(☆)=document.getElementById("td_error1(☆)"); ojbody1.appendChild(element1(☆)); }} (☆)のところが接続演算子が使えればと思いました。 例えばvar element + key でelement1の変数というのは無理なのでしょうか? もし可能ならgetElementById("error + key ")はどういった書き方をすればよいでしょうか? よろしくお願いします。

  • color 属性が追加できない

    <html><meta><script language="javascript"><!-- tr = document.createElement("tr"); tr.setAttribute("bgcolor", "black"); td = tr.appendChild(document.createElement("td")); td.appendChild(document.createTextNode("test")); tbody1.appendChild(tr); //--></script></head><body> <table><tbody id="tbody1"></tbody></table> </body></html> というソースなのですが,実行してもセルの背景が黒く塗りつぶされません。 setAttribute("width", "100px")などはきちんと適用されるのですが・・・。 setAttribute("style", "background-color: black;")としてもダメでした。 どのようにすればよいのでしょうか。 よろしくお願いします。

  • 記述方法について

    よろしくお願いします。前回こちらで教えて頂いたソースを 基に表示するテーブルの並び方を変えたいと思っています。 理想の並び方は、例として くま さる           くま  さる ごりら  これらを→ごりら うま  うま           りす りす というように読み込んだエクセルのレコードを2列ずつにして表したいのですが、可能でしょうか? 以下のソースを基に、色々試したのですが、ブラウザ上には何も出てきません。 -------------------------------------------------------------- <html> <head> <title>TEST CSV IN</title> <script type="text/javascript"> function hoge(){ var TEST = document.getElementById("TEST"); var output = document.getElementById("OUTPUT"); var table = document.createElement("table"); table.setAttribute("border","1"); table.setAttribute("datasrc","#TEST"); var tbody = document.createElement("tbody"); var trs = new Array(); var tds = new Array(); TEST.Reset(); var rs = TEST.recordset; while (!rs.EOF){ var tbl = document.createElement("table"); table.setAttribute("border","1"); var td = document.createElement("td"); for(var i=1; i<2; i++){   var tr = document.createElement("tr");   trs[0] = document.createElement("tr");   trs[1] = document.createElement("tr");   trs[2] = document.createElement("tr"); tds[0] = document.createElement("td"); tds[1] = document.createElement("td"); tds[2] = document.createElement("td"); var img = document.createElement("img"); img.setAttribute("src",rs.fields(0)); img.setAttribute("alt",""); tds[0].appendChild(img); tds[1].innerText = rs.fields(1); tds[2].innerText = rs.fields(2); trs[0].appendChild(tds[0]); trs[1].appendChild(tds[1]); trs[2].appendChild(tds[2]); tr.appendChild(trs[0]); tr.appendChild(trs[1]); tr.appendChild(trs[2]); tbody.appendChild(tr); } rs.MoveNext; } table.appendChild(tbody); output.appendChild(table); } </script> </head> <body onload="hoge();"> CSV DATA IMPORT Ver MINO <p> <object id="TEST" classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"> <param name="DataURL" value="cn.csv" /> <param name="UseHeader" value="true" /> <param name="TextQualifier" value="'"> <param name="FieldDelim" value=","> </object> <div id="OUTPUT"> </div> </body> </html> ------------------------------------------------------------- javascriptを始めたばかりなので、まだよく理解していないので 大変申し訳ありませんが、ご指導願えればと思います。 よろしくお願いします。

  • 文字列型をDOM型に変換

    text = "<table id="table1"><tr><td>a</td><td>b</td></tr></table>"; このような文字列データがあるときに、 これをDOM形式に一発変換することは可能でしょうか? document.createElement() element.appendChild() element.setAttribute() 等のメソッドを使って、地道に作らなくてはならないのでしょうか? ご存知の方がいらっしゃったら、回答よろしくお願いいたします。

  • tableの生成

    お世話になります。 以下のソースはテーブルを生成するサンプルソースなんですけど、tdの中に配列の要素をきちんと表示させることが出来ません。 どうしたらちゃんと表示させることが出来るかご教授いただけないでしょうか? *今は配列の要素がtdの中に全部入ってしまっている状態です。 <html> <head> <title>サンプルコード</title> <script> mylist = new Array( // データ定義 "Aさんのホームページ", "Bさんのホームページ", "Cさんのホームページ", "Dさんのホームページ", "Eさんのホームページ", "Fさんのホームページ" ); function start() { var mybody=document.getElementsByTagName("body").item(0); //全ての body 要素リストをこのようにして取得// mytable = document.createElement("TABLE"); mytablebody = document.createElement("TBODY"); for(j=0;j<3;j++) { mycurrent_row=document.createElement("TR"); for(i=0;i<2;i++) { mycurrent_cell=document.createElement("TD"); currenttext=document.createTextNode(mylist); mycurrent_cell.appendChild(currenttext); mycurrent_row.appendChild(mycurrent_cell); } mytablebody.appendChild(mycurrent_row); } mytable.appendChild(mytablebody); mybody.appendChild(mytable); mytable.setAttribute("border","2"); } </script> </head> <body> <script type="text/javascript"> start() </script> </body> </html>

  • javascript マウスイベント

    動的に生成したテーブルのマウスイベントについてご質問します。 var body = document.getElementsByTagName("body")[0]; var tbl = document.createElement("table"); var tblBody = document.createElement("tbody"); for (var j = 0; j < 20; j++) { var row = document.createElement("tr"); for (var i = 0; i < 1; i++) { var cell = document.createElement("td"); var cellText = document.createTextNode("cell is row "+j+", column "+i); cell.id="dt1"; cell.height="15" cell.appendChild(cellText); row.appendChild(cell); } tblBody.appendChild(row); } tbl.id="tbl1"; tbl.width="200" tbl.appendChild(tblBody); body.appendChild(tbl); 上記のようなソースでテーブルを作成しています。 tbl.onmousedown このあたりだと思うのですが、記述方法がわからず困っています。 具体的には下記のような動きを目指してます。 http://www.programming-magic.com/20071215024226/ 初歩的な質問かもしれませんが、ご教授頂けると幸いです。

  • CSSについて

    ホームページにブログを載せるのに以下のjavascriptを使用したいのですが、 CSSでタイトルの文字色などは変更できても、ブログ本文の文字色だけどうしても変更できません。 •javascript <script type="text/javascript"> google.load("feeds", "1"); var FA = new Array( "http://*****" ); function initialize() { var feedsArr = new Array(); var numEntr = 3; var container = document.getElementById("feed"); var cnt = FA.length; for (var k=0; k<FA.length; k++) { var feed = new google.feeds.Feed(FA[k]); feed.setNumEntries(numEntr); feed.setResultFormat(google.feeds.Feed.JSON_FORMAT); feed.load(function(result) { if (!result.error) { for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var eimg = ""; var imgCheck = entry.content.match(/(http:){1}[\S_-]+((\.png)|(\.jpg)|(\.JPG)|(\.gif))/); if(imgCheck){ eimg += imgCheck[0]; } var attributes = ["title", "link", "publishedDate", "contentSnippet"]; var ind = feedsArr.length; feedsArr[ind] = new Array(); feedsArr[ind][0] = Date.parse(entry[attributes[2]]); feedsArr[ind][1] = entry[attributes[1]]; feedsArr[ind][2] = entry[attributes[2]]; feedsArr[ind][3] = entry[attributes[3]]; feedsArr[ind][4] = entry[attributes[0]]; feedsArr[ind][6] = eimg; } } cnt--; if (cnt == 0) { feedsArr.sort(); feedsArr.reverse(); for (var j = 0; j < feedsArr.length; j++) { var aE = document.createElement("A"); var h3 = document.createElement("H3"); var p = document.createElement("P"); var spanD = document.createElement("SPAN"); aE.href=aE.title=feedsArr[j][1]; aE.appendChild(document.createTextNode(feedsArr[j][4])); h3.appendChild(aE); spanD.appendChild(document.createTextNode(feedsArr[j][2])); spanD.appendChild(document.createTextNode(" ("+feedsArr[j][5]+")")); p.appendChild(document.createTextNode(feedsArr[j][3])); p.appendChild(spanD); container.appendChild(h3); container.appendChild(p); var img_link = document.createElement("img"); img_link.setAttribute("src", feedsArr[j][6] ); img_link.setAttribute("width", "300" ); container.appendChild(img_link); } } }); } } google.setOnLoadCallback(initialize); </script> •html <div id="feed"></div> ブログ本文の文字色の変更方法をご教授お願い致します。

    • 締切済み
    • CSS

専門家に質問してみよう