1 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 11:54:09 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Java使いが優しくコメントを返しますが、 お礼はJavaの布教と初心者の救済をお願いします。 Java SunのHome Page www.java.com/ja/ 前スレ くだすれJava(超初心者用) pc10.2ch.net/test/read.cgi/tech/1126470659/l50
652 名前:デフォルトの名無しさん [2008/02/14(木) 14:35:25 ] Java3Dじゃなくても3次元モデルが出来るようですが Javaで作るのとJava3Dで作るのって何が違うんでしょうか?
653 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 17:28:18 ] >>652 Java3Dは3Dグラフィックス関連のプログラムを簡単に書くためのためのJava API群。 コアJava APIではないけれど準標準的なライブラリ。 Java3Dを使わなくても座標計算や表示を自分で実装したり、 Java3D以外のJavaとのインタフェースを持った3Dグラフィックスライブラリを使えば、 Java3Dと似たようなことができる。 ただ、他のライブラリを使うのは別として、自分で実装していくのはかなりの労力がいる。 まあ、Java3Dの全機能は不要で、立方体のワイヤーフレーム表示をしたいだけです、 とかの単純なことなら、頂点の座標変換計算を自前のコードでしてJava2D APIで線を描画しても、 それほど難しくないと思う。 それと、Java3Dや他の3DCGライブラリを使う場合はJREやJDKに最初から入ってるわけではないので、 別にインストールしないといけないのが少し手間といえば手間かも。特に他人に使ってもらう場合。 あと、Java3DはOS依存の機能を使って表示を高速化するとかも行ってるので、 そこまで自分で実装するとかになると大変だと思う。 自分の用途に合わせて選択を考えてみては?
654 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 23:18:17 ] スレッドのrunメソッドに引数をとりたいのですが、Startメソッドで呼び出して実行するため引数をいれることができません どのように引数をいれればいいのでしょうか?
655 名前:デフォルトの名無しさん mailto:start [2008/02/15(金) 02:48:20 ] start()の呼び出しタイミングでなく、 ThreadやRunnableのインスタンス生成の段階で引数を与えてもいいのなら、 class AThread extends Thread { private int arg1; private Object arg2; public AThread(int arg1, Object arg2) { this.arg1 = arg1; this.arg2 = arg2; } public void run() { System.out.println(arg1 + ", " + arg2); } } new AThread(1, "hoge").start(); みたいな感じでどう? new時点でなくstart時点でないとってことなら、 コンストラクタで設定する代わりに引数を与えるメソッドを定義したサブクラスにして、 startの直前でそれを呼び出して設定するとか。
656 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 02:09:18 ] >>655 そういうやりかたがありましたか、ありがとうございます
657 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:52:49 ] >>653 ありがとうございます まだJavaを触り始めたばかりなのでJava3Dは止めておきます
658 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:01:20 ] Javaの全身であるOakの呼び方って「おーえーけー」で良かった?
659 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:02:03 ] 全身=前身でお願いしますorz
660 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:07:26 ] オーク
661 名前:デフォルトの名無しさん [2008/02/16(土) 18:54:12 ] >>660 ありがとう!!!!!
662 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:49:48 ] ローカル変数の存在意義って何ですか? 全てメンバ変数にしたほうが扱いやすい気がするのですが・・・
663 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:59:23 ] >>662 そう思うならそうすればいいじゃん 君のコードとの接点を俺が持たない限り止めはしないよ
664 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 03:57:19 ] 接点t! 接点t!
665 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 04:38:59 ] >>662 メンバ変数って用語はあまりJavaでは使われないかもしれない。 存在する理由はいろいろあると思うけど、例えば、 同じクラス内でも別スコープなら同じ変数名が使えるローカル変数と違い、 フィールドはクラス全体が同じスコープになるから名前がダブらないように気をつけないといけない。 名前付けが面倒だからと同じ変数を違う場所で違う役割に使用するのはバグの元になりやすい。 また、ローカル変数の方がフィールドに定義されたものよりアクセスがたいていのJVM実装では速いはず。 それに、スレッドごとにメソッドの呼出しごとに違う場所が用意されるローカル変数と違って、 フィールドはインスタンスまたはクラスごとに一つしかないという違いもある。 マルチスレッドプログラミングやメソッドの再帰呼び出しをやり始めればその違いが分かる。 ごくごく小さなプログラムだけなら、そうは感じないのかもしれないけれど、 自分でプログラムを書き始めればローカル変数を全て排除しようとすると扱いにくくなると感じると思うよ。
666 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 13:35:32 ] 面の法線の計算について 右手座標系で頂点P0(x0,y0,z0) ,P1(x1,y1,z1), P2(x2,y2,z2)とした場合 z軸から見た場合の計算式はどうなるのでしょうか?
667 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:14:36 ] >>666 それは、Javaの質問か?
668 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:21:31 ] >>666 java関係ないやん。 Java3Dを使うならjavax.vecmath.Vector3d#crossで 3頂点の位置ベクトルの差から作られる2つのベクトルの外積を求めればいい。 正規化が必要なら外積を求めた後、Vector3d#normalizeをする。 float精度ならjavax.vecmath.Vector3fを使う。
669 名前:デフォルトの名無しさん [2008/02/21(木) 15:59:33 ] 質問です。 初心者丸出しの質問ですみません。 同じパッケージ内のクラスを使うにはどうしたらいいのでしょうか? よろしければご教授お願いします。
670 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 17:28:15 ] 独習やっているんですが、ひとつ解せないところがあったので質問します。 ある例で、実行時の引数をdouble型に変換するために double d = Double.valueOf(args[0]).doubleValue(); と記述されているんですが、その他の例では、実行時の引数をint型に変換するのに int i = Integer.parseInt(args[0]); と記述されています。 2つ目の例でもdouble型と同じ方法が取れると思うのですが、 変換の仕方を統一していないのは何か意図があるのでしょうか?
671 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 17:32:06 ] >>670 何を意図しているのか、それとも何も考えていないのか、 その例を作った作者に聞くしかないのでは?
672 名前:670 mailto:sage [2008/02/21(木) 17:52:43 ] その後の例ではint型でもvalueOf().intValue()やってた・・・ やはり著者のきまぐれなのか・・・とりあえず進めてみます。 ありがとうございました。
673 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 00:06:52 ] Double#parseDoubleやFloat#parseFloatは後のバージョンで追加された それ以前に覚えた/主流だった書き方をする人が 今でもそれなりにいるというだけの話
674 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 01:57:26 ] それは一つの著書の中で統一されてないことの理由にはならないと思う。 何らかの意図があると勘繰られないために、または読者を混乱させないために、 こういった方法もあるのでここではこちらを使用するの旨を書くか、 本文では統一しておいて、これ以外にもこういう方法もとれると注釈を入れるか、 少なくとも学習用の参考書であればあってもしかるべきだという気がする。 実は版を変える時に古い例がそのまま残ってしまっているとかかもしれないが。
675 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:05:09 ] 新版t! 新版t!
676 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 09:15:23 ] 独習Javaは第3版でJDK5.0対応をうたってはいるが 注釈やコラムが少し追加されているだけで サンプルコードは初版時の1.1のままという本なので そんなに期待してはいけない
677 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 18:01:41 ] Java2のコードでさえないとは…… それはさすがに今使う学習書としてはちょっとまずい気がする。
678 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:00:44 ] class Aがあったとして・・ A a;と宣言して a = new A();とし a = null;としたときaは空になりますか? これをやったのですがうまくいかないので、よろしければaを空にする方法を教えてください
679 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:04:23 ] 空ってなんのことだ? うまくいかないというのは、何を期待してて実際にはどうなったんだ?
680 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:08:18 ] インベーダーゲームを作ろうとしていて弾(同時に出ていられる弾の数には限りがある)の処理で SPACEを押したときif文でaがnullならaを初期化して(弾をつくる) 弾が画面外にでたらa = null;として再度弾を出せるようにしたかったんです
681 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:09:30 ] 実際には弾を1発撃ったら再度撃てなくなったのでa = nullとするあたりがおかしいのかなと・・
682 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:23:11 ] すみません良く見たらifで使う変数を間違えていまして、そこを修正したら直りましたorz
683 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:40:27 ] Aに生きてるか死んでるかのフラグを付けた方がいいんじゃないかと
684 名前:デフォルトの名無しさん [2008/03/05(水) 21:46:19 ] 外部プログラムの起動で cd /hogehoge/ が出来ないのは仕様ですか?
685 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:00:59 ] cd という名前の外部プログラムはそもそも存在しない
686 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:03:54 ] >>684 cdがカレントディレクトリを移動するコマンドのことなら大抵の環境でできるよ。 1. 直接cdを外部プログラムとして起動しようとしていないか確認。 多くの環境ではcdは外部プログラムでなくシェルが解釈するコマンド。 したがってcdを使うにはシェルを起動して、それに対してcdコマンドを渡さなければならない。 たとえば、9x系でないwindowsなら、 new ProcessBuilder("cmd", "/C", "cd \\tmp & dir") で起動されたプロセスは\tmpディレクトリのファイルリストを標準出力に出す。 2. 外部プログラムでカレントディレクトリを移動した後、 外部プログラムから復帰した後の親プロセス、つまりJavaプログラムの方で見ていないか確認。 多くの環境でカレントディレクトリの情報は各プロセスで独立している。 唯一、プロセスを起動する時に親プロセスから引き継がれるくらい。 子プロセスから親プロセスに伝播することはない。
687 名前:684 [2008/03/06(木) 11:14:03 ] OSはlinux or FreeBSDなんですが new ProcessBuilder("bash", "cd", "/hugahuga/"); で動きませんでした。 どうしたらいいのか教えて頂けませんか?
688 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 11:51:31 ] >>687 何をしたいのか知らんが、 子プロセスでカレントディレクトリを移動しても、 自プロセスのカレントディレクトリは変わらないよ?
689 名前:684 [2008/03/06(木) 12:03:37 ] やりたいことは、mecabの辞書の更新を動的にやりたいんで、 # cd /usr/local/src/mecab に移動して、そこで一度 # /usr/local/libexec/mecab/mecab-dict-index -c utf8 で辞書を更新して # make install し直したいんです。 私の考えだと、子プロセスでカレントディレクトリに移動して、 その子プロセスでその次のコマンドを実行すれば出来ると考えているのですが。
690 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:03:24 ] >>689 シェルスクリプトでやりたいことを一括して書いて、それを起動すればいいんじゃないかい?
691 名前:684 [2008/03/06(木) 13:05:40 ] >>690 ウホッ! そこには気づきませんでした! 確かに、シェルしか使ってないならそれがベストですね! やってみます。ありがとうございました。
692 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:30:58 ] >>691 ちなみに>>687 の > new ProcessBuilder("bash", "cd", "/hugahuga/"); は思った結果は得られない。これはbashにcdと/hugahuga/という二つの引数を与えるもので、 cdや/hugahuga/という実行可能なファイルが存在しないというエラーになると思う。 やるなら、例えば、 new ProcessBuilder("bash", "-c", "cd /hugahuga/ && ls"); とする。bashのオプション-cはその次の引数をコマンドとして読み込む。
693 名前:684 mailto:sage [2008/03/06(木) 13:53:05 ] >>692 何から何までありがとうございました。 勉強になりました。
694 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 14:10:30 ] >>692 スレ違いだけど bash cd /hugahuga/ の二つ目以降の引数は一つ目のシェルスクリプトに与えられる引数だから そんなファイルはないと言われるのはcdだけだね あと-cを使わなければbashに渡せるのは実行可能ファイルというよりシェルスクリプト bash cd はファイルcdが存在しないと言われるが bash ls はバイナリファイルは実行できないと言われる
695 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:35:54 ] public class Sample5_1 { public static void main(String[] args) { System.out.println(1+1); System.out.println(1+1+2); System.out.println("1+1+2の結果は"+1+1+2+"です"); System.out.println("1+1+2の結果は"+(1+1+2)+"です"); } } を実行すると下のようになるんですが、一番下はわかるのですが、下から二行目の112はなぜ計算されずに112になるのかわかりません。 理由を教えて下さい。 2 4 1+1+2の結果は112です 1+1+2の結果は4です あともうひとつ public class Sample5_4 { public static void main(String[] args) { int fatherAge = 52; int motherAge = 50; int myAge = 20; int sisterAge = 20; int sumAge = fatherAge + motherAge + myAge +sisterAge; int averageAge = sumAge / 4; System.out.println("家族の平均年齢は、"+ averageAge +"歳です"); } } を実行すると成功するのですが、一番下の「aveerageAge」の横の+を取ると下のエラーがでます。 上の質問も同じなのですが、前後に+を付ける理由などを教えていただきたいです。お願いします。 型 PrintStream のメソッド println(String) は引数 (String, String) に適用できません。トークン "averageAge" に構文エラーがあります。正しくは , です。
696 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:04:57 ] >>695 "1+1+2の結果は"+1 → "1+1+2の結果は1" "1+1+2の結果は1"+1 → "1+1+2の結果は11" "1+1+2の結果は11"+2 → "1+1+2の結果は112" "1+1+2の結果は112"+"です" → "1+1+2の結果は112です" +を文字列に使うと、文字列を連結してひとつの文字列にする 括弧がなければ、左から順番に printlnには文字列はひとつしか渡せないので、+なしで System.out.println("foo" "bar" "hoge"); などとは書けない
697 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:05:37 ] >>695 一つ目の質問について "1+1+2の結果は"+1+1+2+"です" は (((("1+1+2の結果は"+1)+1)+2)+"です") と解釈されるから。
698 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:54:16 ] >>696 >>697 すごくわかりやすく説明していただきありがとうございます。参考書にも詳しく書いてなかったので悩んでいました。 こうやって一つ一つ覚えて行くのが楽しさの一つですね。 まだはじめて少しですので、また聞くことがあるかもしれませんが、よろしくお願いします。
699 名前:デフォルトの名無しさん [2008/03/11(火) 00:13:05 ] お尋ねします。 Java のコマンドライン引数には自分自身のパスは含まれないようですが、どうすれば自分自身のパスや名前を得ることができますか? 次の C 言語の例のようなことがしたいのですが。 /* hoge.c */ #include <stdio.h> int main(const int argc, char * argv[]) { printf("EXE NAME: %s\n", argv[0]); return(0); } C:\test>hoge.exe EXE NAME: hoge.exe コマンドプロンプトで hoge.exe を実行すると argv[0] に hoge.exe という名前が入りそれを表示します。
700 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:43:00 ] コマンドラインでプログラムを実行しようとすると Registry key 'Software\JavaSoft\Java Runtime Enbiroment\CurrentVersion' has value '1.3',but'1.6' is required. Error:could not find java.dll Error:could not find Java 2 Runtime Enviroment. とでて実行してくれません。 どうすればいいですか?
701 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:50:53 ] but'1.6' is required だから、 JREの1.6をインストールして下さい
702 名前:デフォルトの名無しさん [2008/03/11(火) 00:56:03 ] >>700 ランタイムの新しいバージョンをインストールすれば良いと思う。 java.sun.com/javase/ja/6/download.html
703 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 01:14:40 ] できました! ありがとうです
704 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 05:14:23 ] >>699 ttp://ja.doukaku.org/151/nested/
705 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 07:48:49 ] やはりそれしかありませんか。 私もぐぐってそのページは見付けたのですが、もっと簡単な方法はないものかと。 ともあれお答えありがとうございます。
706 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 11:53:32 ] >>705 javaをキックするラッパを書いて、それのargv[0]を引数として渡せばいい。
707 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 17:22:50 ] 自分自身の名前は次の方法で得られました。 コマンドライン引数ではありませんがこれで代替可能だと思います。 public class test { public static void main(String[] args) { test t1 = new test(); System.out.println(t1.getClass().getName()); } }
708 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 17:32:13 ] それでいいなら、 test.class.getName() でもいいんじゃ?
709 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 17:47:36 ] おー! Windows の exe は勝手に名前を変えても実行できるでしょ。 だから自分の名前を表示したい場合はコマンドライン引数から持ってこなきゃいけないわけで。 Java なら *.class の名前を勝ってに変えてしまうと実行できませんよね。 だから getName() で充分だと思います。 色々とありがとうございました。
710 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 23:06:33 ] >>653 > それと、Java3Dや他の3DCGライブラリを使う場合はJREやJDKに最初から入ってるわけではないので、 > 別にインストールしないといけないのが少し手間といえば手間かも。特に他人に使ってもらう場合。 j3d.jarを自分のプログラムの中にFatJarで入れれば そんなインストールの手間も省けると思うよ
711 名前:デフォルトの名無しさん [2008/03/14(金) 00:31:34 ] コンパイルしたら 「*******.java:27: \12288は不正な文字です。」 と出るのですが「\12288」とは、何のことでしょうか 宜しくお願いします。
712 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 00:33:13 ] まあ検索ですぐに出てくるが 全角スペースのこと
713 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 21:59:38 ] javaのswingで遊んでいますが設計上よくわからないことがあるので質問させていただきます JFrameをextendsしたクラス、TimerTaskを実装したクラス、KeyListenerを実装したクラスを作りました JFrameに色々と画像を表示してゲームを作りたいのですが、KeyListenerの取得したイベントはどのようにJFrameやTimerTaskに伝えるのが常識なのでしょうか? 友人の書いたプログラムをのぞくと、JFrameを実装したクラスにKeyAdapterやTimerTaskクラスを記述しJFrameを実装したクラスのフィールドを使いやりとりしているようでした
714 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 22:35:54 ] >>713 つ ttp://www.pwv.co.jp/take_public_html/MVCwithEclipse/doc/MVCwithEclipse_c3.html とはいえ正解があるわけじゃなし、プログラムいじる人が直感的にわかればいいっちゃ いいんだろうけど
715 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 23:18:49 ] >>714 ありがとうございます 勉強してみます
716 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 11:30:34 ] MySQLを使ったアプリケーションについての質問です。 データの登録や検索をしたいのですが、 例えば、String qry1 = "insert into 〜 values(〜,〜,〜)";という文で 〜の部分をアプリケーションから入力するにはどうすればいいでしょうか?
717 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 11:58:42 ] ?にして、PreparedStatement使うといいよ。
718 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 12:00:59 ] あー、テーブル名もか。 テーブル名には?は使えないから、文字列組み立てるしかないね。 そのときに、テーブルが本当に存在するかどうかのチェックをしないと、 とても大変なことになるので注意が必要。
719 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 12:10:12 ] あ、valuesの中だけで大丈夫です。ややこしくて済みません。 ご丁寧にありがとうございました。やってみます。
720 名前:デフォルトの名無しさん [2008/03/26(水) 22:18:21 ] java.java:4: "]" がありません。 int check(number[0],number[1],number[2]) { ^ こんなエラーが出るんですけど原因は何でしょうか? int[] number = new int[3]; って宣言して、 int kekka = check(args[0],args[1],args[2]); って呼び出しています。
721 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 22:44:32 ] argsになってんじゃん
722 名前:デフォルトの名無しさん [2008/03/26(水) 22:49:32 ] argsを渡してnumberで引き取っているのですが、この書き方ではダメなのでしょうか?
723 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 22:56:08 ] じゃあ、その引き取ってるところのソースを貼って頂戴
724 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 23:14:47 ] int check(int n1, int n2, int n3) { ... } もしくは、 int check(int[] numbers) { ... }
725 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 23:16:07 ] あ、呼び出しが int kekka = check(args[0], args[1], args[2]); なら、後者はエラーだ。 int check(int...numbers) { ... } なら使ってるバージョンによっては動く。
726 名前:デフォルトの名無しさん [2008/03/27(木) 00:38:50 ] >>724-725 ありがとうございます。 前者を試してみたのですが、何かエラーが大量に出てきてしまいました・・・ >>720 のエラーが出てくるソースはこれです。 public class Java { int[] number = new int[3]; void check(number[0],number[1],number[2]) { } public static void main(String args[]) { check(args[0],args[1],args[2]); } }
727 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 01:06:44 ] なんか予想通りのソースだった メソッド宣言での引数の型宣言はそういう風に書けない 解決法は上のレス参照 あとmainメソッドの引数argsには起動時に与えたパラメータが格納されるけど 数値を与えようがString型=文字列として受け取る だから単純にcheckメソッドの引数にargsの要素を指定したら 型が違うのでエラーがでる int型に変換したいならInteger#parseIntでも使って
728 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 01:46:04 ] >>726 Java では、コンパイル時における型の一致が重要です。 // 蛇足。Java 作法では、(String args[]) ではなく、(String[] args) にしましょう。 メソッド宣言の定義は以下の通り。public, static等 戻り値型 メソッド名(型 仮引数) { ... } 型、仮引数部分に、変数を直接詰め込んでも、コンパイル出来ません。 // 720 のエラーは、型部分で、"number[" と来たので、"]" を期待していました。 例えば、static void check(int n0, int n1, int n2) {} という宣言なら出来ます。 このとき、void が戻り値型、int が型、n0 が仮引数です。 check(args[0], args[1], args[2]); とは型が合わないのでコンパイル出来ません。 args[0] は String型なので、型int(autoboxing では Integer型)とは それぞれ継承を辿っても、もう一方の型が存在しないため、型が一致しません。
729 名前:デフォルトの名無しさん [2008/03/27(木) 20:13:47 ] ほんとに初心者な質問で悪いんですけど質問です。 1 2 〇 4 △ 〇 7 ・ ・ ・ みたいに「if」と「for」を使って 3の倍数は〇 5の倍数は△ 3と5の倍数は× って表示させていんですけど、 この場合どのようなソースになるのでしょうか? ご指導お願いします。
730 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 20:18:37 ] 値 % 3 == 0 なら3の倍数
731 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 20:33:36 ] >>729 d.hatena.ne.jp/keyword/FizzBuzz
732 名前:デフォルトの名無しさん [2008/03/27(木) 20:40:02 ] >>727-728 そういうことなのですね・・・。 理解しました。ありがとうございます。 そしてすみませんが、argsについて質問です。 ・void main(int[] args) のような書き方はいけないのでしょうか? ・また、argsを使わないコードでもString[] argsを記述するようですが、なぜですか? ・args以外の、例えばstrなどと言った他の配列名はダメなのでしょうか? 重ねての質問すみませんが、答えていただけると嬉しいです。
733 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 20:44:10 ] >>732 >・void main(int[] args) のような書き方はいけないのでしょうか? >・また、argsを使わないコードでもString[] argsを記述するようですが、なぜですか? 引数の数や型が異なると、それは別のメソッドなので、いわゆるmainとしては扱われない。 そのためint[]や引数無しは不可。String[]でなければならない。 >・args以外の、例えばstrなどと言った他の配列名はダメなのでしょうか? 名前は違ってもいい。
734 名前:デフォルトの名無しさん [2008/03/27(木) 20:45:44 ] ・void main(int[] args) のような書き方はいけないのでしょうか? ・・・・・ いけない ・また、argsを使わないコードでもString[] argsを記述するようですが、なぜですか? ・・・・ 決まりだから ・args以外の、例えばstrなどと言った他の配列名はダメなのでしょうか? ・・・・・ よい
735 名前:デフォルトの名無しさん [2008/03/27(木) 20:54:21 ] >>730 >>731 わかりました♪ ありがとうございます(__)
736 名前:デフォルトの名無しさん [2008/03/29(土) 23:55:35 ] 質問です。 public class java { public static void main(String[] args) { try{ int suuji = method(); } catch(Exception e){} System.out.println(suuji); } int method() { int suuji2 = 777; return suuji2; } } こういうコードを書くと java.java:4: static でない メソッド method() を static コンテキストから参照することはできません。 int suuji = method(); ^ java.java:7: シンボルを見つけられません。 シンボル: 変数 suuji 場所 : java の クラス System.out.println(suuji); ^ と2つエラーが出ます。 前者はmainメソッドをstaticでなくし、 後者は出力をtryの中に入れれば解決しましたが、なぜエラーが出るのでしょうか?
737 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:06:30 ] staticを付けない場合はインスタンスを作る必要がある java obj = new java(); obj.method(); こうするか,もしくはmethodにstaticを付ける 後者はsuujiがtryブロックの中で宣言されてるからその中でしか使用できないため 例外とか後でいいから基礎的なとこを先にちゃんとやった方がいいよ
738 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:23:22 ] >>736 main から使うのに static を付け忘れるのはたまにやるかな。 機能を使うのにインスタンスの生成はしなくても良いと思う。 後者はスコープの問題だけど、コレも割りと気が付かずにやるので注意。 どちらもそのうち慣れると思うから、精進あるのみ。
739 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 14:39:25 ] 質問です。 現在、mainクラスのガベージコレクションを、 多重継承されたインスタンスからコントロールしています。 ただ、Heap領域にアクセスする場合について、 そのコレクションフレームワークからマルチスレッド化させると、 ローカルにremoveしようとしても同期的な排他制御が取れません。 やはりラッパークラスのプリミティブ型は、エレメントのイテレータもhasNext()メソッドもどきで volatile修飾子のシリアライゼーションをさせるのが絶対条件なのでしょうか。 ちなみに、もしコマンドライン引数によってJava.langのStringBufferまでimportしたとしても、 SetインターフェースのisEmptyメソッドにするとなぜかStackOverflowErrorの例外が発生します。 staticなyield()メソッドを汎用させるため、 throwsで例外ハンドラをコンストラクタなアサーションをしているのですが・・・。 C言語が腐るほど考えたのですが、 バイナリでのファイル操作がなかなかまとまらないため質問した次第ですので、 どうかお答えお願いします。
740 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 14:47:05 ] >やはりラッパークラスのプリミティブ型は、エレメントのイテレータもhasNext()メソッドもどきで >volatile修飾子のシリアライゼーションをさせるのが絶対条件なのでしょうか。 それは絶対条件です。 C言語が腐るより前にあなたの脳みそが腐ってないかが心配です。
741 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 15:09:01 ] 回答ありがとうございます。 しかし、私の脳みそは至って健全であるため、ご心配には及ばないかと思います。 万一の事態を考えわざわざ心配をして頂けたというのは、とても光栄です。 では、SetインターフェースのisEmptyメソッド使用時に コマンドライン引数によってJava.langのStringBufferまでimportすると、 なぜStackOverflowErrorの例外が発生するのでしょうか? staticなyield()メソッドを汎用させるためにthrowsで例外ハンドラを コンストラクタなアサーションをしてはいけないのは仕様でしょうか? 回答よろしくお願いします。
742 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:06:19 ] 人工無能が適当な単語組み合わせて発言しているようにしか見えんな……。
743 名前:デフォルトの名無しさん [2008/03/30(日) 20:22:48 ] えと、質問します。 入力してもらったデータを他の文字に変換するにはどうしたらいいですか? つまり、あいうえおと入力されるとaiueoと表示されるようにしたいのです。 よくわからん質問でスマソ
744 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:51:21 ] Map<Character, Character> table = new HashMap<Character, Character>() {{ put('あ', 'a'); put('い', 'i'); put('う', 'u'); put('え', 'e'); put('お', 'o'); }}; とでもしといて、 public String convert(String str) { StringBuilder buf = new StringBuilder(str.length()); for (char ch : str.toCharArray()) { buf.append(table.get(ch)); } return buf.toString(); } かな
745 名前:デフォルトの名無しさん [2008/03/30(日) 20:53:05 ] 質問です。 私がどのような問題を抱えているかを理解して、その解決方法を示してください。 私の状況としては、いろいろ調べて色々試行錯誤しましたが、うまくいきません。 ソースコードは守秘義務のため教えることは出来ません。 それでは、よろしくお願いします。
746 名前:743 [2008/03/30(日) 20:59:52 ] Map<Character, Character> table = new HashMap<Character, Character>() {{ put('あいうえお', 'aiueo'); }}; public String convert(String str) { StringBuilder buf = new StringBuilder(str.length()); for (char ch : str.toCharArray()) { buf.append(table.get(ch)); } return buf.toString(); } で表示させるのは無理なのでしょうか。 馬鹿臭い質問ですいません。
747 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:15:21 ] 'あいうえお'とか'aiueo'はcharじゃないだろ。 というか、コンパイルしてみればいいじゃないか。
748 名前:743 [2008/03/30(日) 22:05:27 ] Exception in thread "main" java.lang.NoClassDefFoundError:com/sun/tools/javac/main だそうです ・・・CLASSPATH?
749 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 22:15:12 ] メインつくってないだけじゃね?
750 名前:743 [2008/03/30(日) 22:25:46 ] ごめんなさい俺にわかるように教えて下さいorz
751 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 00:25:37 ] >>750 こういう掲示板で手取り足取りなんて無駄もいいところだから、 Javaの入門サイトや教科書を読んで基礎を作った方がいい。
752 名前:デフォルトの名無しさん [2008/03/31(月) 11:14:34 ] >>751 わかりました。出直してきます。 皆さんありがとうございます。