- 1 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 22:10:53 ]
- 過去ログ、関連スレッド、よくある質問とその回答、
質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 www.wikiroom.com/java/ これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、 wikiからのリンクをおたどりください。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド 【初心者】Java質問・相談スレッド100【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1175317038 /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。 質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */ また、当スレで質問をするかたは、回答をもらえたときに、 wikiの更新をして頂ければ、忝なく存じます。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作板をご利用ください。pc10.2ch.net/hp/ 次スレは>>980あたりで。
- 528 名前:デフォルトの名無しさん [2007/05/15(火) 21:16:50 ]
- "1,2,3,4,5,6,"123,23,45",12,55"
のようのCSVデータで"123,23,45"のような""でかこまれた 箇所だけを除いて、カンマ区切りでデータを抽出するにはどうすれば いいでしょうか。 StringTokenizerを使用しようとしてなかなかうまく行きません。 ご教授よろしくお願いいたします。
- 529 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 21:27:46 ]
- 何が言いたいのかよくわからんがsplitでも使えばいいんじゃないか
- 530 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 21:37:33 ]
- いや、
1,2,3,4,5,6,"123,23,45",12,55 を 1 2 3 4 5 6 "123,23,45" 12 55 で分けたいのです。 "123,23,45"この部分をどうすればいいのかと・・・
- 531 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 21:39:45 ]
- >>530
引用符外れるけど。 List<String> list = new ArrayList<String>(); StringTokenizer st = new StringTokenizer(str, "\"", true); boolean inQoute = false; while(st.hasMoreTokens()){ String token = st.nextToken(); if(token.equals("\"")) inQuote = !inQuote; else if(inQuote) list.add(token); else list.addAll(Arrays.asList(token.split(","))); }
- 532 名前:530 mailto:sage [2007/05/15(火) 21:45:32 ]
- >>531
サンクス!! できました。 ありがとうございます!!
- 533 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 21:49:20 ]
- >>531
123,23,45 の後に余分な空要素が入るような。 ま、>>530 の用が足りてるならかまわんけど。
- 534 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:07:03 ]
- >>533
while(st.hasMoreTokens()){ String token = st.nextToken(inQuote ? "\"" : "\","); if(token.equals("\"")) inQuote = !inQuote; else if(!token.equals(",")) list.add(token); }
- 535 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:11:09 ]
- プログラム未経験で入社して、研修を行っています。
変数とかif文までは理解できたのですが、for文がどうしても理解できず悩んでます。 特に二重ループ(?)になると混乱して・・・ なにかアドバイス貰えませんか?
- 536 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:15:13 ]
- 違う参考書を読んでみる
- 537 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:15:44 ]
- >>535
その場で腕立て10回、腹筋10回を 10セットやってみよう。 それが二重ループだ。
- 538 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:19:56 ]
- > 536
やさしいJavaって本で勉強はしたんですけど、研修で出た課題を解こうとしてもサッパリでして。 書き方乗っているから真似して書いて、と言われてます。 どこをどう真似すればいいのか聞いても、for文はループとしか答えてくれないんです。
- 539 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:22:38 ]
- それ以上どういう説明すりゃいいんだよ
- 540 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:24:15 ]
- forの前にwhileを学べ。whileの基本系に特化したのがforと言っても過言ではない。
- 541 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:25:48 ]
- 今からでも遅くなから転職を考えたらどうか
それがダメなら その本でも違う本でも良いから何度も読んで例題をやってみるとか 誇張じゃなくて、本当に100回ぐらい繰り返して読むと突然理解できる時があるから
- 542 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:26:44 ]
- >>537
腕立て1回やったら腹筋10回を10セットじゃね? for(int 腕立て回数=0;腕立て回数<10; 腕立て回数++){ 腕立てやる(); for(int 腹筋回数=0;腹筋回数<10;腹筋回数++){ 腹筋やる(); } } System.out.println("もう無理ぽ");
- 543 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:28:30 ]
- >>542
腕立て10回したら1分休憩を 10セットでも何でもいーけど。
- 544 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:30:42 ]
- いやビリーにGJ!っていってもらったほうがいいな。
- 545 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:31:37 ]
- ブートキャンプか
- 546 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:37:14 ]
- >>538
じゃあ、forをどう理解してるか教えて
- 547 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:40:29 ]
- >>542
それってさ、実行すると 腕立て→腹筋*10→腕立て→腹筋*10→・・・ ってことにならね?
- 548 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:45:19 ]
- はいはい、ワロス、ワロス
- 549 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:46:00 ]
- >> 546
理解しているというか教えられた内容はこんな感じです。 プログラムで繰返し処理を行う場合にfor文を使う for文ではカウンターと呼ばれる変数をまわして処理が繰り返される 書き方はfor(初期化の式; 繰り返す数の式; 変化の式)と書く。 10回表示するとかは書けるんですけど、素数を表示しろってのが解らなくて・・・
- 550 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:48:28 ]
- >>546
あと、変化の式とか初期化の式とかがよく解りません やっぱり転職でしょうか
- 551 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 22:49:31 ]
- 549を読んで535の会話能力に不安を覚えた。
- 552 名前:デフォルトの名無しさん [2007/05/15(火) 22:58:11 ]
- まだ手に馴染んでないだけだろ。もう少し使って見てから質問したらどうだ。
- 553 名前:デフォルトの名無しさん [2007/05/15(火) 22:59:53 ]
- どーまん せーまん
どーまん せーまん
- 554 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 23:28:48 ]
- >>549,550
そこからかぁ ここで一から懇切丁寧説明すると長くなるからとりあえずJavaの入門サイトをググって自分 なりにある程度理解した上で質問した方がいいかも。 教育担当にしつこく食い下がる、でもいいけど(論点まとめた上でやらないと嫌がられると思うが) まぁ最初は誰でも初心者だし理解するのは大変だろうけどこういうのってある日突然視界が 拓けるように見えてくるものだから諦めずにがんがれ。
- 555 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 00:10:56 ]
- いるんだよ。こういうなんでも手取り足取り教えて君がさ・・
とくにJavaに多い 迷惑極まりない もういいから、しんでくれ
- 556 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 00:18:30 ]
- >>549
>プログラムで繰返し処理を行う場合にfor文を使う 間違い。 プログラム(アルゴリズム)で同じ処理を何度も行いたい場合、それを繰返し処理と呼ぶ。 for構文ってのは繰返し処理を実現するただの文法。 何を繰り返したいのか、考えてみること。 文字を出力するのか?数値を足すのか?数値で割れるのかを判定するのか?など。 >>555 いるんだよ。こういう文法だけ覚えろって先輩気取クンがさ・・・ とくにJavaに多い 迷惑極まりない もういいから、しんでくれ
- 557 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 01:44:17 ]
- JavaでMBRを書き換えるツールは作れますか?
- 558 名前:デフォルトの名無しさん [2007/05/16(水) 01:54:19 ]
- 通常時はA.jpgの画像が表示され、ENTERを押すとB.jpgに変わる。
B.jpgにENTERを押すとまたA.jpgに戻り、終了時にはC.jpgがうつる。 というプログラムを組んだつもりなのですが、常にC.jpgだけがうつり、ENTERを押してもなんの反応も示しません。 どうすればいいのでしょうか?
- 559 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 01:57:40 ]
- >>558
きみのプログラムが間違っているんだと思うぞ。
- 560 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 02:05:29 ]
- ソースも晒さずにどう間違いを指摘しろと言うのだ
- 561 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 04:31:15 ]
- >>558
18行目のifの条件を見直してみ
- 562 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 04:35:36 ]
- >>558
> どうすればいいのでしょうか? デバッグすれば?
- 563 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 05:31:31 ]
-
JFrameの上にFlashPlayer載せるにはどうすりゃいいですか?
- 564 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 05:47:08 ]
- >>527
slickeditってのがどんなものなのか知らないけれど、 javacの実行環境のlocaleを英語にしたければ、 -J-Duser.language=en をjavacのオプションにすればいい。-Jの後に空白を置かないように。
- 565 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 05:48:53 ]
- FlashPlayer
JFrame
- 566 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 11:29:05 ]
- 質問です。
a.xlsというエクセルファイルにC:\\b.xlsという記述があるとします。 まずa.xlsをプログラム内で POIFSFileSystem filein = new POIFSFileSystem(new FileInputStream( "C:\\a.xls")); の記述で開きます。 まずa.xlsは上記の様に直接プログラム内で指定しているので開けるのですが、 その後、a.xls内に記述されているC:\\b.xlsという文字列を読み込み、 例えばdataという変数に格納します。 それのdataという変数に格納されているC:\\b.xlsを参照して、 POIFSFileSystem filein = new POIFSFileSystem(new FileInputStream( "C:\\b.xls")); という様な形でb.xlsを開けるようにしたいのですがどうすればいいのでしょうか? わかりにくくてすいません。要するに 直接プログラム内でパスを記述するのでなく、変数に格納されている文字列を読み込み それをパスとして読み込んでファイルを開くという方法を教えていただきたいのです。
- 567 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 11:41:19 ]
- 変数に格納されているのならその変数をそのまま使えばいいのでは?
パスの形への整形は必要かもしれんが。
- 568 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 12:34:06 ]
- ありがとうございます。
その整形方法がわからないのですが。。
- 569 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 12:43:44 ]
- dataにC:\\b.xlsって文字列が格納されてるなら
POIFSFileSystem filein = new POIFSFileSystem(new FileInputStream(data)); でええんとちゃうのん? 整形も何も必要ないような って必要あるね dataがStringだとして data=data.replaceAll("\\\\","\\"); とでもすれば?
- 570 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 14:06:51 ]
- >>569
しなくていい POIFSFileSystem filein = new POIFSFileSystem(new FileInputStream(data)); でええはず あるいは data が Array や ArrayList みたいなのだったらループ汁
- 571 名前:558 [2007/05/16(水) 14:20:48 ]
- 今調べてますが、
とりあえず内容をあげてました。 www.vipper.org/vip508105.txt.html
- 572 名前:558 mailto:sage [2007/05/16(水) 14:27:22 ]
- >>571のやつは、ちょっとC.jpgの部分辺りが消えてしまってるんですが・・・
- 573 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 14:40:49 ]
- 試さずにコメントするけど
switchの中でgetKeyCode()を何度も呼び出してるからじゃないかな
- 574 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 14:44:21 ]
- paint の中
bkgrp 毎回 null
- 575 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 14:47:42 ]
- なんだ釣りか
- 576 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 14:49:38 ]
- >>571
KeyEvent の届き方ってのは仕様が無い。プラットフォーム毎(キーボードの種類毎)に挙動が違う。 keyPressed は押し始めに 1回だけ呼ばれるという前提で書いてるみたいだけど、 キー押し始めてからキー離すまで nミリ秒ごとに keyPressed を呼び出すプラットフォームもあるので要注意。
- 577 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 15:56:37 ]
- >>570
ほんとだ。"C:\\\\\\\\\\hoge.txt"とかでも大丈夫だった。 先頭にドライブ文字が付いているからUNCパスと区別できるってことか。
- 578 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 16:00:03 ]
- RMIサーバを作成しています。
リモートオブジェクトがGCのタイミングで無くなってしまう可能性 ttp://d.hatena.ne.jp/nowokay/20060817 を潰しておきたいのですが、 static変数に持っておく、参照が切れない事が分かっている インスタンスの変数とする、等の方法しか無いのでしょうか。 コード的に、もうちょっと体裁の良い形にしておきたいのですが。 また、リモートオブジェクトのエクスポートの瞬間にオブジェクトが 取得される可能性があるからコンストラクタでの処理が云々、 と言った話をトラブル話として過去に聞いたのですが、当時良く理解出来ませんでした。 この情報から推測できそうな有名な落とし穴等ありますでしょうか?
- 579 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 19:45:31 ]
- プログラミング自体が完全に初心者なんですが、そういう初心者向けのJavaの参考書はなにがいいでしょうか?
いまのところ、一冊は候補があってもう何冊か目星をつけて見比べたいので。
- 580 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 20:54:58 ]
- >>579
なぜプログラミングができないのかって本。 中身はJava入門本、目から何か出る。
- 581 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 22:57:09 ]
- 目からビーーーーム!!
・・・は既にでじこも卒業
- 582 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 23:52:11 ]
- >>579
ぜったいコレ www.amazon.co.jp/Head-First-Java%E2%80%95%E9%A0%AD%E3%81%A8%E3%81%8B%E3%82%89%E3%81%A0%E3%81%A7%E8%A6%9A%E3%81%88%E3%82%8BJava%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%82%AD%E3%83%A3%E3%82%B7%E3%83%BC-%E3%82%B7%E3%82%A8%E3%83%A9/dp/4873111730 よく初心者に勧める本っていえば、猫でもわかる〜系が有名だけど 「本物の初心者」ならプログラミングって概念がさっぱりわからんだろうから 図やイラストがたくさんあったほうがかなりわかりやすい (その辺を考慮せず薦める中級者・上級者がやたら多い) なので、この本おすすめ オライリー本だから当然、文章も良文です
- 583 名前:デフォルトの名無しさん [2007/05/17(木) 04:38:42 ]
- beanにinit()の初期化処理が入っています。
そのbeanをJSPからusebeanした場合、beanのinit()の部分の処理は次回のjspへのリクエスト時は処理されないですみますか? それともjspへのリクエストの度にusebean⇒beanのinit()処理となってしまいますか?
- 584 名前:デフォルトの名無しさん [2007/05/17(木) 07:48:09 ]
- >> 582
恒例の流れなんだが、Head First Javaは良書だが初心者にはどうかと。 どんな本でも良いんだが、打ち込んだソースが動かないとか、論外。 自分的にはGoogleが一番良い参考書だと思うぞw
- 585 名前:デフォルトの名無しさん [2007/05/17(木) 07:51:27 ]
- >> 583
beanのコンストラクタから init() を呼び出しているって事でOK? useBeanした時にどうなるかは、beanのスコープに依存する。 スコープがrequestならば毎回初期化される(インスタンスが生成される)。 sessionであるならば、同一sessionで使いまわされると理解して良い。 (細かい所は省略しているからあとは自分で調べろ) initにSystem.outとかブレイクポイントとか仕掛けて、両方の挙動を確認するのがいいよ。
- 586 名前:デフォルトの名無しさん [2007/05/17(木) 11:36:37 ]
- 諸先輩方、アドバイスお願いします。
オライリーのJAVAクイックリファレンスで勉強中なんですが 初期の段階(クラスのメンバー等)のところでつまづいてなかなか先に進めないでいます。 とりあえずと読み進めていますが、理解できないところが多くなってきました。 こういうときは、理解できるまで繰り返し読むしかないのか 分からないなりに一通り読み進めていく方が良いのか、どちらの方が良いでしょうか? そもそも、この程度の箇所でつまづいてる時点ではJAVAはまだ早いでしょうか? 厳しい意見でも構いませんのでアドバイスお願いします。
- 587 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 11:39:47 ]
- >>586
プログラムを実際に組んで動かしたことありますか?
- 588 名前:586 mailto:sage [2007/05/17(木) 11:44:56 ]
- >>587
クイックリファレンスに掲載されているものは打ち込んで動かしていますが、 自分で何かを組んだりしたことはありません。
- 589 名前:558 mailto:sage [2007/05/17(木) 12:18:27 ]
- 遅くなりましたが返答ありがとうございます。
しかし未だにプログラムは完成してません。 もう少し自分で頑張るつもりです。
- 590 名前:名無しさん mailto:sage [2007/05/17(木) 12:31:37 ]
- gihyo.jp/dev/serial/01/java-calculation
やってみれ
- 591 名前:586 mailto:sage [2007/05/17(木) 12:46:52 ]
- >>590
現在掲載されているのは計算が主体のようですね。 でも、勉強になります。連載中のようなのでこれからが楽しみです。 ありがとうございました。
- 592 名前:586 mailto:sage [2007/05/17(木) 12:49:16 ]
- >>590
各回は1ページではなかったんですね・・・。 最後のページに演習があったのに今気付きました。 やってみようと思います。
- 593 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 14:38:14 ]
- String expr = "2 * 3 + 7";
Calculator calc = new Calculator(); String value = calc.eval(expr); value = 13 になる みたいなクラスってありますか?
- 594 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 14:54:19 ]
- >>593
自分で作ってください
- 595 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 15:13:34 ]
- そのものというわけにはいかないが
6以降ならスクリプトAPI使ってRhinoに評価させるって手はあるな
- 596 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 15:32:40 ]
- ちっこいコンパイラ作るつもりでやってみw
- 597 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 15:45:26 ]
- 与えられた正の整数の因数を全て表示するプログラムを作成しなさい。たとえば12の場合、2,3,4,6を表示する。
というような問題はループを使うのですか?どなたか答えを、、
- 598 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 15:53:57 ]
- 再帰を使えと?
- 599 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 16:02:55 ]
- >>597
何を使っても良いのでは void printInnsuu(int n){ for(int i = 2; i <= n / 2; i++)if(n % i == 0 )System.out.print(i + ","); }
- 600 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 16:29:41 ]
- >599さん
ありがとうございました(^3^)/
- 601 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 17:21:48 ]
- >>593 jay+JFlexならこんな感じで
--Calculator.jay %{ public class Calculator { private Integer result; %}%token <Integer> NUMBER %type <Integer> expr %left '+' %left '*' %% string: | string expr { result = $2; } expr: NUMBER { $$ = $1; } | expr '+' expr { $$ = Integer.valueOf($1.intValue() + $3.intValue()); } | expr '*' expr { $$ = Integer.valueOf($1.intValue() * $3.intValue()); }; %% public String eval(String expr) throws Calculator.yyException, java.io.IOException { yyparse(new Lexer(new java.io.StringReader(expr))); return String.valueOf(result); } }
- 602 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 17:23:27 ]
- --Lexer.flex
%% %public %class Lexer %implements Calculator.yyInput %type int %eofval{ return YYEOF; %eofval} %{ private int token; private Object value; public boolean advance() throws java.io.IOException { return (token = yylex()) != YYEOF; } public int token() { return token; } public Object value() { return value; } %} %% " " { } [1-9][0-9]* { value = Integer.valueOf(yytext()); return(Calculator.NUMBER); } . { return yytext().charAt(0); } --Test.java public class Test { public static void main(String[] args) throws Exception { String expr = "12 + 3 * 7"; Calculator calc = new Calculator(); String value = calc.eval(expr); System.out.println(expr + " = " + value); } }
- 603 名前:デフォルトの名無しさん [2007/05/17(木) 18:36:39 ]
- jarを作って、プログラムの中からjarを実行させたいのですが、
可能でしょうか?
- 604 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 20:39:31 ]
- >>603
イミフ
- 605 名前:デフォルトの名無しさん [2007/05/17(木) 22:24:04 ]
- >>604
たとえばSWTで1画面作って、jarにして 別のシステムからボタンクリックイベントとかで、 このjarにした画面を呼ぶ事ができるのかなって、、、
- 606 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 22:27:35 ]
- >>605
できると思うけど。 具体的な状況がサッパリわからんので、 具体的にどうやるかは自分で考えれ。
- 607 名前:デフォルトの名無しさん [2007/05/17(木) 22:57:49 ]
- >>606
SWTで画面を作って、jarにするところまでできたのですが、 それを今度は、JFrameで作った画面のボタンクリックイベントで jarにした画面を表示させたいのですが、具体的にどう記述すれば良いか 色々しらべてもわからなかったので、もしよろしければ教えてください。
- 608 名前:デフォルトの名無しさん [2007/05/17(木) 23:10:43 ]
- >>607
Runtime.exec(String command)
- 609 名前:デフォルトの名無しさん [2007/05/17(木) 23:30:38 ]
- class Sample{
static boolean b; public static void main(String[] args){ int x = 0; if (b) { x = 1; } else if(b = false) { x = 2; } else if(b) { x = 3; } else { x = 4; } System.out.println("x = " + x); } } 「if(b = false)」のところでbの初期値であるfalseと一致し、 「x = 2」と出ると思っていたのですが、 実行すると「x = 4」と表示されます。 何故そうなるかご教授願いたいのです。
- 610 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 23:38:54 ]
- >>609
>} else if(b = false) { bにfalseを代入してるから?
- 611 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 23:40:21 ]
- > 「if(b = false)」のところでbの初期値であるfalseと一致し、
それ、比較じゃなくて代入だから。 比較したいなら if(b == false)
- 612 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 23:52:40 ]
- booleanとtrue,falseを比較なんて身の毛もよだつ
バグが入るので絶対お薦めしません if( b ) if( !b ) これでいいだろ?
- 613 名前:609 [2007/05/18(金) 00:01:22 ]
- 比較の"=="じゃなく、"="なので代入になってしまっていたわけですね。
なるほど、わかりました。 どうもありがとうございました。
- 614 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 00:45:18 ]
- >>612
if(b){} else {} でいいじゃん。
- 615 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 01:09:47 ]
- Sunのコーディングスタイルはif(b==ture) else
>>608 そういう意味じゃなくてOOoみたいに別々に固めた別コンポーネント(ウィジェット)を連携したいって意味じゃない?
- 616 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 01:16:01 ]
- > Sunのコーディングスタイル
java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html > f(b==ture) else そんな事書いてなくね?
- 617 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 01:22:39 ]
- boolean b = false;
【不恰好なコード】 if (b == true) { // 処理 } else if (b == false) { // 処理 } 【美しいコード】 if (b) { // 処理 } else if (!b) { // 処理 }
- 618 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 01:25:01 ]
- > } else if (!b) {
釣りか?
- 619 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 01:26:16 ]
- 酔ってるんだ
みなかったことにしてくれ
- 620 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 06:24:48 ]
- >>609
ちなみに == true を書く派だが、これは盲点。 if( b = false) ってバグは怖いな ためしにint あたりで同じバグを書いてみよう if(i = 10) とかね。 こっちはコンパイルエラーとなる。 実はJavaの場合、代入式の実行結果として代入値が返されるんだわ。 だからint の場合は、代入値(10)が ifの論理式の所に渡されるからNG。 これに対して、boolean の場合は、falseが渡されるから、結果としてOK。 そう考えると、612の主張もアリと感じる。
- 621 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 06:45:48 ]
- 比較演算の結果は boolean なので、 boolean を true, false と
比較するというのなら比較演算の結果も当然比較するべきだろう。 その結果も boolean なので(以下略
- 622 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 07:37:55 ]
- (...(((b == true) == true) == true) ... == true)
- 623 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 08:06:04 ]
- 無限再帰ってこわくね?
- 624 名前:デフォルトの名無しさん [2007/05/18(金) 10:24:01 ]
- javaって肥大化していくCで書かれたソフトウェア開発コスト下げれるの?
速度速いしC++の方がいいと思うんだけど。
- 625 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 10:31:11 ]
- >>624
JavaでCのソフトは作れないなぁ
- 626 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 10:41:14 ]
- >>625
組み込みシステムとかは?
- 627 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 11:24:29 ]
- どの言語も使いどころが違うからなあ
マルチリンガル必須だよ
- 628 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 12:30:18 ]
- boolean は、真偽値しか入ってこない型なんだから
判定では、比較させないのがバグを回避するのに有効だと思うが・・・・ Cや、Perlなど boolean以外の値も真偽判定に使えるような言語だと、 比較を書くのは真偽判定に使っていると明示すことこになって嬉しいんだけど Javaはbooleanでしか判定しないので比較を書かない方がいいと思う
|

|