【初心者】Java質問・相談スレッド117【歓迎】at TECH
【初心者】Java質問・相談スレッド117【歓迎】 - 暇つぶし2ch112:100
08/07/12 01:40:29
>>106>>107
はぁーなるほど、訂正ありがとうございます。

学校の資料見ると、上記の二つの文は書き方が違うだけで
同じと書いてありましたので・・・・

113:デフォルトの名無しさん
08/07/12 01:43:35
>>112
学校の資料が間違っていたか間違って覚えてきたのか。
短いプログラムを書けば実証できるんだからナゼやってみない?

114:100
08/07/12 01:59:36
>>113
はい、やってみます。
サンクスですた。。。

115:デフォルトの名無しさん
08/07/12 02:07:40
>>111
何かを勘違いしていると思われる。

保存するファイル名がtest.txtだろうがtest.javaだろうが、ファイルの
中身は同じだよ? Windowsのエクスプローラがファイル名を見て「テキ
スト ドキュメント」とか種類を表示しているだけ。


116:115
08/07/12 02:11:54
あ、メモ帳の例が悪いだけかな。
たとえば画像処理するプログラムで、test.jpgならJPEGで保存、
test.bmpならBMPで保存、という感じに保存されるデータ自体が変わるケー
スもあるね。
そういうのは自分でコードを書かなきゃダメだ、もちろん。


117:108
08/07/12 03:08:51
無事解決しました。
意見していただいた方、ありがとうございました。

118:デフォルトの名無しさん
08/07/12 04:12:21
import java.io.*;

class Sample5_6
{
public static void main(String args[]) throws IOException
{
System.out.println("苗字を入力してください。");

BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

String str = br.readLine();
String str1 = "山田";
String str2 = "伊藤";

if(str1 == "山田"){
System.out.println("太郎が入力されました。");
}
else if(str2 == "伊藤"){
System.out.println("次郎が入力されました。");
}
else{
System.out.println("1と2を入力して下さい。");
}

}
}

119:118
08/07/12 04:15:18
これが、思い通りになりません

出力が
”山田”を入力したら”太郎”に
”伊藤”を入力したら”次郎”に
なるようにしたいのですが、
後者が、どうしても、”伊藤”と入力すると”太郎”が
出力されてしまいます

120:デフォルトの名無しさん
08/07/12 04:35:18
>>118
equals
つか、Javaで真っ先に習うことの一つのような気がするが……。

121:デフォルトの名無しさん
08/07/12 04:44:49
慣れるまでは結構やると思うけどね

122:118
08/07/12 04:48:57
equals
は、まだ習っていません・・・
できたら、ソースを訂正していただけないでしょうか・・・?

123:デフォルトの名無しさん
08/07/12 05:01:51
ていうかあれだな、strにキーボードで打った文字入れてるのに
if文で使ってないのは比較以前の問題だな。。。

とりあえずequalsは「java 文字列比較」で調べればいいよ

124:118
08/07/12 05:58:04
ありがとうございました

125:デフォルトの名無しさん
08/07/12 07:58:43
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import org.apache.struts.Globals;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.MappingDispatchAction;

public ActionForward select (ActionMapping map,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res ) throws Exception{
DBManagement dbManager = new DBManagement();
ArrayList alTask = new ArrayList();
ServletContext scContext = servlet.getServletContext();
DataSource dsSource =(DataSource) scContext.getAttribute(Globals.DATA_SOURCE_KEY);
alTask = dbManager.selectData(dsSource);
req.setAttribute("input", alTask.toArray());
return map.findForward("index");
}

上記のコードがあります。selectメソッドの5行目や6行目では、newを使ってインスタンスを生成しています
が、次の行のservlet.getServletContext();ではインスタンスを生成しなくてもいきなり
servlet.getServletContext();という風にgetServletContext() メソッドを使えています。これは何故でしょうか?

ぐぐってもわからなかったので、ご教授いただければ幸いです。 どうぞ宜しくお願い致します。


126:デフォルトの名無しさん
08/07/12 08:35:06
>>125
select メソッドがあるクラスに servlet という フィールドは無いか?
もしくはそのクラスが extends しているクラスに servlet という protected か public なフィールドは無いか?

127:デフォルトの名無しさん
08/07/12 10:18:07
>>126
早速のレス有難う御座います。
私が見た限りでは、どちらもありませんでした。

なお、エクリプスで上記のコードを見ると、servlet.getServletContext() のservletだけ
青文字になっていたのでマウスのカーソルを当ててみたところ、

ActionServlet org.apache.struts.action.Action.servlet
Note: This element neither has attached source nor attached Javadoc and hence no Javadoc could be found.

と出ました。何かしらご教授いただければ幸いです。どうぞ宜しくお願い致します。

128:デフォルトの名無しさん
08/07/12 10:21:57
ActionServlet org.apache.struts.action.Action.servlet
org.apache.struts.action.Actionのservletだろ

129:デフォルトの名無しさん
08/07/12 12:45:37
>>99
ありがとうございました

130:デフォルトの名無しさん
08/07/12 13:09:30
>>128
レス有難う御座います。
ということは、インポートしたパッケージに含まれるオブジェクトは、newで
インスタンスを生成しなくてもいきなり使える、ということでしょうか?

