リスナー系オブジェクトは別として、引数のオブジェクトを弄る事で結果を返すのってJava的にナシなん? 戻り値で返すと型情報が減るから返すとObjectになるようなケースで無闇に返したくないんだけど。
>>5 JavaみたいなOOPLに限らずあんまり好まれはしないだろう…
どういう状況を想定してんのかわからんから何とも言えんが。
勉強を兼ねていくつかextends jappletなサンプルプログラムをjframeで動く様に描き変えてみてるけど結構描き直しが必要で面倒だね。 extends jframeだけで動く様になぜ互換性を持たせなかったのだろう?
アプレットはパネルの一種だからトップレベルウインドウのフレームと互換性を持たせてないのは当然。 アプレット自体を書き直すんじゃなく、アプレットのスタブとコンテキストを用意して動作環境を整え、 フレームにaddしてinit、start、stop、destroyを必要な時点で呼び出してやるという、 要はブラウザやアプレットビュアがやってるようなことを行うアプリケーションを書けばいい。 それも汎用性のあるものにする必要はなく目的のアプレットに合わせて手抜きすればいい。 単純なアプレットならスタブとか自前で用意せずに動作するものも多いと思うし、 initとかもオーバーライドされてないメソッドは呼ぶ必要がない。
valueOf(3) とかをかいてもエラーにならないんですけどこれってどこのメソッドなんですか?
11 :
デフォルトの名無しさん :2011/06/01(水) 12:56:25.64
ServerSocketでpostデータを受信したいのですが、なぜかヘッダしか取得できません。 bodyを取得するのはどうすればよいのでしょうか?
>>10 java.lang.Integer#valueOf(int) の事ならJDK1.5以降に追加されたメソッドだから
1.4以前だと使えないよ。
youtubeの動画ダウンロードするのにJAVAをインストールしろ言われたからインストールしたのにまだダウンロードできない
騙されたんだな
>>10 エスパーすると、static importしてんじゃないの?
BEANとMAPでアクセスのパフォーマンスがどのくらい違うかと思って、以下を各々10万回ループしたけど、 両方共ほぼ0.4sくらいで差がないです。 MAPはパフォーマンス悪いからやめろと言われたけど、これを突きつけてやろう。 ちなみにリフレクションでも2倍増えただけでおもったより重たくないな。 5倍くらい違うと思ったでけど。 user = new TestUserBean(); user.setValue1("value1"); user.setValue2("value2"); user.setValue3("value3"); user.setValue4("value4"); user.setValue5("value5"); map = new HashMap<String, String>(); map.put("value1", "value1"); map.put("value2", "value2"); map.put("value3", "value3"); map.put("value4", "value4"); map.put("value5", "value5"); user = new TestUserBean(); MethodUtils.invokeExactMethod(user, "setValue1", "value1"); MethodUtils.invokeExactMethod(user, "setValue2", "value2"); MethodUtils.invokeExactMethod(user, "setValue3", "value3"); MethodUtils.invokeExactMethod(user, "setValue4", "value4"); MethodUtils.invokeExactMethod(user, "setValue5", "value5");
>>18 中から情報取り出すときのパフォーマンステストしたか?
前は何も問題なくダウンロードできたのにこの1年で何がどうなったのか
>>19 はい、取り出しも含めてセットでループです。
気を以下のように長くしても変わらずで
map.put("valueAbcdefghijklmnopqrstuvwxyzAbcdefghijklmnopqrstuvwxyzAbcdefghijklmnopqrstuvwxyz1", "value1")
ハッシュ値計算するので時間かかるかなと思ったけど。
その面では心配なく使えそうです。
個人的にはリフレクションがそんなに遅くないのに気づけて大きいです。
リフレクションてそんなに速くなってたのか。 昔は単なるメソッド呼び出しと比べて10倍とかかかってたような。
>>21 ですが、
ちなみに
synchronized (lock) {
さっきのやつ
}
でもほぼ0.4くらいで変わらなかったです。
もちろん当然他からロック取得するスレッドがないけど、あるないにかかわらず、ロックかけに行くことでパフォーマンスが変わると思ったけど…
これまた驚きでした。
24 :
デフォルトの名無しさん :2011/06/01(水) 15:46:17.29
>>23 なんか昔桜庭さんが解説してたけど、
それだと本当のロックのコストは検証できなかったはず。
Thread.currentThread().getStackTrace()[n]で getMethodName()を使いメソッド名取れますが 各スタックの引数にアクセスが出来ないようです。 引数にアクセスできる手法って何かありますかね? データセンターのテスト機で動くtomcatにFireWallでeclipseでリモート接続できないので、 printStackTrace()で情報だししてるんですけど、引数情報が見えないないので何とか手法を探ってます。
XML形式で作成した設定ファイルを読み込ませる機能を作りたいです。 DOMというもので実装しようと思うのですが、DOMって商用利用しても大丈夫なものですか? MySQLみたいにライセンス問題が絡んできたりしませんか?
Javaで書くならおとなしくbeanで書けよと思う
>>6 active(FTP protocol);
active(SSH protocol);
active(HTTP protocol);
こういうメソッドをもったインターフェースが有ったとして、
Xporter xp = new Xporter();//インターフェースを実装
connect.activeProtocolTo(xp);//指定したホストのポートが使用しているプロトコルがxpに入る
こんな感じの事をする。
これを戻り値でやると、
Object protocol = connect.getProtocol();
if(protocol instanceof FTP) ・・・;
if(protocol instanceof SSH) ・・・;
if(protocol instanceof HTTP) ・・・;
ってな感じになるわけじゃん。
ダウンキャストしたくないと。
29 :
デフォルトの名無しさん :2011/06/01(水) 20:20:15.85
1乙です ところで、eclipse で、利用していないpublicなメソッドや変数があるかどうかは、どうやって調べるんでしょうか。 privateならデフォで簡単に分かるのですが。 よろしくです。
>>29 呼び出し階層。
検索対象はワークスペースで開いてるプロジェクト群が最大。当たり前だが。
メソッド、変数を選択してCtrl+H
32 :
デフォルトの名無しさん :2011/06/01(水) 20:39:08.18
>>30 おお。
ありがとうです。
コンテキストメニューがコンテキストなんで、フィールドとかを指定したりすると、
当たり前ですが、[呼び出し階層を開く]メニューが出ないですな。ちょいとあわてましたが。
>>29 単にpublicをprivateにしたら?
クラス外で呼ばれていなければエラーにならないし、
クラス内で呼ばれていなければ警告がでるだろ。
>>27 JavaBeanならライセンス問題はありませんか?
貧乏なので、ライセンス料とか払えないです(><)。
シリアライズに関して質問があります。 FileOutputStreamと、ObjectOutputStreamを組み合わせることでファイルへの格納はできたのですが これをStringやbyte配列に格納することは可能でしょうか? 一度ファイルへ書き込めばでますが、できれば一時ファイルみたいなものは使いたくないです ぐぐってもあまり出てこないので、そもそもこんなことをやりたいと思うのがおかしいのかもしれませんが… それでは、よろしくお願いします。
>>35 ByteArrayOutputStream
ByteArrayInputStream
こいつらを
ObjectOutputStream
ObjectInputStream
に渡してやれば運用できる。
>>12 あなたのコードのバグを直しなさい。
何も特殊なことしないで取れるよ。
38 :
デフォルトの名無しさん :2011/06/01(水) 21:40:36.60
xmsとxmxの値を増やしたら xmnの値も自動的に増える? デフォルトでxmsの何分の一とか決まってるんだろうか
public class HogeSuper{ HogeSuper(){ } public class HogeSub{ }
すいません、途中で書き込んでしまいました。 スーパークラスでprotected変数の値を与え、 スーパークラスのコンストラクタでサブクラスをnewして、 スーパークラスでサブクラスのメソッドを呼び出し、 サブクラスでスーパークラスのprotected変数を見ると、 与えた値になっていないのですが、どうすればいいでしょうか。 これまではstaticを付けて回避していたのですが、 newする方法も試したいと思っていました。
42 :
デフォルトの名無しさん :2011/06/01(水) 22:15:53.45
Java課題です。お願いします。 複素数クラスを作り、二次方程式の虚数解を求めるプログラムを書け。 以下、本プログラムの仕様。 メソッドとして以下の四則演算を定義すること。 Complex plus(Complex c) Complex minus(Complex c) Complex mul(Complex c) Complex div(Complex c) また、複素数の平方根を計算するメソッド Complex sqrt() も定義すること。虚数部が 0 の場合(実数の場合)のみに対応すればよい。 実数の平方根はMath.sqrtを使ってよい。 二次方程式の解を求めるプログラムでは 3 つの係数(実数)を入力 させ、その数値から複素数オブジェクトを作って計算を行うこと。
問題出してやるから、お前ら答え書いて 俺に見せろといいたいの? それとも実装方法が解らない部分があって それを聞きたかったけど書き忘れただけなの?
44 :
デフォルトの名無しさん :2011/06/01(水) 22:23:08.77
前者じゃない?笑
class Super
{
protected int value = 0;
Super(boolean trap)
{
if(!trap) return;
Sub sample = new Sub();
sample.value = 10;
}
}
class Sub extends Super
{
Sub()
{
super(false);//再起止め
System.out.println("Superの中でSub作るなよ 値:"+value);
}
}
>>41 の内容でコード起こそうと思ったが、
あー分けが解らん。
>>45 ありがとうございます。まさにそんな感じです。
出力文字の「Superの中でSub作るな」という事なんですかね。
そのSuperも始めのMainでnewしているのですが、
SubもMainでnewして、Superのメソッドを呼び出す時に
引数で渡すとかするんでしょうか。
そうだといえばそうね。 ただし、Superの{}の中に一個足りとも Subにあたるクラス名を書くなよ。 あと、protectedで変数を渡すのは止めなさい。
これ教えてる人いまいちだな。 高校の授業か大学院の授業化に寄っても違うけど。 コンプレックスありそうな問題w (これが言いたかったw
52 :
デフォルトの名無しさん :2011/06/02(木) 07:41:10.82
>>33 返信ありがと
Abstractでクラスを作ってると、publicにせざるを得ない
>>52 一時的にprivateにするって事なんじゃね?
54 :
デフォルトの名無しさん :2011/06/02(木) 10:05:46.74
>>53 手間はかかるけど、確実ってやつね。
一気に検索風にと思ったけど、当面はそれも使わせてもらうかな。
ありがとう
javaの参照渡しについてど忘れして、ぐぐっても全く分からない… int a = 10; clearA(a); public void clearA(int a) { a = 0; } といった流れにしたいんだけど、これだと値渡しだから 結局aは10のまま returnは使いたくないんだがどうしたらいいのだろうか? 調べると大体がnew ウンタラしてるけどnewして削除用のオブジェクト作らないとだめなの? C++だったら public void clearA(int &a) で確かポインタ使わずに参照渡し出来て そのまま変更出来たと思うんだが…
素直にC++をつかってdくさおえい
そんなあなたにC#
新氏?
はいはい、参照の値渡し参照の値渡し
60 :
デフォルトの名無しさん :2011/06/02(木) 11:47:10.75
>>55 × a = 0;
○ this.a = 0;
javaはポインターの意識が希薄だし、
CやC++だとしても、同じ事やってもスコープが違うので値は変更できんでしょ。
ポインターを渡せないんだから、上のような工夫で対応できないこともない場合もある。
ただ、return を使いたくない、とか
なんかオブジェクト指向を履き間違えてコードを書いているような予感。
thisを使いまくるとデバッグが大変だよ
return(0); して a=cleara() しちゃえばいいのにと思った。 ruby的にa.clearとしたくはなるけどw
>>55 そもそもreturn使いたくない理由ってなに?
それによっては別の解決策を出せるかも知れない
>>63 あー、android(JAVA)勉強中でメモリ管理が厳しくて
別関数で受け皿作ったのをリターンしてたら、容量食うかな?と
実際out of memory多発で少しでも減らしたいなー…と
取得してきたデータ画像が2560x1920とかいう超サイズだったから
これを640x480にしたら、余裕再々になったっていうね…
あとの処理は1行のものを態々関数にしようとしてたアホな感じだったんで…(returnシタクナイノハココ)
ただのアホの子でした。
呼び出し
registerCompressBitmap(offBitmap, out, bos);
関数
private void registerCompressBitmap(Bitmap offBitmap, FileOutputStream out, ByteArrayOutputStream bos) {
offBitmap.compress(CompressFormat.JPEG, 70, bos);
try {
out.write(bos.toByteArray());
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
之に関してはobjなんで、out.closeでoutに関してはmainの方でも
閉じられてるって感じでいいんですよね
65 :
デフォルトの名無しさん :2011/06/02(木) 13:58:34.14
>>64 むしろ、returnしたほうが、GCが勝手に掃除してくれてメモリの節約になると思うが、気のせいか?
>>65 なるほどー、イメージ的には
ポットA&BをバケツAにいれた後に
returnで、バケツAをBに入れるってイメージだったから
その間AとBが両方存在して多いよなーと思ったけど
よくよく考えて見れば、完全コピーじゃなくて、移動だったら 50 と 50になって全体量は変わらないですよね・・
>>66 まず、ちゃんとプロファイラ使って実際の状況を確かめる事を勧める
JEditorPaneで、HTML5って表示できますか? もしくは、できるコンポーネントはないですか?
JavaFXのwebコンポーネントがHTML5に対応を謳っていたはず。まだベータ版だけど。
70 :
68 :2011/06/02(木) 14:29:37.04
>>69 おお。どうもありがとうございます。
そいつで、やってみます。JavaFXって何気にいいっすよね。
>>26 commons configuration
72 :
デフォルトの名無しさん :2011/06/02(木) 15:26:08.85
先輩の管ミンス政権が不信任案を決議された日に、後輩が丸投げw
双方向リストとか懐かしいな
JAVAでプログラムの課題出されたんですけど Mathとキャストを使わずに下のプログラム書くとどうなりますか? ちなみに使わずにというのはまだ習ってないので使うとNGなんです 四捨五入ノプログムなんですが 入力 1 四捨五入される数値 2 四捨五入をされる小数点の位置 出力 3 四捨五入の計算をした数値 で書いてくるように言われたんですがざっくりすぎて分からないんです
>>75 マルチ乙です、乙です
パソコン初心者総合質問スレッド Part1965
641 名前:ひよこ名無しさん [sage]: 2011/06/02(木) 18:01:47.96 ID:???
ここで合ってるのか分かりませんが
JAVAでプログラムの課題出されたんですけど
Mathとキャストを使わずに下のプログラム書くとどうなりますか?
四捨五入
入力
1 四捨五入される数値
2 四捨五入をされる小数点の位置
出力
3 四捨五入の計算をした数値
78 :
75 :2011/06/02(木) 18:36:52.72
マルチというか誘導されたからこっちに来たんですけど
お得意のBASICとかCのコードを見てこいよ やることはどうせ一緒だから
>>78 アンタあっちで活動中ジャン
パソコン初心者総合質問スレッド Part1965
650 名前:641 [sage]: 2011/06/02(木) 18:33:23.67 ID:???
>>648 アンタだれ?
81 :
75 :2011/06/02(木) 18:55:13.46
>>80 なんかID出さずに書き込んだせいで偽者が出てしまいました
ちなみにそのスレだと
>>648 が僕でそれ以降は書き込んでません
>>81 もう分からないよ
アンタが偽ものの可能性が高いかな、本人はもうトンズラ
83 :
75 :2011/06/02(木) 19:00:37.94
いやいやいや
ほんとに
>>75 で悩んでるんですけど
>>81 ID有る板でのID出さずの質問ー>典型的なネタスレですね
プリミティブ>値渡し プリミティブの配列>参照渡し オブジェクト型>参照渡し という理解であってますか?
86 :
デフォルトの名無しさん :2011/06/02(木) 19:46:54.55
Javaでint[]を1埋めしたい時、 int[] data = new int[999]; for(int e : data){ e = 0xffff; } ってやってもdata変わりませんよね? どうしたらいいですか?
>>85 プリミティブ>値渡し
プリミティブの配列>値渡し
オブジェクト型>値渡し
>>86 Arrays.fill(data, -1); じゃダメなん?
最近の質問の傾向から考えて、どれだけ機能してなくても宿題スレは立てておいたほうがいいのかもな
初歩の初歩ですみませんが、馬鹿な私にデクリメントと演算子の仕組みを分かりやすく教えて下さい… 特に後者の意味がよく分かりません。
パッケージ内のファイルから、mainのあるクラスMainの static変数にアクセスするにはどうすればいいでしょう。
頼みますから質問者もコードを書いてくださいよ・・・
>>92 意味としてはこんな感じです。
importするにもスタートファイルの位置なのでフォルダがなくできないです。
//Main.java
import Folder.*;
public class Main{
static final int num = 10;
public static void main(String[] args){
Hoge hoge = new Hoge();
hoge.Print();
}}
//Hoge.java (Folderフォルダ)
package Folder;
public class Hoge{
public Hoge(){}
public void Print(){
System.out.printf("%d\n", Main.num);
}}
Mainも何かのパッケージに入れてimportする
>>72 こういうページを外部に漏らしてもokなん?
OKかどうかなんて俺達が心配することじゃないだろう
質問です。 mainClassである public class main { } があり、 別クラスに public class sub {
途中押しにorz mainClassである public class main { } があり、 別クラスに public class sub { } があった場合、class subの変数データをclass mainに持ってきたい場合 どうすれば良いのでしょうか? 継承に関しては、main / subともに違うものを継承しているためextendsは出来ない状態です。 public int getVal() { return val; } といったゲッター?をclass sub 内に作ればいいのだと思うのですが それをmainからの呼び出し方法が分からないorz
ごめん自己解決した mainのほうで、new して.で取り出せた(´・ω・`)
>>94 ありがとうございます。
Main(mainがあるスタートクラス)をパッケージに入れる事はできるのでしょうか。
jmEditorで"C:\\Java\\jdk1.6.0_17\\bin\\javac.exe " + edi.FileName;
と与えてコンパイルしていて(edi.FileNameはMain.javaのフルパスになる)
そのMainの位置と比べてフォルダが奥ならパッケージに入れられますが、
Mainだけは出来ないと思っていました。
>>102 クラスパスについて調べるといい
CLASSPATH環境変数は使わずに-classpath又は-cpオプションを使って設定する
あと、Main.javaのnumはpublicにするかgetterメソッドを定義しないといけない
public class Main { Sub sub = new Sub(); int a = sub.getX(); } public class Sub { int x; private int getX(){ return x; } } これでも取り出せるよ
private int getX
いいだろ
>publicクラスはひとつのソースファイルにつきひとつと決められている。 これか
むかしはaddListenerしかなかったから。それだけ
>>25 JAVAのデバッグアクセス機能を使ってスタックにアクセスするしかないんじゃない?
MultipartEntity.addPartにて画像を送信したいのですが、 メモリ上に作成したbyte配列を送信する方法がわかりません。 FileBody fileBody = new FileBody(???); MultipartEntity.addPart("file", fileBody); の(???)中にどのようにすればbyte配列を指定できるかご教授お願いいたします。
Javadoc読んだらByteArrayBodyとかあるんだけど。
>>133 ありがとうございます。
ByteArrayBodyで解決できそうです!
115 :
デフォルトの名無しさん :2011/06/03(金) 21:18:54.13
お前には class MyProgram がお似合い
jsoupでhtml(4.01)を書き換えて出力しているのですが、 空要素がすべてxhtml仕様(<br />等)に変換されてしまいます。 これをhtml4.01仕様のまま出力できないでしょうか 設定できるのかなと思いjavadocも読んだのですが (英語力不足かもしれませんが)それらしき所が見当たらないです
120 :
デフォルトの名無しさん :2011/06/04(土) 01:34:34.86
>>118 >>116 うんまあ、プログラマーにはメモリを意識して書いている人が少ないってのは、
このレスで大いに感じられるね。
レベルが低いのに、わざわざ、そんなことしなくても。。。
メモリ管理ができたらこんな低能専用言語使いません><
ここで聞くべきなのかわからんけど質問。 PDF帳票ウェブアプリ作成中、ほぼできている。 itextライブラリ使う。で、最近知ったのだけど、最新の5系はAGPLライセンス、一個前の2系ははLGPLライセンスだとか。 …やっぱり2系使うべきかな。 一応5系版と2系版と両方作ってる。
迷うぐらいならどっちでもいいってことでしょ
125 :
デフォルトの名無しさん :2011/06/04(土) 13:33:06.79
CLASSPATHについての質問があります。 自分の作った実行ファイルをjavaコマンドで実行するときは、カレントディレクトリを クラスパスに含めれば実行できます。 しかし、本やネットをみていると、必要な.jarファイルがあるときは、その.jarファイルを クラスパスに含めています。このファイルがあるディレクトリをクラスパスに含めるのでは駄目なんでしょうか? パスの場合、binディレクトリを指定するとその中のコマンドが全部使えるみたいなんですが・・
>>124 まあ、そうなのかもしれんけど、itext AGPLでぐぐってみるとそれが問題5避けてる人もいるようなんだよな。
うちの会社にそんなもんに詳しい奴がいるわけもなく、
(上司に相談しようとしたら、ライセンス?何か問題っと言われた、ガクッ。)
今日一日考えこんでるが、不安要素を排除するなら2の方かなってのに傾きつつある…。
>>126 問題5避けてる→問題で5避けてる
連投すまぬ
>>125 > しかし、本やネットをみていると、必要な.jarファイルがあるときは、その.jarファイルを
> クラスパスに含めています。このファイルがあるディレクトリをクラスパスに含めるのでは駄目なんでしょうか?
>
だめ。
クラスパスはクラスファイルを探しに行く場所を教えるもの。
jarの中にあるならjarを指定しないと。
>>125 Java6ではクラスパスにワイルドカードが使えるからそれを使っても良い
ただし注意点があるから詳細はググって調べて
多数のファイルからなるプログラムを扱っているのですが、 各ファイルが関係している(インクルード・関数コールされているetc...)もの同士 を"線"などで視覚的に確認できるツールを探しています。
>>130 意味は解るけど、何でそんなことしたいの?
目的によってはツール使うより手っ取り早い方法があるかもよ。
>>33 みたいな方法とか。
134 :
130 :2011/06/05(日) 00:00:27.85
>>131-133 返信ありがとうございます。
紹介されたものについて、調べてみます。
このようなツールを探している理由ですが、
とある関数でバグが発見された場合に、
どのファイルに影響するかを即座に視認したいためです。
※検索で追っていけばいいのですが、量が膨大になると解りにくいので今回のようなツールを探していました。
javaだとクラスをあちこちで使い回して影響大きく成るから、ツール使っても膨大に成りすぎて置い描けるの大変だと思うけどなw mainメゾットとかコンストラクタでミスってると影響が大規模に成ると思うよ。
メゾットって書くくらいだからいつも影響大のミスしてるんだろうなw
リゾットみたいで美味しそう>メゾット
>>134 何かを継承してオーバーライドしている場合は、はっきり言って完全な依存性を見つけることは無理。
コンストラクタを一時的にprivateにしてエラーが起きた場所を探すのが関の山。
何もオーバーライドしてないのであれば、
>>33 の方法が手っ取り早い。
Rhinoのjava側の質問です。genericなクラスをRhinoで使いたいです。リフレクションを 使えばできるかもと思っていますがweb上にいいサンプルがないようです。 どなたか簡単なサンプルを教えていただけないでしょうか?
>>139 ようしらんけど、genericsなクラスなら<>引数省くとObject型なるんだから
それ使えばいいんじゃねぇの?
Main ┳Count ┳ Data ┗Show ┛ MainクラスからCount、Showクラスのメソッドを呼び出し、 Count、ShowクラスからDataクラスの変数を扱う場合、 アクセスレベルなどはどうするのがいいでしょうか。 思いつくやり方だと、MainでCount、Show、Dataをnewし、 Count、Showメソッドを呼び出す時にDataを引数で渡す方法ですが、 あまりスマートな感じがしません。 Mainからは直接Dataの変数を扱わないので、 Count、ShowでDataをnewできればいいのですが、 2箇所でnewすると別々のデータになり、データを共有できません。
最適化の問題で可読性を犠牲にしてでも処理を早くするには ・シフト演算を使う ・final使う ・コレクションクラスの動的変化を抑える ・ヒープ領域へのアクセスを減らす ・オブジェクトの生成は極力ループ内 の他になんかありますかね
オブジェクトを作らない
見直したらオブジェクトの生成がループ内とかアホやな。外ですね オブジェクト作らないってその縛りきつすぎるんですが
小手先なことをやるとVMの最適化が阻害される
並行処理する
>>141 書いたとおりの事を実現しようとすると、Mainクラスの中にCountとShowクラスを書く。
そしてMainクラスのフィールドにDataのオブジェクトを持たせる。
まぁ、CountとShowをControl,Viewの形で切り出せないしロクな作りじゃ無いけどな。
>>142 最初から使用するメモリーを全て確保し、スタックフレームを構成する。
特に線形代数は飛躍的に速度が伸びる。
>>141 DIとか使ってDataをSingletonにしてCountとShowで呼び出す
CountをObservable、ShowをObserverにしてDataの変更を通知する仕組みにする
とかそんな感じかな?小さいプログラムなら大袈裟だから、適当でいいと思うけど
>>142 あと、static使うとか?実際、最近のマシン早いからよっぽど酷い実装しない限りはあんまり気にはならないけどさ。
何万件単位のバッチとかなら別だが。だから早くしようとする気が起こらずグダグダなものになっていく…
151 :
デフォルトの名無しさん :2011/06/05(日) 12:05:24.80
>>142 そういう小手先の最適化は、いらない
書きやすい読みやすい最適化ならいいけど コードが長くなるならやんないほうがいい
それよりも、ボトルネックをちゃんと見極めて、
そこを調整することのほうが大事
152 :
141 :2011/06/05(日) 12:19:39.53
ボトルネックを充分に潰して更にパフォーマンスを上げたくても、そういう小手先まで踏み込むのは考えないほうがいいの? メモリ管理のほうは自分で確保して使ったほうが面倒だけどやっぱりパフォーマンスいいのか。 標準実装されてるのは汎用的なメモリ管理手法だろうから当然の結果だろうけど。
154 :
デフォルトの名無しさん :2011/06/05(日) 12:48:56.94
>>153 たとえば、ネットワークがからむ部分で、最適化だなんだっていっても、
結局、出て行くネットワークストリームは、IP層ではバラバラにパケット
は分割されて、必死に最適化する人間にとっては途方もない無駄な処理が
ルーターでなされる(笑)
そういうシーンでギリギリの最適化など片腹痛い
>>153 「コードが長くなるなら」って前提抜きにしてるのはなんで?
少しでも短く、読みやすく、少ないクラス数で必要な機能を実装するべきだ。 クラス、メソッドは有限の希少な資源である。あればあるだけ管理コストが増す。 無駄なアクセサメソッドだらけのクラスはどんどん削除せよ!
goto
>>153 プロジェクトでは基本ある程度のパフォーマンス目標たてて、
それなりの結果が出たらあんまりそれ以上のパフォーマンス追求などしないんじゃないか?
よっぽど酷いコード(昔引き継いだStringでnewしまくりコードとか)でも最近の性能だとそんなにネックにならないほどだし。
(さすがにあれだけは直したいが…)
大量処理バッチでもない限りはそこまでは気を使わないことが多いんじゃ?。
後のメンテしやすさの方が何百倍も大切だって。
もっとも、俺のコードが他人がメンテしやすいとはいまだにあんまりあまり思わんけど。
そもそも、javaそのものはトリッキーな高速化はあんまり出来ない気が。。。 C/C++ならトリッキーで見にくい代わりに速いコードも書けるけど
最適化とかいうなら、そもそも int getFoo() { return foo; } みたいなのもメソッド呼び出しコストとかであんまりよくないんだろうけど、 さすがに Java の API がみんなちゃんとアクセサメソッドを 通じて値にアクセスするのに、身内のコードだけ直アクセスは格好悪いw だから、これくらいはいいだろう
>>160 それだけだと大抵はJITでインライン化されるから最適化する価値ほとんどないぞ。
事前にjitで機械語に変換済みのものを実行時にロードするだけにしたほうが速いのにね。 毎回jitしてるのって馬鹿みたい。
事前コンパイルは実行時より最適化するための情報減るからなぁ。
例えば
>>160 のでgetFooがオーバーライドされる可能性消せないとインライン展開されなかったりするし。
みなさんたくさんの情報どうも。 初心者なんで小手先の最適化(笑)しかできないんで勉強になりました。
165 :
デフォルトの名無しさん :2011/06/05(日) 15:11:45.58
良いか悪いかは別にして・・・ パフォーマンスに関係は無いと思って if 文で書けるところを極力 switch 文で書いている。 可読性が極端に上がるような。 てか、昔 if( a && b && c && d && e && d && f && g || h ) { ... } else { ..... } とか、 if( ){ if () { if () { if () { if () { if () {} 見たいなアフォなコードを書きまくられて、 デバッグも分けワカメ状態。
JAVAでbyte型の動的配列の確保ってどうやってやるんですか?
動的配列っつか、可変長配列はないな。 標準ライブラリだけでやるならByteArrayOutputStreamあたりで代用するしか。 動的に確保された配列だったらnew byte[1024] とか。
168 :
166 :2011/06/05(日) 15:54:04.10
>>167 可変長の配列の確保は無いとは・・・
どうにかByteArrayOutputStreamで対応できないか、プログラムを書き直して見ます。
レスありがとうございました。
>>168 List<>とかと組み合わせてて使ったらいいやん
172 :
166 :2011/06/05(日) 16:31:21.71
>>170 ラップしても試してみたのですが、上手くいかず他に方法はないかと思い、ここで質問してみたんです。
やったことに関しても書くべきでした、すいません。
ソートのプログラムを作成中分からないことが出てきたので質問です。 例 class A{ int a,b,c; } class B{ int a,b,c; void getvalue(int a,int b,int c){ this.a = a; this.b = b; this.c = c; } }
175 :
174 :2011/06/05(日) 18:19:46.06
MAIN内 〜 A、Bを宣言、Aの中身をいじる。 for(int i=0;i<MAX;i++){b[i].getvalue(a[i].a,a[i].b,a[i].c);} for(int i=0;i<MAX;i++){(クラスA内のaの変数を元にソート)} 〜
176 :
174 :2011/06/05(日) 18:23:12.76
この場合、Bに渡されたのはAのアドレス値でBをソートするとAの中身も変わってしまいますよね? ソートによってもとのデータを変更されるのを防ぎたいのですが、調べたところオブジェクトは参照のアドレス渡ししかできないようなことが書いてあったので手詰まり状態です。 オブジェクトの値渡しをするにはどうすればいいのでしょうか? 忍法帖うぜぇ
このような場合、直接値をいじるのではなく、結果をコピーして返す方法を取る。
というかよく読んでなかった。 そのコードだったら、値が渡されると思う。
オブジェクトの参照の値渡し!(キリッ というか、プリミティブはオブジェクトではない
>>176 > Bに渡されたのはAのアドレス値で
a, b, c の何れかがアドレス値でなければNO。
> BをソートするとAの中身も変わってしまいますよね?
A[] a; B[] b; a == b が成立しないなら変わらない。
オブジェクトの参照の値渡しを世間では参照渡しと呼ぶ
世間が狭いんだな
参照渡しと言えば、C++の参照や.net系言語のoutだろ。 Delphiやら他の言語でも参照と言えば大概その系統のものを言う。 制限付きのポインターを参照と言ってるのはJava系統の言語ぐらい。
185 :
174 :2011/06/05(日) 21:04:43.41
>>177 ,178,179,180
ありがとうございます。
ソースとは全然関係のないところのバグでした・・・orz
最適化の話が出てたんで便乗してソース見てもらっても大丈夫かな? 進化計算とやらで遺伝アルゴリズム書いたんだがもっとうまくできそうなんでアドバイスをもらいたい。
出来るだけ少ないクラス数でプログラムするって オブジェクト指向に反してないか? 無駄なクラスを作らないって意味なら良いんだけど
188 :
デフォルトの名無しさん :2011/06/06(月) 17:59:30.56
JavaでGUIのふるいチュートリアル(Sunにあったやつ)の日本語版みたいんだけど、 もうないのかな・・・ 知ってる人いたら、教えてくださいm(_ _)m
>>186 そんなもんCみたいに書けばいいよ
遺伝アルゴリズムクラス作って入出力のインターフェイスはしっかりカプセル化
でもそのクラスの中では割り切ってオブジェクト指向とか無視でおk
数値計算なんかで本質的なアルゴリズムの部分にオブジェクト指向持ち込むと
設計も実装も面倒だし後で変更しにくいし最適化もしにくいし
汎用化するよりも条件固定したほうが最適化効くからなあ。 ほとんど継承されることのないクラスが出来上がるw
191 :
忍法帖【Lv=3,xxxP】 :2011/06/06(月) 20:18:22.05
スレチかもしれませんがAndroidスレが消化されたためここで質問させて頂きます。 一つのTextViewに大きい文字列を入れ改行をし、 小さい文字列を入れたいのですがどういう考えをすればいいでしょうか。 Stringの文字列自体にフォントサイズの情報を入れることってできましたっけ?
192 :
デフォルトの名無しさん :2011/06/06(月) 21:34:09.56
for (int i = 1; i <= 10; i++){ sum += i; この文の「+=」の演算子の意味って何でしたっけ?
sum = sum + i;
195 :
デフォルトの名無しさん :2011/06/07(火) 02:28:31.25
>>192 個人的には・・・
どーせ最適化されるんだから、
sum = sum + i;
って書いておいたほうが分かりやすいような。
sum ++;
ならまだしも、
おバカな外人に困ってます。
int a = 10;
int b;
b = a / 3 * 3;
これをバカな外人が「clean up」と称して b = a; と書き換えてしまうのです。
b が 10 ではなく 9 になる、ってことを外人に教えたいんですけど
javaの仕様として公式にアナウンスしているページを教えてください。
外人に「read this.
http:// 〜〜〜」って言ってやれば説明する手間が省けますもん。
import java.lang.Math; public class NewtonMethod { public static void main(String args[]){ double x = 0.785; while (true){ double x2 = x * 2; double xN = x - (Math.cos(x2) - x2 + 1)/(- 2 * Math.sin(x2) - 2); if (xN >= x){ break; } x = xN; } System.out.println(x); } } これを複数のクラスにするにはどうしたらいいんですか?
OracleJREとOpenJREの同じjavaバージョンで、xml関連の処理で動く動かないの差があります。 そもそも、Oracle問わずJREと言われる範囲はjava.*javax.*のパッケージで、org.*はオプションで入ってるからJREの仕様ではないということでしょうか。
オラクルのサポート受けたいだけならオラクルに連絡しないと。
動的に作成したlistViewを他のボタン等が押された時に、画像やテキストを変えたいのですがどうすればいいのでしょうか。 listView自体をタップした時はsetOnItemClickListenerに処理を書いて、 onItemClickの引数のparent,view,positionでgetItemAtPositionを使えば押された部分のリストを処理できますが、 ボタンなどを押された時の処理でlistView.getItemAtPosition(x)として、xが1だろうが2だろうがlistViewの0番目を処理してしまいます。
すいませんandroid質問スレと間違えましたので無視してください。
205 :
デフォルトの名無しさん :2011/06/07(火) 20:07:08.82
Java(tm)plug-in 2 SSV Helper ってなんの為にあるの?
JDBCについて質問です。 必ず一件以上のレコードが格納されている筈のResultSetオブジェクトがあるのですが、 そのオブジェクトのgetRowsメソッドを呼ぶと結果として0が返ってきます。 どうしてこうなるのでしょうか?
>>206 RsultSetに、1件以上格納されていることをどうやって確認したのでしょう?
208 :
デフォルトの名無しさん :2011/06/07(火) 21:25:55.54
>>206 getRowsなんてメソッドないぞ
getRowメソッドのことだとして
getRowは現在行だからnextして現在のポジションが取れるだけ
行数がほしいならlastしてからgetRowすれば取れるけど
ふつーは件数取得するクエリは別で流すかな
JavaMail ( javax.mail.* ) は、自由に使用して良いものですか? 商用目的で Servlet に組み込んだ場合、ライセンス違反となりますか?
JavaMail のライセンスを読むと、 > 3. Permitted Use. に > Commercial Use. > You may use Software internally for your own commercial purposes. と書かれており、商用利用も可能なように思いましたが・・・どうでしょうか?
>>129 知らんかった…てか前方互換気にしてか、他所のプロダクトでも
そんなの見たことないな…
class.getResourceAsStreamのストリームはクローズしなくても良いのでしょうか?
してね
>>213 これってメモリ系Streamじゃないの?
>>214 ファイルをクラスローダーが知るクラスパスから探して開くもの
216 :
デフォルトの名無しさん :2011/06/08(水) 13:45:27.43
eclipseにスナップショットみたいな機能は無いの?
本屋さんで、JavaScriptがJavaコーナーに並んでいると、HTMLとかのWeb製作のコーナーに 直してしまうよね(´・ω・`)
何病だよ?
220 :
デフォルトの名無しさん :2011/06/08(水) 18:47:50.15
俺のブレークポイント設定方法www int a=1/0;
>>218 やっちゃうなぁ。。。
javaとjavaScriptは別だ!!!ってのも在るけど、自分は本好き故の職業病(職業本屋じゃ無いのにw)
>>218 気持ちわかる
おいらハード本業だから verilog や VHDL の本が C とかの棚に置かれてると
置きなおしたくなる
224 :
デフォルトの名無しさん :2011/06/08(水) 20:15:56.53
ある文字列がメールアドレスの書式として正しいことをチェックしてくれる標準メソッドはありませんか? 存在しない場合、メールアドレスの書式として正しいか確認するための正規表現を教えてくださいですm(__)m。 自前で書いてみたのですが、次から次に漏れるメールアドレスが出てきて、涙目状態です。
boolean String#isMailAddress(String s)
226 :
デフォルトの名無しさん :2011/06/08(水) 20:27:10.04
JAXBで質問です。 abstract class Fruit{...} class Apple extends Fruit{...} class Orange extends Fruit{...} class FruitPair{ Fruit fruitA; Fruit fruitB; } で、このFruitPairと言うコンテナクラスを次のようなXMLに marshall、unmarshallしたいのです。 <fruitPair> <fruitA><apple>...</apple></fruitA> <fruitB><orange>...</orange></fruitB> </fruitPair> 次のように子要素を<fruitA>, <fruitB>でラップしないのであれば @XmlElementRefを使えば出来るのですが、簡単にラップするには どうすれば良いのでしょうか。 <fruitPair> <apple>...</apple> <orange>...</orange> </fruitPair> あとFruitについてはinterfaceだと上手く@XmlElementRefが動かない のでabstract classにしているのですが、これもinterfaceにする方法は 無いでしょうか?
教えてください ExecutorServiceについてですが、一旦shutdown()したインスタンスは再利用不可なのでしょうか?
void shutdown() 順序正しくシャットダウンを開始します。以前に送信されたタスクが実行されますが、新規タスクは受け入れられません。シャットダウン後に呼び出しを実行しても、効果はありません。
えと、shutdownしたらexecute等で新規タスクを実行できなくなるのは理解しているのですが、 その後、なんらかの方法で再度タスク実行可能状態に復帰できるかどうかが知りたいのです。 当方が調べた限り、方法はなさそうでした。 shutdown要求から、実際に処理が完了するまで間があるので、再利用は考慮されていないのでしょうかね?
shutdownを呼んだからといって、実行中のタスクが即座に終了されるわけではないから、 そのタスクが走っている間に、一度shutdownしたExecutorServiceをshutdownしていない状態にできないかってこと? それをやる意味がよくわからないけど。
>>224 commons の validatorのソース見てみるとか(ちゃんとチェックしてんのかは知らん)、
他にもサンプルゴロゴロしてるだろ…
>>216 君の考えてるスナップショットってのがどういう機能かわからんが
ローカルで履歴管理はしてる。
FreeBSDでJavaやろうと思うんだけど OracleJDKかOpenJDKのどっちか入れたいんだけど 何か違いに関する注意点とかあったらおせーて
オラクルのサポートが必要かどうか程度。 オラクル公式対応してるのか。とはいえweblogicもoracledbも対応してなさ層だからマク並に意味無さそうだけど。
>>218 wwwww
スレ違い本ネタだが、
昔Windowsの棚にTRONの本が何冊か並んでる事があってな、
その中に一冊だけパーセプトロンの理論の本がまじっとったんじゃ。
どうしたものかとwwww
>>232 わかりにくくてすみません
やりたいのは、ExecutorServiceに複数タスクをexecute後、awaitterminationで全タスク
完了まで待機
→全タスク完了後、次の複数タスクをexecute、全完了待機を繰り返すことです。
この場合、awaitterminationのため、ExecutorServiceをshutdownする必要があるのですが、
ExecutorServiceは使いまわししたいなぁということです。
>>236 いやぜんぜん違う。
xmlの使用されるパーサーが違ったりとか、バンドルされてるクラスが違う。
以前xmlのドキュメントをシリアライズで送ったら、違うOSでそのクラスがないからと行ってエラーになった。
>>236 FreeBSDにOracleJDKってあったっけか?
242 :
デフォルトの名無しさん :2011/06/09(木) 10:43:52.99
>>235 ありがとう。
いついつの何時の状態に戻す、とかの機能ってあるのかなぁ、と。
>>242 Eclipse自体の?
それは無いんじゃないかなあ。
Eclipseディレクトリ全部をバージョン管理に突っ込むとか。
>>237 Oracleのサポートはビジネス版じゃないと無いぞ。
>>240 そら非標準機能だからじゃないの?
>>236 がしかし、標準機能でも実際に違いはあるのでOracleJDK使っといた方が無難。
>>239 完了待ちにshutdown&awaitTerminationを使わなくてもよいのでは?
繰り返して待つだけなら、CyclicBarrierを使うというのもいいと思う。
246 :
デフォルトの名無しさん :2011/06/09(木) 12:31:38.17
柵杭問題について、質問 結果的にコードの中に-1がたくさん出てきてデバッグができなくなってきてます。 要素の数に関しては、要素の数-1を基本としてますか?要素の数を基本としてますか? たとえば、 要素の数を数える場合は普通 int count = 0 ; //ゼロからはじめる で数えるときは count ++ ; //カウント とすると思うのですが、それを配列にそのまま突っ込むとNG h[count] = 0 ; // NG h[count-1] = 0 ; //OK for の場合も for(int i=1 ; i<count-1 ; i++){} //NG for(int i=0 ; i<count ; i++){} //OK 配列を0からでなく、1から始めるとするなら、 for(int i=0 ; i<count ; i++){} //NG for(int i=1 ; i<count+1 ; i++){} //OK ・・・で 数を数えてそれを利用し表示するケースが多々の場合は配列は1からはじめ 標準的なコード(マイナスが多く出ないとか、あまり考えなくても良い)の場合は配列は0から始めると。 結局どちらがよいのかとか、指針とか方針とか、なにかあったら教えてください。
>>244 非標準機能の範囲の定義は?
java.*だけとか?
248 :
236 :2011/06/09(木) 20:55:17.43
>>246 何がいいたいのか分からんが、配列のインデックスが「0」開始は、ほとんどの言語で常識だぞ…
250 :
デフォルトの名無しさん :2011/06/09(木) 22:45:13.65
>>249 たとえば、10個の配列を使いたい場合、0の配列をすてて
int h[] = new int[11]
としたほうが、アルゴリズムを組むときに分かりやすい場面が多いんじゃないかということ
>>250 オナニーするときはそれでいいけど、
セックスの時は止めた方がいい。
混乱するだけだw
>>251 上手い例えだなぁ。
>>250 日本だとビルの地上階は1階だけれども欧州だと0階だったりする、
その程度の違い。7階建てのビルでも欧州だと最上階は6階とか。
日本人にとっては解りにくいなぁと思っても、そういう番号付けに
慣れた現地の人にとっては全く問題は無い。むしろ勝手に日本式の
番号付けを持ち込まれるとかえって混乱する。
というわけで、郷に入れば郷に従え。世の中の大半のJavaプログラマ
は0番要素開始に慣れていると思うから、それに従った方が良いよ。
250はprologプログラマになるべき
VBなんかまさに
>>250 のような考え方だし
FortranとかCOBOLみたいに添字が1から始まる言語もけっこうあるぞ
実際書籍に載ってる擬似コードなんてほとんど添字は1からだし
数学の数式で使う添字だってほとんどがそう
>>245 遅レスすみません。
CyclicBarrierというものがあるのですね。検討してみます。
256 :
250 :2011/06/10(金) 00:54:04.17
>>251 俺も上手いとおもったw
>>252 日本式かどうかは分からんけど、
0からはじめても、1からはじめても、プログラム中に+1や-1が多々出てくることには変わりない。
CのStringみたいに、10文字だけど int h[11]とせねばならないときもあるし、
0にプロパティや情報を含めたいので敢えて0をあける場合もある。
一番の問題は、配列だけを使っているときではなく、
添字に対する演算やアルゴリズムが絡んでくるとき。
この場合すべての添字の演算に+1か-1が絡んでくる
1からはじめるとそれが激減する。
その方がいい場面もあるんじゃないかと。
みんな無理して0から使っているのかなぁ。
257 :
250 :2011/06/10(金) 01:04:40.18
>>254 数学なんかで「実数」的に使う場合は、1からはじめないと不具合が多々でるよねぇ、
と思っているんだけど。どうなんだろ。
>>253 >>253 Prologは、538kmくらい遠くに離れてると思う。
境界条件とかを置くならまだしも、あえて0番目を無駄にして1番目から始めようとは思わないな
259 :
デフォルトの名無しさん :2011/06/10(金) 01:25:19.34
Java→Native(JNI)の呼び出しで、引数に文字列領域設定して Native側でそこに文字列設定するのってどうやるんですか? (Native関数のポインタ渡しみたいなイメージ) #Native側でのSetObjectArrayElementによる文字列配列渡しなら見つけたんですが。。。
>>250 真面目な話すると、配列の添字ってのは、
配列先頭要素からの距離を表してる。
だから0から始まる添字は距離や位置に関する
アルゴリズムと相性がいい。
あと、数字はマイナスは無視できても、
0の状態が必要なケースが多い。
実数なんかは0〜1によく正規化される。
その関係でも、添字は0から始まる方が手間がかからなくて良い。
例えば、時間は、0時を24時で読み替える事はまず無い。
なので1時間毎の予定を配列に詰め込む場合はschedule[時]=予定で済む。
あと
>>246 だが
h[count++]じゃだめなのか?
ある文章の特定の文字列に対して、 色をつけるため文字列置換(<font>タグをつける)を行っています。 内容は 大文字、小文字を区別しない hello, Hello, heLlo全て置換 姓名の間に空白があっても置換 山田太郎, 山田 太郎の両方置換 大文字、小文字区別なしは Pattern.compile(regex, Pattern.CASE_INSENSITIVE).matcher(text).replaceAll(変換文字列); でできました。 が、空白が含まれる場合ができません。 どのように処理すればよいでしょうか?
Calendarの月も0ベースなのは閉口した
264 :
250 :2011/06/10(金) 13:09:48.71
>>261 >配列先頭要素からの距離を表してる。
javaはそうかもしれないけど、
添字 0 がその配列の格納しているアドレスをさしていることもあるよね。
アルゴリズムというより、プログラム言語依存なんじゃないかな。
あと、
時計と距離は、まさに柵杭問題
特に時計は、柵杭問題の、円状になっている柵杭だから、
杭と柵の数が同じになっている。
この場合は多くの場合、+1だとか-1だとかを考慮する必要がない。
count % 12 とか count % 24とかでスマートに対応できる。
>h[count++]じゃだめなのか?
ループ無いで複数h配列を参照する場合、添字の記載が異なるのはミスを誘発するので絶対NGだと思う。
265 :
250 :2011/06/10(金) 13:18:32.47
>>263 0月って無いもんねぇ。
細かい話をすると、
それをいつ修正するんだ?
と言う問題に常に悩まされる。
内部処理ではずーーーと0のままで表示のタイミングで+1とするのか、
final static Shinnendo = 4: //新年度
としているのでアルゴリズムの中では+1が前提でアルゴリズムを組むのか。。。
たとえば、8月は国民の休日がないってことで
boolean isKyujitsu( int month){
if ( month == 8 ){ return false }
return true;
}
としなきゃならないところ、配列を0から始めるとするなら
boolean isKyujitsu( int month){
if ( month == 7 ){ return false }
return true;
}
これじゃ、あとでプログラムを読んだとき、
「あれ?7月って休日なかったっけ?」
みたいなシンプルな問題が発生する。
列挙体置いといて 月 == 8月的にすればよいのでは
267 :
250 :2011/06/10(金) 13:40:34.35
つっこまれそうなので、念のため。 Calendar系なんかでもよくあるんだが、 配列は0で始めて、すべて月数は、−1で処理すりゃいいじゃないか、と思う人も多いと思うが、 場合によっては、「すべて0から始めるー1」で処理できないこともある。 例えばこんな関数はどうだろうか? int nextMonth( int month, int input ) { //inputはユーザ入力 return ( month+input ) % 12 ; } この際、input と言う変数には、−1された数字が入っているのか、 そのままの数字が入っているのか不明瞭。 アルゴリズムが複雑になれば、このようなケースが頻発する。 すべての変数、式に対して+1されるべきなのか、−1されるべきなのか、そのままで良いのか 全部考えにゃならん。 だったら、1から始めた方が・・・となるのもよくわかる。
268 :
250 :2011/06/10(金) 13:53:16.94
>>266 そりゃ、まずいと思うよ。
コードの中で月が0〜11なら、列挙型で扱うとしても
0〜11としておかないと、
どの変数のどの位置が0〜11で、どこが1〜12なのかが混乱してバグの温床になる。
>>266 Calendar.JANUARYとちゃんと定義されとるがな
>>267 ドキュメント書け読め、で済む話のような。
アホスレだとは思っていたがとうとう配列の添え字までレベル落ちてきたか
固定長の配列なんて積極的に使うものじゃないよね。 Collectionを使うよね、普通。
おしっこ
274 :
250 :2011/06/10(金) 15:24:55.74
>>270 月で、
0〜11の場合、潜在的なアルゴリズムバグの可能性が大きくなる
ので、
1〜12の方があんぜんなんじゃない?と言う話。
ドキュメントを書くのはどっちでも良くて、書いても書かなくても、結局どっちが良い?って話デス
>>272 パフォーマンスが悪すぎるのと、
たとえば、13月みたいなバグが露見せず潜在的なバグとなる方が致命的だと思うけど。
内部的には0のままがいいんじゃない? 表示するときに変換
それが嫌だって話では
カプセル化とはなんだったのか
ゆとり乙
計算するときに1足すのはいいんじゃないの?
その例だと普通はinputは1から始まるんじゃね?その前に javadoc書いとけ
>>274 >>267 に書いてあるような問題点なら、ドキュメント書け読めで十分だな。
CalendarならaddやrollがあるからnextMonthみたいのを
自分で作ってバグだすのって単なる間抜けとしか思えないし。
そもそも+1 -1を忘れるだけのものをアルゴリズムバグとか阿呆すぎんだろ
ゆとりってばかだな
>>265 0-12までの数字に、英語読みの定数割り当てれば良いだろ
間違えた 0-11だった
Calendarなら既に定数定義してあるが……
標準APIにあるのに新しく定義しちゃう人って… というか0開始で問題になるのって具体的にどんな時なんだよ
数値は自然数。計算するから 連番ラベルは0から。オフセットがわかりやすいから と習った。
>>288 if(calendar.get(MONTH) == AUGUST) return false;
でOK。
291 :
250 :2011/06/10(金) 22:19:32.34
>>290 ポーカーの場合、5枚目って名前を付けるのかい?
なんだCalendarについては間違いでしたと認めるのか
ポーカーの一枚目がhand[0]で何か問題あんの?
頼むからJavaの話をしてくれ
JavaFXって将来性あるの?
296 :
250 :2011/06/10(金) 23:48:47.28
>>292 君が最初からずれてるよ。
別段Calendarの話をしているわけじゃない。
Calendarは、柵杭問題において、ほとんど問題にならない「はず」の事例だけど、
それでも問題がおこるよね???って話だよ。
べつに、ポーカーだって麻雀だって良い。
麻雀のドラは、柵杭問題がまったく問題にはならないが、
それ以外のほとんどは、柵より杭が1つ多いって話だ。
Calendarで鬼の頭をとったと思わないように。
ではイテレータとはなんだったのか
298 :
デフォルトの名無しさん :2011/06/11(土) 00:10:55.68
>>295 ゼロ
というかとっくに流産して終わっている
イテレータをもっと普及させたい 拡張for文撲滅活動にさんかしないか?
鬼は首を取るもんだ
302 :
250 :2011/06/11(土) 00:57:54.54
>>301 いや、首すら取れてないって意味なんだけどw
まんこ
ファイルの文字コードを変換するプログラムを作りたいんだけど、 一行ずつ読み込んでから、outputStreamで文字コード指定してやらないとダメ? なにか便利なAPIは無いのかな、と。Javaで完結したいんでnkfコマンドはあんまり 使いたくない
Reader r = new InputStreamReader(new FileInputStream("in.txt"), "EUC-JP"); Writer w = new OutputStreamWriter(new FileOutputStream("out.txt", "UTF-8")); char[] buf = new char[999999]; int n; while ((n = r.read(buf)) > 0) { w.write(buf, 0, n); } w.close(); r.close();
括弧まちがえた × Writer w = new OutputStreamWriter(new FileOutputStream("out.txt", "UTF-8")); ○ Writer w = new OutputStreamWriter(new FileOutputStream("out.txt"), "UTF-8");
メモリ取りすぎだろ・・・と思ったけど最近だとそうでもないのかね。
おー! ありがとう! 入力には謎のファイルを読み込みたいんでEUC-JPをJISAutoDetectにしてみました――けど これってUTF-8,16には対応してないんだね。この辺はちょっと自分で考えてみるよ
sound APIでマイクの入力についてやってるんだけど、 マイクで録音した音声ってどうやって合成できる? それに加え、再生するときにFloatControl.Type.MASTER_GAIN取得して音量調整しようとしても java.lang.IllegalArgumentException: Unsupported control typeとエラー吐くんだが、対処法ってあるの?
今更だけどその世界の常識(=言語仕様)に従えば良いんじゃね ソース扱う人ならJavaは0-11ってみんな分かってんだから JavaのCalendarの問題どころじゃ無い明らかに筋違いの仕様とかもあるじゃん 決めてんのは欧米人だから感覚の違いもあるんだろう
>>295 JavaFXは299の言うとおり終わってる。
JavaFX2.0はひょっとしたら普及するかも。まだベータのはずなのでなんとも言えない。
ちなみにJavaFXとJavaFX2.0はもはや別もの。
JavaFX2.0ではスクリプトが使えなくなって、ライブラリベースになってる。
配列の添字は、由来はアドレス計算のオフセットなんだから、 一つ目の要素が0番目なのは、すごく気持ちがいいと思ってたんだけど、 そうでもない人もいるんだな。
JavaFXってそんなんなっちゃってたのか 知らなかった Swingに取って代わるのか?
>>312 世の中なんでも1からなのに、プログラムの世界だけ0だからね。
初めてプログラム組む輩にとっては不自然で耐え難きモノかと思うよ。
単に慣れの問題っつーだけだな。
添字に1って書くと、元の場所から1離れた場所ってイメージだからなぁ。
さいころ
字面の問題と格納場所の問題は違る
気に食わなければ、他の言語に乗り換えれば良いだけだろ
別に添え字が0スタートだと紛らわしい場合があるよね って話をしてるだけなのに他の言語に乗り換えろはないだろ スレ違いってなら同意するが
配列とか時代遅れ
他の言語に乗り換えるほうが手っ取り早く解決できて皆幸せだと思うが。
>>313 SwingのスレッドとJavaFXのスレッドが別だと聞いて戦慄した
というか今JavaFXちゅーとすでにJavaFX2.0のことで、 1.xのころのはJavaFX Scriptっていう名前に先祖返りして呼ばれてる。
javafxの記事でよく出てくるんですけど、adobeのようなデザイナーツールって例えばどういうのを言うんですか?
327 :
デフォルトの名無しさん :2011/06/11(土) 16:56:12.81
すいません。対応できないので、教えてください。 使用OS Xp Pro Sp3 java1.3.0がインストールされているようなんですが、 プログラムの追加と削除を見ても見当たりません。 このバージョンのjavaがインストールされているために、 あるサイトが正常に起動できません。 アンインストールしたいのですが、どのようにしたらよいでしょうか?
一番確実なのはOS再インストールだな
できます
332 :
デフォルトの名無しさん :2011/06/11(土) 20:15:35.44
よろしければやり方を教えてください
それは自分で調べてください
fillがあるならdrawもある
336 :
250 :2011/06/11(土) 21:14:02.32
>>312 いやいや、
確かにメモリを意識すると、0からが良いんだから、
アセンブラ上がりの人とかは0じゃないと許せないんだろうけど、
これが偶数を意味するんだよ
if( a % 2 == 1 ) {}
だからなんだというのだね
338 :
250 :2011/06/11(土) 21:26:39.46
これはどうだね? ある値が偶数なら、find () 関数で得られた数字に対応する配列 h[] をもってくる、と public class Test{ int a; Test ( int a ){ this.a = a; } int getH( int a ){ if ( a % 2 == 0 ) { return h[ Class.find (a) ] ; } ところが、この a 自体も別の配列 g[] を呼び出す添字になっているなら、 この a を計算するすべての場所において 実数-1ですべてを計算しなければならないよね??
日本語でもまともに説明できない サンプルでもマトモに説明できない
カプセル化とはなんだったのか
341 :
250 :2011/06/11(土) 22:30:14.47
>>340 カプセル化の中は、0なのかい?1なのかい?って話。
基本、0から
というのであれば、隠蔽されたクラスの中でも偶数は
a % 2 == 1
だよね?????
偶数の定義は?
arrayの先頭が奇数アドレスであれば、index % 2 == 1 のとき array[index]でアクセスする場所は偶数アドレスである、とか。
カプセル化すら満足にできていないコードを出されても困るんだが
>>343 Javaの場合はユーザ側で値型定義できないからそうなるのはbyte[]だけだな。
カプセル化どころか問題点の指摘すら満足にできてない……
>>329 javafxにはデザイナーツールがないないとかよく書いてあるけど、それならjavafx 1.xのころから用意されてるんじゃないの。
349 :
250 :2011/06/11(土) 23:18:27.25
>>344 だ〜か〜ら〜
カプセル化で隠蔽した中身は、0ベースなの?1ベースなの?って聞いているのよん
そんなもん自分で決めろよ
カプセル化したんなら隠蔽した中身がどうなっていようがどうでもいいことだろう。 350が言うように実装は自分が決めればいい。
偶数が1, 3, 5 ... だったとしてもいいじゃん
エスパーにトライしてみる。 配列のいちばん最初が1番目として 偶数番目の要素はインデックスには奇数を使わなくてはならない。 これはオカシイ!
自分であとから見ても理解出来無い様な実装は避けたほうがいいかと。 カレンダは別に、連想配列とかにすればいいだけな気がする。
つか偶数奇数で何を別けたいの? 概念的に次元をもう一つ増やせば すむだけの話だったりすんじゃね? getH(int a) → getH(int a,int b)//bは0か1
356 :
250 :2011/06/12(日) 02:18:15.79
>>353 いやいや、エスパーがビンゴでございます。
念のため。
別段偶数奇数に限定しているわけでも、カレンダーに限定しているわけでも無いです。
ようは、
自然数と、0で始まる配列には1個のズレがある、ということです。
アルゴリズムを考える時に、常にマイナス1を意識しないといけないのはバグの温床では?ということです。
問題なのは、
常に意識しつつ
マイナス1をしないといけない場面と、
プラス1をしないといけない場面と、
プラマイゼロでもいい場面がある、
ということです。
表示や最終的な値に直すときに修正すればよいという考え方もありますが、
自然数で扱うと、アルゴリズムの部分は難しく考える必要がまったくなくなります。
コードバグとアルゴリズムバグの分離をしたほうが良いのでは?
という話です。
人間の値と、PC内の値を分離してる限り悩むことはないけどな。 そもそも。index<sizeの概念が基本なんで。1から考えるときはindexじゃなく sizeで考えとけばいいだけの話。普段からindexとsizeを身長と体重ぐらい 別概念で考えとけばいい。
358 :
250 :2011/06/12(日) 02:27:10.05
>>351 実際に、
その実装者の決めた内容と、
ドキュメントを読んで実装した人に齟齬があったおかげで
バグが発生するケースは今まで結構あったでしょ???
例えば
5C問題なんて有名な話。
すべてのjavadocの配列を扱う関数に、
配列は0から始まります、とか
コードはUnicodeで扱います、とか
マイナスは考慮してません、とか
0は扱えません、とか
1から始めても構いません、とか(検証を含めて)
この関数は自然数で扱います、とか、
自然数は扱えません、とか
書いている?????
359 :
250 :2011/06/12(日) 02:28:33.82
>>357 ああ、
いままでで2番目(ごめんなさい)にすっきりする回答だわwww
ちなみに一番目は、
>>251
360 :
250 :2011/06/12(日) 02:33:29.01
すまん、
>>357 のおかげで少し頭ん中がまとまった。
( ということは一番良いレスということかw )
1.レスは馬鹿が多かった
2.Sizeで宣言した配列に、indexでアクセスできるから問題なんだ
なるほど。
コボルに並ぶアホ向け言語だけあってスレのレベルもなかなかのもん
だからあれだよ。 1番目の位置にアクセスしたいなら、size==1の配列の末尾要素にアクセス すると捉えりゃいいいんだよ。
363 :
250 :2011/06/12(日) 06:59:13.43
>>361-362 勘違いかな?
なんで1番目の要素が0やねん、と言っているわけじゃないことは理解できるかな?
別に、0だろうと、1だろうと構わないんだけど・・・
364 :
デフォルトの名無しさん :2011/06/12(日) 09:25:32.44
学校の課題です。2時間かけましたが、できなかったので諦めてここで聞かせてもらいます。 一応、自分でオリジナルのクラスを作るという授業の課題です。 電卓のクラス 簡単な計算ができる電卓のクラス Calculator を作りなさい。下に示す CalculatorMain クラスが正しく実行できるようなクラスにしなさい。 public class CalculatorMain{ public static void main(String argv[]){ Calculator c = <Calculator クラスのインスタンスを作成する>; //現在の値を 0 で初期化する c.plus(3); //現在の値 +3 c.minus(1); //現在の値-2 c.times(5.5); //現在の値× 5.5 c.divide(2); //現在の値÷ 2 System.out.println("現在の値:"+c.getValue());//現在の値を出力 } }
>>364 初心者にもか関わらずたかが2時間で諦めたか・・・。
で、2時間で何が解らなかった?
何につまづいた?
どこまでが把握できてる?
それぐらい書き込めないんなら、同級生に土下座して
答え教えてもらえよ。ここで答え聞こうが、同級生に土下座しようが、
お前の将来の問題解決に対する態度はかわらんし、
職業プログラマになったとしても派遣になるのが見えてる。
>>364 取り合えずguiで作るか、cuiで作るか決めようか
それすら無い状態ではアドバイスも何も、用意する変数の数が全然違って来る
>>364 class Calculator{
double value;
public void setValue(double v){ value = v; }
public double getValue(){ return value; }
public void plus(double v){ value += v; }
public void minus(double v){ value -= v; }
public void times(double v){ value *= v; }
public void divide(double v){ value /= v; }
}
public class CalculatorMain{
public static void main(String argv[]){
Calculator c = new Calculator();
c.setValue(0);
c.plus(3); //現在の値 +3
c.minus(1); //現在の値-2
c.times(5.5); //現在の値× 5.5
c.divide(2); //現在の値÷ 2
System.out.println("現在の値:"+c.getValue());//現在の値を出力
}
}
> c.minus(1); //現在の値-2 これはこのままでいいのか?
>>368 キーボードかguiのボタンからから入力しなくて良いの?
371 :
デフォルトの名無しさん :2011/06/12(日) 10:19:11.60
>>368 さん、ありがとうございます。
でもこれだけではプログラムは動きませんよね?もしよければ完全なプログラムを教えてもらってもいいですか?
setvalueでとりあえず初期値doubleで設定して、その下の
---------
(double v){ value /= v; }
---------
などでクラスの働きを設定しているのですか?
C:\>javac CalculatorMain.java C:\>java CalculatorMain 現在の値:5.5 C:\>
C:\>javac CalculatorMain.java C:\>java CalculaotrMain
>>368 こういうレベルでつまづくのって、やっぱ専門学校とか
Fラン大の奴なの?
>>371 mainで
>>368 さんが実際に動かして見せてる訳だが。。。
計算機作った時のメソッドなんて、そんなもんよ?
自分はてっきり数字とオペレーターを別々に入力して、答えを表示するプログラム作る授業かと思ってたんだけど
(そこまで実装しても大して難しくないよ)
>でもこれだけではプログラムは動きませんよね? エラーを詳しく
ゆとりおつ
378 :
デフォルトの名無しさん :2011/06/12(日) 10:47:25.24
java.util.Hashtable や HashMap のソース見ればいいじゃん
だから同級生に土下座しろって。 そもそも、友達居ればこの程度解る奴1人以上は居るはずだし。 ここでそれを聞くってことは友達が居ない、または、学校でドヤ顔したいだけ。
>>378 東京工業大学ってレベル低いの?
専門卒、最低辺を自認する俺でも解るんだが・・・。
382 :
381 :2011/06/12(日) 11:06:46.08
方法だけ説明する。 1.自分のクラスへの参照と1次元の配列を持を持つクラスを作る。 2.そのクラスはputでキーと値を取ると、キーのhashCodeを呼び出す。 3.hashCodeで得た値 % 1次元配列の長さで配列の添字を得る。 4.1次元配列[さっきの添字]がnullである事を調べる。 5.nullあればここに値のオブジェクトを入れる。nullならここで終わり。 6.1次元配列[さっきの添字]がnullなら、自分のクラスへの参照がnullでないか調べる。 7,自分のクラスへの参照がnullで無いなら、自分のクラスへの参照に対し受け取った引数をput 自分のクラスへの参照がnullで無いならここで終わり。 8.自分のクラスへの参照がnullなら、new 自分のクラス();で得たオブジェクトを、自分のクラスの参照へ渡す。 そして7へ戻る。
底辺プログラマなら方法じゃなくてコードを書けや 書けないなら回答すんな
>>383 ここまで書いてもらってコードも何も無いような。。。
これで自力でコード書けなかったら、入門レベルでも勉強不足って言われるレベルだぞ
コード欲しいなら金だせよ東工大。 自分に無いものがただで貰えるとおもうなよ。
386 :
デフォルトの名無しさん :2011/06/12(日) 11:25:44.58
>>364 です!解決しました!ありがとうございます!
ゆとり(笑)
ファイル名だなw
389 :
381 :2011/06/12(日) 11:35:51.65
そういやequalsいれ忘れたわ。 まぁ、hash値の意味を調べりゃ自分で直せるよな。
>>378 class HashTable <K, V> {
private Map.Entry<K,V>[] table;
public HashTable(){ this(10); }
public HashTable(int capacity){ table = (Map.Entry<K,V>[])new Map.Entry[capacity]; }
public boolean put (K key, V value) {
for (int i = 0; i < table.length; i++) {
final int index = (key.hashCode() + i) % table.length;
if (table[index] == null) {
table[index] = new AbstractMap.SimpleImmutableEntry<K, V>(key, value);
return true;
}
if (table[index].getKey().equals(key)) return false;
}
throw new IllegalStateException("full");
}
public V get (K key) {
for (int i = 0; i < table.length; i++) {
final int index = (key.hashCode() + i) % table.length;
if (table[index] == null || table[index].getKey().hashCode() != key.hashCode()) break;
if (table[index].getKey().equals(key)) return table[index].getValue();
}
return null;
}
public void merge (HashTable<? extends K, ? extends V> other) {
for (Map.Entry<? extends K, ? extends V> entry : other.table) {
if (entry != null) put(entry.getKey(), entry.getValue());
}
}
}
× if (table[index] == null || table[index].getKey().hashCode() != key.hashCode()) break; ○ if (table[index] == null) break; だな。
>>348 されてるよ。
2.0のものは、今はないけど正式版が出る頃には準備されるんじゃない?
宿題スレでやれ
>>363 会社の新人教育とか学校で、配列の何番目から取り出すとか、
あたかも箱のように説明し、かつ、一番初めは1じゃなく0なんです。
とか、本質を説明しないことがとっても問題な気がするよ。
JavaFXにとって今後のAdobe AIR/Flashは強そうですか?
>>395 配列や変数を箱で表現と言うのは、確かに値が書き換わるのを上手く表現出来ないから、良い表現は無いかと思うけど、配列は説明したところで、0から始まるのに変わりないからな。。。
アドレスも0番地から始まるし、OSとか作るのに0から始まる方が都合が良いとかの背景は有りそうだけどな
普段のプログラミングには
場所指定の入力用変数 n
に対して
配列の添字 index = n-1
って変換してあげれば済む話だし
日本語でおか
>>398 簡単な例えだと、カレンダー関数の引数とは別に、それを元に配列のインデックスで使う為の変数を別に作ればええヤンって話
何も難しい事あらへん
>>400 だから、変換用変数用意すればおkで解決
これにて終了
なんだ、概念が違うことすら理解できていなかったのか。
ゆとり(笑)
おまえら無駄な話には食いつきいいなw
405 :
デフォルトの名無しさん :2011/06/12(日) 15:11:13.97
>>368 のプログラムについて
なぜ+valueや*valueではなくて
以下のようにvalue+とかvalue /とかなのですか?
lass Calculator{
double value;
public void setValue(double v){ value = v; }
public double getValue(){ return value; }
public void plus(double v){ value += v; }
public void minus(double v){ value -= v; }
public void times(double v){ value *= v; }
public void divide(double v){ value /= v; }
}
public class CalculatorMain{
public static void main(String argv[]){
Calculator c = new Calculator();
c.setValue(0);
c.plus(3); //現在の値 +3
c.minus(1); //現在の値-2
c.times(5.5); //現在の値× 5.5
c.divide(2); //現在の値÷ 2
System.out.println("現在の値:"+c.getValue());//現在の値を出力
}
}
valueを変化させたいのではないのか
407 :
デフォルトの名無しさん :2011/06/12(日) 15:51:12.76
>>406 なるほど、プログラミングではそのように考えるのですね!ありがとうございます!
408 :
250 :2011/06/12(日) 16:11:33.70
>>395 ポインターを積極的に使うCとかなら、配列はオフセットの考え方の方が間違いが少ないとは思う。
汎用性を持たせ、オレオレルールを勝手に持ち込まないと言う意味では、
箱は0から〜でも良い様な気もしなくはない。
409 :
250 :2011/06/12(日) 16:12:22.61
>>397 自然数を使うのは、入力と出力だけ???
いろいろあるでしょう。
ゆとり(笑)
>>405 value += v;
は
value = value + v;
のことで、
value ← ( value + v ) ;
という意味だから
>>396 JavaFX(2.0)とAIRを比較するのは筋違いにになっちゃったような。
上にもちょっと書いてあるけど、多分Swingの代替として捉えるべきなんじゃないかなあ。
Flash vs Applet(with JavaFX) がどうかってことになると思うんだけど、
現状から想像するに、強そう、とかいう以前に全く歯が立たないと思うぜよ。
なんで筋違いだと思うんですか?
非同期プログラミングと並行並列プログラミングの違いって何ですか?
待つか/待たないか
>>414 並行/並列プログラミングの中にも、同期プログラミングと非同期プログラミングに別れてるってだけ
417 :
デフォルトの名無しさん :2011/06/12(日) 17:29:32.63
javafxに最適なデザイナーツールがもう既にあるからadobeなんか瞬殺ですよね?(オラクルの資金力から見ても)
421 :
デフォルトの名無しさん :2011/06/12(日) 17:44:09.99
オフラインインストールをやると代替パス入力してってでます・・・
今更だけど、箱に例えると、普通0の箱なんて作らないから余計混乱すると思う。 番号降るのに000の箱とか見た事無いわw c言語でポインタ習った時は0始まりのヨウ素ってイメージできたけどね。 思い出してみると、フォートランとかアセンブラでも0始まりで当時は疑問に思うこと無くcpuってそんな処理なんだと思うって棚。 最近のハードだとmmu内蔵で実際のメモリアドレスなんて遮蔽されて見えないからあんまり順序に意味はないと思うけど。 メモリ割当的には、n(0),n(3),n(2),n(1)って順番に並んでるかもしれないし。 ググったらmmu単体のlsiとかあるのね。z80やh8用の外部mmuがあればプリエンティブなos実装できて楽しいかなとちょっと妄想したw
424 :
デフォルトの名無しさん :2011/06/12(日) 18:05:22.48
やってみます
>>412 2011年のジャバについてもうちょっと勉強してもいいと思いますが、もし比べるならアプレットというよりもjws,pluginあたりのテクノロジーだと思いますよ。
>>422 でもサイコロふるうとき、1が出たら1マス進むだろ?
今のマスに立ち止まったらシバかれる。
だれにシバ苅れるんですか?
javaを勉強したいと思うのですが、ガイドブックやガイドサイトはどれもこれもコマンドラインベースのサンプルプログラムばかりでやる気が出ません GUIを作れるのが最終目標なのですが、適切なガイドブック、サイト、アドバイスください
429 :
デフォルトの名無しさん :2011/06/12(日) 20:17:45.65
>>427 姉貴とその親友のめめちゃんに決まってんだろ。
そりゃ、スゴロクでは、サイコロで1が描かれた面がでたら、一つ進むという意味だからな。
>>428 2001年頃に採れた、浅いり珈琲でも飲んでろ。
>>428 Java SwingとかJava SWTとかで調べればよいのでは。
Java GUIはあんまり流行ってないらしいけど。
>>429 >会社を追われ
そりゃこの程度でプロレベルを自負するぐらいだから会社も追われるわなぁ・・・。
しかもこの曲自作してない or 発注じゃないだろ。
>>436 高い金だしてVisual ブヴィ.netとかVisual C丼 でも買えば?
今はタダでも買えるんだっけ?おっさんとしちゃどうでもいいから知らんけど。
>>436 てのは半分冗談で、EclipseならWindowBuilderとか使ったら?
とりあえずGUIコードは生成してくれるからとっかかりにはいいんじゃない?
俺はEclipseのコンソールで十分Javaの勉強はできるとおもうけど。
とくにJavaの必要性がないでGUIなら正直C#でもやったほうが早いよ。
昔はやたらGUIに拘った事が有ったけど、 今は仕事か、グラフィックスやりたいときじゃなけりゃ コマンドラインツールばっか作ってるなぁ。 GUIってプログラムの本質じゃねぇから書いてて面倒い。
とりあえずEclipseを入れてから基礎を学んでくれとしか。 スレッド周りの知識なしでGUIをやりたいって言われても 難しいんじゃないのとしか言えない。
442 :
デフォルトの名無しさん :2011/06/12(日) 20:46:36.76
>>437-441 他の言語に切り替えるとか、開発環境しっかり整えてやれ という事ですか。
ありがとうございます
>>443 NetBeansなら比較的Swingもとっつきやすいかも。
でも、初学者ならC#をおすすめする。
>>444 どうもです
今までスクリプト言語ばっかやってたから開発環境なるものがどうしても苦手で
これはしようがないか
>>445 統合開発環境になれたら、エディタで編集に戻れなくなると思うww というかおれは統合開発環境ない開発なんてダルくてできない。
>>446 開発環境はガイドサイトに乗っているバージョンと少しでも違うと動かなくなるから困る
読める・・・! 私にもプログラムがよめるぞ・・・!
ジェネリクスのキャストってunchecked毎回書いてる? 汚いよね?
ideに成れるまでが敷居が高い。 テキストエディタなら昔から使ってノウハウの蓄積があるもの。 つーか自分でアプリ作れるんだから自分のテキストエディタ使いたいよね。 オープンソースのテキストエディタがあれば自分でも弄れて違うのだろうけど。
テキストエディタにこだわる奴も IDEにこだわる奴も総じてカス 両方つかいこなせ
テキストエディタのノウハウってのは具体的になんのことか分からん
両方使いこなすのはよいのだが、 言語によって道具を使い分けるのが普通なんじゃないの。
456 :
デフォルトの名無しさん :2011/06/13(月) 16:34:48.30
JavaってJava2になってから変更が加えられたそうで、古い入門書だと対応できない部分があるみたいですが、 J2SE 1.2(1998年12月8日)以降に出た本を買えば大丈夫なんでしょうか?
457 :
デフォルトの名無しさん :2011/06/13(月) 16:41:07.50
>>456 追記
J2SE 5.0(2004年9月30日)でも大幅な拡張が加えられたみたいですが、この拡張された部分まで入門書が踏み込むことがあるのでしょうか?
たとえば現行のJavaSDK、JREで、古い入門書の内容を実行するとエラーになるとかありますか?
まずはやってみて、だめだったら考えればいいんだよ
Stringクラスのあるメソッドにブレークで止めてみると、行番号情報はあるけど引数がarg0、arg1と表示され、実際の変数名と異なります。 またローカル変数情報も見れません。 JDK/bin/javaからJRE/bin/javaで同じことをすると行番号情報がなくなっています。 これは-g月でコンパイルしたかしないかの差だと思いますが、JDKでローカル変数が見れないのはなぜでしょうか?
>>455 お前日本語ちょっとおかしいぞ
>>456 Java1.6対応って書いてある本買えば良いんじゃない
Javaの大幅な仕様の拡張は多くの場合、過去のバージョンで不便なところを便利にする変更が多いから
新しかろうが何だろうがやって置いた方が良い
JavaからPostgreSQLにアクセスして使いたいです そこで気になったのはJDBCドライバのライセンスです ライセンス(英文)を翻訳サイトで翻訳したのを解釈すると、 個人だろうと商用だろうと、とりあえず改版しなければ好きに使ってよし というふうに認識したのですが、あっていますか?
自分もJava+posgre8について質問です。 SQLインジェクションの対策をしたいですが、どうやるのがベターですか?
465 :
デフォルトの名無しさん :2011/06/13(月) 23:31:49.35
>>465 ありがとうございます
標準のAPIではないですか?
jdbcのpreparedstatement
468 :
デフォルトの名無しさん :2011/06/14(火) 00:03:15.97
>>467 え、あれってプリコンパイルするやつですよね?
あれを間に挟むと安全になるのですか?
使ってみてから言え。 そこまで教えといてもらって聞くな。
470 :
デフォルトの名無しさん :2011/06/14(火) 02:10:02.84
お初。JSPは此処でよいのでしょうか。駄目なら誘導をば。
参考ページ
ttp://www.javaroad.jp/servletjsp/sj_jsp11.htm このページのサンプルにある画面遷移処理を行いたいのですが
どうにも思った通りに作る方法がわからず難儀しています。
exPageContext.jspでは、画面表示直後にpageContext.setAttribute()、pageContext.forward()と
走らせてexPageContext2.jspに遷移しています。
これを、「ボタンが押されたら」画面遷移するという形に変えたいのですが
●<form> <submit> の形だと<form>に遷移先が記載されているので駄目
●<button onClick> だとonClick要素はjavascriptなので駄目
と、いう感じに詰まってます。
何か妙案がありましたらお願い致します。
>>463 文字列連結でSQL文を作らない。
String query = "SELECT age FROM t WHERE name = \"" + user.name + "\"";
こういうことをしなくてもどうにかなる仕組みがフレームワークなり
jdbcのpreparedStatementなり用意されている。
472 :
デフォルトの名無しさん :2011/06/14(火) 02:14:00.89
473 :
デフォルトの名無しさん :2011/06/14(火) 02:14:50.81
ググって場当たり的にアプローチするより、jdbcやフレームワークの本買って来て順序建ててアプローチしたほうがいいレベルだな。 jdbcで組んだのにソニーや任天堂の様に個人情報汚もらしとかやってしまいそう。
478 :
デフォルトの名無しさん :2011/06/14(火) 07:22:02.12
PreparedStatement って DBMS によっては LIKE とかでうまく防げないとか何とか聞いたことがある。 PostgreSQL なら大丈夫なのだろうか? バージョン 7 だか 8 だかから日本語の対応が入ったとも聞いたけど、気になるね。
PreparedStatementでSQLインジェクションしちゃうなんて 知らなかった。もう何も信じられないorz
>>470 formで遷移先をServletにするのはだめ?
>>479 真偽は不明だが日本語が絡むと厄介なようだ
これはもう、このスレの誰かが、SQLインジェクションを防いでくれるライブラリを開発するしかない。
Class<? extends A> subclassOfA = ("Aのサブクラス名文字列").class; ということをするにはどう書けばいいんでしょうか? (Class<? extends A>) Class.forName("Aのサブクラス名文字列"); としたらできたんですが、これだとAのサブクラスを初期化してしまうのですが 要は初期化したくないのです。
>>483 初期化したくないだけなら
Class.forName("Aのサブクラス名文字列", false, this.getClass().getClassLoader())
486 :
デフォルトの名無しさん :2011/06/14(火) 13:24:24.51
すいませんとんでもない課題を出されてしまったのでご協力お願いしてもよろしいですか? ニュートン・ラプソン法で下記の式の根を有効数字6桁で求めるプログラムを作成する。プログラムは複数のクラスを定義して作成すること。 4x∧3+3x∧2‐2x+2.5=0 自分でも何とか努力してみますが、教えて頂けませんか?お願いします。
わしゃ、中卒や。
>>478 likeつっても只の文字列じゃん
他と比べて何か特殊なわけでもなさそうだけど…?
>>489 俺もわからないから何とも言えないけど
俺が調べるのは面倒だから実際に吐き出されるLike文を調査して検証してきてよ
ライブラリ作るの面倒だから適当な商用フレームワークに丸投げでいいじゃん。 strutusとか無料フレームワーク使ってる乞食はこの際phpにでも移ればいい。 runtime.execでphpに処理してもらっても良い鴨だがw
String str = "幼女"; if(str == "幼女") { System.out.println("えっ?"); } えっ?が表示されてしまいます。 これで一つ目の幼女と2つ目の幼女が、同じ参照として扱われるのは、 javaでは同じ文字リテラルは同じオブジェクトとして扱われるということですか?
>>493 yes
String str = new String("幼女").intern();
if (str == new String("幼女").intern()) System.out.println("えっ?");
でも同じ参照として扱われる。
>>493 ディープコピー java
でググってみよう
>>494 なるほど、ありがとうございます。
また、こんなメソッドもあるんですね!
>>495 この書きかただと、つまりVM上から参照を貰うだけでディープコピーは
されないということですよね
497 :
495 :2011/06/14(火) 18:43:59.50
>>496 うい
"=="は値が同じかどうかしか見てないです
簡単な質問するとたくさんレスがいただけて嬉しいです
intern()したオブジェクトはどうやって削除またはいつ削除されるんですか?
>>500 煽っても同じ効果があるよ。
そういうのレス乞食って呼ぶんだけどね。
「javacが見つかりません」と文字列の問題ならまかせとけ!
intern()しまくってVMを殺すことは出来ますか?
ウィンドウ内にボタンと描画させるための領域を用意して、 ボタンを押すとJFileChooserをつかってファイルを選択し、 そのファイルの内容についてMyCanvasでグラフを描画するプログラムを組んだのですがうまく描画されません。 選択後何もしなければ何も表示されず、ウィンドウサイズをちょっとでも弄ると表示されます。 また、新たにファイルを開いた時も初めは前のグラフのままで、ウィンドウサイズをグラフより小さくするなどすると、 はみ出した部分だけ新しいファイルのものに再描画されます。 MyCanvas内でrepaintをすると、新たにファイルを開いた時に新しいグラフになってくれるのですが、 代わりにずーっと点滅しているような状態になり、また、何もしなければ表示されないのも直りません。 MyCanvas外だと効果はないようです。
>>506 ボタンの中でファイル読んだ後、repaint呼んだらいいと思う
書き換えてるパネルとかは常にトップのJFrameとつながってる? 交互につなげて表示とかしてないよね?
>>506 >>507 書いた理由は、
>選択後何もしなければ何も表示されず、ウィンドウサイズをちょっとでも弄ると表示されます。
>また、新たにファイルを開いた時も初めは前のグラフのままで、ウィンドウサイズをグラフより小さくするなどすると、
>はみ出した部分だけ新しいファイルのものに再描画されます。
という症状から、ファイルを読み込んだ直後にはpaintメソッドが呼ばれてないと予想してる
>>508 常につなげるやり方がわかりません・・・
>>507 ,509
自分のpaintメソッドの記述がおかしいのかもしれませんが、変わりませんでした。
原因追跡のためにログファイル出力をしたいのですが、 既存で便利なクラスはありませんか? なければ自作になりますが、サイクリック処理や世代管理まで自作するとなると、 それが新たなバグ要因になりかねないので、実績のある既存のがあれば使いたいです。
何もしなければ表示されない、という部分に関しては自己解決しました。 Canvasのあとにshow();と呼ぶのを忘れていました。
Java 6でSSL通信をする場合の証明書更新について、質問があります。 証明書更新した際にプログラムを止めずに、キーストアの更新を読み込む or新しいキーストアの読み込みなどが行えるでしょうか?
教えていただいた通り、PreparedStatement を使って SQL インジェクション対策をしてみました。 PreparedStatement を toString して吐かせてみたところ、 「'」が「''」に、「\」が「\\」にエスケープされていることを確認できました。 (それぞれ念のため全角の記号も試してみましたが大丈夫でした。) ということは、これで万全ということでしょうか? LIKE による部分一致やそのた特殊記号大丈夫でしょうか?
無料のDB&2chの回答にそこまで求めるな
そこでオラ来るの登場か javaでは自社のDBしか利用できないとか細工しないよな。。。
>>514 そこから先はドライバの実装によるんじゃね?
どこのDB使ってるかは知らんが、素直にサポートへ投げたらどうですか。
518 :
デフォルトの名無しさん :2011/06/14(火) 22:01:20.81
>>515 すみません、人に頼りすぎました。
このサイト構築は個人の趣味プロなので、サポート窓口の利用には抵抗があります。
ちなみに、データベースは PostgreSQL 9.0 で CentOS 上に構築しています。
いろいろな記号を入れて、エスケープの有無を調べてみます。
>>480 なるほど!ありがとうございます。外部サーブレット呼び出すのか
試して見ます
>>520 generics導入する前にできなかったことが導入したからといってできるようになったわけじゃない。
メソッドシグネチャ、イレイジャでググろう。
>>521 out of memory errorになっったとしてもJVMは不死身なんですか?
>>520 引数と戻り値の両方、FloatのメソッドとDoubleのメソッドの2つ用意するだけじゃだめなの?
>>526 戻り値の型はメソッドシグネチャに関係ない。
引数の型がFloatのとDoubleのとなら確かにオーバロードだけど、
今回はClass<Double>とClass<Float>なので型消去(イレイジャ)されてコンパイル時には
どっちもClass<Object>になる。
つまりfunc(Class<Object>)というシグネチャのメソッドを4行目と8行目で2重に定義してる。
なのでコンパイルエラー。
15行目の、呼び出し側も同様にイレイジャ後は func(Object.clss) だね。
>>523 できるだろw
public static void main(String[] args) {
System.out.println(func(Double.class));
System.out.println(func(Float.class));
}
@SuppressWarnings("unchecked")
public static <T> T func(Class<T> arg){
if(arg.equals(Double.class)){
return (T) new Double("0.001");
}else if(arg.equals(Float.class)){
return (T) new Float("0.002");
}
return null;
}
それは質問者の意図と違う気がするんだが、それでもいいのだろうか。
530 :
528 :2011/06/14(火) 23:55:05.91
>>520 func(Class<Float> arg)
func(Class<Double> arg)
を定義したいわけじゃないんだよね?
そこはどうでもよくてfunc()内で分岐したいってことだよね?
>>528 引数追加していいんならそりゃそうだ
問題は、Class<T> arg を受け取れない場合
>>528 >>520 のリンク先
> 戻り値の型によって、呼び出す処理を変更したい
ってのもできてないし、
>>523 の
> generics導入する前にできなかったこと
もできてないですよ?
>>530 いや戻り値で多態を表現できないか、っていう質問だろ…
すまん。 >戻り値の型によって、呼び出す処理を変更したいのですが っていうのは、戻り値の型を指定せずにってことなのか。
戻り値がどちらかわからない状態では、どちらを呼んで欲しいのかな?
イベントリスナというものは、 「イベントの発火を期に処理が記述されたスレッドをスタートするもの」 だと思っていたのですが、間違っているでしょうか。 詳しい方に説明をいただきたいのです。
処理自体は同じで戻り値の型だけ変えたければ、戻り値もジェネリクスにすれば良いんじゃないの?
>>537 直訳すると、イベントを聞く者
その意味を考えて見てね
>>538 それもまた質問者の意図と違う気がするが、
これ以上は質問者が登場せんことにはなんとも
>>537 「特定イベントの発火を期になんらか処理を実行するメソッドをもつクラス」かな。
結局、戻り値でオーバーロードできない限りは不可能だよ ジェネリクスは言語の能力を上げるものじゃない
544 :
537 :2011/06/15(水) 00:27:28.18
スレッドでないということは、メインの処理をブロックして イベントの処理が始まるということでしょうか。 イベント内の処理で無限ループが始まると、メイン処理が進まなくなる?
>>537 イベント≠スレッド
シングルスレッドでも多くのイベント処理する
>>520 Float f = ClassA.<Float>func();
Double d = ClassA.<Double>func();
こんな使い方をイメージしているんなら、いっそDIでどうだろ。
>>544 その通り。
ただ
>>544 の表現はちょっと微妙。
イベントドリブンなアプリ(Swingアプリはユーザがボタンを押すことで
何らかの処理を行うので典型的な例だね)は、
>>544 の表現で言うと
「イベント内の処理」=「メイン処理」なんだよね。
だから、「イベント内の処理」と「メイン処理」がお互い並行して実行され邪魔し合う、
っていうイメージじゃなくて単純に次のイベントが処理できないイメージ。
メソッドを2つ呼ぶような処理を書いたとき、1つめのメソッドが終わらないと
2つめのメソッドが呼ばれないじゃない?それと同じ。
>>543 ?
引数が全く同じ型だと戻り値をオーバーロード出来ないけど、それ意外ならオーバーロード出来るだろ?
>>543 >ジェネリクスは言語の能力を上げるものじゃない
VMの能力を上げるものじゃない。なら同意
551 :
537 :2011/06/15(水) 01:04:32.05
確かに、処理は止まってるっぽいんだけど…。 コンソール出力が出続けるのは私の環境の問題なのかしら。 public class EventTest extends MouseAdapter { int press = 0, loop = 0; public void mousePressed(MouseEvent arg0) { while(true){ press++; try{ Thread.sleep(1000); }catch(Exception e){ System.out.println("Exception:Sleep."); } } } public static void main(String[] args) { JFrame window = new JFrame(); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.setBounds(100, 100, 300, 200); JLabel lbl = new JLabel(); lbl.setBounds(10, 10, 100, 50); EventTest listener = new EventTest(); window.add(lbl); window.addMouseListener(listener); window.setVisible(true); while(true){ listener.loop++; System.out.print("roop"); lbl.setText("loop=" + listener.loop + " press=" + listener.press); try{ Thread.sleep(1000); }catch(Exception e){ System.out.println("Exception:Sleep."); } } } }
553 :
548 :2011/06/15(水) 01:15:34.22
>>551 書きかけてややこしくなるから説明するの止めた部分だw
Swingのイベントを処理するスレッドはいわゆるメインスレッド(mainメソッドが実行されるスレッド)じゃない。
SwingのイベントはEDT(Event Dispatch Thread)というスレッドで処理される。
そういういう意味ではCUIアプリとは違いマルチスレッドだね。
ただし、メインスレッドは、画面起動する以外は何もせずに終わらせちゃう。普通はね。
だからEDT一本しかスレッドを意識する必要は無い。
invokeLater、イベントディスパッチスレッドでググろう。
554 :
537 :2011/06/15(水) 01:34:23.00
イベントではなく、Swingのイベントがマルチスレッドだった、と。 main()のループは別スレッドだから動いていたが、 EDTが動いている間、Swingのメインがブロックされるから描画は変化せず。 と、こんな感じでしょうか。 ありがとうございました。
>>556 #func(Class<Float>)と#func(Class<Double>)が同居できないじゃん。
>>555 イレイズされて引数は同じObject型になる
>>558 floatとdpubleって暗黙的にキャストされなかったっけ?
メソッド分ける必要有るの?
563 :
デフォルトの名無しさん :2011/06/15(水) 08:01:32.80
プログラム中でバイトコードを生成し、それを実行したいと思っています。 どうすればできますか?
ソースコードをファイルに吐き出してjavacして java.exeで動かせばいいのでは?
565 :
563 :2011/06/15(水) 08:10:42.23
実行時にバイトコードを生成するという話です
クラスローダーのdefineClassをリフレクションで強引に呼び出すか、 自前クラスローダー作ってdefineClassするとか
567 :
563 :2011/06/15(水) 08:39:20.70
>>566 defineClassでできそうです
どうもでした
バイトコードはどうやって生成するの?
569 :
250 :2011/06/15(水) 09:25:32.87
>>482 ライブラリじゃだめだよ。
基本的にUniCodeを先に処理するシステムが無いと、
同じ問題がそこかしこに発生する。
それに対応するのはJava側でもあるけど、
たとえばDBやWebServer、OS側の責任。
てか、昔から在る基本的な問題、かついまだに潰しきれていない問題、
かつ、ありふれた問題。
最新のアップデード _26 で不具合発生。 当方環境はp4とチョット古いが、 JAVA対応アプリにてリロードすると画面が真っ白になってハングアップする。 (ソフトはマーケット ワーカー) 以上。
571 :
デフォルトの名無しさん :2011/06/15(水) 09:40:28.84
SQLなんざやめちまえー RandomAccessFile 一つありゃじゅうぶんだ
>>506 について質問した者です
とりあえずrepaintを至る所に挿入してみたのですが変化ありませんでした。
paint部分がおかしいのでしょうか?
574 :
563 :2011/06/15(水) 11:01:47.37
>>568 バイトコードの仕様は公開されてるんじゃなかったっけ。
cglibとか実在するし。
>>573 至る所にというのは具体的にはどこだろう。
上でも書かれているように、ボタンを押したときにrepaintすれば十分な気がする。
あと、点滅したようになるっていうのも気になるんだけど、どこかでループしていたりはしない?
できることなら今あるコードを見せてもらえると早いんだけども。
>>576 ごめんなさい、自己解決しました。
show()の前にhide()を使うことで再描画のように使えるのですね。
ちなみに至る所にというのは、メソッドが呼ばれた時やファイルを読み込む前後、Canvasメソッドを呼び出す前後など
重要そうな所の前後にぶちこんで、解決したら一つずつ消して挿入すべき所を割り出そうと思っていました。
それと点滅するのは、paint内でrepaintしちゃってたからかなと思います
579 :
250 :2011/06/15(水) 17:41:53.10
てか、年間予算6億じゃ、こんなもんじゃね?
580 :
デフォルトの名無しさん :2011/06/15(水) 17:42:33.76
InterruptedExceptionについてくわしくおしえてください
585 :
デフォルトの名無しさん :2011/06/15(水) 21:36:59.48
JSP についての質問はここでいいですか? JSP の記述は、ページを開いたときに必ず実行されますか? リンクから移動したとき、ブラウザの戻るボタンで戻ったとき、などです。
>>585 POST で表示されたページの場合
→ブラウザに「再送信しますか?」ときかれて「いいえ」と答えた
場合は実行されない。
GET で表示されたページの場合
→なんか http のヘッダでごにょごにょすれば、ブラウザの挙動
にもよるかもだか、再実行しない場合もありうる。
587 :
デフォルトの名無しさん :2011/06/15(水) 22:35:58.66
>>585 ありがとうございます。
ちょっとしたページを作っているのですが、
キャッシュが邪魔をしてうまくいかないのです。
※アクセス時のセッション変数の値で処理を分ける画面です。
no-chaceヘッダをだしとけばいいよ
oh...
>>588 モバイル機器向けブラウザだと無視するの多いらしいけどね。
591 :
250 :2011/06/16(木) 00:08:44.59
勉強し始めて1ヶ月くらい経つんだけどマジでセンスないww 誰かこのプログラム作ってみてくれ 2つの整数を入力し、その2つの整数の間に存在する3の倍数を小さいほうから順に画面に表示するメソッド1を作成し、 画面から受け取った2整数に対してメソッド1を実行するプログラム2を作成せよ。 倍数が存在しない場合には"倍数は存在しません"と表示せよ Main使って作る超基礎的なプログラムだと思うんだけど 手も足もでない Scanner使うのか?
>>588 頂いた回答を参考にして、ちょっと調べてみました。
以下のようなコードをレスポンスに設定すれば良いようなのですが、
ちょっと気になることがあります。
<%
try {
// キャッシュの有効期限をいじる
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance().set( 1970, 0, 1, 0, 0, 0 );
response.setDateHeader( "Last-Modified",cal1.getTime().getTime() );
response.setDateHeader( "Expires", cal2.getTime().getTime() );
// ヘッダデータをいじる
response.setHeader( "pragma", "no-cache" );
response.setHeader( "Cache-Control", "no-cache" );
} catch ( Exception e ) {
// キャッシュ無効化を諦める
}
%
cal1 は現在の日時を取っているらしいのですが、
その日時というのはサーバの日時という認識で合ってますか?
もしクライアントのだとしたら、パソコンの日時を 1970 年より前にされた時が不安ですので。
※最悪でも例外が発生するくらいだとは思いますが。
よく見たら、cal2 のところが間違ってましたね(汗)。 Calendar ocal2 = Calendar.getInstance(); cal2.set( 1970, 0, 1, 0, 0, 0 ); にします。 ボケてました。 あと、最悪なのはキャッシュされてしまうことでしたね。 例外が発生しても同じかもしれませんが。
ゆとりうざい
>>596 ありがとう聞いてみる
でもそこ過疎もいいところだな
人がいて、特にまともに回答くれる人がいるスレなんてこことかぐらいなんじゃないの?
>>592 System.out.println("hello world");
明日あたりno-chaseヘッダつけても効果がなかったレスが頻発するな
>>598 さすがにそのくらいはできるわwww
1つ1つのプログラムはできるんだけど
いくつかの処理が混ざったようなのになると途端にできなくなる
やっぱプログラミングってセンスの問題だよな
一生かかってもおまえじゃ無理
はっきり言って欲しいんだけど 1ヶ月やってこんなプログラミングもできないようじゃ 最終的に応用情報合格とか無理かな 今まで簿記やってて次で日商1級取るから情報系にも手を出してみようと思ったんだ けど無理そうならそのまま簿記で上目指す
>>603 さぁ、1ヶ月っていっても掛けた時間はわからないし。
ネットで調べてることしかしてなさそうな雰囲気だけど、
初学者向けの入門書で学習するのが一番効率いいと思う。
サンプルがのっている入門書があったとして、実際そのサンプルを入力して動かすことが楽しかったり、
微妙に変更して、動きを変更したりすることを楽しいと感じるなら、向いていると思う。
ちなみに応用情報はプログラム知識あまりなくても受かる。過去問重要。
>>604 どう勉強してるかとかわかるのかすごいな
実際その通りです参考書とか使ってません
ただ既存のプログラムを入力して動かすみたいなのはやってる
それでちょっと自分で考えてやってみろっていわれた問題が
>>592 でごらんの有様
応用情報ちょっと希望持てたらわ
まあ基本情報受かったらまた考える
>>592 1.ある数より大きい3の倍数をみつけるしくみを考える
2.1.を3つみつけるまで続ける
3.2.にもうひとつの数を越えないように制限する
4.間にひとつもないときに表示する
5.入力された2つの数を都合の良い用に入れ替える仕組みを考える
プログラムは問題解決をプログラミングに向くように制限しつつ考える事だから、ある程度やらないと向いているかはわからんね
プログラミングに向くようにの部分は経験だから時間を掛ければ上達する
<% response.setHeader("Expires", "-1"); response.setHeader("Pragma","no-cache"); response.setHeader("Cache-Control","no-cache"); %> でいいよ
>>607 有効期限やヘッダ値を見ないブラウザには無効だけどな
ブラウザに依存しない部分でガードするのが正しいよな セッション変数に特別な意味を持たせた値を格納しといて、 毎回それで判断するようにするとか AJAXでサーブレットに毎回なげて判断あおぎゃそれでいいじゃん あと、キャッシュ無効だけど、 <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> <META EQUIV="expires" CONTENT="-1"> じゃ駄目なのか?
JavaServletでファイルをダウンロードしたいです。 調べたところ、応答をapplication/octet-stream形式にすればよいことが分かりました。 しかし、エラーが発生した場合やアクセス拒否をしたい場合、どのような応答を返せばよいのか分かりません。 まさか、不正アクセス者にはウィルスを返す・・・とかやる訳にはいきませんしね・・・。
>>610 システムの仕様に従って作ればいいんですよ。
まさか、仕様も決めずにに実装してる?
>>611 趣味的なプログラム開発なので・・・。
ファイルのアプロダを作ってみたいのです。
出来がよかったら、公開もしてみたいです。
>>612 エラーに対応したページ作って、web.xmlに記載すればいい。
>>606 こういうレス待ってた
2345は作れるんだけど、まず1ができない
3で割ればいいのか?
自分で考えてたのは
1.2つの整数x,yを入力
2.2つの整数を引き算するx - y = n
3.nに含まれる3の倍数を表示する
的な処理でやろうとしたんだけどそのときも3の倍数を抜き出せなかった
よく読んでないけど%使っちゃだめなの?
>>615 まだプログラミングで%は使ったことないです
使ってるのはScanner double int if Main return print newぐらい
でも%できるならちょっとやってみる
別に教えてくれてもいいんだぜ( 'ー`)
>>618 それだと、入力に負の整数が入ると動作がおかしくなるぞ
開始に-5とか入れると、-3も出るはずなのが出てこない
622 :
デフォルトの名無しさん :2011/06/16(木) 12:26:55.32
hoihoi
>>621 ちゃんとできました!!
でもI0Exceptionとかbooleanとかはまだなので参考にしながら使える関数で簡単に作る
最終的にcmdで
javac a.java
java aMain
で実行の形にしたい\(^O^)/
>>623 Javaはファイル名とクラス名は同じじゃないといけない。
このプログラムの場合同じにしていれば変えても動くよ。
だから a もしくは aMain のどっちかしか無理だと思う。
課題か何かでファイル名指定されてるの?
>>635 おお、本当だ
つーか public をつけないクラスとかは知ってるしよく使ってたけど
その中の public static void main() が起動できる事は知らなかったわ
>>625 は
>>621 の人かな?
なんか今やってるのは1つのファイルに2つのクラスを記述するってやつなんだ
インスタンスとコンストラクタってのかな?
そんで関数もあまり使わずにすげー簡単に作ってる
習ったプログラムを参考にしたのをあげると
class Inu { String voice; void bark(){ System.out.println(voice); } } class InuMain{ public static void main(String[] args){ Inu Inu = new Inu(); Inu.voice = "にゃんにゃん"; Inu.bark(); } } こんな感じ 作ったってか改変しただけだけど ここで教えてもらったプログラムを参考にいろいろ考えたんだけど この形に当てはめることがどうしてもできない 1つ目のクラスで数値の入力、 2つ目のMainのほうで3の倍数の抽出処理にすればいいのかな 逆か?
class heikin { public static void main(String args[]) { int kokugo[] = {85, 55, 92}; for (int i = 0; i < 3; i++) { } System.out.println(); } } こう書いた場合、国語の合計はどう表示させればいいんですかね? 85点、55点、92点の合計ですけど
合計用に変数用意して初期化して加算代入して表示じゃだめなんです?
mysqlに保存して合計する
>>629 クラス名が平均で、実際の処理は合計なの?
取り合えず合計はkokugo[]の下にkokugo_sunとでもint型の変数作って、書く要素を+=すれば良いよ
class heikin { public static void main(String args[]) { int kokugo[] = {85, 55, 92}; int sum = 0 for (int i = 0; i < 3; i++) { } System.out.println(sum); } } ループのところで足したいんだけどどう書けばいいんですか? 馬鹿なんで分からんのですよ
>>632 とりあえず5教科の教科ごとの合計と教科ごとの平均を生徒に見立てたiを使ってやろうとしているのですよ
合計出せないんで平均までいかんのですよ
>>633 だから、ループの中で
sum += kokugo[i]
するだけだって言ってんだろ
>>634 だろうと思ったから、kokugo_sumって変数で作れって言ったのに。。。。
>>636 ああああああああ
そういえばそうですね
いやもう何か最近書いてて何やってるのか分からなくなってくるんですよね
JDBCの勉強にオヌヌメのDBと本とサイトおせーてくれませんか?
sum += kokugo[i]; または sum = sum + kokugo[i];
Javaスレのはんぶんくらいは優しさでできています
>>628 たぶん逆だね。
外部から与えられた情報で何かするクラスを宣言して、
Mainの方でそのインスタンスに情報与えて利用する。
>>641 C#の方が使いやすいんだけど、自分でも答えられそうな簡単な質問がjavaスレでしか出ないだけだったりする
クロスサイトスクリプティング対策を行うための既存機能ってありませんか?
bean:writeとか?
ありがとうございます。 それについて調べてみます。
それくらい自前で作ればいいのに。 確認画面とかで HTML に吐く前に & < > " ' の5つを単純に置換するだけだろ。 hidden とかからデータとして取り出したときは逆の置換をするだけだ。 置換したのを忘れて更に置換とかそういう馬鹿をやらなきゃ狂わない。 まあ、俺は昔何度かやっちまったけどな。 文字列が長くなったせいでデータベースが更新できなくなって焦った。
ifの判定について質問なのですが ==で判定するのと、equalsで判定するのはどっちでもいいんでしょうか? こういうときにこっちを使ったほうがいいとかそういうのはあるのでしょうか?
質問です。 intent.putExtra("key","一"); アクティビティで"一"という文字を別のアクティビティに送りました。 String s = intent.getStringExtra("key").toString(); textview.setText(s); とやったところTextViewに"一"と表示されるのですが、 if(s == "一"){ textview.setText(key); } とif文を囲ってみたら何も表示されなくなりました。 sはif文の中の"一"とは別物なのでしょうか? また、if文の"一"と同じにするにはどうすればいいでしょうか? 長文すみません。
>>613 ありがとうございました。
web.xml は盲点でした。
仕様を調べてみます。
class heikin { public static void main(String args[]) { int kokugo[] = {85, 55, 92}; int suugaku[] = {64, 77, 80}; int rika[] = {98, 69, 88}; int syakai[] = {70, 60, 95}; int eigo[] = {72, 52, 85}; int sum[] = new int[5]; doubule avg[] = new double[5]; for (int i = 0; i < 3; i++) { sum[0] = sum[0] + kokugo[i]; sum[1] = sum[1] + suugaku[i]; sum[2] = sum[2] + rika[i]; sum[3] = sum[3] + syakai[i]; sum[4] = sum[4] + kokugo[i]; } System.out.println(sum[0]); System.out.println(sum[1]); System.out.println(sum[2]); System.out.println(sum[3]); System.out.println(sum[4]); } } これ短くするのって2次元配列とかいうの使わないと駄目なの?
654 :
652 :2011/06/16(木) 21:40:40.12
風邪ひいてるのに知恵熱でさらに頭痛くなってきた 生徒毎の、合計点と平均点 教科毎の、合計点と平均点 やらんといかんのに
655 :
652 :2011/06/16(木) 21:51:04.53
for (int i = 0; i < 3; i++) { for (int j =0; i < 5; j++) { } } こういうことですか?
656 :
650 :2011/06/16(木) 21:59:03.92
ごめんなさい、スレ間違えてました。
うざい死ね
>>649 "text" == "text" → true
("te" + "xt") == "text" → false
"text".equals("text") → true
("te" + "xt").equals("text") → true
>>659 > ("te" + "xt") == "text" → false
気持ちはわかるが、これもtrueなんだよ…
>>659 "te".concat("xt") == "text" → false
2つ目の例で言いたかったのはこういうことかと。
Stringクラスのconcatメソッドは結合した文字列を新たに生成する。
たしか "te" + "xt" みたいに定数同士の結合は
コンパイラが自動で結合済み("text")の状態にしていたと思う。
メソッドなどで動的に生成するとインスタンスが別に作られる。
662 :
デフォルトの名無しさん :2011/06/17(金) 00:12:55.56
>>660 昔から疑問に思ってたんだが、
結局、これって
ポインターを見せないための
まやかし、というか
まがいもの、というか
付け刃だよねぇ。
664 :
デフォルトの名無しさん :2011/06/17(金) 00:35:42.64
>>663 俺の勝手に思っている印象をそんなに聞きたいのか?
まあいいけど。
ひとことで言えば、ポインターを意識すりゃ、アドレスなのか、
間接参照なのかで明確に区別できることを、
==なんぞで一緒くたに判断させてるって感が否めないってことだけど。
>>664 ん?んん?
>>649 が言ってるような、==とequalsの使い分けが(初心者にとって)
わかりづらいのは、Javaがポインタを隠蔽してるから、と言っている?
ポインタのあるCでも同じような質問は繰り返されてきたと思うけど…?
666 :
デフォルトの名無しさん :2011/06/17(金) 00:46:23.83
>>665 C++でも、ポインターがあるから、理解がしやすい、とでも言おうか?
ポインターが希薄だから無理があるというか、やっちゃいけないような気がする、と思うんだけど
equalsはオーバーライドしてるものだからクラス毎に振る舞いが違うだけです Stringクラスのequalsは文字シーケンスが等しいか判断するのに対して ==はObjectクラスのequalsと同じくオブジェクトが等しいかを判断するものです オーバーライドされてる意味を考えれば参照型で==を使うことはよくない
まあ正直な所、Javaの設計ミスの一つ ==は同一性比較でなければならないなんてルールはない GroovyやScalaではちゃっかり修正してあるし
>>667 そもそも次元が違うから、override云々のセオリーは関係なくね。
==はequalsよりメタな存在だし。こういう事ができなくなる。
private final Descriptor
option1 = new Descriptor(),
option2 = new Descriptor(),
option3 = new Descriptor();
Map<Descriptor,String> map = 略;
map.put(option1,"a");
map.put(option2,"b");
map.put(option3,"c");
map.get(option1);
map.get(option2);
map.get(option3);
これ、単に文字比較するより早い。
相談させてください。 複数スレッドで同期を取りたい設定Aを管理するため、管理用のクラスAを用意し この中で、設定変更メソッド内にてsynchronizedで同期を取るようにしています。 各スレッドごとに、この設定Aの変更と同期して行いたい処理があるため、クラスAの 設定変更メソッドに、同期処理内容を引き渡しして、クラスAの設定変更メソッドの synchronizedブロック内で実施させることを考えています。 質問一つ目 上記の方法は適切でしょうか? 質問二つ目 適切な場合、同期処理内容の引渡しはどのように行うべきでしょうか? RunnableのrunをOverrideしたものを引き渡すとかでもよいのでしょうか? それとも、専用クラスを作成すべきでしょうか? よろしくお願いします。
適切かどうかは実際にどうやるかによる 移譲使ってAからインターフェイス経由で呼べばいいよ
>>669 Mapのキーが等しいか==を使って判断してるってこと?
Descriptorが同じ値を返すhashCodeとtrueを返すequalsをオーバーライドすれば
Mapのキーは同じものとして扱われるから関係なくもないと思うが
>>649 です
みなさん回答ありがとうございます
なんか難しそうな話してるのでとりあえずは==でやっていこうとおもいます
もうちょっと勉強してきます!
そこはむしろ == はなんか違うと、代替方法を模索して欲しいけどな。 まあ課題作れれば十分なんだろうけど。
ヌルバイト攻撃には、サーブレットで対処できますか?
JavaMail ってライセンスを気にせず使ってよいものですか? サーバ上に置いて使ったり再配布(改版なし)してもよかですか?
いちいち小言言わずに黙って検索してください
いちいち小言言わずに黙ってスルーしてください
いちいち個ごと言わずにオラクルの有料サポート受けてくれw
Javaのクラス間の変数を受け渡したいんだけどどうやればいい? main.javaの中で String name = "aiueo"; このnameを Output.java の中で、使いたいんだけど main m = new main(); m.nameって感じには出てこないし、 Getterを作って String getName(String name) { return name; } m.getName(); とも出てこない どうしたらいいの?ちなみにこのサンプルは適当に作ったから実際はちゃんとしたデータを引き取りたい
すまん、出来たわ publicクラス内じゃ出てこないのな・・・ 関数内でやったらでてきたお騒がせなり
うわーん、出来なかった…nullで渡される… main mm = new main(); して とあるクラス内に String a = mm.name; ↑null String a = mm.getName() ↑これ出てこない (´・ω・`)なにゆえ
(´・ω・`)スマン出てこない言うたのは、関数名間違ってただけ見たいだ でもやっぱりnullしか帰って来ない
うざい
クラス間の変数の受け渡しではなくて、MainからのOutputのクラスの呼び出しじゃないの?
>>687 ふむ、 A.java と B.javaがあったとしてAがメインクラスとする。
B.javaから、A.javaにある nameっていう変数の中にあるものを取り出したい。
その時どうすればイイ?って話です。
extends A以外の方法で知りたい
javaファイルを跨ったクラスのやり取りは パッケージ java でググってみてはどうだろう?
>>689 thx,メインクラスをimport したら、コール入った
(´・ω・`) 先生、import jp.test.*じゃなくて、mainにして main mm = new main(); ←※1 nameB = mm.getName(); って取り出そうとしてもnullが入る(´・ω・`) 呼び出しはA.javaの関数いってるんだけど、その中身がnullになってる… なにゆえですか(´・ω・`) 参照するのに※1でnewしてるからですかね。
>>693 小文字のmainは予約語だから、使っちゃイヤン
と言うか、今思い出した クラス名は大文字で始めないとエラーになるんだよ 逆にメソッドは小文字で始めないとエラーになる 。。。大分忘れてるなぁ
そんなバナナ
>>694 あ、いや実際は別名になってます。
jp.test.java;
A.java
public class MyA {
public gName;
中略
public とあるクラス {
setName();
}
private void setName(String name) {
gName = name;
}
public String getName {
return gName; ←呼ばれる前には ”あいうえお”が入ってる、呼ばれるとnullになってる
}
}
B.java
jp.test.java
import jp.test.java.MyA
public MyB {
MyA mm = new MyA();
とあるクラス{
String a = mm.getName(); ←nullが来る
}
}
こんな感じです
とあるクラスじゃなかった、とある関数 ブレークポイントポチりながら動きみてったので、確かにMyA.javaの getNameまでは行ってるんですが、その時みたら中身null(´・ω・`)
javaで何を作りたいの?
本当に呼ばれる前には、文字が入っているのかい? もうちょっと具体的にコードを晒して欲しいところだがエスパーすると、 同じ名前の別のクラスのインスタンスを作っているとか、別のインスタンスのgetNameを呼んでるとか
>>697 多分、初期化してる場所に問題があるんじゃ無いかな
使う時には、すでにmmの寿命が尽きてて、空っぽになってる可能性がある
変数の寿命の範囲(スコープ)を見直してみては?
>>701-702 A.javaからB.javaを呼び出す前までは
そこに保存データまでのリンクパスが残ってるんだけど "/うんたら/かんたら/これこれ/データ.jpg"
みたいな感じで(ブレークポイントをその場所に設定して、中身確認済み)
で、B.javaの方でその保存パスが欲しくて
○ String a = mm.getName(); // ○はブレークポイント
で潜っていくと、 A.javaにいって、 return 部分のデータを覗いてみると
name = null;
になってる感じですね。
初期化に関してはしていないというか、gNameの部分は毎回nameによる上書きをしているので
新しくname内に生成されない限りは問題ないはずなんですが…実際そこは通ってないですし
(2回目勝手に走ってるのか確認のためブレークポイントいれてみたけど、2回目通ってる形跡なし)
宣言部分もgNameに関してだけいえば、クラス直下なので、起動直後しか通らない(´・ω・`)
速攻で、抜粋してみたけど
http://ideone.com/TAopo こんな感じ?ですかね
クラス直下に、gName;があって
関数内で作った、nameをgNameに保存
で、B.javaで呼び出す感じ
MyA a = new MyA();
の部分に関しては、MyB直下で宣言しても変わらないかな
>>703 上のコード断片見て、まさかとは思うけど、setNameがprivete宣言なのかな?
実際のコードではpublic宣言されてる事を祈るけど
(でも、それだとMyBでsetName使おうとするとエラーになるか。。。)
とにかくね、gNameかMyAクラスのどっちかが、すぐに寿命になってると思うから、コードを見直してみて
>>704 うろ覚えで悪いけど、int,charとかの基本型以外は参照渡しだったと思うんだ
つまり、tekitouメソッド内のnameが消滅した時点でgNameはnullになってるんじゃないかな
>>705 publicにしてます。
>>706 Class直下に、gNameと同様に、name宣言をおいてみましたが
やはりgetNameするときにはnullになってました。
なぜ保存されない…
>>707 うーん
多分、nameと言うより、"あいうえお"みたいな文字列そのものの寿命がメソッド内で消滅するんじゃないかなぁ
コンストラクタでnameに代入しちゃダメなのかい?
ヌルバイト攻撃ってJavaのサーブレットにも関係しますか? Google先生で検索してもPHPの情報しか出てこなかったので、 もしかして関係ないのかなー、と。
>>709 Web系知らんので、方針しか言えないけど、ヌルバイト攻撃とはどう言う攻撃かを知れば、php独自の問題か、Web系全体共通の問題かが分かると思う
JavaMailとsendmail(SMTPサーバ)を使って、メール送信機能を実装したいです。 前者の使い方は何となく分かりましたが、後者が分かりません。 とりあえず、CentOSにyumでインストールした直後のところです。 この段階からどうすればよいのでしょうか? 同じマシン上からなので、JavaMailに設定するSMTPサーバのアドレスはlocalhostでよいとは思うのですが、 その他の送信元アドレスやら認証やらが分かりません。 スパム送信機にされないよう、セキュリティ高めの設定を教えてください。
>>709 うん。具体的にはFileクラス周りが拙いらしい。CのIOを叩くからね。
具体的にはrequest.getParameterで取ってきた文字列を直接Fileクラス
にファイル名として突っ込んだりすると拙いらしい。
ただそんな設計はヌルバイト攻撃以前の問題だと思うのであまり話題に
ならないのかもしれない。
>>707 とういかソースちゃんとはらないと、わかんないよw
697にしたって「public String getName {」とか文法おかしいしw コピペみすってるとしか思えない。
ソース見て思った。 もう釣られないクマー
715 :
デフォルトの名無しさん :2011/06/17(金) 22:46:12.15
>>680 個人の趣味でプログラミングしてると、有料サポートってのは受け難いですよ
そりゃ仕事のときは、必要ならサポート受けますよ、会社のお金で
(もっとも最近はプログラミングやらないので、システムの構築ばっかの質問ですけどね)
>>709 PHPだろうがJavaだろうが、入力値をちゃんとチェックしておけばNULLバイト攻撃は防げるよ。
ユーザーからの入力値をそのまま信用しなければ、PHPでもJavaでも問題にはならない。
ちょっと調べた感じ、フレームワークにはNullバイトチェックの仕組みが実装されていそうだけど、
全く無関係かどうかはちょっとわからないね。
718 :
709 :2011/06/17(金) 23:25:18.96
ありがとうございます。
>>710 文字列の途中に\0を挿入することで、
その後に続く文字列のチェックを回避する攻撃らしいです。
Javaで起きるとしたら、起きないはずのところで例外発生とかが出て、
サーブレットが落ちたりDBやファイルから情報抜かれたりするのかなー、
というくらいの認識です。
ただ、Javaって\0以降の文字列なんてのを認識したっけ?
という疑問がありますね。
Cだとchar型のバッファ領域確保して、\0までを文字列として扱っていたので、
それ以降にも値が存在する訳ですが。
Stringだと持っているのか捨てているのかクリアしているのか分からないですね。
>>712 ファイル名絡みは確かに怪しいですね。
ウェブでユーザからの入力値のチェックをしないことはないですが、
ファイル名に使わないように特に注意します。
>>717 了解しました。
入力値チェックの強化をアレコレ考えてみます。
うーん、ウェブは難しいですね・・・。
うざい
>>704 まさかとはおもうけど、MyAのTeKiTouを呼んでないって落ちじゃないよね?
721 :
デフォルトの名無しさん :2011/06/18(土) 01:27:58.12
>>718 混乱するようなことを書いて申し訳ないが
結局
SQLインジェクションも
XSSも
ヌルバイト攻撃も
基本的には同じなんだよね。
で、Java側で防げるものとも限らないし、
OS、Webサーバ、DB側での対応も必要なケースもあったりするし。
多分今後10年UniCodeあたりで同じような問題が
雨後のたけのこのように出てくるだろうね。
722 :
デフォルトの名無しさん :2011/06/18(土) 01:46:04.27
>>717 こんな馬鹿が大勢居るから、問題が解消できないんだよ。
ユーザの入力を信用しないところまではOKだけど、
入力値をちゃんとチェックしておけばOK・・・なんてアフォなwww
なら指針をちゃんと書いてやれよ
724 :
デフォルトの名無しさん :2011/06/18(土) 01:51:51.95
>>723 そんなん、具体的に書けないから問題なんだろwww
馬鹿?
例えば、
安全なパスワード入力用Class作りました。
記号は全部NGです、
ってなw
馬鹿を通り越してんなwww
アプリケーションの要件と話をごちゃごちゃにするなよ
>>718 >ただ、Javaって\0以降の文字列なんてのを認識したっけ?
試せば良いじゃん。
System.out.println("a\0b");
System.out.println(("a\0b").length());
結果は"a b"、3。
Javaはヌル文字も一文字として数えるし、ヌル文字のあとの文字列も無視
しない。Stringはバイト列と文字列長の両方を保持しているわけで。
なので本来はJavaではヌル文字問題はそれほど気にしなくて良い。
注意しなければならないのは文字列をファイルIOなどCの関数を叩くAPI。
Cの関数だけにバイト列だけを渡すものだからヌル文字問題が起きる。
ちょっと面倒だけどシェルコマンドを実行するexecも同じ問題があるから
試してみると良い。
Process p = Runtime.getRuntime().exec("cmd /c echo a\0b");
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
p.waitFor();
System.out.println(reader.readLine());
Windows上のOracleのJREだと"a"しか表示されないよ。
727 :
デフォルトの名無しさん :2011/06/18(土) 02:03:27.61
>>726 俺が攻撃者で、かつ
a\0b がユーザ任意に入力できるデータなら
このデータに続けて
\3b
を追加するw
意味は分かるよなwww
>>718 ただ、まともなプログラマならクライアントから受け取ったdirtyな文字列を
サーブレット内で切った貼ったしてファイル名やシェルコマンドを組み立て
たりはしないと思う。
なんつうか、ヌル攻撃に絞った対策を気にする前にある程度基本的な作法を
守っておけば大半は回避出来るのではという印象。
729 :
デフォルトの名無しさん :2011/06/18(土) 02:06:41.54
まじめに書こうか。 追加データは 0x3b 0x64 0x69 0x72 0x20 0x5c
だから入力値チェックが効くって話だろ バリデーションで防げないっていうのか?
731 :
デフォルトの名無しさん :2011/06/18(土) 02:11:10.24
>>728 そうかなぁ。
SQL文なんかは、普通に切り貼りしてるけど。
その切り貼りの仕方を工夫して安全度を少し高めてるだけのような気がするけど。
むしろ、ユーザ入力データからシェルコマンドが実行できるシステム
って言うだけで垂涎のターゲットだから論外だろってなら
よく分かる
732 :
デフォルトの名無しさん :2011/06/18(土) 02:19:12.05
>>730 君は、安全のためパスワード入力には記号は使えません、
と宣言しているのなら、言いたいことはよく理解できる
が、そんなシステム、パスワードクラックしてくださいなシステムだけどなw
>>732 記号は使えませんなんて一度も書いた覚えがないんだが?
君はバリデーション=記号をはじくこととでも思っているのかい?
>>730 うん。バリデーションで防げると思う。やるべきだと思う。
ただ消毒済みだからヌル値は気にしなくていいや〜とか気を抜いてホイホイ
文字列連結してIOに渡したりしていると今度はディレクトリトラバーサルや
コマンドインジェクションを食らったりすると思うw
なのでヌル値問題の対策だけじゃなくて、入力された文字列は基本的に信用
しない、直接IOに食べさせない作法も伴わないとダメかなと。
>>731 PreparedStatement使わないのと? と書こうとして、DBのAPI周りのヌル
文字の扱いがちと気になった。どうなんだろう。
735 :
デフォルトの名無しさん :2011/06/18(土) 02:24:29.24
>>733 バックエンドの仕様も無しにバリデーション
否
そもそもバリデーションで防げると思っている方が
おめでたい。
そんなもんで防げるんだったらOSやWebサーバ、DB側での
対応は不要なはずだが、現実は必須だ
危険なものをなぜに安全と言いたいのだ?
今はNULLバイト攻撃の話をしているのではないのか・・・?
737 :
デフォルトの名無しさん :2011/06/18(土) 02:31:45.34
>>736 たとえば、だ
ユーザがUTF8エンコードしたデータを投げた場合、
バリデーションが出来ないケースや、
バリデーションしてもヌルバイト攻撃が発生する可能性は十分ある
>>737 例えは文字コードの問題だろう。
文字コードによっては入力値チェックを突破する場合もあるだろうが、
それはバリデーションの前に行うことではないのか?
739 :
デフォルトの名無しさん :2011/06/18(土) 02:41:25.04
>>738 文字コードチェックはまさにバリデーションだよ。
その後サニタイジングした値を別の関数やシステムに転送するのが普通
じゃ、該当関数やクラスが
文字コードやバリデーションが行なわれた結果かどうかなんて認識できるのかい?
741 :
デフォルトの名無しさん :2011/06/18(土) 02:46:50.36
もっと書こうか? パスワードのようにRawなデータを転送しなければならない場合に、 0xC0 0x80 のようなデータが来たとき、 システムはどう反応するんだろうね??? フロントエンドのJavaで対応するのかい? バックエンドで対応するのかい? バックエンドで対応しちまったときに、 場合によってはそのデータがNullと認識するシステムもあるんだぜ。 ま過去に少なくともそういうシステムがあったけどな (バグフィックスという形で改修されたが) こんなデータを含めて様々なバリエーションをバリデーションできるのかい?
>>739 情報を付加することはできるだろうけどそのままでは認識できない。
言いたいことがよくわからないのだが、
汎用なメソッドでは汚染されているかどうかの確認がされないから、
バリデーションは無駄だというのかい。
>>741 なんとなく言いたいことがわかってきたが、
rawなデータを扱う場合にNULLバイト攻撃を意識するのかっていう話にならないの?
その場合は、フロントエンドはすべてバイナリセーフにする以外に方法はないじゃない。
744 :
デフォルトの名無しさん :2011/06/18(土) 02:54:58.56
>>742 入力チェックは最重要だが、
ヌルバイト攻撃が完全に防げるわけじゃない
防げると思っている人がいるなら、
そりゃおめでたいねぇ
と言いたい
>>744 思うに、あんまり意見は食い違っていないような気がする。
入力チェックではヌルバイト攻撃を完全には防げないっていうのには同意。
ヌルが入る必要がないような場合では、入力値のチェックだけでどうにかなる・・・よね?
746 :
デフォルトの名無しさん :2011/06/18(土) 03:01:02.62
>>743 いや、全てとは言わんが、
常識的に、
ユーザが任意で(ツール使用の有無を問わず)
入力できるデータには、少なくともバイナリセーフなコードが必要でしょ。
そうであっても解釈の問題云々でいろいろ問題が発生するんだから。
それを入力チェックだけでOKなんて
口が裂けても言えねぇwww
>>746 とりあえずサニタイズしとけばOKはダメって話なだけだったのか・・・
色々と再確認できてよかったよ。トンクス
748 :
デフォルトの名無しさん :2011/06/18(土) 03:03:54.08
>>745 入力チェックだけじゃ無理だろ。
パスワードの場合で
0xC0 0x80
をどうやって入力チェックで弾くの???
ウイルススキャナーにでも頼る????
749 :
デフォルトの名無しさん :2011/06/18(土) 03:06:08.06
>>747 業務的な話だが、
みんなそんなにシビアにやっていないから、
そんなにシビアに考えることも無いよ、という結論も無いことも無い。
まあ、防げなかったときの事を考えてなにがし保険を掛けとくのは良い考え方かも。
そこは念には念を入れるべきだと思うけどね。 利用者からの入力を処理する所で注意を払う。 実際の処理をする段階でも再度チェックする。 一度でもチェックすれば、もう安全なんて過信するから事故は起きる訳で。 想定外の津波が来ることはナイト過信してメルトダウンした放射能事故から全く学んでない。
752 :
デフォルトの名無しさん :2011/06/18(土) 03:17:22.66
>>750 そそ
>>751 冗長なUTF8の問題
ただ、将来的にはそれとは別にUniCodeの問題が発生するかも。
少なくともJavaのClassにもライブラリにもDLLにも、
Rawデータを扱うことが前提のものと、
UTF8、UniCodeの処理後の値を扱うものと混在している。
将来的にプログラマがそれらを正しく扱ってくれるかどうかは、
不 明
だよ
753 :
デフォルトの名無しさん :2011/06/18(土) 03:22:23.57
あ、 もう少し正しく書くと、 今回は文字コードを例に取っただけで、 それ以外にも潜在的に問題を発生させる原因は多々ある。 HTMLしかり、SQLしかり、 そもそも、TCP/IPでデータの大きさをあらかじめ通知する機能が無い という時点でかなり潜在的な問題が発生する可能性が否定できない。
なんかPHPのスレッドみたいwww
jarファイル(a.jar)内のクラス(hoge.Class)を 別のjarファイル(b.jar)のクラスでインポートして b.jarのクラスのmainメソッドでhoge.Classのインスタンスを生成してるんだけど、 実行すると NoClassDefFoundError: hoge/Class が発生します。 実行時に-cpでカレント、a.jar、b.jarにクラスパスを通してます。 a.jarを解凍してhoge/Classをカレントに配置すると正常に動作します。 jreのバージョンは1.6.0_26です。 原因がわかる人いますか?
JAVAにデリゲートってないの?
757 :
デフォルトの名無しさん :2011/06/18(土) 10:59:43.60
>>754 入力チェックさえしてればヌルバイト攻撃は大丈夫って寝言言う人が居るから・・・
758 :
デフォルトの名無しさん :2011/06/18(土) 11:50:06.29
>>756 ないない
次のバージョンで追加されるという話もあったけど
結局全く話がまとまらずに企画倒れ
>>755 OSとコマンドラインをさらしてみては?
>>753 > TCP/IPでデータの大きさをあらかじめ通知する機能が無い
え?
デリゲートなんていらん。内部クラスで十二分
ポーカーの役を判定するプログラムを書いているのですが、 どうも思った結果が出なくて困っています どこがおかしいか指摘していただきたいです 配列numberListはインデックスと同じ番号のカードの枚数のリストです (10,11,12,13)と(1~8)の組み合わせでtrueになってしまいます //ロイヤルストレートフラッシュか否かを判定 boolean royal(int[] numberList) { boolean result; int count = 0; for (int i = 2; i < 10; i++) if (numberList[i] == 0) count = 0; else count = count + numberList[i]; if (count == 0) result = true; else result = false; return result; } ロイヤルストレートフラッシュは1,10,11,12,13 絵柄は判定済みなので省いています
もうひとつお願いします 改行が多すぎます、と怒られました 連続した5枚でもfalseになってしまいます //ストレートフラッシュか否かを判定 boolean straight(int[] numberList) { boolean result; int count = 0; for (int i = 1; i < (numberList.length - 1); i++) if (numberList[i] == numberList[i + 1]) count++; if (count == 4) result = true; else result = false; return result; }
>>762 numberList[i] == 0の時にcountを0にリセットするのはまずいと思う
たとえばnumberList[9]の中身が0だったら他の数字と無関係にresult=trueになっちゃうだろ
>>763 numberList[i] == numberList[i + 1]という条件は間違ってる
たとえば1,2,3,4,5という手札だったとしても、numberList[6]とnumberList[7]も中が0で等しいのでcountが増加してしまう
同様に他の比較でもcountが増加するので、count==4の条件が満たされない
767 :
デフォルトの名無しさん :2011/06/18(土) 15:09:52.26
>>760 >> TCP/IPでデータの大きさをあらかじめ通知する機能が無い
>え?
え?
Total Lengthの話をしてる?
シーケンス番号の話をしてる?
Windowサイズの話をしてる?
どれにしたってデータの大きさをあらかじめ通知する機能じゃ無い
ネットワークスレだからあまりうだうだ言いたかないが、
>>724 あたりで馬鹿にされたからって、無理して背伸びするんじゃないよwww
IP にはあるじゃん とウザイことを言ってみるテスト
>>766 ヒントを出そう
ロイヤルの方の判定では「2〜9までの連続した手札がない」ことを手札の枚数を合計させて計算させている
ならばストレートフラッシュの方でも「i〜i+4までの連続した手札がある」ことを合計で求めることができるんじゃないか?
うざい
771 :
デフォルトの名無しさん :2011/06/18(土) 16:28:33.10
低学歴が人に何かを教えようとするとこうなる
ゆとり乙
>>761 やっぱラムダ式欲しいわw
いまの似非クロージャは、なんか無理してる感が。
776 :
デフォルトの名無しさん :2011/06/18(土) 17:29:17.28
>>768 馬鹿をさらけ出してるお前はマゾ?
ウザイが、馬鹿丸出しなのがおもろいwww
ゆとり乙
ゆとりはPHPつかってろ
781 :
755 :2011/06/18(土) 21:21:14.09
>>759 OSはWindows XP SP3です。
コマンドは以下のように入力しました。
java -cp .;b.jar;a.jar; Test
ソースはこんな感じです。
<hoge/Classs.java> → a.jar
package hoge;
public class Classs {
public void execute() {
}
}
<Test.java> → b.jar
import hoge.Classs;
public class Test {
public static void main(String[] args) {
Classs c = new Classs();
c.execute();
}
}
たーすけてー
javaの文法でコマンドプロンプトを呼び出す命令+javaファイルをコンパイルさせるやつとかない?
>>755 jar tf a.jar
で hoge/Classs.class が存在するか確認するといいと思う。
784 :
755 :2011/06/18(土) 22:35:32.44
>>783 確認しましたが存在しました。
ちなみに、jar -xf a.jar でクラスを抽出して
実行するとエラーが発生しないんです。
なんでですかねー???
785 :
デフォルトの名無しさん :2011/06/18(土) 22:36:54.54
配列の番地を返す方法ってどうすればいいですか? たとえば、 String[] a = {a,b,c,d,e}; って入っていたとして、 cの番地(上のでは2)を探す方法です。
>>785 cを検索して、見つかった時のインデックス(番地?)を返せば良いだけじゃね?
番地と聞くとメモリのアドレスの方が浮かぶから、配列の添字は番地って言って欲しくないな。。。
>>783 でなくてすまんが、俺のところではXP SP3, JRE 1.6.0_26で動くぞ
>>785 ソートされているんであればArrays.binarySearch
されていないんであれば逐次探索
StringならListに入れてindexOf
配列使う必要がない
答えられねーなら黙ってろよアスペ
791 :
デフォルトの名無しさん :2011/06/19(日) 00:56:34.58
すいません、javaの正規表現について、教えていただけませんでしょうか。 import java.util.regex.Matcher; import java.util.regex.Pattern; String str = "あいう第一倉庫えお第二倉庫かきく第一倉庫けこ"; Pattern p = Pattern.compile(".*(第.+倉庫?).*"); Matcher m = p.matcher(str); if(m.matches()) { for(int i = 0; i < m.groupCount(); i++) System.out.println(m.group(i)); }
792 :
デフォルトの名無しさん :2011/06/19(日) 01:00:16.58
>>790 の続き
ここで、出力結果として
第一倉庫
第二倉庫
第一倉庫
と出てほしいのですが、現状は
あいう第一倉庫えお第二倉庫かきく第一倉庫けこ
第一倉庫
となってしまいます。
期待する結果となるようにするには、どのようにすれば良いでしょうか。
どなたかわかる方いらっしゃいましたらご教授ください。
ゴミが混じってる///
796 :
デフォルトの名無しさん :2011/06/19(日) 01:57:39.05
>>793 ありがとうございます!
ばっちり出来ました。
Other ///
はともかく、本当に助かりました。
で?
799 :
デフォルトの名無しさん :2011/06/19(日) 06:58:51.93
>>797 >tcpヘッダには描かれてると思うけどね。
思うけどね。って何だよwww
tcpには無いよ。
あるのはシーケンス番号だけだ
揃いも揃って馬鹿麦価だなwww
>>797 未だにTCP/IPが主流なんだから、
TCPパケットの構造くらいは読んだ方がいい
っていうか、仕様が公開されてて、
解説も腐るほどあるものに対して
思うけどね。
とはw
801 :
デフォルトの名無しさん :2011/06/19(日) 08:23:56.72
ラベルを2つ用意して、 上のラベルには 23+3*5= というように入力した通りに表示ささって、 下のラベルには、"="が押されたら23+3*5の計算結果を表示する 電卓プログラムを作っています。 もし、"="が押された際式の中に*があったら その前後の数字をDouble型に変換して、計算するようなプログラムにしたいのですが、 どんな方法がありますか? ちなみに、入力はすべてボタンで、 if (e.getSource() == this.button0) { value = "0"; sourse.setText(sourse.getText() + button0.getText()); } のように処理します。
>>801 基本、入力不可なラベル2つ用意して、別に入力用のテキストボックス用意するのか?
何のためにラベルが二つも必要なのか分からん
evalでググれ
ググったらほとんどのことは解決するからにちゃん要らないよなw
ググり方を教えてくれること。 キーワードを教えてくれること。 これだけでも素人にはありがたい。 RTFMwww とか書かれて、なにがなにやらだったw
807 :
デフォルトの名無しさん :2011/06/19(日) 12:55:42.91
キーワードはあるな。 雑談から派生することもあるし。
JSP/Servletでログファイル出力をするにはどうすればいいですか? 自分なりに調べたらjava.util.logging.FileHandlerが使えるかもしれない気がしましたが、 多くの端末からアクセスされる(マルチスレッド?)ことから使えるのか不安があります また、接続元のIPアドレスを出力するのは基本だと思いますが、取得できますか?
809 :
デフォルトの名無しさん :2011/06/19(日) 13:24:23.22
>>806 Fuck か Fullかは、議論の分かれるところwww
810 :
デフォルトの名無しさん :2011/06/19(日) 13:25:15.59
>>797 こいつの涙目っぷりは、どこからきているんだい?
httpsurlconnectionにcookie喰わせたいんですが //cookie取得 String cookieValue = null; try{ cookieValue = urlconn.getHeaderField("Set-Cookie"); }catch (Exception e) { } System.out.println( " cookieValue: " + cookieValue); urlconn.setRequestProperty("Cookie", cookieValue); urlconn.connect(); だと上手く喰ってくれず落ちます。 cookie喰わすのってconnect前なんでしょうか?
814 :
デフォルトの名無しさん :2011/06/19(日) 14:59:52.27
>>813 Fine がありえないからFuckだのFullだの見たいな話になるんじゃないのかなぁ。
FineなMがあったら見てみたいwww
JDKに標準で含まれているものは、 どう使うにしてもライセンスを気にしなくて大丈夫ですか? 例えば、XML解析にSAXを使ったとして、 その解析をサービスの一部として提供したりです。
817 :
755 :2011/06/19(日) 16:55:49.58
>>787 動きますか!?
動かーんっていう人いませんか?
例外処理がわからない 自分で例外処理を作れるらしいがifと何が違うのよ
819 :
デフォルトの名無しさん :2011/06/19(日) 17:35:21.70
>>818 お前は、マウスを動かした瞬間にif 文を発動するイベントドリブンができるとでもいうのか?
ある意味すげーな
日本語でおけ
あいかわらず質問も回答もずれてますなー
ゆとりとコミュ力不足しかいないからな
824 :
デフォルトの名無しさん :2011/06/19(日) 19:25:04.03
>>797 ようやく戻ってきた。
あらあら。みんなにフルボッコされてんじゃん
javaの宿題スレがないんですがここで聞いても答えてくれますか
宿題スレを立ててそこで聞いてみれば? 回答されるとは限らないけど
質問だったらこたえるんじゃない? 丸投げだったら、暇なやつがいたらプログラムつくってくるかもねぇ。 場合によっては、スレ違いだよ。と言われる。
829 :
デフォルトの名無しさん :2011/06/19(日) 20:53:54.51
javaをアンインストールしてしまいました。 ダウンロードしても途中で終わってしまいます。どうしたら・・・64bit
どうも最近ふいきんが変だと思ったら、宿題スレが消えてたのか…
831 :
デフォルトの名無しさん :2011/06/19(日) 21:11:18.91
あと、ネットワークを知らないのに背伸びして恥かいているやつとかね。
>>823 antははいっているの?そしてパスは通っているの?
>>811 HashMapの実装を目を凝らして見てみないと正確なことはいえないが
Javaのサンプルにおけるdouble-checked lockingバージョンは間違ってるので
参考にしない方がいい。
今は上手く動いても、将来的に実装が変わるかもしれないしな。
イラっと来たので落書き
834 :
823 :2011/06/20(月) 02:12:25.95
>>832 「build install」ではなくて、「ant」コマンドでビルドできました。
int[]の任意の位置のデータを取りたい場合どうすればいいんですか? substring()みたいに開始位置、終了位置を指定できると理想なんですが
int[]の任意の位置のデータならint[i]なんじゃねーの?
838 :
836 :2011/06/20(月) 10:33:38.95
あー・・・ctrl+spaceで出てこないんで勘違いしてました 普通に括弧でやるだけですね
ServletからQRコードを出力したいのですが オススメのライブラリは何でしょうか?
>>833 そう。そこら辺の話。シングルトンで常識なんだから、書いてなかったけど、マルチトンもだよね?ってことでConcrrentHashMap使うことにした。
843 :
デフォルトの名無しさん :2011/06/20(月) 14:08:40.78
すっかり養豚場スレ。
もともと便所スレだろ
実行中のjarファイルのファイル名を変更することってできますか?
さっきアップデートしたらインターネットがブチブチ
Multitonという名前は認知されていないかもしれないが手法自体は Singletonのバリエーションとして広く使われていると思う。
851 :
デフォルトの名無しさん :2011/06/21(火) 00:00:30.24
タスクトレイに格納するのはできたけど、タスクバーから消すのができません・・ やっぱ、Javaじゃできないんでしょうか・・・
852 :
851 :2011/06/21(火) 00:37:36.30
自己解決しました。
今からJavaの勉強をします。 環境構築の解説があるサイトを教えてください。
ググればいくらでも出てくるだろう 情報の古いサイトも多いけどな
200年代前半のサイトばかりでそのまま信用していいのか不安なんです
>>855 そのサイトを教えてくれ。古すぎるにもほどがある。
OracleのJavaSEのページ行って 「JDK 6 Update 26 with NetBeans 7.0」 のインストーラをダウンロードするのが楽かな。 200年代の話はしらんが、環境変数 CLASSPATH にはなるべく頼らない方がいい。
858 :
デフォルトの名無しさん :2011/06/21(火) 21:57:43.71
>>855 そりゃ、奈良時代にjavaがあったなんて新説もいいところだな。
素人の俺で良ければwww
まあ、
javaの道 か
浅煎り珈琲
最終的にはこのあたりに行き着くんだろうね。
eclipseさえ使ってれば、シンプルなsyntaxエラーは逐次随時に教えてくれるから、
その辺から修行をしたいんだったら、逆にeclipseは使うな。
手っ取り早くっていうなら絶対にeclipse使え。
859 :
デフォルトの名無しさん :2011/06/21(火) 22:56:53.73
jakarta commons は、ライセンスを明記したテキストファイルを同梱しさえすれば、 それを使ったプログラムを公開したり配布したり売ったりしても良いのですか?
入門書一冊終わらせた程度ですがここからSJC-P目指すとどれ位時間が掛かるでしょうか
861 :
デフォルトの名無しさん :2011/06/21(火) 23:09:46.62
>>860 Pは簡単だよ
あっという間さ
Dは面倒
XMLファイル読み込みにDOMを使うのは時代遅れですか? XML形式の設定ファイルを読み込むためにorg.w3c.domパッケージのDOMを使っています ちょっとした設定ファイルで、多くてもせいぜい30〜40ノード程度です また、ネットで調べていると、DOMはメモリ消費量や速度が問題だと書いてあります JDK標準のDOMを使った場合、SAXやXercesよりもどのくらい劣りますか?
メモリ嬢に全展開する時点でオワットル。
やはり、SAXを使用するべきなのですね?
まあ最近はデータベースをメモリ上に載っける技術も有るしねえ。
速度とメモリの両立ならStAXじゃないだろうか?
867 :
デフォルトの名無しさん :2011/06/22(水) 07:28:58.63
StAXとは何ですか? DOMとSAX以外にも処理方法があるのですか?
数十ノードのアプリ設定ファイルにSAXとかおおげさすぎる。DOMで十分。
どういうアプリケーションなのでそんなにメモリや速度を気にする 必要があるのか、あるいは単にパフォーマンス厨なのかよく判らん。
というか設定ファイル程度ならJAXBで良いのでは。
871 :
デフォルトの名無しさん :2011/06/22(水) 15:32:42.70
>>866 >速度とメモリの両立ならStAXじゃないだろうか?
わけわからん。SAXと比べて速度やメモリの使用量の点でStAXは
何かそんなに違うのか?
ログ出力したいんですけど、便利なクラスはないですか? アクセスログとかそういうのを出したいです
AccessLog 使えばいいよ 便利だし
log4jはスレッドセーフじゃないから気をつけて
SAX を使おうと思ったのですが、DTD のところでエラーになりました。 調べてみると、フルパスでないとファイルを識別できないとか。 ウェブアプリで使うのにどないしろと? どうしようもないので、DOM に戻しました。
どうしようもないのはおまえの頭だけだ。
>>876 DOMの時は検証OFFにしてただけではないのか?
どうしたいの?
880 :
デフォルトの名無しさん :2011/06/22(水) 23:06:04.25
>>879 関係ないかも試練が、
入力されたパスワードが*で表示されているのを暴露するハッキングツールならいくつか存在してる。
C++ならOKってことだ。
Javaは知らんけど
881 :
デフォルトの名無しさん :2011/06/22(水) 23:08:01.52
自己レス fuckしてんのかな? だったら、javaでフックできるかどうか、じゃないか?
882 :
879 :2011/06/22(水) 23:19:49.61
>>880-881 こういうのをフックと言うんですか。
調べてみるとグローバルフックと言うやつみたいですね。
しかもjavaのみでは無理でJNIとやらを使わないといけないみたいですね。
遠回りすることになりそうなのでC++でやってみます、ありがとうございました。
>>878 eclipse 使っているので、DTD はファイル編集時のテンプレとしてだけ使ってます。
読み込むときには不要なのですが、記述を消すわけにもいかず厄介です。
>>885 java関係ないからxmlスレ行ったほうがいいんじゃないか?
>>886 使用する言語は Java なので・・・^ ^;
スイングの時は、SwingUtilities.invokeLaterみたいな仕組みがあったけど、 他のスレッドセーフな呼び出し使う時にもそれぞれ個別にinvokeLaterが用意されてたりするの?
簡単なロギングならjava.util.Loggingでいいと思うけどな 導入当初(JDK1.4)から「マルチスレッドセーフ」って書いてあるし 標準APIだからSLF4Jみたいにライセンスとか気にしなくていいし
ネットの情報よりも自分を信じようぜ つまり、試して確認しろってこと
892 :
デフォルトの名無しさん :2011/06/23(木) 12:54:14.14
test
893 :
デフォルトの名無しさん :2011/06/23(木) 13:36:56.98
Processingの教本でお勧めのものなどございますでしょうか? 初心者にも優しめのがいいんです。
javaで、変数の書き換えを関数でやるにはどうしたらよいでしょうか? C++では*を使ったポインターや、&で、そのまま書き換えが出来ましたが… int a,b,cというデータがあり 関数呼び出し(a,b,c); private 戻り値 関数名 ( int a, int b, int c) { a = 1; b = 2; c = 3; } とやったところで、コピーされたaに値が入るだけで、呼び出しに使ったa,b,cは変動していませんよね。 例えば、これを戻り値にintを指定したとしたら、 return a で、 a = 関数(a );とやれば変更出来ますが その場合1つしか値を変更出来ません。 どうしたらよいでしょうか
>>894 参照型渡して状態書き換えるとか。
private void method (int[] a, int[] b, int[] c) {
a[0] = 1; b[0] = 2; c[0] = 3;
}
>>895 なるほど、配列?にして渡せば良いのですね
有難うございます。
>>896 いやいやいやいやいやいやw まともに受けるなよ。
(
>>895 もネタで書いているよね?)
実際のところ
>>895 みたいなコードは滅多にみないよ。
ではどんな方法が適切かというと、
>>894 で書かれた変数a, b, cの意味が
判らないと何とも言えない。クラス設計の問題であって単純な文法の問題
ではないと思う。
そうやってすぐ設計のせいにするし
文句言う前に自分なりの解答書けよ。
こうだな。 private int a; private int b; private int c; private void method () { this.a = 1; this.b = 2; this.c = 3; }
901 :
デフォルトの名無しさん :2011/06/23(木) 16:45:06.78
char ch = '5'; int i = 12; 二つを足して表示させると65になりました。 どういう理屈なんでしょうか?
charも数値
903 :
デフォルトの名無しさん :2011/06/23(木) 17:11:01.45
static int a; static int b; static int c; public void main(){ ... } これは?www
904 :
デフォルトの名無しさん :2011/06/23(木) 17:14:01.78
>>897 冗談はさておき、
すげー同意するなぁ。
そもそも、変更できないのには理由があるのに、
なぜ、大半の人は、どうやったら変更できるのか、という疑問にたどり着くのかが良く分からない。
変更できないことがすばらしい事だと実感できて無い人も多いようだし。
変更できるようにセッターゲッターロボ大量発生みたいな寝言みたいなコードを書く人も居るし。
>>904 俺もセッターゲッターロボって言い回し使わせてもらおう。
>>901 char ch = '5'; //0x35 == 53
privateメソッドだから
>>900 が正解か
それだとC++でも似た書き方できるじゃんっていう
そもそもC++すら満足に理解できてない臭が…
908 :
デフォルトの名無しさん :2011/06/23(木) 18:28:14.03
てか、 言語を知らない段階で暮らす設計 あ クラス設計を教えるのは重要なことだと思うけどね。 いまだにいくら教えても、実装チューリングマシンなコードを書く奴もいるだろ?
909 :
デフォルトの名無しさん :2011/06/23(木) 18:31:23.04
例えば・・・ ポーカーのプログラムで、Yama、Control、Tenouchi の3つのクラスを作ったとして、 deal というメソッドをどこにどのように実装するか、見たいなね。
実装チューリングマシンなコードというと例えばどういう動きをするんですか?
911 :
デフォルトの名無しさん :2011/06/23(木) 18:47:36.70
>>910 10回繰り返す場合、
10コードをコピーペーストする
みたいな
>言語を知らない段階で 単語知らない段階で文法叩き込むぐらい不自然に聞こえる クラス設計なんて理解しなくても動くものが作れる 現場でも保守性や可読性を差し置いて動くものを早急に求められる ってのが原因じゃないのかな 納期までに死人が出ずどうやら動くものが完成するだけで精一杯の日本のIT産業じゃあ無理も無い 終電帰りの毎日でコードレビューやリファクタリングをしつつ技術向上ってのは夢の話だ
914 :
デフォルトの名無しさん :2011/06/23(木) 19:19:57.96
>>912 cards という変数がある。トランプの山札に相当する。
cards はYama にpublicで定義されている (この段階で、え????と言える人が増える必要があるけど)
Tenouchi は参加者の手の内のカード
Control は YamaクラスからTenouchクラスにカードを配る役割のクラス
>>914 俺様的完璧設計を披露したいのか例題としてわざと自爆設計を例示
したいのかはっきりしてくれ。
クラス名として日本語英語の混在は良いけれども動詞をクラス名に
するのはちょっと簡便だ。あとdealメソッドの要件定義もよろしく。
916 :
デフォルトの名無しさん :2011/06/23(木) 20:00:37.75
事情によりやむを得ず1.4で開発してますが、5や6のサンプルが使えないのが辛いですね
極力ライセンスを気にしたくないのと、 ドキュメントでマルチスレッドセーフと明言されている点を考慮して、 とりあえず java.util.logging.Logger クラスを使用することにしました。 設定ファイルをかまして何とかファイルに出力できたのですが、フォーマットがダメダメです。 ミリ秒まで表示できるフォーマッターはありませんか?
920 :
デフォルトの名無しさん :2011/06/23(木) 22:07:02.61
>>915 指摘ごもっともだなwww
クラス名は名詞だ。
Yamaクラス:シャッフルしたカードを保有するクラス。shuffle()でカードを混ぜたりすることができる
cardsクラスはシャッフルしたカードの配列
Controlクラス:YamaとTenouchiのクラスを仲立ちし、権限が正しいかどうかを確認する(ここがみそかも)
Tenouchiクラス:ユーザに配られる5枚のカードの配列とそれを処理するクラス。throw()でカードを捨てたりcall()で上がりを宣言したりする。
921 :
デフォルトの名無しさん :2011/06/23(木) 22:08:18.58
>>920 deal() は、新たなカードを配布して欲しいという要求を出すメソッド。
問題はこのdeal()をどこにどのようにおくか、ということ。
ただし、要求はTenouchiクラスから一番最初に行われる。
922 :
デフォルトの名無しさん :2011/06/23(木) 22:09:25.30
>>918 多分、クラスのメンバーフィールドにするかどうかも、その変数の要件、要求によりけりだと思う。
もう一つ追加で質問させてください。 java.util.logging.Logger と FileHandler を使って、 ログファイルを出力ができるようになったのは良いのですが、 ログ出力レベル(設定ファイルの .level)を FINEST や ALL にすると、 Tomcat 再起動時に数 MB 程度のテキストを吐き出してくださっちゃいます。 どうにかして、自分のログだけにできないものでしょうか?
924 :
デフォルトの名無しさん :2011/06/23(木) 22:15:49.57
一応Javaについての質問なのでこちらでさせていただきます。 Webサイトからvalueの一部(value = "aaa,sss,ddd,fff,ggg"のfffのような感じ)をとってDB(またはテキスト管理)に保存しようと考えております。 その際にURLクラスを用いてHtmlコードを丸々取得したのちテキストとして処理するのと JavaScriptのDOMで取得するのだとどちらの方が処理が早いでしょうか? 若干抽象的な質問ですがよろしくお願いしたします。
お断りさせていまだきます。
毎度礼の一言も言わずにネットの執事たちからいつも沢山の回答をもらえる
ゆとり
>>894 の一人勝ちってことでおk?
927 :
デフォルトの名無しさん :2011/06/23(木) 22:43:56.26
>>926 すみません、遅くなりました。
ありがとうございました。
そんなケチ臭いこと言わずに、自分で計測してみろとくらい答えてやれよ
930 :
デフォルトの名無しさん :2011/06/23(木) 22:46:28.63
気持ち悪い変数名は使わないこと
933 :
デフォルトの名無しさん :2011/06/23(木) 23:16:48.37
>>931 別段変数やクラス名にこだわりは無い。好きに変えても怒りはしないよ。
ま、
君には過ぎた課題だからな。無理しなくてもいいよ。ってか無理だな。
934 :
デフォルトの名無しさん :2011/06/24(金) 00:11:58.46
>>933 てか、あれだな。
>>931 は人に教えたことが無いんだよ。
課題を出す場合には、理想よりも問題の趣旨が分かりやすいクラスや変数名を使わないと
頓珍漢な解答をしてくる人が必ず居る。
>>931 は一人でコーディングしてる人なんだよ。ほっときなよ
935 :
デフォルトの名無しさん :2011/06/24(金) 00:21:33.29
そうなのか?
936 :
デフォルトの名無しさん :2011/06/24(金) 00:29:24.32
普通にControlにdeal()を作るだろ、アホか。
937 :
デフォルトの名無しさん :2011/06/24(金) 00:38:15.92
プログラムってセンスデルからなあ。 仕事頼むとすぐ出来る奴と何日も描けて音沙汰無しってのも居るからな。
939 :
デフォルトの名無しさん :2011/06/24(金) 00:53:57.18
自作したログ出力のフォーマッターを認識しないのですが、どうしてですか? java.util.logging.Formatter を継承したクラスを作成し、format メソッドを実装しました。 そして、logManager の readConfiguration メソッドで java.util.logging.FileHandler.formatter = sample.SampleFormatter という記述のある properties ファイルを読み込んでいます。 しかし、出力されたログファイルを見てみると、なぜか XMLFormatter の内容になっています。 同フォーマッター記述を java.util.logging.SimpleFormatter にするとテキスト形式になるので、ファイル自体は認識されているのです。 ちなみに、例外やエラーは何も発生していないです。
943 :
デフォルトの名無しさん :2011/06/24(金) 10:31:40.65
944 :
デフォルトの名無しさん :2011/06/24(金) 11:37:34.61
Adapter(アダプタ)クラスってなんでAdapterっていうんですか? Adapterってなんかと接続とかそんな感じだとおもうんですが・・ Inner(インナー)クラスとかAbstract(抽象)クラスとかはニュアンスがわかるんですが。 Adapterはどうもわかりません。 直接文法の質問ではないですが、知ってる人おしえてください。
945 :
944 :2011/06/24(金) 11:40:05.73
英和で検索したら 2 改作者, 翻案者, 編曲者. ってでました。 この改作者って感じが一番近いんでしょうか・・
946 :
デフォルトの名無しさん :2011/06/24(金) 11:41:38.70
947 :
944 :2011/06/24(金) 11:47:29.47
>>946 なるほど、「適合させるもの」ですか。
なんか、「接続機」とかしか思い浮かばなかったんですが、英和辞典でしらべると
色々ありますね。っていうか、そっちが原義なんでしょうね。
ありがとうございました。ニュアンスがわかりました。
948 :
944 :2011/06/24(金) 11:50:44.99
色々、ネットの辞書を調べてみると、 「適合させるもの」とか「改作者」とかが1番目の用例で出てくる方が多いですね。 で、2番目が「接続機」とかの意味です。 どうも、本来の意味は「適合させるもの」とかみたいです。
949 :
デフォルトの名無しさん :2011/06/24(金) 12:18:45.23
>>948 接続機も、適合させるもの、だよ。
接続させるためには接続元と接続先の形状やプロトコル、仕組み、などなどを一致させなければならない。
電源のコンセントなんかも、
銅線ケーブルと、壁のコンセントという別のものを適合させてあげる必要があるだろ。
初心者で申し訳ないのですが質問させてください。 ArrayList を使用する時、 List list = new ArrayList(); とすることが多いですが、 ArrayList list = new ArrayList(); としない理由はなぜでしょうか。 List の呼び出し側が List の実装クラスを気にする必要がないようにしたり(抽象化プログラミング) 実装クラスの選択肢を多くしたりするためなのでしょうか
>>951 ArrayListでもカッコ付いとるがな、
なんつってな
ローカル変数の話だよね?
設計上の意味はまったくない
ArrayListじゃなくて他のListを使いたくなったときに
new ArrayList();のところだけ修正すればもしかしたら動くかもしれない程度
まあ
>>951 と思っておけばいい
読む人が楽。 Listの機能しか使わないって言ってるわけだから。
確かに、Listの機能しか使わないとわかると読む時に楽ですね。 皆さんありがとうございました。
ログのフォーマットですが、どうにも解決できないので、構成ファイルを使うのをやめました。 なんというか、自作したフォーマッタークラスの存在を認識しないんですよね。(クラスローダーが糞なのですかね?) 仕方がないので、直接 FileHandler のインスタンスを生成して、そのメソッドから設定するようにしました。 ただ気に入らないのは、親 Logger のレベルも設定してやらないと fine などの低優先度のログが出ないことですね。 変えてやると、トムキヤット起動時にウィンウィンいって重くなって最悪ですよ。
マルチスレッドの場合、シンクロナイズドの指定は必須ですか?
960 :
デフォルトの名無しさん :2011/06/24(金) 20:25:15.32
タスクトレイにしまった状態で、 アクティブなウィンドウの画像をキャプチャしたいんですが、(要するにalt+prtsc) Javaでできますか? 画面全体のキャプチャなら方法はネットに載っていました。
961 :
960 :2011/06/24(金) 20:39:24.91
JNAでWinAPIつかってやるしかないっすかね?
>>960 SWT使えばアクティブウィンドウ取れなかったっけか?
963 :
960 :2011/06/24(金) 20:47:49.03
>>962 まじですか?
すごいですね。SWTはそんなことまでできるんですか・・
ちょっとしらべてみます。ありがとう。
>>958 そんな単純じゃない。
タグリー、ゲーツ、結城あたりの本でも嫁。
>>963 org.eclipse.swt.internal.win32.OS#GetActiveWindow()
Eclipse使ってるなら、pluginsフォルダのSWT使えばJNA使う手間省けるってだけ。
3.6.2にはあるけど本来公開されてない部分だから過去将来もあるって保証はないし。
swtはどこが使いやすいんですか?イベントとかも
967 :
960 :2011/06/24(金) 21:00:18.18
>>965 おお、どうもありがとうございます。
そいつでやってみます!ありがたや〜
JNAとかめんどうだから、助かります!
>>958 じゃないけどJavaマルチスレッドの備忘録的な本でお勧めある?
言語変わるとき混乱するからJavaの絵本的な流し読みできるのがあると捗るから
winvistaです
http://d.hatena.ne.jp/miyohide/20100317/1268828739 このサイトに書いてある事をやろうと思って
上記のサイトのコードをC:\JdbcAccess.java に保存
上記のサイトに記入してあるライブラリをC:\sqlitejdbc-v056.jar に保存しました
この状態でどうコマンドプロンプトを叩けば、上記のサイトの「実行してみる。」の後の通りのコードが表示されるのでしょうか
javac C:\JdbcAccess.java
java -classpath C:\sqlitejdbc-v056.jar C:\JdbcAccess
では通りませんでした
>>971 同じJava言語ユーザでも読解力は個人に依存する様だね。
って、レス貰っといてこんな言い草も無いわなw
いくら概念は頭に入ってても、
「あれ?書き方こんなんで良かったけ」って不安になる事が良くあるだろ
複数言語ローテーションで掛け持ちしてると、次の言語入る前に軽く総復習がいる
環境変数classpathにセットしたjarファイルって 実行中のjavaでインポートしてなくてもファイルがロックされますか? 実行中のjavaでバージョンチェックして更新されてたら jarファイルを更新しようと思うのですが、名前が変更できませんでした。 JRE:1.6.0 update 26 OS:Windows XP SP3
Windowsは使用中のファイルを名前変更できない Unix系はできる
976 :
975 :2011/06/25(土) 04:01:53.37
そういうことではなかったか そのクラスを使用してなくてもロードしたいクラスがどの jar にあるかは全部開いてみないとわからないからクラスパス全部開いちゃうんじゃない、たぶん 標準の URLClassLoader は閉じるタイミングを制御できないから自前のクラスローダを作るといいよ
>>972 そういうときはどんなエラーが出たのかも書こう!
C:\ にいる状態で
java -classpath sqlitejdbc-v056.jar JdbcAccess
(リンク先はmiyohideパッケージに入ってるけど)
かな?最後はファイルパスじゃなくてクラス名を指定するんだ!
ドライブルートにそんなファイル散らかすなよ。
田舎の方にはドライブスルーとか言う代物はまだあるんですか?
981 :
デフォルトの名無しさん :2011/06/25(土) 12:02:44.46
どザえもんの間違いだろ
都会に住んでることが唯一の自慢かwww 産め。
まあ田舎は都会のおかげで食っていけてるわけだし
984 :
デフォルトの名無しさん :2011/06/25(土) 17:23:57.12
うちは坪単価360万だから田舎だな 生め
前回(
>>950 )はありがとうございました。
お手数おかけしますが今回も質問させてください。
標準入力の数字一桁を変数に格納したいのですが、
↓のコードでは別の値が取得できてしまいます。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = br.read();
System.out.println(num);
例えば、標準入力の数字一桁を 1 とすると、num は 49 となってしまいます。
read() メソッドを使わず、readLine() メソッドを使って
int num = Integer.parseInt(br.readLine());
とすると num は期待通りの 1 となってくれます。
read() メソッドの使い方をどのように直せば良いのでしょうか
read は文字を読むもの 文字とは ' ' で囲ったもの 49 と '1' は等しい つまり read は正しく '1' を返している 数値が欲しいのなら、文字を数値に変換しなければならない つまり readLine のときに使った parseInt に相当することをしなければならない 例えば int num = Integer.parseInt(String.valueOf((char) br.read())); とか int num = Character.digit(br.read(), 10); とか、あるいはもっと安直に int num = br.read() - '0'; とか int num = br.read() - 48; とか
今、JFreecharを使って折れ線グラフを作っています。 グラフの値によって、横軸、縦軸の目盛りが入って来るのですが、 目盛のあの数値は非表示にしたいのですが、 どこで設定してよいか見つかりません。 もし、よろしければ教えてください。
すいません。参考書にこんな継承のプログラムがあるんですが、コンパイル出来ません (※スーパークラスは省略します) class Human extends Ape { } class HumanMain { public static void main(Stritg args[]) { Human h = new Human(); System.out.println(h.favorite); h.sleep(); } } これは昔の文法なのでしょうか?
>>988 favoriteが定義されていないとかいうオチじゃないだろうな?
本を引用するなら書名とISBNを晒せばいいのに。
>>988 エラー内容がわからないが、sleepの部分をtry-catchで囲むとか。
うへ、スレッドと勘違いした、
>>991 は無視してくれ。
>>988 エラーが出るなら、エラーの内容を晒せばいいのに。
>>990 書名:基礎からのJava
ISBN978-4-7973-4129-4
>>993 java.lang.NoSuchMethodError: main
Exception in thread "main"
>>994 それコンパイルエラーじゃねえええ
実行したコマンドは?
>>995 javac Human.java
だけです
>>995 あ、まちがえました
java Human
です
Human に main はあるのか? 何を実行しようとしているんだ
>>998 >>988 です
見ての通りHumanにはmainはありません
ああ・・スレ落ちちゃう・・・
1000 :
デフォルトの名無しさん :2011/06/25(土) 21:36:45.88
HumanMainクラスはHuman.javaではなくHumanMain.javaに 記述してこれもコンパイル。実行時はjava HumanMain
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。