131:デフォルトの名無しさん
08/07/12 13:29:27
>>130
public class LoginAction extends Action {

とかしてるんじゃないの?

132:デフォルトの名無しさん
08/07/12 13:38:41
>>131
レス有難う御座います。

いえ、public class ~Action extends MappingDispatchAction {

になっています。なにかご教授いただければ幸いです。どうぞ宜しく
お願い致します。

133:デフォルトの名無しさん
08/07/12 13:48:21
>>132
MappingDispatchActionは、Actionのサブクラスなのでは?

134:デフォルトの名無しさん
08/07/12 14:10:05
>>130
インスタンス変数と継承の関係について理解が足りない。

135:デフォルトの名無しさん
08/07/12 15:39:11
最近Javaを始めたものですが、以前にC++を扱っていた人が
「JavaでGUIを作る気になれない」
といっていたのを思い出しました。
どちらが優れてるか等の議論はしませんが、それぞれのメリット、デメリットを教えていただけないでしょうか?


136:デフォルトの名無しさん
08/07/12 15:59:38
JAVAで二重起動を検出する標準的な方法などは、あるものでしょうか。
URLリンク(oshiete1.goo.ne.jp)
この手順のような、解放処理を登録せずに実装できる方法を探しています。

137:デフォルトの名無しさん
08/07/12 16:09:38
>>136
そこに書いてある、解法処理を登録する奴が一番標準的

138:デフォルトの名無しさん
08/07/12 16:23:20
なるほど、そうでしたか。
この解放処理をWindowAdapterクラスを継承したクラスの
windowClosingで処理するという方法はありでしょうか。
試した限りでは、上手く動作しているのですが。

139:デフォルトの名無しさん
08/07/12 16:32:20
>>138
java.lang.Runtime#addShutdownHook(java.lang.Thread) 使ったほうが、
異常終了(例えば Windows の ctrl-c による強制終了とか)でも終了を捕捉できる可能性が高くなる。

必要ないならアリだと思う。

140:デフォルトの名無しさん
08/07/12 16:35:48
>>135
Java *だけで* ある簡単な GUI を作ってみて、
C++ *だけで* 同じ GUI を作ってみて、
比較してみたら何か分かるんじゃないか?

141:デフォルトの名無しさん
08/07/12 16:49:56
>>139
レスありがとうございます。
もう一度、検討しなおします。


142:デフォルトの名無しさん
08/07/12 17:25:47
>>135
OS

143:デフォルトの名無しさん
08/07/12 19:56:54
テキストエリア内の現在のキャレットの位置を(X行,Y列)で取得するにはどうしたらいいんでしょうか?
getCaretPosition()でオフセットを取得して、そこから(X行,Y列)への変換を試みたのですが、
うまくいきませんでした。
どなたか、御教示下さい。

144:デフォルトの名無しさん
08/07/12 22:14:08
>>143
やったこと無いけど、
getCaretPosition() を使った方法じゃダメなの?

145:デフォルトの名無しさん
08/07/12 22:14:37
swingでウィンドウを作ってみたんですがうまく行きません
OSはVistaの32bit、javaのヴァージョンはVersion 6 Update 7です。

コンパイルしたものを実行するとウィンドウは出てくるんですが
ボタンやテキストエリア等の中身が一切表示されません。
ウィンドウサイズを手動で変えると表示されます。
別のウィンドウをアクティブにしてから戻ると、
その別のウィンドウと重なった部分が消えてしまいます。

解決策はありますでしょうか。よろしくお願いします。

146:デフォルトの名無しさん
08/07/12 22:22:55
>>145
バリデートツリーとかリペイントとか?

Java低速GUI Swing 7
スレリンク(tech板)

147:デフォルトの名無しさん
08/07/12 22:32:14
>>145
ソースをこちらへ
URLリンク(rg550.hp.infoseek.co.jp)

148:デフォルトの名無しさん
08/07/12 22:33:26
>>145
swingの描画ぶっこわしてるんじゃない?
paintComponent()で描画してる?

149:143
08/07/12 22:34:43
>>144
getCaretPosition()でオフセットを取得したあと、値から
現在のキャレットの行と列の位置を判断する方法が思い浮かばないんです。

Hello|(←キャレット)
World

例えばこの位置でのオフセットの値は5になるんですが、この値から
行と列の位置(1,6)を判断する方法が思い浮かばなくて…


150:デフォルトの名無しさん
08/07/12 22:44:56
>>146-148
早々のレスありがとうございます。
スレ違いだったようで失礼しました。
paintComponent()というのを使っていないので
調べてみようと思います。解決しなければswingのスレか
ソースうpしてまた質問させてください。
ありがとうございました。

151:デフォルトの名無しさん
08/07/12 22:46:19
>>149
JTextArea ta;
として、
こんな?
int y =0;
int x =1;
int cnt = ta.getCaretPosition();
for(String s:ta.getText().split("\n")){
if(cnt<=s.length()){
y=cnt+1;
break;
}else{
cnt=cnt-s.length()-1;
x++;
}
}

152:143
08/07/12 23:09:48
>>151
ありがとうございます!
無事解決しました。

153:デフォルトの名無しさん
08/07/12 23:45:31
GUIおぼえなくちゃだめ?

154:デフォルトの名無しさん
08/07/13 00:01:05
netbeans使えば?

155:デフォルトの名無しさん
08/07/13 00:52:58
>>135
正直どっちでもいいよ。JavaでGUI作ってもC++で作っても
パフォーマンスの違いなんて昨今じゃそこまで広がらない
けど個人的にはC++のほうがなんかいいんだよなぁ~。。。なんでだろw

156:デフォルトの名無しさん
08/07/13 09:07:56
まぁ見た目ぐらいだな

157:デフォルトの名無しさん
08/07/13 09:28:55
GUIなんてプログラムの本質ではない

158:デフォルトの名無しさん
08/07/13 10:13:07
数年前、いらないMMX Penとか河童celの入ったPCでtomcatの実験をしてみたら
遅くて使い物にならなかったのでjavaの利用を諦めていたのですが
最近話題の激安鯖などはそこそこ使えますか?

159:デフォルトの名無しさん
08/07/13 10:45:02
CPUよりは、どっちかってーとメモリの問題だね。128MB程度では遅すぎる。
512MBくらいあればXPでも遊べるよ。
DBもリッチなIDEも全部入れるとなると、1GBくらいないときついけど。

160:デフォルトの名無しさん
08/07/13 12:31:49
私も初心者です。

やねう企画代表者やねうらお(本名・磯崎元洋)が
・ソフトウェアの不正コピーを行っていた
・労働契約上の違反をしていた
・他は不正コピーしていないことを証明しようとしてエロゲーのパッケージを発見し、
 写真に撮ってアップロードしようとした。
URLリンク(d.hatena.ne.jp)
やねう企画の裏側(競馬の詐欺ソフトの製作現場)
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)
有限会社やねう企画(所在地・大阪府八尾市末広町2-1-2)が計画倒産
URLリンク(www.sia.go.jp)

やねうらおプロフィール
性格:友達から「チンピラ」「ヤクザ」と呼ばれている。前世で殺人鬼だった宿業を背負っているという妄想(自覚)あり。
最終学歴:専門学校卒
主な職歴:有限会社センキ(凌辱系アダルトゲームの製作会社)を経て独立、有限会社やねう企画を設立、2006年に計画倒産
代表作:『夜這いマニア』『盗撮マニア』『お楽しみCDシリーズ』『競馬詐欺ソフト』『BM98』

やねうらお語録
>「ワシのほうが潔癖やと思うんやけどな。
>絶対に違法コピーのソフトしか使わんし。
>たとえば強盗に入ったときに、ちょっとかわいそうになって
>十万円だけ残してったら、おかしいやろ?
>自分の『強盗する』という意思に対して矛盾やろ?
>だからワシは、一個も買ったソフトを使ったことがない!!」


161:デフォルトの名無しさん
08/07/13 12:35:16
substring(0,0)って使えるんですか
最初の一文字だけを取り出すケースが出てしまうものを作ろうとしているのですが・・・・・・

162:デフォルトの名無しさん
08/07/13 12:49:46
>>161
それは0文字じゃね
最初の1文字なら substring(0, 1)

163:デフォルトの名無しさん
08/07/13 13:23:55
普通にcharAtでよくね?

164:デフォルトの名無しさん
08/07/13 13:28:34
最近、やねうらおは弓月(>>160)とか言う真性のキチガイに絡まれている

【自作自演】弓月城太郎氏に関するまとめ【神秘体験】
URLリンク(d.hatena.ne.jp)

165:デフォルトの名無しさん
08/07/13 13:56:23
コピペ君って馬鹿だな、まで読んだ。

166:デフォルトの名無しさん
08/07/13 14:13:29
>>163
codePointAt

167:デフォルトの名無しさん
08/07/13 15:26:06
クラスの継承を使ったときに
スーパークラスではpublicなメソッドをサブクラスではprivateとして隠蔽したいときはどうすればいいですか?

例えばHashtableクラスを継承したMyHashtableを作って、#get(Object key)を使わせたくない、等です。

168:デフォルトの名無しさん
08/07/13 15:29:07
PS
継承ではなく委譲にして必要なメソッドだけ実装する
という方法はNGです

169:デフォルトの名無しさん
08/07/13 15:32:42
無理です
サブクラスはいつでもスーパークラスにキャストできるので、どっちみち無駄です
使わせたくないだけなら、オーバーライドして例外を投げる方法がなくもない

public Object get(Object key) {
  throw new UnsupportedOperationException();
}

しかし継承より委譲の方が良いのではないか

170:デフォルトの名無しさん
08/07/13 15:37:56
しかしgetだけ封じても、iterator使えば列挙できるし、putやremoveすれば元の値が返ってくるし、
完全に値を取得できなくするのはなかなか面倒い気がする

171:デフォルトの名無しさん
08/07/13 15:43:33
継承でのアクセス修飾子の変更は特権を広げる方向だけなのでだめ。
隠したいメソッドを抜いたインターフェイスを準備して実装、
そのインターフェイスを通して操作するのはどう。

172:デフォルトの名無しさん
08/07/13 16:00:35
うーむ、やはり委譲ですかね・・・
どうもありがとうございました

173:デフォルトの名無しさん
08/07/13 16:25:29
>>167
そんなリスコフの置換原則を全力でぶっちするような設計は却下。

174:デフォルトの名無しさん
08/07/13 21:51:52
大人の事情で、仕方なくJavaの実装を行うことになりました
深入りしたくないので、C/C++で実装したDLLを使いたいのですが
可能でしょうか?
VS2005、C/C++職歴6年生です。

175:デフォルトの名無しさん
08/07/13 22:00:05
可能ですが、その大人の事情とやらが使わせてくれないかも
Javaアプリケーションは100%Javaで完結していることが好まれることがある
使っていいことになったら、JNIでぐぐれ

176:デフォルトの名無しさん
08/07/13 22:06:21
>>174
原理的にはやればできる。
お勧めはしないがするのはアンタだ。やりたいようにすればいい。
JNI使えば、Java側からC/C++の関数を呼び出したり
逆にC/C++側からJavaのオブジェクトにアクセスできたりできるので、
やりたいことは多分できるはず。

177:デフォルトの名無しさん
08/07/13 22:21:33
>>175
>>176
Thx
JNIまたは、DLLをJavaで書き直すか、今晩ゆっくりトレードオフを考慮し
月曜の朝決めます

178:デフォルトの名無しさん
08/07/14 00:06:23
少し前に二重起動に関して質問した者です。
二重起動の確認にFileOutputStreamを利用するのが一般的
ということなのですが、
この方法を使用するとロック用に使用しているファイルが
普通にWindowsファイルシステム上で確認できてしまいます。
これを確認できないようにするには、どうしたらよいのでしょうか。

179:デフォルトの名無しさん
08/07/14 00:09:23
普段あんまり確認しないような場所 (C:\Documents and Settings\username\Local Settings\Temp とか) を使えばいいのでは

180:デフォルトの名無しさん
08/07/14 00:27:48
レスありがとうございます。
確かにそうなのですが、ユーザーからすれば、
やはり気持ちのよいものではないと思い、
何か策はないかと考えてしまう次第です。
また、一時ファイルのパスのDocuments...の部分が、
vistaとxpで違うのが、厄介なところです。
う~ん...。

181:デフォルトの名無しさん
08/07/14 00:34:08
環境変数のtempから取る

182:デフォルトの名無しさん
08/07/14 00:39:24
レスありがとうございます。
早速、調べてきます。

183:デフォルトの名無しさん
08/07/14 00:58:32
次のようなコードで問題なく動作しました。
色々とありがとうございました。
stream = new FileOutputStream(new File(System.getenv("TEMP") + "\\lock"));

184:デフォルトの名無しさん
08/07/14 03:35:16
class SwitchSample
{
public static void main(String args[])
{
int cal = 100;

for(int i = 1; i<=5; i++){
switch(i){
case 1:
case 2:
cal = cal + i;
break;

case 3:
cal = cal - i;
break;

case 5:
cal = cal / 2;
break;

default:
cal = cal * 10;
}
System.out.println("カウント数は、" + i + "です。" );
}
System.out.println("計算結果は、" + cal + "です。" );
}
}


185:184
08/07/14 03:36:02
どうして、結果が500になるのかわかりません・・・
解説お願いします。

186:デフォルトの名無しさん
08/07/14 03:39:02
>>185
どうして結果が500にならないと思うのか分かりません。

187:デフォルトの名無しさん
08/07/14 03:41:27
どんな結果になると予想したのさ

i=1の時にswitch節はcase 1: に一致して、
breakが無いからcase 2: に書いてある cal = cal + i; が実行されるって分かってる?

188:184
08/07/14 03:45:47
cse1が、一回目の繰り返しですよね?100 + 1 = 101ですよね?
で、cse2が、二回目の繰り返しで、100 + 2 = 102
で・・・・・????????????

189:デフォルトの名無しさん
08/07/14 03:52:25
中級の本おしえて

190:デフォルトの名無しさん
08/07/14 04:02:07
>>184
初期値: 100
i=1: case 1 → 100+1=101
i=2: case 2 → 101+2=103
i=3: case 3 → 103-3=100
i=4: default → 100*10=1000
i=5: case 5 → 1000/2=500
結果: 500

191:184
08/07/14 04:41:16
>>190
レス、ありがとうございます。
疑問がまだあります、Breakで一旦抜けているのに
i=1: case 1 → 100+1=101
i=2: case 2 → 101+2=103
のように、case2で103になったのを、それ以外にあたいする
case 4に、103という数値をいれてもいいのでしょうか?

192:184
08/07/14 04:48:22
なんとなく、わかりましたが、
たとえば、こうなるとき
for(int i = 1; i<=5; i++){
for(int i = 1; i<=4; i++){
for(int i = 1; i<=3; i++){
for(int i = 1; i<=2; i++){

で、i<=3なら此処で抜けて
以前、まで(3以下まで)の処理がされる継承されてるからですね?
そして、case 3でブレイクということでしょうか?


193:184
08/07/14 04:49:15
簡単に言いますと、途中に(3にいくまで)Breakがあるから
ぬけだされないのかと・・・?

194:デフォルトの名無しさん
08/07/14 04:50:57
javaでWeb上のXMLを取得するプログラムを組みたいのですが
取得部分のやり方を教えていただけませんか。
できればSAXでお願いします。

195:デフォルトの名無しさん
08/07/14 04:51:29
>>191>>192
日本語を先に勉強しろ

196:デフォルトの名無しさん
08/07/14 04:51:52
>>191
>>192
なにを言ってるのかさっぱりわからん。
switch - case の break を for の break と勘違いしてるか?
両者は別のもの、というか、case にある break では for は終わらないぞ

197:デフォルトの名無しさん
08/07/14 04:57:06
>>194
WebからXMLを取得することとSAXを使うことは直接は関係ない。
まずWebからHTMLを取得することを勉強しなさい。

198:184
08/07/14 05:01:31
出直してきまふ
むじぃ

199:デフォルトの名無しさん
08/07/14 05:05:45
>>198
まるっきり勘違いを積み重ねてるようだから、出直して分かるか怪しいな
先のコードに行番号つけて、処理されると思っている順番に番号を書き出してみるのがいいだろう

200:デフォルトの名無しさん
08/07/14 05:07:01
>>197
Htmlを取得してそのXMLを読み込んで利用という認識でOKですか?

201:197
08/07/14 05:15:39
>>200
OKじゃない。
Webから何かを取得するという処理は、それがXMLだろーが
HTMLだろーが画像だろーが動画だろーが関係ない。
取得した後、XMLだったらSAXなりDOMなりXSLTなり
なんでも使って処理すればいい。

202:デフォルトの名無しさん
08/07/14 08:01:02
URLオブジェクトをつくり、ConnectURでゲット要求だして取り敢えずやってみ

203:130
08/07/14 08:53:46
>>132
>>134

亀レスで申し訳ないです。色々調べてみたら、

java.lang.Object
org.apache.struts.action.Action
org.apache.struts.actions.DispatchAction
org.apache.struts.actions.MappingDispatchAction
で、


204:130
08/07/14 08:56:41
org.apache.struts.action.Action
にservletというフィールドがありました。

有難う御座いました!!

205:デフォルトの名無しさん
08/07/14 11:16:38
JSPで1つのテキスト欄に対して複数の送信ボタンを作って処理を分けたいのですが、
それぞれの送信ボタンに異なるnameの値を設定してそれをサーブレットでどのボタンが押されたか判断し、その後の処理を分岐させようとしてもうまくいきません。

JSPで
<form method="POST" action="サーブレットのURL">
<input type="submit" name = "1" value="追加" />
<method="POST">
<input type="submit" name = "2" value="更新" />
(省略)
</form>

サーブレットで
String name = req.getParameter("name");
out.println("name="+name);
とやってもname=nullとしか表示されずnameの値を取得することが出来ません。

どこが間違っているのでしょうか?また、他に良い方法はあるのでしょうか?

206:デフォルトの名無しさん
08/07/14 11:24:12
>>205
String name = req.getParameter("1");
取るならこうだろ


207:デフォルトの名無しさん
08/07/14 11:48:13
>>206
出来ました。ありがとうございます。


208:デフォルトの名無しさん
08/07/14 13:07:41
実行可能なjarファイルを起動すると、
JDBCドライバが見つからないというエラーが出て困っています。
eclipceだと起動するけど、jarファイルにすると起動しないというパターンです。
マニフェストファイルにclass-pathとJDBCドライバのフルパスを書いて、
そのパスにJDBCドライバを置いているのですが、
何故か思うようにいきません。
どこに問題があるのでしょうか。


209:デフォルトの名無しさん
08/07/14 13:08:19
すいません。またnameの事でエラーが出てしまいました。
name = req.getParameter("1");
とやるとnameが1の送信ボタンの時は問題ないのですが
nameが2の送信ボタンのときは
nameを表示したりnameで判断させようとしたときにエラーが出てしまいます。
受け取るものがなくてnameに何も入っていないのが問題だと思うのですが、
あらかじめnameに"null"などどいてれもやはり同じエラーが出ます。
どうか解決策をお願いします。




210:デフォルトの名無しさん
08/07/14 13:18:34
>>209
ぬるぽ

211:デフォルトの名無しさん
08/07/14 13:19:08
>>209
どっちも name="buttonname" にして
String value = req.getParameter("buttonname");
で value.equals("追加") か value.equals("更新") かで見るとか?

212:デフォルトの名無しさん
08/07/14 13:29:28
>211
出来ました。ありがとうございます。
nameはこんな使い方も出来るんですね。

213:デフォルトの名無しさん
08/07/14 13:38:53
>>212
ぬるぽもちゃんと理解しないと今後つまずくと思うのだが

214:デフォルトの名無しさん
08/07/14 13:39:50
>>212
たぶん勘違いがあると思うが。
req.getParameter() で返されるのは <input name="A" value="B"> の
value の方("B")だ。
name = req.getParameter() という書き方から推測すると name の方("A")が
返されると思っているのではないか。

215:デフォルトの名無しさん
08/07/14 13:41:16
208です。
試しに、System.getProperty("java.class.path")を実行してみると、
どうやらクラスパスが通っていないようです。
ただし、マニフェストファイルには確かに次のように書いています。
Class-Path: C:/mysql-connector-java-5.1.6-bin.jar
このようなフルパスの指定に何か問題があるのでしょうか。


216:デフォルトの名無しさん
08/07/14 13:43:35
>>213
スレ的にはそっちがネタだなw


217:デフォルトの名無しさん
08/07/14 13:51:59
メモ帳にdoubleで生成した乱数が40万個あります。
そのデータをあるプログラムで読み込み計算し、上書きするという作業をしています
しかし、乱数、及び配列の数を40万個から50万個に変えたとき
outofmemoryerrorと表示されてしまいます。環境はNetBeans6.0.1です。
PCのメモリは1GBあります。

218:デフォルトの名無しさん
08/07/14 14:02:35
>>217
それで?
質問文を書け。

219:デフォルトの名無しさん
08/07/14 14:06:17
>>217
そのプログラムをもっとメモリを使わないで済むように改良するんだ!

220:デフォルトの名無しさん
08/07/14 14:12:48
java7になってBigDecimalを言語的にサポートされるので
BigDecimalをつかうプログラミングをするのはjava7になってから始めた方がいいですか?

221:217
08/07/14 14:25:41
失礼しました。
質問内容は、乱数、配列が50万個でもOutOfMemoryerrorを出さず、
プログラムを動くものにしたいのですが、どのようにしればいいでしょうか

222:デフォルトの名無しさん
08/07/14 14:29:14
メモリーを2ギガにする

223:115
08/07/14 14:33:15
>>221
javaのコマンドラインフラグで使用するメモリを増やす。


224:デフォルトの名無しさん
08/07/14 14:43:09
>>213
根本的な原因を理解しないといけないということですね。
String name = req.getParameter("2"); とするとnameが1の送信ボタンが押された場合、nameが2の値が存在しないので
それをnameに入れるとnameが何も入ってない状態(null)になるので、nameを判断しようとした場合、値がないのでエラーになるものだと思いました。

>>211の解決策はnameを統一し、nameの値(送信スイッチごとのvalue)で判断する。
こうすればどのスイッチがおされても必ずnameに値が入るのでnullにならない。というものだと解釈しました。


>>214
最初(>>205)はnameに'A'が入ったものが返ってくると思い、nameと書いていましたが、
アドバイスを頂き、今は理解できたと思います。
ありがとうございました。


225:デフォルトの名無しさん
08/07/14 14:52:11
>>215
たしかこうでは
Class-Path: C:/mysql-connector-java-5.1.6-bin.jar;.

226:デフォルトの名無しさん
08/07/14 14:54:13
>>224
if (name.equals("追加") {
}
だけだとエラーになるけど
if (name != null && name.equals("追加") {
}
とすればエラーにならないでしょ。

227:デフォルトの名無しさん
08/07/14 15:02:20
if (name != null && name.equals("追加") {

これって左が先か右が先かって順番決まってたっけな?

228:デフォルトの名無しさん
08/07/14 15:03:57
>>227
左が先

229:デフォルトの名無しさん
08/07/14 15:04:07
決まってる
左が先

230:デフォルトの名無しさん
08/07/14 15:08:01
クローンを自動で作る方法ありませんか?

231:デフォルトの名無しさん
08/07/14 15:17:41
implements Cloneable すればいいだけでは

232:デフォルトの名無しさん
08/07/14 15:17:50
>>225
レスありがとうございます。
試してみたのですが、やはりうまく動いてくれません。
もう、よくわからないので、jre/lib/extにドライバを置こうと思っています。


233:217
08/07/14 15:21:49
>>222
仮想メモリを2Gにしましたが、うまくいきませんでした。
>>223
コマンドラインフラグを調べましたが、良くわかりませんでした。
プログラム中で宣言するのですか?それとも、javaの設定を変えるのですか?

234:デフォルトの名無しさん
08/07/14 15:37:32
>>226
試してみたところ確かに下のはエラーになりませんでした。
上のはnameと比較しようとするとnameがnullなのでエラーになる。
下のはnameがnullかどうかチェックし、nullじゃなかったら比較に入るのでnullでもエラーが出ない。ということですね。

235:デフォルトの名無しさん
08/07/14 15:47:40
>>234
   ∧_∧
  ( ´∀`)< ぬるぽ


236:デフォルトの名無しさん
08/07/14 15:49:57
>>224
改良してみよう。
二つのボタン <input name="1" value="追加"><input name="2" value="更新"> の場合、
value の値は表示にも使われることもあって、プログラム内で判断に使うには向かない。
そこで value を見なくて済むように、それぞれが押された場合に req.getParameter() が
何を返すかもう一度見てみる。
 追加ボタン押下時:
  req.getParameter("1") = "追加"
  req.getParameter("2") = null
 更新ボタン押下時:
  req.getParameter("1") = null
  req.getParameter("2") = "更新"
ということは、押されたほうの req.getParameter() の返値は *nullでは無い* と
一般化できる。
だから
if(req.getParameter("1") != null) {
// 追加が押された場合の処理
} else if(req.getParameter("2") != null) {
// 更新が押された場合の処理
}
と書くことも出来、これなら value の値が例えば"追加"が"ついか"と変更されても
プログラム側は修正しなくて済むことになる。

237:デフォルトの名無しさん
08/07/14 15:58:52
>>233
メモリの割り当てはこの辺だけど、プログラムを見直したほうが良いんじゃね?
URLリンク(sdc.sun.co.jp)

238:デフォルトの名無しさん
08/07/14 16:15:50
>>236
そういう考え方も出来るんですね。勉強になります。

239:デフォルトの名無しさん
08/07/14 18:34:52
>>208
JDBCドライバのフルパスの場所に、ドライバのjar置いてあるだけ、とか言う落ち?

240:デフォルトの名無しさん
08/07/14 19:15:17
>208
マニフェストファイルにクラスパス以外にフルパスを記述、って具体的に何をしたんだか

URLリンク(java.sun.com)
# Class-Path:

この属性の値には、このアプリケーションまたは拡張機能に必要な拡張機能
またはライブラリの相対 URL を指定する。URL は 1 つ以上の空白で区切る。

241:デフォルトの名無しさん
08/07/14 21:18:27
>>8 >>10は一体何何だ?
福田やすおチンパン総理のことかと思った

242:デフォルトの名無しさん
08/07/14 21:36:57
2週間弱でアドベンチャー作るっていまいちよくわからんな

243:デフォルトの名無しさん
08/07/14 22:43:33
すみません、板違いになるかと思いますが、教えていただけますか。

<form mothed="post" action="./Result">
<input type="submit" name="id" value="hello" />
</form>

フォームから送信した値を、request.getString("id")で取得して、これを、下記例URLのように表示できますか?

URLリンク(example.com)
ではなくて、このような形で↓
URLリンク(example.com)

web.xmlをいじる必要はありますか?


よろしくお願いします。

244:243
08/07/14 22:47:12
すみません
メソッドまちがえました。
request.getParameter()
でしたorz

245:デフォルトの名無しさん
08/07/14 23:03:40
javaでGUIでゲームを作ろうとしています。
制限時間30秒のゲームを作ろうと思うんですが、
どうやって時間をカウントダウンさせればいいかわかんないです…
たぶんそういうコンポーネント?があるのかなと予想してるんですが…

246:デフォルトの名無しさん
08/07/14 23:08:19
>>243
filter


247:デフォルトの名無しさん
08/07/14 23:15:08
>>245
Timer

248:デフォルトの名無しさん
08/07/14 23:16:10
>>245
java.util.Timerないしはjava.util.concurrent.ScheduledExecutorService
後者はJava SE 5.0以降のみ
あとjavax.swing.Timerなんてのもあったな

249:デフォルトの名無しさん
08/07/15 00:47:30
やはりコンカレント工学

250:デフォルトの名無しさん
08/07/15 10:52:22
すいません、質問お願いします。

Fileクラスのコンストラクタを作るのに
"File(String parent,String child)"でつくると、
mkdirsは実行できるcreateNewFileのところで実行エラーになります。
フォルダを見るとParentフォルダの中にchildフォルダができています。
たとえばString childに"test.txt"と入れても"test.txt"というフォルダが作られてしまいます。
はじめに"File(String pathname)"でmkdirsでディレクトリを作っておいて、
"File(File parent,String child)"だとうまくファイルが作成されるのですが。

APIを見てもわからなく本当に困っています。
よろしく、お願いいたします。


251:デフォルトの名無しさん
08/07/15 10:55:43
>>250
何がわからないんですか?
両方とも、その動作で正しいですよ。


252:デフォルトの名無しさん
08/07/15 11:32:17
mkdirsは、parentまでではなく、自分自身のところまでディレクトリを作る
new File("c:\\foo\\bar\\test.txt").mkdirs() なら、c:\foo\bar\test.txt というディレクトリを作る
ちなみに new File("c:\\foo\\bar\\test.txt") と new File("c:\\foo\\bar", "test.txt") は同じ

253:217
08/07/15 12:31:06
アドバイスしてくれた方々、ありがとうございました。
いろいろ調べ、改良も考えたのですが、うまくいきません。
以下は私の作成したソースです。改良できそうなところをご指摘ください。
package javaapplication2;
import java.io.*;
import java.util.*;
public class LoadtoSave {
public static void main(String[] args) {
//データ格納用Listの準備
List<String[]> list = new ArrayList<String[]>();
double WAh[] = new double [600000];
try {
FileReader fr =new FileReader("WA.txt");
BufferedReader bf = new BufferedReader(fr);
String st = null;


254:217
08/07/15 12:31:38
while ((st = bf.readLine()) != null) {
String[] line = st.split(",");
list.add(line);//ファイル上1行の各数値を文字列として格納
}
bf.close();
int i=0;
for(String[] values: list){
for(String value: values){
double num = Double.parseDouble(value);//文字列を数値型に変換
WAh[i]= num;
i=i+1;
}}}
catch(IOException e) {
e.printStackTrace(); }
//ここでWAhについて大量の計算(並列的)
try {
File outFile = new File("WA.txt");
FileWriter out = new FileWriter(outFile);
PrintWriter pw = new PrintWriter("WA.txt"); //(8)書き込むデータがなくなるまで書き込み
for(int j=0;j<600000;j++){
pw.print(WAh[j]);
pw.print(",");
}
pw.close();}
catch(IOException e){
}}}

255:デフォルトの名無しさん
08/07/15 12:37:15
package pkgweb;
class Test {
private String str;
Test(String s){str=s;}
public String getStr() {return str;}
public void setStr(String str) {this.str = str;}
}
このファイルに対してjavac pkgweb\Test.java -d ..\WEB-INF\classesを実行してWEB-INF\classes以下にクラスファイルを作成し、jspから使用したいのですが
pkgweb.Test cannot be resolved to a typeとエラーが出ます。
jspの中身は以下のものです。
<%@ page contentType="text/html; charset=Windows-31J"%>
<html lang="ja"><head></head>
<body>
<%pkgweb.Test a=new pkgweb.Test("hoge");%>
<%=a.getStr()%>
</body></html>

色々ググったりしたのですが解決方法が分かりません。
どうしたら良いのか教えてください。

256:デフォルトの名無しさん
08/07/15 12:52:23
>>255
まず、貼り付けずに、どこかへアップするべきだったな。
URLリンク(rg550.hp.infoseek.co.jp)
とか

257:256
08/07/15 12:59:27
>>255
ごめん。
253-254から繋がってるかと思った。

258:デフォルトの名無しさん
08/07/15 13:02:52
>>253
1レスに入りきらないようなコードを貼られても見づらいし、
並列か並行か知らないけど、分けられるなら、一辺にやらなければよいのでは?

259:デフォルトの名無しさん
08/07/15 13:13:21
>>253,254
入力で、ファイル内容を全部Stringに入れてからdoubleに変換してる所と、
出力で、改行入れないで1行に出力してる所が少し気になった。

260:デフォルトの名無しさん
08/07/15 13:17:46
>>253
250 で書いているような個所が見当たらないぞ。

>>250
あるファイルを示すパス path があるとして、その親ディレクトリを含めてファイルを作成したいなら
File file = new File(path);
file.getAbsoluteFile().getParentFile().mkdirs();
file.createNewFile();
としたらどうだろうか。

261:デフォルトの名無しさん
08/07/15 13:58:35
Windows環境でProcessBuilderでコマンドをバックグラウンドで実行して放置しておきたいのですが、
コマンドが標準出力メッセージを多量に出し、別スレッドでInputStreamを適宜読み込まないと
コマンドがバッファ一杯で途中で止まってしまいます。
標準出力・エラー出力がたまらない方法ありましたら教えてください。

262:デフォルトの名無しさん
08/07/15 14:11:35
コマンドを標準出力に出力しないオプション付けて実行
nullにリダイレクトw

263:250
08/07/15 14:17:16
>>250です。
皆様、ありがとうございました。
>>252 様
>>new File("c:\\foo\\bar\\test.txt") と new File("c:\\foo\\bar", "test.txt")
後者のようにコンストラクタを作って、
そのあとmkdirsとcleatefileしたらファイルを作るところでエラーで
確認すると
foo/bar/test.txt/というようなすべてがフォルダでできていたのです。

>>260 様
>>253は私の書いたものではありません。
教えていただいた方法試してみます。
ありがとうございます。

ただ、疑問なのですが、普通は
>>new File("c:\\foo\\bar", "test.txt")
ではbarの中にtest.txtという「ファイル」ができるはずですよね?

264:デフォルトの名無しさん
08/07/15 14:25:02
>>263
いいえ
barの中にtest.txtというディレクトリを作ります
mkdirsはディレクトリを作るメソッドです

265:260
08/07/15 15:00:08
>>263 >>253
すまない、名前ちゃんと見ていなかった。

恥かし隠しに話題を変えるかw
>コンストラクタを作って
という表現は変だ。
コンストラクタはクラスのインスタンスを作るためのメソッドの名前みたいなもんで、
new クラス名(~) というのはインスタンスを実際に作っている。
なので「コンストラクトしている」とかならまだいいかもれないが、
「コンストラクタを作って」はいない。

また、Fileクラスは(その名前に反して)ファイルだけを処理するわけじゃない。
基本はパス名を処理するものであって、パスの最後の部分がファイルかどうかは気にしない。
”この名前のディレクトリを作れ”と指示(mkdirs())されたら(指示したほうは
最後の部分はファイルのつもりでも)Fileクラスはディレクトリとして作ってくれてしまうし、
それが仕様となってる。

266:デフォルトの名無しさん
08/07/15 15:29:32
>>255
public class Test {
にして
public Test(String s){str=s;}
にすれば、どう?

267:デフォルトの名無しさん
08/07/15 15:51:31
>>253
package javaapplication2;
import java.io.*;
public class LoadtoSave {
public static void main(String[] args) throws IOException {
double WAh[] = new double[600000];
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("WA.txt"));
String line;
for(int i=0; (line=br.readLine())!=null; ) {
for(String value : line.split(",")) WAh[i++]= Double.parseDouble(value);
}
} finally {
if(br != null) try { br.close(); } catch(IOException e) { /*無視*/ }
}
// ここでWAhについて大量の計算(並列的)
PrintWriter pw = null;
try {
pw = new PrintWriter("WA.txt"); //(8)書き込むデータがなくなるまで書き込み
for(double v : WAh) pw.print(v+",");
} finally {
if(pw != null) pw.close();
}}}
動かしてないがこんな感じには纏まるだろう。後はその多量の計算というところを
例えば10万件ずつ6回の処理に分けられないかとかだな。

268:217
08/07/15 16:05:35
>>259
>入力で、ファイル内容を全部Stringに入れてからdoubleに変換してる所と、
その他のやり方というか、王道的なものがありましたら、
教えて貰えると助かります。

>出力で、改行入れないで1行に出力してる所が少し気になった。
csv形式で書き込み、読み込むのを目的としてそうしました。

>>267
具体的なソースありがとうございます。
私の書いたソースと大きく変わったところは私には分かりませんが、
それを用いたときOutOfMemoryとならないか試してみます。

269:255
08/07/15 19:32:12
>>266
レスありがとうございます。
今public修飾詞に変更してコンパイルしてみましたがやっぱりダメでした。

270:デフォルトの名無しさん
08/07/15 19:33:11
ところで最大ヒープサイズの設定はしたのかね
大量の計算何してるのかしらないけど
40~50万で64m使い切るなら256mにすりゃ160~200万くらいまでいけるんじゃないのか?
とりあえず動かすだけだったら.

271:デフォルトの名無しさん
08/07/15 19:52:34
>>269
WEB-INF以下のパスはあってる?

\WEB-INF\classes\pkgweb\Test.class

272:デフォルトの名無しさん
08/07/15 20:05:58
プログラムって大変だな。学期末のレポート提出のために頑張ってるけど
だるすぎる。内容は初歩中の初歩なのに。

273:デフォルトの名無しさん
08/07/15 20:29:46
>>271
今各デプロイを見直したところ、
Tomcat 5.5\conf\Catalina\localhost以下の
web.xmlのdocBaseに書いたパスが一階層間違っていました!
/webをアプリケーションフォルダに設定したつもりが/web/jspになっていて
WEB-INFディレクトリを/web以下に置いていたための間違いだったようです。

レス頂き構成を見直したことが発見に繋がりました、ありがとうございます!

274:デフォルトの名無しさん
08/07/15 22:13:16
>>217
20桁くらいの数字が40万もあれば10Mくらいいきそうだな。
まぁどうすればいいかは知らんけど

275:デフォルトの名無しさん
08/07/15 23:37:04
質問させて下さい。

全角半角の混ざった文字列の先頭から10byte分切り出したいのですが、
もし、10byteの切れ目が全角文字の1byte目だった場合、
9byteで切り出したいというような処理ってどうやって書けばいいでしょうか?

276:デフォルトの名無しさん
08/07/15 23:46:22
NIOでバイト単位で扱うとか

277:デフォルトの名無しさん
08/07/16 00:01:24
>>275
結果文字列=""
合計バイト数=0
取出文字位置=0
while(取出文字位置 < 文字列の文字数) {
文字=文字列[取出文字位置++]
合計バイト数+=文字のバイト数
if(合計バイト数 > 10) break
結果文字列=結果文字列+文字
}

278:デフォルトの名無しさん
08/07/16 00:10:11
>>275
そのデータはどのような形式で保持してるの? byte[]? エンコーディングは?

279:デフォルトの名無しさん
08/07/16 00:26:24
全角が堂のこうの言ってるんだからwindows-31Jじゃね?

280:250
08/07/16 09:23:50
>>250です。
>>246>>247様、どうもありがとうございました。

インスタンスを作成する、ですね。
ここでご指摘いただけてよかったです。

そしてわかりました!
どうもありがとうございました。

281:デフォルトの名無しさん
08/07/16 11:17:10
J2EEの日本語APIリファレンスを
探してるのですが
SUNのページを探しても見つかりません
どこでダウンロード可能でしょうか



282:デフォルトの名無しさん
08/07/16 11:54:50
byte[] b = {(byte)0x01, (byte)0x02};
これをキャストせずにきれいに書くことはできませんか?

283:デフォルトの名無しさん
08/07/16 11:59:12
16進で表現したいので
byte[] b = {(byte)0xFE, (byte)0xFF};
のように書きたいです。
10進でしたら
byte[] b = {254, 255};でよいのですが。

284:デフォルトの名無しさん
08/07/16 12:02:51
数値は数値でしかないし、その表現方法(文字で)が変わるだけでしょ

285:デフォルトの名無しさん
08/07/16 13:52:27
>>283
キャストしたくないだけなら
byte[] array = { 0xFFFFFFFE, 0xFFFFFFFF };

286:デフォルトの名無しさん
08/07/16 14:17:38
コストが掛かるがこんなん使うとか

static byte[] b(int...is) {
byte[] bs = new byte[is.length];
for(int i=0; i<is.length; i++) bs[i] = (byte) is[i];
return bs;
}

// byte[] b = b(0x01, 0x02, 0xFE, 0xFF); // {1, 2, -2, -1}

287:デフォルトの名無しさん
08/07/16 14:47:02
>>275
相手がShift_JIS系なら、
boolean isSJISLeadingByte(byte val) {
 int b = val & 0xFF;
 return (0x81 <= b && b <= 0x9F) || (0xE0 <= b && b <= 0xFC);
}
みたいのを書いて分岐した方が楽。

NIO charsetはライブラリ書く人向けの作りなので、異常系の状態拾おうとすると
真面目にエラー処理させられるような作りになってて面倒くさい。
無理矢理使うとこんな感じか。
byte[] array = .....
CharBuffer buf = CharBuffer.allocate(array.length); //文字数≦バイト数と仮定

CharsetDecoder decoder = Charset.forName("windows-31j").newDecoder();
decoder.onMalformedInput(CodingErrorAction.REPORT);
decoder.onUnmappableCharacter(CodingErrorAction.REPORT);

int trim_bytes = 0;
CoderResult result;
do{
 buf.clear();
 result = decoder.decode(ByteBuffer.wrap(array, 0, array.length - trim_bytes++), buf, true);
}while(result.isError());
System.out.println(result + " : " + buf.flip());

288:デフォルトの名無しさん
08/07/16 14:50:22
>>285
JAVAではintが基本だから32ビットの16進で書けばよかったということですか。
上位24ビットが0でなくてFFFFFFなのはなぜですか?

289:デフォルトの名無しさん
08/07/16 14:54:17
>>288
> JAVAではintが基本だから32ビットの16進で書けばよかったということですか。
真面目に取らんでいいよ。

> 上位24ビットが0でなくてFFFFFFなのはなぜですか?
byte であらわせるのは -128~127まで。
なので -128~127 の定数値はキャストなしで byte に代入可能。
上位24ビットを 0 にすると 0~255 になって、0x80 以上はキャストしないと代入できなくなる。

290:デフォルトの名無しさん
08/07/16 14:54:52
>>288
0~127 byte表現 0x00~0x7F → int表現 0x00000000~0x0000007F
-128~-1 byte表現 0x80~0xFF → int表現 0xFFFFFF80~0xFFFFFFFF

291:デフォルトの名無しさん
08/07/16 15:46:42
>>281
J2EEは今はJava EEという名前
Java EEでさがせ

Java SEの近くにある

292:デフォルトの名無しさん
08/07/16 19:43:16
>>290
0x7Fまでなら0x000000を付けて、
0x80以上なら0xFFFFFFを付けるんですね。
16進を書くには、(byte)でキャストするか、場合分けの8ニブルの16進で書くか
というどちらにしても、長いソースになってしまいますね。

293:デフォルトの名無しさん
08/07/16 19:46:49
>>292
短くしたいだけなら>>286で良いんじゃね?

294:デフォルトの名無しさん
08/07/16 22:08:52
CPUをいじめるのが好きなのでAckermann関数の値を求めるのを作ったんですが、以下のソースのを実行すると
at Ackermann.ackermann(Ackermann.java:12)
というメッセージが、ばーっと出てきます。どこがおかしいのでしょうか?

public class Ackermann{
public static void main(String args[]){
long i=Long.parseLong(args[0]);
long j=Long.parseLong(args[1]);
System.out.println(ackermann(i,j));
}

public static long ackermann(long m,long n){
if(m==0)return n+1;
else{
if(n==0)return ackermann(m-1,1);
else return ackermann(m-1,ackermann(m,n-1));
}
}
}

295:デフォルトの名無しさん
08/07/16 22:15:05
ごめんなさい
第1引数を4以上にすると出ます

296:デフォルトの名無しさん
08/07/16 22:20:39
コンパイル通らないはずだけど
if elseの対応が合ってない

297:デフォルトの名無しさん
08/07/16 22:30:44
うちのではコンパイル通りました。
if(m==0)return n+1;
else{
 if(n==0)return ackermann(m-1,1);
 else return ackermann(m-1,ackermann(m,n-1));
}

if elseの対応は上のような感じです。

298:デフォルトの名無しさん
08/07/16 22:31:07
普通にスタックオーバーフローだわ・・

299:デフォルトの名無しさん
08/07/16 22:34:02
再帰が深すぎてスタックオーバーフローを起こしてるんじゃ

300:デフォルトの名無しさん
08/07/16 22:39:18
なんかそうっぽいです・・・
別の方法でCPUをいじめます・・・

301:デフォルトの名無しさん
08/07/17 00:11:50
>>292
>8ニブルの16進で書くか
何だこれ?

302:デフォルトの名無しさん
08/07/17 01:06:43
>>301
ニブルでぐぐってみれば?

303:デフォルトの名無しさん
08/07/17 02:38:05
>>293
286を見落としていました。286を使ってみたいです。
でもコンパイルできませんでした。
JDK1.3では無理ですか?
b(int...is) { が可変長の引数に対応するものに見えましたが。

304:デフォルトの名無しさん
08/07/17 09:50:26
>>262
ありがとうございます。
ではjavaレベルでストリームをパイプしないで実行はサポートされていないのですね。
ようはNULLリダイレクトしても、結局意味のないそのストリームは生成してしまう、ということですか?
もちろん何もわたってこないのでreadする意味もないですが。

305:デフォルトの名無しさん
08/07/17 10:07:11
>>293
1.3じゃ286は無理だな…
さらに呼び出しコスト上がるがこんなんでどう?
1.3のJDKで試してないからエラー出るかもしれないが。

static byte[] b(String str) {
StringTokenizer st = new StringTokenizer(str, ", \t");
byte[] bs = new byte[st.countTokens()];
for(int i=0; i<bs.length; i++) {
bs[i] = Integer.decode(st.nextToken()).byteValue();
}
return bs;
}

// b("0x01, 0x02, 0xFE, 0xFF");
// b(" 1, 2, 254, 255"):
// b(" 1 2 -2 -1"):
// 以上全てnew byte[]{ 1, 2, -2, -1 } と同じバイト配列を返す

306:305
08/07/17 10:09:05
アンカミス
293 → >>303

307:デフォルトの名無しさん
08/07/17 10:27:55
>>304
コマンドが出力してくる以上、ストリームには貯まるもんだ。
だから >>262 はまず「そのコマンドに"出力しない"オプションがあるなら
それを指定してやれ」と言ってるのじゃないか。
そして、そんなオプションが無い、もしくは指定できない何か理由があるのなら、
シェルの機能を使ってnullデバイスにリダイレクトしとけ、と言ってるんだと思うぞ。
シェルも使えないのなら、>>261 が自分でやったように「ひたすら読み込んで捨てる」と
いうnullストリームをjavaで作って食わせるしかないかもな。

308:デフォルトの名無しさん
08/07/17 10:47:46
>>304
process.getInputStream().close();
process.getErrorStream().close();

して黙らせるのじゃいかんのか?

309:デフォルトの名無しさん
08/07/17 12:02:59
hashcodeってオーバーライドしなくても、MAPのキーに使っても正しい値って取れますよね。
それはhashcode()で値が同じでも、最終的にequalsで判断するから、と考えてよろしいでしょうか?

310:デフォルトの名無しさん
08/07/17 12:09:00
近藤よしゆき著のJavaプログラマのためのアルゴリズムとデータ構造をお持ちの方に質問があります。
95~96ページの待ち行列の出力サンプルで、

MyQueue[a b c] front=0 rear=3
aを取り出した
bを取り出した
MyQueue[c ] front=2 rear=3
dを入れた
eを入れた
cを取り出した
MyQueue[d e ] front=3 rear=0

とあるのですが、
なぜ、rearは0になってしまったのでしょうか?

311:デフォルトの名無しさん
08/07/17 12:13:52
>>309
一般的には、ダメ。
equals()がtrueなのにhashCode()が違う値、の場合にうまく動かない。
hashCode()が常に同じ値を返したりすると、HashMapなどの効率がものす
ごく悪くなる。


312:デフォルトの名無しさん
08/07/17 12:44:26
お尋ねします。
現在JAVAでGUIを使った簡単なゲームを作っています。(具体的には、5目並べです)
ゲーム自体は既にできあがって、きちんと動作もしているのですが、
どうも初心者なためクラスをどのように構成すればよいのかがよくわかりません。
いまのところ、windowクラスとpaintクラス、それとThinkクラスの3つになっています。
windowクラスはウィンドウ及びボタンなどのクラス、
paintクラスは盤上の勝敗判定等のほかpaintComponentメソッドを含む描画用のクラス、
Thinkクラスはコンピュータが次の手を決定する思考ルーチンのクラスです。

このようなゲームの場合、どういったクラスをいくつ定義するのがソースコードとして美しいのでしょうか?
今の状態はなんだかクラスごとの役割分担がごっちゃになっているような気がして・・・
どうすれば「オブジェクト指向」の概念がきちんと活かされていることになるでしょうか?






313:デフォルトの名無しさん
08/07/17 12:54:22
>>312
結城浩たんのJava言語で学ぶデザインパターン入門とか読んでみるとか。

314:デフォルトの名無しさん
08/07/17 13:16:06
>>310
その本は持っていないが、長さ5の配列でキューを実装している例では?
front が読み口のインデックス、
rear が書き口のインデックスなのだろう。

4番まで書き込んだから、次は0番を再利用するのでは?

315:デフォルトの名無しさん
08/07/17 13:50:02
>>311
ということは、hasecode()とequals()をオーバーライドしなくても全然OKって事ですよね。
しかもデフォルトのhasecode()はアドレス値的なものが入るので、大抵がユニークになっています。
しかもデフォルトではequals()がtrueなら同じインスタンスのhashCode()なので、もちろん同じ値で問題なし。
そう考えると、この2つはオーバーライドしない方がいいのではと思っちゃいます。あくまでMAPのキーとして使うだけを考えていますが。

316:デフォルトの名無しさん
08/07/17 13:50:50
>>308
たぶんコマンド側がパイプエラーになると思います。

317:デフォルトの名無しさん
08/07/17 13:58:54
>>315
同じ値を持つ異なるインスタンス、というものがなければ、別に問題ない

318:デフォルトの名無しさん
08/07/17 14:10:27
>>315
>>317の言うとおり。
たとえば、StringはhashCode()とequals()をきちんと定義しないといけないケース。


319:デフォルトの名無しさん
08/07/17 14:22:19
>>310
双方向キューじゃない?

320:デフォルトの名無しさん
08/07/17 14:31:48
>>318, et al.
そもそも、

> equals()がtrueなのにhashCode()が違う値

は実装の不備だろう

>>319
普通のリングバッファに見えるけど?



321:デフォルトの名無しさん
08/07/17 14:35:53
>同じ値を持つ異なるインスタンス、というものがなければ、別に問題ない 
という前提ならequalsをoverrideする必要性さえない。
hashcodeはequalsがtrueであるなら同じ値を返さなくてはならない、
それを破るくらいならいつでも同じ値を返すほうがまだまし。

322:デフォルトの名無しさん
08/07/17 15:40:05
formatを使って仮名入力の文字列を綺麗に表示ってできますか?

323:デフォルトの名無しさん
08/07/17 17:38:48
まずやってみたらいいのに。
初心者であろうとなかろうと、試すことはできるだろ。

324:デフォルトの名無しさん
08/07/17 18:54:39
質問失礼します。

log4jでログ出力していますが、それが何らかの異常で書き込まれなかった場合
対処をしたいと考えています。
ですが、Log.debugなどは異常の時スタックトレースは吐くものの、例外はthrow
していないようで、IOException等が発生しても取得できません。
こういうときはどうするものなのでしょうか。

325:デフォルトの名無しさん
08/07/17 20:30:24
Servletで、ブログ作りたいんですが、DBに登録してあるユーザーIDをURLに下記のように載せて表示させるやり方教えてくれませんか?

URLリンク(localhost)ユーザーID

326:デフォルトの名無しさん
08/07/17 20:56:39
桒が化けます。よい方法はありませんか?
ユニコード考案者はバ力かと。
アルファベットまで2バイトで扱うJAVA作った人はバ力かと。

327:デフォルトの名無しさん
08/07/17 21:10:31
>>326
バカじゃありません

328:デフォルトの名無しさん
08/07/17 21:20:24
>>326
化けるって文字コードとかどうしてる?

329:325
08/07/17 21:58:14
request.getPathInfo()
で解決しましたw

330:デフォルトの名無しさん
08/07/17 22:11:28
来年入社する会社ではJAVAを使います
基本情報の国家資格は持っているのですが使った言語はCASLなのでJAVAは全くの素人です
本を買ってみようと思うのですがおすすめの本などがあれば教えてください

331:デフォルトの名無しさん
08/07/17 22:26:35
人の書いたソースを読みまくるのが最良の教科書。


332:デフォルトの名無しさん
08/07/17 22:35:40
>>310
これはリングバッファになってる
p90の図を見ればわかるよ

333:デフォルトの名無しさん
08/07/17 23:43:44
Javaの云々よりもSQLとかHTML/CSSあたりやったほうが業務じゃ役に立つかも名

334:デフォルトの名無しさん
08/07/18 00:05:09
リングキューってやつか

335:330
08/07/18 00:52:23
質問答えてくださった方ありがとうございます
今度企業の方に具体的に何すればよいのかよく聞いてきます

336:デフォルトの名無しさん
08/07/18 08:00:09
まぁやさしいJavaとか結城浩の本とかが定番かな・・
基本はともかくインスタンスとか拡張とか出てきたときに分かりやすい本がいいよなぁ

337:デフォルトの名無しさん
08/07/18 15:08:43
java -cp の後のクラスパスに、他のマシンのパスからクラスをロードしたいのですが、いわゆるURLクラスロード?です。
どのようにクラスパスを設定すればよろしいでしょうか?

338:デフォルトの名無しさん
08/07/18 15:59:08
>>337
java -cp file://・・・とやってもダメでした。これはデフォルトのクラスローダーがURLクラスローダーではないからでしょうか?

339:デフォルトの名無しさん
08/07/18 16:51:16
>>338
「他のマシン」とはどう繋がってる?Windows でネットワークドライブとして見えているなら
\\(IPアドレスorホスト名)\(以下パス)で指定すればいい。
Linux ならそもそもマウントされてるだろうからそこを指せばいい。
ファイルを参照できないのなら apache でも立てて http で指定してみれば?

340:デフォルトの名無しさん
08/07/18 18:01:05
今自作のプロキシをJavaで作っているのですが、
表示できるページが限られる理由に心当たりのある方はいらっしゃいますか?
ブラウザから要求をソケットで吸い出して、
そのurlからurl.connectionをしてそこからreadしてByte型で
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
outにwriteしています。
ご教授願います!
なんとなくの予想でもいいです!お願いします。

341:デフォルトの名無しさん
08/07/18 19:23:43
>>340
HTTP のリクエストヘッダはどうなってる?ブラウザが出すものをできればそのまま
使用しないと見れないページは出てくる。
UserAgent とか Cookie とかは特に。

342:デフォルトの名無しさん
08/07/18 19:28:01
>>339
URLリンク(localhost) でやってもダメです。そもそもURL指定はCLASSPATHではできないみたいですね・・・
URL経由でのクラスロードはアプレットでできたと思ったのですが、同じようにはいかないですね・・・・

343:デフォルトの名無しさん
08/07/18 19:49:25
>>342
お前質問に答えろよ。「他のマシン」とはどう繋がってるんだよ。
だいたい URLリンク(localhost) って、自マシンにちゃんと http デーモン
立ち上げてんだろうな?
まあ CLASSPATH だと http とかは無理かもだから、http 経由でなきゃダメ
なら Java Web Start でやれば?
そもそもネットワーク経由でファイルがやりとりできる(Samba とか)なら、
最悪ドライブにマウントしろよ。

344:デフォルトの名無しさん
08/07/18 20:20:27
すみませんが教えてください
今JAVAで○×ゲームを作っているのですが
埋まらない個所ができてしまいました
何を埋めればいいでしょうか?
よろしくお願いします
String msg =new String();
int x,y;
public void init(){
addMouseListener(this);
}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){
x =//埋まらない所 ();
y =//埋まらない所 ();
msg = "座標x:"+x+"y:"+y+"が選ばれました";
repaint();
}

345:デフォルトの名無しさん
08/07/18 20:25:26
>>344
宿題スレに行け。

346:デフォルトの名無しさん
08/07/18 21:23:48
Appletで、
ループの中にrepaint()を入れ、
paint()の中で描画のループをさせているのですが、
最初に呼び出されたpaint()が終わるまで
次のpaint()の描画が出てこず、尚且つ、その間にも、
もともとのメソッド内のループは動いていました。

説明が分かりづらいと思いますが、
どういった理由でこうなっているのか、教えてください。

347:デフォルトの名無しさん
08/07/18 22:19:29
レンダリングマネージャ(だっけ?)がダーティーとみなしてなくて再描画されてないとか?

348:デフォルトの名無しさん
08/07/18 22:41:04
なに行ってるのかワカンネ・・
どこにループ書いてるんだ?

349:デフォルトの名無しさん
08/07/18 22:54:54
ソースうp

350:デフォルトの名無しさん
08/07/18 22:56:55
javaでC++のプログラムを実行する方法ってありますか?

351:デフォルトの名無しさん
08/07/18 23:01:21
JNI経由で呼び出す方法がある

352:デフォルトの名無しさん
08/07/18 23:35:22
printfをオーバーライドして機能拡張したいんだが、どうすればいいの?

353:デフォルトの名無しさん
08/07/18 23:39:32
printfをオーバーライドすることはできないが、Formattableインタフェース使えば、
やりたいことはできるんじゃないかな。

354:デフォルトの名無しさん
08/07/18 23:53:23
>>353
さんくす。Formattable調べてみる。

355:デフォルトの名無しさん
08/07/19 01:54:51
質問です。
JAVAでペイントソフトのようなものを作っているんですが、
ウィンドウが非アクティブになる(他のウィンドウの下に隠れるなど)と、
描画したものが消えてしまうんです。
他のウィンドウと一部分重なるとその部分だけ消えます。
なぜなんでしょうか?



356:デフォルトの名無しさん
08/07/19 01:58:31
>>355
お前Vistaじゃないだろ
Vistaだと消えないんだぜ

357:デフォルトの名無しさん
08/07/19 02:08:04
>>355
プリミティブなGUIプログラミングとはそういうものだ。
だから、隠れた部分が再表示されるときにはイベントが飛ぶようになってる。
それに合わせて再描画しろ。

358:デフォルトの名無しさん
08/07/19 02:13:10
>>355
その消えた部分を再描画するために paint()(とその下位のpaintComponent())が呼ばれる。
paint()もしくはpaintComponent()が呼ばれた時、書かれていたものが再描画されるようになっているか?
ツールの描画操作をした時だけしか描画してないのじゃないか?

359:355
08/07/19 07:40:04
みなさんありがとうございます、お蔭様で解決いたしました!
358さんがおっしゃられたとおりで、ツールの描画操作をした時だけしか描画していませんでした。


360:346
08/07/19 09:56:51
分かりづらい説明、失礼しました。
始めからソースを乗せれば良かったのですが、何分恥ずかしかったので…。
public class SampleP4 extends Applet implements Runnable{
int num;
int x;
public void init(){
Thread th;
th = new Thread(this);
th.start();
}
public void run(){
try{
for(int i=0; i<10; i++){
num = i;
x = i * 10;
repaint();
Thread.sleep(1000);
}
}
catch(InterruptedException e){}
}
public void paint(Graphics g){
String str = num + "です。";
try {
for(int i=0; i<10; i++){
g.drawString(str, (10 + x), 10+i*10);
Thread.sleep(1000);
}
} catch (InterruptedException e) {}
}
}
repaint()では別スレッドが呼び出されているとは思うのですが…

361:デフォルトの名無しさん
08/07/19 10:09:59
携帯サイトにJSFを使いたいんですが上手く表示できません
フィルターのことをWEBで見つけてやって見たんですが
それでも上手くいかないんですが
皆さんはどうやってますか

362:デフォルトの名無しさん
08/07/19 10:13:03
>>360
repaintでEDTが呼ばれる。EDTは確かに別スレッドだが、EDTはいわばシングルトンだ。
EDTが処理している間に別の処理(二回目以降のrepaint)を要求しても、1つめのrepaintが
終わらない限り、EDTは処理できない。
SampleP4が単に10個のメッセージを位置をずらしながら表示したいだけなら、
public void paint(Graphics g){
String str = num + "です。";
g.drawString(str, (10 + x), 10+num*10);
}
で充分だ。
(もちろんこれだけだと画面が重なった時に再ペイントされない現象となるが。)

363:デフォルトの名無しさん
08/07/19 10:16:42
メソッドの名前をまちがって全角でやったら、全角文字列でやったらできました。
メソッドの名前を日本語でできることってみんなしってますか?

364:デフォルトの名無しさん
08/07/19 10:21:21
>>361
状況がさっぱり分からん。
皆さんは上手くやってるんだろうよ。

365:デフォルトの名無しさん
08/07/19 10:24:56
>>363
某社フレームワークの自動生成コードは、全力全開で日本語識別子を使いまくってる。
あと、「プロダクションコードには日本語入れたくないけど、ユニットテストだったらいいよねー」といった意見もある。

366:デフォルトの名無しさん
08/07/19 10:25:02
>>363
発見したらまず検索してみようなw

367:デフォルトの名無しさん
08/07/19 10:36:25
>>363
英語の全然出来ない同僚が、翻訳サイト使って超直訳のメソッド名にしてるのを見ると、
いっそ日本語の方が良いんじゃないかという気はするな。
そういうヤツらに限って、プロジェクト用語集やら命名規約やらは見ない。

368:346
08/07/19 13:30:52
>>362
Threadで言うところのsynchronized修飾子のようなついてると考えてよいのでしょうか?
なんだか分かった気がします。ありがとうございます。

369:デフォルトの名無しさん
08/07/19 13:52:18
>>368
EDT への要求は Queue に入れられ、EDT はそれを順次取り出して処理する。
repaint すると Queue に入れるだけですぐ戻る。
だから SampleP4#run は1秒毎に repaint 要求を Queue に入れることができるが、
EDT は最初の repaint を処理するために SampleP4#paint を呼びだし、その中で
合計10秒間処理が行なわれているので、次に EDT が Queue から repaint 要求を
取り出して処理できるのは10秒後となってしまう。
EDT は画面全てを統括しているため、10秒間も処理を奪ってしまうとその間、
ボタン操作からウインドウそのものの再描画まで全て出来なくなる。
一時的にフリーズしたようになってしまうため、EDT の処理内で時間のかかることは
すべきでない。

370:346
08/07/19 15:16:38
>>369
ありがとうございます。
まだ気になるのですが、paint の処理中(このプログラムの場合10秒間)に
呼び出された repaint は、 Queue の中に入れられるということですが、
>>360の動作を見る限りでは、 Queue に残っているrepaint 要求が
全て取り出されずに、そのままになっているように思えます。

371:デフォルトの名無しさん
08/07/19 15:20:33
>365
俺もJUnitのテストメソッド名は日本語OKってのは同意
JavaDocがテスト仕様書として通りやすいのがポイントだわな

どうでもいいが、いまどき全てのクラスがプログラムコード、メソッド名も連番ってプロジェクトに遭遇したんだが、どうすればいいと思う?

372:デフォルトの名無しさん
08/07/19 15:33:37
>>370
何度repaintを要求しても、paintは1回しか発生しない
表示内容(ラベルのテキストやイメージ、この場合はnum)が何度変更されても、
最後に1回だけpaintし直せば最新の状態が反映され万事OKであると仮定されている

373:デフォルトの名無しさん
08/07/19 15:43:36
オーバーライドに関する質問なのですが、オーバーライドをした上で保持をする、というのはどういうことなのでしょうか?

374:デフォルトの名無しさん
08/07/19 16:02:16
>>371
javaでの話しか?

変換表を用意して、ツールでクラス名/メソッド名とその参照を置換とかどう?

1. 変換表に従って置換
2. 担当分を普通に書く
3. 変換表に従って置換(1の逆)
4. コンパイル&テスト
5. 問題があれば2に戻る

375:デフォルトの名無しさん
08/07/19 16:28:20
>374
そこまでやるかどうか・・・って感じはしてる
おまけにprivateメソッドも禁止(プログラム定義書に定義されたメソッド以外は作成不可)だし
名前出してしまうが、NTTデータのイントラマートのコーディング標準ってそうなっているのか?

376:346
08/07/19 17:38:35
>>365
なるほど、Queueの中にたまっている全てのrepaint要求が、
最後のrepaintだけで済まされているということですね。
ありがとうございます。

377:デフォルトの名無しさん
08/07/19 19:56:21
>>371
こっちの社内にもそんなプロジェクトがあったな。VBだったが。
汎用機やってた人間がリーダーしてるもんだから、そうしろという命令らしい。
モジュール名が XXYYZZNN で機能番号・画面番号・画面内番号・内部通番とか。
そんなプロジェクトには絶対入りたくないもんだ。

378:デフォルトの名無しさん
08/07/19 19:59:46
>>373
なにを保持するんだ。

379:デフォルトの名無しさん
08/07/19 20:10:26
以下のようなコードを実行すると、((ArrayList)getList.get(2)).remove(l);の
ところで、java.lang.ArrayIndexOutOfBoundsException: -1
と注意されます。どうしたらいいか教えていただけませんか?

String findstring=thesaurus;
for(int k=0, l=0 ; k < ((ArrayList)getList.get(2)).size(); k++, l++){
String filename = (String) ((ArrayList)getList.get(2)).get(k);
try{
String line;
BufferedReader reader=new BufferedReader(new FileReader(filename));
while((line=reader.readLine())!=null){
int n=line.indexOf(findstring);
if(n<0){
((ArrayList)getList.get(2)).remove(l);
l--;
}
}
reader.close();
}
}

380:デフォルトの名無しさん
08/07/19 20:19:51
>>379
ファイルが複数行で、2行以上で探している文字が入っていない。
l-- の後、どこを通っているか System.out.println() をあちこち入れて
確かめてみろ。

381:デフォルトの名無しさん
08/07/19 22:22:01
>>376
java アクティブレンダリングでググれば幸せになれるよ

382:デフォルトの名無しさん
08/07/19 23:06:43
>>375
>おまけにprivateメソッドも禁止

軽く死ねるな

383:デフォルトの名無しさん
08/07/20 00:01:42
エンクロージング・インスタンスがない、っていうエラーはどうやったら解けるんですか?

384:デフォルトの名無しさん
08/07/20 00:03:34
>>379
見たことないタイプの技巧ループだな。
2変数で、両方インクリしてるとか、ループ内操作してるとこが
文法的にどうなの?


for(int k=LIST.size()-1;k>=0;k--){
  (・・・remove()込みの操作・・・)
}
って感じで逆走査すれば、remove()でインデクスずれるとか
気にしないで1変数でできる。

385:デフォルトの名無しさん
08/07/20 00:05:00
>>383
インナークラスだよな。
中のクラスにstatic を付けるとか。

386:デフォルトの名無しさん
08/07/20 00:08:41
>>383
内部クラスを new するときに明示的にインスタンスを与えるか、内部クラスを static にする

387:デフォルトの名無しさん
08/07/20 00:15:31
>>385,386
ありがとうございます。staticつけたらすぐ解決しました。

388:デフォルトの名無しさん
08/07/20 02:06:56
ArrayIndexOutOfBoundsException:-1って出たんですが
これって何のエラーですか?javaはかなり初心者です


389:デフォルトの名無しさん
08/07/20 02:11:56
配列のインデックスに -1 が指定されましたというエラー

390:デフォルトの名無しさん
08/07/20 06:02:28
こんにちは。最近勉強を始めたものです。
リダイレクト機能を使ってテキストファイルから複数の数字を読み込み、配列に格納したいのですが、
そのテキストファイルが以下のような場合、うまくまとめて配列に格納する方法はないでしょうか?

42342423 2343242342 2433 34444
234 34344 343 444443
34 3444 44 45858

ちなみに自分はsubstringsメソッドを使ってそれぞれ抜き出し、trimメソッドにより空白を取り除いてから
配列に格納したのですが、どうも見栄えが悪いうえに効率が悪いような気がしたので質問させていただきました。

この数字はあとで計算に使うため、配列の型はint[]型にしたいです。
よろしくおねがいします。


391:デフォルトの名無しさん
08/07/20 06:05:53
StreamTokenizerとかScannerとか

392:390
08/07/20 06:05:57
>>390はテキストファイルの内容に空白スペースをいれていたのですが2ちゃんの処理の都合上か
スペースが取りのぞかれてしまいました。
42342423-2343242342-2433-34444
234------34344------343--444443
34-------3444-------44---45858
この半角ハイフンがスペースだと考えていただけますようおねがいいたします。

393:390
08/07/20 06:13:25
>>391
即レスありがとうございます。使い方をこれからググったりして調べてみます!

394:デフォルトの名無しさん
08/07/20 11:03:26
すみません。
ある数値の入ったdoubleに最小の数を足したいんですけど
どうやったらいいですか?

395:デフォルトの名無しさん
08/07/20 11:15:18
>394
Double.MIN_VALUE

396:デフォルトの名無しさん
08/07/20 11:18:35
>>395
それはやっても出来ませんでした。

397:デフォルトの名無しさん
08/07/20 11:29:43
>396
それは、
コンパイルできない? 実行できない? 計算結果が想定外?

398:デフォルトの名無しさん
08/07/20 11:30:26
浮動小数点数だから足してもかわんねーんじゃないの

399:デフォルトの名無しさん
08/07/20 11:34:47
多分、0+Double.MIN_VALUE以外では変わらないと思います。

400:デフォルトの名無しさん
08/07/20 11:43:10
>>399
Double.MIN_VALUE + Double.MIN_VALUE とかでも変わると思うが。

401:デフォルトの名無しさん
08/07/20 11:48:57
どんな数でも足すと変わる最小の数を得る方法

402:デフォルトの名無しさん
08/07/20 11:50:20
足し算は絶対値が小さい数からというのは基本ですの

403:390
08/07/20 15:28:19
Scannerクラスのメソッドを用い、完璧に作り上げることができました。本当にありがとうございました!

404:デフォルトの名無しさん
08/07/20 16:24:06
IntとIntegerで相互に変換するにはどうすればよいんでしょうか?
調べてみたものの中々具体的なプログラムがなくわかりませんでした。

405:デフォルトの名無しさん
08/07/20 16:35:06
>>404
java5以降ならそのまま代入でいいけど、java 1.4のはなし?

406:デフォルトの名無しさん
08/07/20 16:47:27
int i = (new Integer(100)).intValue();

407:デフォルトの名無しさん
08/07/20 18:09:23
ぼくしんぐ><

408:デフォルトの名無しさん
08/07/20 18:38:26
>>394もおねがいします。

409:デフォルトの名無しさん
08/07/20 18:54:30
Double.NEGATIVE_INFINITY

410:デフォルトの名無しさん
08/07/20 21:50:08
すみませんが教えてください
マルバツゲームを現在作成しているのですが、
マルの勝利条件を決める方法がわかりません
法則性がまったくわからなくて苦戦しています
先輩方ぜひ教えてください

//oが勝ちの条件
if((map[0][0]==1 && map[0][1]==1 && map[0][2]==1)
■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■))}
msg="oの勝ちです。";
finished=true;
repaint();



411:デフォルトの名無しさん
08/07/20 21:57:24
総当たりで調べてもいいんじゃない?

412:デフォルトの名無しさん
08/07/20 22:16:30
>>411
さきほどいろいろと調べて入れてみました

//oが勝ちの条件
if((map[0][0]==1 && map[0][1]==1 && map[0][2]==1)||
(map[1][0]==1 && map[1][1]==1 && map[1][2]==1)||
(map[2][0]==1 && map[2][1]==1 && map[2][2]==1)||
(map[0][0]==1 && map[1][0]==1 && map[2][0]==1)||
(map[0][1]==1 && map[1][1]==1 && map[2][1]==1)||
(map[0][2]==1 && map[1][2]==1 && map[2][2]==1)||
(map[0][0]==1 && map[1][1]==1 && map[2][2]==1)||
(map[0][2]==1 && map[1][1]==1 && map[2][0]==1))}
msg="oの勝ちです。";
finished=true;
repaint();

あっているかどうかはわかりませんが…
なんかエラー表示が出てしまって…


413:デフォルトの名無しさん
08/07/20 22:19:26
> (map[0][2]==1 && map[1][1]==1 && map[2][0]==1))}

その } は { の間違いでは

414:デフォルトの名無しさん
08/07/20 22:22:45
解りにくいから、
if( 条件1) {
  // 処理
}else if(条件2) {
  // 処理
}
というように書いておけ。
だからタイプミスしてエラーになるんだよ

415:デフォルトの名無しさん
08/07/20 22:24:09
>>413
>>414
すみません
ミスしていました
そこは直ったはいいのですが、
今度はほかのところを訂正すればするほど間違いが出て
ちょっとカオスな状況になってきました

とりあえずお礼を
教えてくださりありがとうございます

416:デフォルトの名無しさん
08/07/20 22:24:32
map[x][y] は ○が1, ×が-1,未入力が0でいいのか?
それならば、map[0][0] + map[0][1] + map[0][2] == 3 とかの方が解りやすいかもしれん

417:デフォルトの名無しさん
08/07/20 22:27:22
>>416
アドバイスどうもです
ただあまり文を変えることが許さないので
実践できずorz

418:410
08/07/20 23:00:20
>>417文ミスです
「許されることがないので」でした
すみません


419:デフォルトの名無しさん
08/07/20 23:21:51
演算結果を小数点以下5桁とか8桁まで、と指定して取得するにはどうすれば良いんですか?

420:410
08/07/20 23:32:12
皆さんのおかげで組み立てられたのですが
訂正部分を直せば直すほど「間違えです」表示が…

とりあえずこれは間違えていますでしょうか?

public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClick(MouseEvent e){
int x =e.getX;
int y =e.getY;


421:デフォルトの名無しさん
08/07/21 00:04:33
>>394,408
Math#nextUp

>>419
超適当
static double scale(double d, int scale) {
double r = Math.pow(10, scale);
return Math.round(d * r) / r;
}

422:デフォルトの名無しさん
08/07/21 00:17:39
形態素解析エンジンsenを使いたくて
URLリンク(www.esco-sb.jp)
ここを見ながらインストールしたのですが、System.setPropertyの使い方が分からずつまずいています。

sen.homeにsenのインストールディレクトリを指定すれば良いようなのですが、
System.setProperty("sen.home","C:\\Program Files\\sen-1.2.2.1");
とやるとjava.lang.IllegalArgumentException: unknown protocol: c
のエラーになり、相対パスを試そうと↓をやると
System.setProperty("sen.home","..\\..\\..\\sen-1.2.2.1");
java.lang.IllegalArgumentException: C:\Users\hoge\Documents\program\Sen\..\.\sen-1.2.2.1\conf\sen.xml (指定されたパスが見つかりません。)
と展開されないためエラーが出ます。

参考ページは絶対パスで通っているようなのですが、何故こうなるのでしょうか?

423:デフォルトの名無しさん
08/07/21 00:21:20
>>422
確か、何故かsetPropertyが効かなかったはず
見つかりませんって書かれたパスに、
sen.xmlとかその周りのやつ(辞書とかも)も置いてみたらうまくいったような・・・・・・

424:デフォルトの名無しさん
08/07/21 00:22:07
パスをurlで書いたらどう?

425:デフォルトの名無しさん
08/07/21 00:23:08
sen.xmlでは相対パスで辞書ファイルの位置とかを記述してあるので
ディレクトリ構造をいじらず、関連ファイル群をそのままコピーして

426:デフォルトの名無しさん
08/07/21 10:58:23
ちょっと疑問に思ったんですけど、html<form>から受け取った、Servletのrequest.getParameter("");の文字数について。
<!--index.jsp-->
<form action="index.jsp">
<input type="text" name="id" />
<input type="submit" />
</form>
<%
if(request.getParameter("id")!=null){
%><%=request.getParameter("id").length()%><br /><%
}
%>

この場合、テキストボックス未入力でフォーム送信時、結果:"0"と出力されますが、nullじゃないのでしょうか?
未入力チェックする時、下記のような風によくするのですが、nullチェックは必要ないですか?
if(request.getParameter("id")==null && request.getParameter("id").length()<1){
//未入力時処理
}

427:デフォルトの名無しさん
08/07/21 11:08:04
HttpRequest(POST/GET)じゃ、""とnullを区別できないのは解るか?
getParameter()のnullチェックは、パラメータ自体が送信されてこなかった事を考慮すれば必要だろう
どちらにせよUtilメソッドを作っておいて
if(Util.isEmpty(request.getParameter("id"))) {
  // 未入力処理
}
とか、書くほうがスマートだが

428:426
08/07/21 11:30:29
""は、レンジ0文字
nullはパラメタ自体が送信されなかった時
ってことでいいですかね?
Utilメソッドを作るというのは、こういうことですか?
public class Util{
private boolean Parameter = false;
public boolean isEmpty(String Parameter){
if(Parameter!=null && Parameter.length()<1){
this.Parameter = true;
}
return this.Parameter;
}
}


429:デフォルトの名無しさん
08/07/21 12:21:21
public class Util{
 public static boolean isEmpty(String parameter){
  return (parameter==null || parameter.isEmpty());
 }
}


430:デフォルトの名無しさん
08/07/21 15:30:16
C#…

431:デフォルトの名無しさん
08/07/21 16:52:03
キーボードから入力させて、それをリストに追加していくプログラムを
forで作りたいんですが、どうやればいいですか?

例えば、最初に入れたい分の数を入力して、
次にその数の分入力させる。

432:デフォルトの名無しさん
08/07/21 17:08:46
>forで作りたいんですが

433:デフォルトの名無しさん
08/07/21 17:38:10
import java.awt.*;
public class SampleApp extends Frame implements ActionListener{


という書き出しなのですが、java.lang.NoClassDefFoundError: ActionListenerと出ます。
理由がわかりません。環境はEcipse3.3です。

434:デフォルトの名無しさん
08/07/21 17:51:42
java.awt.event.ActionListener

435:426
08/07/21 17:51:47
>>429
Stringクラスに、isEmpty()ってあるんですか?><

436:デフォルトの名無しさん
08/07/21 17:54:16
Dinner[] dinners=new Dinner[]{ CURRY , RAMEN , YAKIZAKANA };

try{

int menu=Integer.parseInt( ID ) % dinners.length;
eat(dinners[menu]);

}

}catch(NumberFormatException e){

goToBed()

}


えいっ!

437:436
08/07/21 17:55:47
ぐは。。。ぬるぽか。寝るわ。

438:デフォルトの名無しさん
08/07/21 18:08:56
>>421
ありがとうございます。

439:デフォルトの名無しさん
08/07/21 18:18:47
>>435
1.6で導入された。
length()が0の場合true

440:デフォルトの名無しさん
08/07/21 18:24:34
>>434
ありがとうございます!できました!
インポート対象はその層までだったんですね・・・・

441:デフォルトの名無しさん
08/07/21 20:19:09
ところでおまいら、祝日だってのに
もしかして仕事してるわけ?

442:426
08/07/21 21:18:27
>>441
祝日って何?

443:デフォルトの名無しさん
08/07/21 22:35:55
>>441
そんなの関係ねぇ

444:デフォルトの名無しさん
08/07/22 00:37:40
なんかほんとに初心者丸出し質問で申し訳ないんですが
簡単な3×3マスパズル(コマをスライドさせて元の絵に戻すアレ)
の作り方なんか調べられるサイトや本って無いですかね。

javaゲームの本なんかに書いてあるのだろうか

445:デフォルトの名無しさん
08/07/22 00:49:47
URLリンク(wiki.game-develop.com)


446:デフォルトの名無しさん
08/07/22 00:50:12
プログラミング自体が初心者なら書いてあっても理解は無理
適当な入門本でも一通り学習してからの話

447:デフォルトの名無しさん
08/07/22 00:55:03
>>444
15パズルでぐぐるといいかも

448:デフォルトの名無しさん
08/07/22 03:23:28
ありがとうございます。

実は課題で出されてソースだけでも見つけてコピペしないと・・・と
クラスメートが悩んでいたので助かりました。

449:デフォルトの名無しさん
08/07/22 04:21:15
クラスメートw

450:デフォルトの名無しさん
08/07/22 07:47:12
>>448
こんなヒドイの久しぶりに見た

451:デフォルトの名無しさん
08/07/22 17:37:02
public DigitalWorldClock(String c, int o)
{
super(c,o);
}

”Wellington,+12”みたいなtxtファイルを読み込んで、コンマの前後で分けて、
上みたいな感じでSuper(c,o)を使いたいのですが、

public DigitalWorldClock(String str)
{
int index = str.lastIndexOf(',');
c = str.substring(0, index);
o = Float.parseFloat(str.substring(index+1));
super(c,o);
}

↑と書いたところ、” super の呼び出しはコンストラクタの先頭文でなければなりません。”と出ます
どう直せばいいのか教えてください

452:デフォルトの名無しさん
08/07/22 17:52:49
super の呼び出しはコンストラクタの先頭文にする

453:デフォルトの名無しさん
08/07/22 18:01:23
めちゃくちゃ汚いがこんな具合。
別にファクトリメソッドを準備したほうが賢いと思うよ。

public DigitalWorldClock(String str) 
{ 
 super(hoge1(str), hoge2(str)); 
}
private static String hoge1() {
 int index = str.lastIndexOf(','); 
 return str.substring(0, index); 
} 
private static float hoge2() {
 int index = str.lastIndexOf(','); 
 return Float.parseFloat(str.substring(index+1)); 
} 


454:デフォルトの名無しさん
08/07/22 18:05:04
これが正攻法のファクトリメソッド
private DigitalWorldClock(String c, float o) { super(c,o); } 
public DigitalWorldClock createInstance(String str) {
  int index = str.lastIndexOf(','); 
  c = str.substring(0, index); 
  o = Float.parseFloat(str.substring(index+1)); 
  return new DigitalWorldClock(c, o);
}

455:デフォルトの名無しさん
08/07/22 18:21:33
>>452-454
さっそく教えてくださってありがとうございます。
何となくですけど、教えてくださったことはわかりました。
super(c,o)は別にした方がいいんですね・・・

それで、さっそく>>454で教えていただいた方法に書き換えて試してみたのですが、
private DigitalWorldClock(String c, float o) { super(c,o); }
の部分に、「シンボルを見つけられません」と出てしまいます。
プログラムの後の方で出てくる「list.add(new DigitalWorldClock(str));」にも、シンボルが見つけられませんと出ます。
これはどう直せばいいのでしょうか?重ね重ねすみませんがよろしくお願いします

456:デフォルトの名無しさん
08/07/22 19:21:48
インポート部分を書け

457:デフォルトの名無しさん
08/07/22 19:57:08
eclipseとは別で起動しているjavaに以下のデバッグオプションをつけ、eclipseからリモートデバッグできました。
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

通常リモートデバッグができれば、デバッグ中(変更対象にはブレークで止まっていない)にソースを変更し、
再度変更クラスに処理が入ると、変更が反映されるはずなのですが、反映されません。

何か設定ややり方が間違えているでしょうか?
JDK1.6です。

458:kokoro
08/07/22 20:00:59
はじめまして。java初めてなんです。

[課題]①1の倍数の和、2の倍数の和、3の倍数の和。
   ②たて10個、横10個の正方形を作る。色は交互にする。
    緑、赤、緑、赤・・・・
    赤、緑、赤、緑・・・・
    緑、赤、緑、赤・・・
[期限]今週中ぐらい
[バージョン]java アップレット
[補足]for文と、if-else文を使って。

お願いします。

459:デフォルトの名無しさん
08/07/22 20:08:10
丸投げはここじゃねーよ

460:デフォルトの名無しさん
08/07/22 20:09:35
間違えました・・・

461:455
08/07/22 20:31:03
>>456
すみません、インポート部分ってどこですか?

462:デフォルトの名無しさん
08/07/22 20:34:01
TextSS


463:デフォルトの名無しさん
08/07/22 21:00:22
>>451

public DigitalWorldClock(String str)
{
this(str, str.lastIndexOf('.'));
}

private DigitalWorldClock(String str, int index)
{
super(
str.substring(0, index),
Float.parseFloat(str.substring(index+1))
);
}


464:463
08/07/22 21:16:33
コンストラクタが衝突してた 南無

465:デフォルトの名無しさん
08/07/22 21:27:54
>>457
即時更新不可のオプションでも入れているのでは?

466:デフォルトの名無しさん
08/07/22 21:46:46
>>461
読んで字のごとくimport部分だ

467:デフォルトの名無しさん
08/07/22 21:54:28
>>457
そんなことせんでも1.6ならclassファイル上書きで勝手に更新してくれるべ

468:455
08/07/22 22:09:33
>>466
import java.util.*;
import java.awt.*;
import java.io.*;
こういうことですか??


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch