トップページ⇒tech
1001コメント362KB

【初心者】Java質問・相談スレッド61【大歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん05/01/30 12:39:42
過去ログ、関連スレッド、よくある質問とその回答、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/

これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

以下のエラーが表示されて、途方にくれているあなたは、下のページへ。
「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
http://www.wikiroom.com/java/?path%2Cclasspath

前スレッド
【初心者】Java質問・相談スレッド60【大歓迎】
http://pc5.2ch.net/test/read.cgi/tech/1105691367/

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */

また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。

JavaScriptの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc5.2ch.net/hp/
0153デフォルトの名無しさん05/02/01 19:40:53
>>152
配列の要素が0になるのはどの時点?
015415105/02/01 19:43:14
>>152
float じゃなくて char でも発生しますか?
015515105/02/01 19:49:18
別スレッドで W[i] を初期化したり削除しちまってたらぬるぽになるし、
初期化ルーチンを呼び出しちゃってるとしか思えないなぁ。。。

W[i] が必ず 0 じゃないというのが保証されているのであれば、
送受信時に 0 になるのを監視して W[i] を全て表示してみれば
何が起こってるのかが解るかも。
0156デフォルトの名無しさん05/02/01 19:51:03
>>144 システムプロパティuser.homeからたどれ。
0157デフォルトの名無しさん05/02/01 20:42:23
次のようなSwingアプレットを作って実行すると,起動直後はボタンが表示されず,マウスカーソルをボタンの上に持って行くと,それ以降はボタンが表示されます。
起動直後からボタンを表示させるようにするにはどうすればよいでしょうか?

//<applet code="JAppletTest.class" width="200" height="200"></applet>
import java.awt.*;
import javax.swing.*;
public class JAppletTest extends JApplet {
Container contentPane = getContentPane();
Image img;
public void init() {
contentPane.setLayout(new FlowLayout());
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(Exception e){
e.printStackTrace();
}
contentPane.add(new JButton("ボタン"));
Dimension d = contentPane.getSize();
img = createImage(d.width, d.height);
}
public void paint(Graphics g){
g.drawImage(img, 0, 0, this);
}
}
0158part 105/02/01 21:00:29
質問があります。
下記のようなswingで作った簡易も簡易なメモ帳をつくりました。

問題は、「ctrl a」で行の先頭にカーソルが移動させたいのですが????の部分になにかいたら
よいかわかりません。行の先頭のポイントとかはどこかの変数に保存されてるのでしょうか・・。
あとできればカーソル自体も点滅させずに、直線ではなく色付き長方形にしたのですが。。

すみません、欲張りで。誰か教えてください・・。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import javax.swing.text.*;
import java.io.*;

public class MyEditor extends JFrame{
Container myContainer;
JTextPane myTextPane;

public static void main(String[] args){
MyEditor myApp = new MyEditor( "( New File )" );
myApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myApp.setVisible(true);
}

0159part 205/02/01 21:02:31
MyEditor(String title){
super( title );
setBounds( 10, 10, 800, 500 );

myContainer = this.getContentPane();
myContainer.setLayout(new BorderLayout());

myTextPane = new JTextPane();

InputMap inputMap = myTextPane.getInputMap( JComponent.WHEN_IN_FOCUSED_WINDOW );
ActionMap actionMap = myTextPane.getActionMap();

KeyStroke moveLineStartKey = KeyStroke.getKeyStroke( "ctrl A" );
inputMap.put( cutKey, moveLineStartAction );
actionMap.put( moveLineStartAction, moveLineStartAction );
}

class MoveLineStartAction extends AbstractAction{
MoveLineStartAction( String text ){ super(text); }
public void actionPerformed( ActionEvent e ){
????
}
}
}
0160デフォルトの名無しさん05/02/01 21:27:32
>>158
お願いですからすべて選択にしてください。

て言うか何系の発想よ?
0161デフォルトの名無しさん05/02/01 21:32:53
>>160
あ、EmacsというEditorを過去に使っていて、(EclipseでもEmacs風のKeybindにしています)
それが Ctrl-aが「行頭へ移動」でしたので。

別にCtrl-aでなくても、全然違うキーでもいいのですが・・
0162デフォルトの名無しさん05/02/01 21:35:24
API仕様からJTextPaneのfocus関係を調べてみるとか
0163デフォルトの名無しさん05/02/01 21:37:20
>>161
すまそviの人だから知りませんでした。
0164デフォルトの名無しさん05/02/01 21:37:24
focusじゃなくてキャレットのほうか
0165デフォルトの名無しさん05/02/01 22:14:54
>>164
情報ありがとうございます。

http://java.sun.com/j2se/1.3/ja/docs/ja/api/javax/swing/text/Caret.html#moveDot(int)
このあたりから察するに、

「行頭まで移動」 は
「改行にマッチするまでmoveDot(-1)を繰り返す」 

というのでよさそうなんですが、初心者だけあってクラスとか継承とかがよく分かって
おらず、(多重継承はできないということだけは知っています)どういう記述をしたら動
くようになるかわからないんです・・。
016614305/02/01 22:25:38
>>153
>>154
>>155
なるほど、問題の配列を逐次出力して観察してみることにします。
0167デフォルトの名無しさん05/02/01 22:59:06
メインクラスのあるjarファイルをバッチファイルで起動した後、
DOS窓を表示しないようにできますか?

javawでやればDOS窓閉じても問題ないぽいけど、
勝手にDOS窓が閉じるような技ってないんですかね
0168デフォルトの名無しさん05/02/01 23:03:00
>>167
startってのは?
0169デフォルトの名無しさん05/02/01 23:10:09
>>168
やってみたんですが、引数を読んでくれずクラスパスが通らんかったです。。
なんでだろ
0170デフォルトの名無しさん05/02/01 23:14:46
>>169
そんなことはないぞ
そのバッチの中身かいてみろ
0171デフォルトの名無しさん05/02/01 23:21:31
System.out.println の文字コードを UTF-8 にするには、
どうしたらよいでしょうか(OS は Windows2000 です)。
0172デフォルトの名無しさん05/02/01 23:31:40
>>170
今環境ないんで忘れたけど、確かこんな感じ

start javaw -cp lib\hoge.jar

で、-cpっていうファイルはありません、みたいなエラーだった希ガス
0173デフォルトの名無しさん05/02/01 23:46:17
start "javaw -cp lib\hoge.jar "
0174デフォルトの名無しさん05/02/01 23:47:11
>>172
問題なく動くぞ
0175デフォルトの名無しさん05/02/01 23:47:57
>>173
それは動かない
0176Java暦1ヶ月05/02/02 00:06:39
すみません。JSPを使用しログイン・システムを作っているのですが、
例えば
[ login.jsp ] ・・・まず、このページでログインIDを入力する。
<html>
<head></head>
<body>
<form name=aa action = signup.jsp method=post>
ログインID<input type=text name=id><br>
</form>
</body>
</html>

[ signup.jsp ]・・・このページでMySQLからデータを取り出し照合。
    ・
   <略>
    ・
String id = request.getParameter("id");
<略>
ResultSet result = state.executeQuery("select * from table_1
where id=\"" + id + "\"");
↑ ↑
     |    が入力されたログインIDが入っています。
    がMySQL上に登録したカラムです。
Q1)なぜここで // 略 // where id = id");
としてはダメなのでしょうか?
Q2)私の購入した入門書にはここでの¥の用法が全く記されておりません。
 どういう事なのでしょうか?
    誰か教えて下さい。お願いします。


0177Java暦1ヶ月05/02/02 00:09:00
すみません、文字がずれてしまいました。

ResultSet result = state.executeQuery("select * from table_1
where id=\"" + id + "\"");
↑ ↑
| が入力されたログインIDが入っています。
がMySQL上に登録したカラムです。

Q1)なぜここで // 略 // where id = id");
としてはダメなのでしょうか?

Q2)私の購入した入門書にはここでの¥の用法が全く記されておりません。
 どういう事なのでしょうか?誰か教えて下さい。お願い致します。

0178デフォルトの名無しさん05/02/02 00:12:38
>>176
where id = id
これじゃただ
where id = idって文字列表示するだけになるじゃん…
\はエスケープシーケンス
今回の場合は
" "でくくってある文字列の中で"という文字を入れたくとも
入れたらそれが文字列の終端だと判断されてしまうので
それを回避するために\"と表現し区別させる
0179デフォルトの名無しさん05/02/02 00:56:50
>>177
SQLでは
select * from table_1 where id=id
ではだめで、これだとtable_1の列idをそれ自身と比較して同じ列
(つまりnull以外の全て)を抽出するSQLになります。この場合は、
select * from table_1 where id="id"
と書きたいわけです。こうすると、列idの値が"id"である列を抽出する
SQLになります。
これをJavaの文字列で書こうとすると、
文字列リテラルの開始と終端を表す文字「"」で前後を囲って
"select * from table_1 where id="id""
とすればいいと思うかもしれませんが、この場合文字列中の"が
文字列の終端と認識されてしまい正しくコンパイルしてもらえません。
こういう場合は、"ではなく\"と書きます。つまり、
"select * from table_1 where id=\"id\""
です。または、後の説明のために分けて書くとこうなります。
"select * from table_1 where id=\"" + "id" + "\""
文字列リテラルの中では「\"」で1文字として扱うことに注意して下さい。

ただ、これだとidの値は"id"で固定になります。ここで変数の値を参照させたい場合は
"id"を変数で置き換えて以下のように書きます。
"select * from table_1 where id=\"" + id + "\""
SQLの列名、SQLの文字列、Javaの文字列、Javaの変数名の4種類で同じシンボルidが
出てきますが、混同しないよう気をつけて下さい。

ところで、こんな説明もないその糞入門書のタイトルは何ですか?
今後の被害者を増やさないためにも、是非さらして下さい。
0180デフォルトの名無しさん05/02/02 01:19:27
普通SQLって文字列はシングルクォートでくくるもんだけど
ダブルクォートでもオッケーなん?
0181デフォルトの名無しさん05/02/02 01:31:07
統計では、SQLダブルでくくっちゃう人の多くは、like文でアスタかまします。
0182デフォルトの名無しさん05/02/02 01:38:59
abstractって何に必要なんですか?
interfaceもオーバーライドを強制しますよね?
役割がかぶっているような気がしてなりません
目的を教えて
0183Java暦1ヶ月05/02/02 01:41:31
>178,179さん
解決しました。ありがとう御座います。
本の名前は、
EclipseではじめるJavaプログラミング入門
です。教えて頂いて大変恐縮なのですが、リテラルについての
説明ページにホンの少し載ってました(-_-#)すみません。
細やかな解説本当にありがとうございましたo(^o^)o
0184デフォルトの名無しさん05/02/02 01:47:31
>182
interface ほんっとうにガワだけ共通化したい場合
abstract class 部分的に違う動作をするものをいろいろ作りたい場合

……いかがでしょう識者の皆様。
0185デフォルトの名無しさん05/02/02 01:50:43
そもそも等値じゃないだろ
アホか
0186デフォルトの名無しさん05/02/02 01:51:19
機能的には、abstract classだけが一部のメソッドを実装できたりするわけだが。
interfaceはそれができない代わりに多重継承が可能。
例えばtemplate patternやるならabstract classだろうなあ。
0187デフォルトの名無しさん05/02/02 01:53:38
>>185
脳内彼女がイケメンにでも食われたのか?
0188デフォルトの名無しさん05/02/02 02:02:40
>>187
スルーです。放置プレイ。
018917705/02/02 02:10:37
>>179さん
すみません。ふと疑問に思ったのですが、
例えばDOS窓上でMySQLコマンドを入力したい場合。

   select * from table_1 where id="id"

ですよね。これをJavaのソース上で再現しようとする場合には
エスケープシーケンスでは ダブルクォーテーションは ¥”
なのですよね?そうしますと // 略 //  id = \" + id + \"");
で良いと思うのですがなぜダメなのでしょうか?

0190デフォルトの名無しさん05/02/02 02:15:18
>>184,>>186 thx
プラットフォーム毎(Javaで?)のロジックの差異を変更するばっかに備えたクラスを作る感じ?
ある程度機能は共通しているが、部分的に個別に書く必要がある場合もある
そんなときに使うのがabstractということでいいのかな?
0191デフォルトの名無しさん05/02/02 02:53:55
>>189
その場合、MySQLに対して以下のSQL文が実行されます。
select * from table_1 where id="+id+"
これが間違っているというのは分かりますよね?

この辺は繰り返し試してその結果を確認した方が理解が早いです。
Statement#executeQuery()を実行する前に、引数に指定した文字列がどうなっているか、
System.out.println()を使って確認するといいでしょう。
Eclipse使っているのでしたら、デバッグ・パースペクティブに切り替えて
デバッグモードで実行し、変数ビューの内容を見るのもいいかもしれません。
0192デフォルトの名無しさん05/02/02 07:17:19
クラスClassAが定義されていて、
ArrayList型ALが存在してるとします。

ClassA[] clA = (ClassA[]) AL.toArray();

でClassCastErrorが出るんですが、使い方間違っていますか?
0193デフォルトの名無しさん05/02/02 07:39:23
はい
0194デフォルトの名無しさん05/02/02 07:46:18
('A`)教えてくれませんか?
0195デフォルトの名無しさん05/02/02 07:56:31
>>192
ClassA[] clA = (ClassA[]) AL.toArray(new ClassA[AL.length]);
0196デフォルトの名無しさん05/02/02 07:58:43
>>194
Class[]←Object[] ではないから。
019719405/02/02 08:20:16
ありがとうございました。
primitive型のときと同じことするんですね。
019819405/02/02 08:21:58
>>195
わざとだと思いますが、lengthじゃなくてsize()ですよね。
0199デフォルトの名無しさん05/02/02 08:25:44
>>197
配列はprimitive型じゃないから同じなんだよ
0200デフォルトの名無しさん05/02/02 09:07:52
toArray()に与える配列のサイズは0でいい
0201デフォルトの名無しさん05/02/02 10:12:58
>>200
正しくは0以上なら何でもいい。
ただし、大きな数字を与えすぎるとOutOfMemoryError食らうかも。
0202デフォルトの名無しさん05/02/02 10:33:17
>>200
>配列のサイズは0でいい

と書かれると、List#size()を指定することが余計なように聞こえるんだけど、
別に「List#size()で指定する」よりも、「0で指定するほうが良い」というわけではないと思うんだけど。
今回のケースだと、List#size()を指定したほうが余計なインスタンスが生成されないと思う。

List#size()を指定する方は、自分でサイズ指定して作った配列に格納されて返ってくる。
0個の配列を作った場合は、型の判別だけに使用され、
toArrayの内部で(前者と同じように)Listの要素数に等しい配列が生成されるわけだ。

となると、0個の配列をnewしたことが無駄なインスタンス生成になるのではないでしょうか?
サイズを0で指定するんだったら、型指定のための定数として使うべき。

ClassA[] clA = (ClassA[]) AL.toArray(new ClassA[0]);
ClassA[] clB = (ClassA[]) AL.toArray(new ClassA[0]);
ClassA[] clC = (ClassA[]) AL.toArray(new ClassA[0]);
 ↓
private static final ClassA[] NULL_CLASSA_ARRAY = new ClassA[0];

ClassA[] clA = (ClassA[]) AL.toArray(NULL_CLASSA_ARRAY);
ClassA[] clB = (ClassA[]) AL.toArray(NULL_CLASSA_ARRAY);
ClassA[] clC = (ClassA[]) AL.toArray(NULL_CLASSA_ARRAY);

「サイズ0の配列を渡せばよい」というと、ソース上のあっちこっちで
new HogeHoge[0]というのが記述されることになっちゃわないかと心配。
どうせ0個の配列を生成するコストなんてたいしたことないのかな?
要素数0の配列で指定した場合の利点ってなんなんでしょうか?
0203デフォルトの名無しさん05/02/02 10:34:51
>>201
大きな数字を与えて、OutOfMemoryError食らうときに、
小さな数字を与えたら、OutOfMemoryErrorにならないの?
0204デフォルトの名無しさん05/02/02 10:36:01
>>202
キー叩く回数が減るだけだと思われ。
0205デフォルトの名無しさん05/02/02 10:45:52
>>203
>小さな数字を与えたら
OutOfMemoryErrorは
「メモリ不足エラー」だから
0206デフォルトの名無しさん05/02/02 11:50:03
>>204
キー叩く回数はむしろ増えてる
0207デフォルトの名無しさん05/02/02 12:11:30
>>206
キー叩く回数ってのは new ClassA[AL.size()] と new ClassA[0] の比較ね。

NULL_CLASSA_ARRAYだと ClassA[] NULL_CLASSA_ARRAY = null; を想像してしまう。
020820205/02/02 12:21:55
>>207
おれもnullっぽいと思ったけど、
そのコードはEffective Javaを参考に書いた。
じゃあ、別にList#size()で指定している奴にたいして、
「おいおい、そりゃ0にしたほうがよいよ」って書き直せることではないってことだな。
0209デフォルトの名無しさん05/02/02 13:24:29
JSPの勉強をしているのですが例えば、

a1.jsp [ユーザにIDを入力して貰う。 uid = hoge]
a2.jsp [入力内容確認画面:登録ボタンを押し、a3.jspで登録処理を行なう]
a3.jsp [このjsp内部でDBへの登録を行なう。]

a3.jsp中での登録処理を実行する際に、a1.jspの中で使用している変数を
使用する際にはどうすれば良いでしょうか?同一パッケージ( プロジェクト)
にa1〜a3は、入っています。a1.jsp.uid と指定するのは誤りでしょうか?

0210bus05/02/02 13:36:30
String型配列をcahr型の配列に変換する方法がわかりません。わかる方
教えてください
0211デフォルトの名無しさん05/02/02 13:37:55
>>210
cahr…
0212デフォルトの名無しさん05/02/02 13:38:58
>>210
APIドキュメント見れば、そのものずばりの機能が書いてある。
0213デフォルトの名無しさん05/02/02 13:39:05
>>209
そう言う場合のためにsessionスコープ変数(sessionコンテキスト変数とかsession属性変数とも呼ばれる)がある
0214デフォルトの名無しさん05/02/02 13:41:24
このメソッド激しく打ちづらいんだよな
0215デフォルトの名無しさん05/02/02 13:41:38
>>209
a1.jspで
application.setAttribute("uid", hoge);
として
a3.jspで
String uid = application.getAttribute("uid")
とする。
applicationは、sessionの方がよいですが・・・
0216デフォルトの名無しさん05/02/02 13:42:22
>>209
a1.jspで
application.setAttribute("uid", hoge);
として
a3.jspで
String uid = (String) application.getAttribute("uid")
とする。
applicationは、sessionの方がよいですが・・・
0217デフォルトの名無しさん05/02/02 16:28:11
String型配列からchar配列というのは、
String[] s = { "aaa", "bbb", "ccc" };
を、
char[][] cc = { { 'a', 'a', 'a' }, { 'b', 'b', 'b' }, { 'c', 'c', 'c' } };
と等価に変換したいという意味か?

といじめてみる。
021819405/02/02 17:19:09
>>200-202
to.Array()は配列サイズを適切な大きなの配列に直してくれて代入してくれるわけですかφ(..; ) メモメモ
0219デフォルトの名無しさん05/02/02 17:53:33
質問です。

コード変換(SJIS→UTF8)したのですが、どうすればいいのでしょうか?
Cみたいにiconv.h相当するものや命令があれば教えてください。
0220デフォルトの名無しさん05/02/02 17:59:42
>>219
変換したなら好きなようにすればいいじゃない
022121905/02/02 18:35:26
すまん、間違えた。
って普通気づくだろ…


×: コード変換(SJIS→UTF8)したのですが
○: コード変換(SJIS→UTF8)したいのですが
0222デフォルトの名無しさん05/02/02 18:42:17
SJISで読み込んでUTF-8で書き出せばいい。
0223デフォルトの名無しさん05/02/02 18:59:55
>>219

byte[] sjis = { 省略 };
String s = new String(sjis, "Shift_JIS");
byte[] utf8 = s.getBytes("UTF-8");


Shift_JISよりWindows-31Jの方がいいかもね。
0224デフォルトの名無しさん05/02/02 20:15:11
>>220
ちとワロタw
0225デフォルトの名無しさん05/02/02 20:16:43
MS932とすれば分かりやすいよ
0226デフォルトの名無しさん05/02/02 22:06:09
失礼します、JDKを使って、
34,54.87,45,65,75,98,71,68,82
以上の数字をWhileを使わずに、昇順で並び替えるというものですが、よろしくお願いします
0227デフォルトの名無しさん05/02/02 22:07:30
>>226
forを使うのじゃ
0228デフォルトの名無しさん05/02/02 22:10:34
そういうことなのか?
0229デフォルトの名無しさん05/02/02 22:11:31
それとも再帰呼出しか?
0230デフォルトの名無しさん05/02/02 22:13:25
なるほどforですか。
今参考書を見てるのですが、十個の数値は条件のところに入れるのでしょうか?
0231デフォルトの名無しさん05/02/02 22:14:25
CDROMの中に画像データを入れ込んで、
HP(これもCDROMの中にある)上にあるボタンをクリックすると
全ての画像の中から条件にあう画像を選んで
HP上に表示する、
というようなプログラムをつくりたいんですが、
どこか参考になるサイトやスレってありますか!?
0232デフォルトの名無しさん05/02/02 22:17:29
>>226
int型のtest配列を100個用意して、
34ならtest[34]=1
みたいにしたらソートされるんじゃない?
0233デフォルトの名無しさん05/02/02 22:20:53
…test配列とは?
0234デフォルトの名無しさん05/02/02 22:23:20
>>233
testという変数名のint型の配列だと思う
まぁ、最後にループを使うことになりそうだが
0235デフォルトの名無しさん05/02/02 22:25:53
>>230
int test[] = {34,54.87,45,65,75,98,71,68,82}
for(int i = 0; i < test.length; i++){
  何らかの処理
}
0236デフォルトの名無しさん05/02/02 22:31:30
ありがとうございます、これで処理を続けれそうです。
0237デフォルトの名無しさん05/02/02 22:32:01
>>236
結局何がしたかったんだ?
0238デフォルトの名無しさん05/02/02 22:35:30
Stringをマルチバイト文字列で初期化してsubstring(1)とした場合、どの部分が返ってきますか?
0239デフォルトの名無しさん05/02/02 23:01:11

2文字目以降
0240デフォルトの名無しさん05/02/02 23:05:10
いいかげんCのchar配列感覚でJavaのStringを見るのはやめような。
まー、サロゲートペアなんていうものもあるが。
0241デフォルトの名無しさん05/02/02 23:10:55
>>174
よくわからんかったんで、仕方なくmanifestでクラスパス通しました
ありがとござました
0242質問です05/02/02 23:35:41
ファイルを読み込み、平均などをだすプログラムなのですが、どうすれば実行できるのかがわかりません。
おそらくファイルは読めるのですが、計算しようとすればエラーらしくNaNとでました。次にプログラムをはります。
0243その105/02/02 23:40:09
import java.awt.*;
import java.awt.event.*;
import java.io.*;

class FrameForm extends Frame implements ActionListener{
int data_num=0;
double[] data = new double[100];
String line = null;
String data_list = "";
Label label1 = new Label("Average");
Label label2 = new Label("Varience");
Label label3 = new Label("Standard Deviation");
Label label4 = new Label("Set Data");
TextField text1 = new TextField("");
TextField text2 = new TextField("");
TextField text3 = new TextField("");
TextArea texta1 = new TextArea(3,10);
Button button1 = new Button("Load Data");
Button button2 = new Button("Calculate");
Panel pan1 = new Panel();
Panel pan2 = new Panel();
Panel pan3 = new Panel();
FileReader fr;
BufferedReader br;
0244その205/02/02 23:41:41
public FrameForm(){
setSize(300,300);
setLayout(new BorderLayout());
add(pan1,BorderLayout.SOUTH);
add(pan2,BorderLayout.CENTER);
add(pan3,BorderLayout.NORTH);

pan1.setLayout(new FlowLayout(FlowLayout.RIGHT));
pan1.add(button1);
pan1.add(button2);

pan2.setLayout(new GridLayout(6,1));
pan2.add(label1);
pan2.add(text1);
pan2.add(label2);
pan2.add(text2);
pan2.add(label3);
pan2.add(text3);

pan3.setLayout(new BorderLayout());
pan3.add(label4,BorderLayout.NORTH);
pan3.add(texta1,BorderLayout.CENTER);

button1.setActionCommand("load");
button1.addActionListener(this);
button2.setActionCommand("calc");
button2.addActionListener(this);
}
0245その305/02/02 23:44:28
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()=="load"){

try{
fr = new FileReader("./test.txt");
br = new BufferedReader(fr);
}catch(FileNotFoundException e2){
texta1.setText("Data file not found.");
return;
}

try{
while((line = br.readLine()) != null){
data[data_num] = Double.parseDouble(line);
data_num++;
}
}catch(IOException e3){
System.out.println(e3);
}

for(int i =0;i<data_num;i++){
data_list += (Integer.toString((int)(data[i]))+ " ");
System.out.println(Double.toString(data[i]));
}
0246その405/02/02 23:46:51
texta1.setText(data_list);
button1.setVisible(false);
}else if(e.getActionCommand()=="calc"){
if(data_list == null){
texta1.setText("Need Load Data.");
}else{
text1.setText(Double.toString(Calc.average(data,data_num)));
text2.setText(Double.toString(Calc.varience(data,data_num)));
text3.setText(Double.toString(Calc.standard_deviation(data,data_num)));
}
}
}
}
0247その505/02/02 23:47:40
class FrameMain{
public static void main(String[] args){
FrameForm ff = new FrameForm();
ff.setVisible(true);

ff.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
0248その605/02/02 23:48:54
class Calc{
static double average(double num[],int n){
double average = 0;
for(int i=0;i<n;i++){
average += num[i];
}

return average/n;
}

static double varience(double num[],int n){
double varience = 0;
for(int i=0;i<n;i++){
varience += Math.pow(num[i]-average(num,n),2);
}

return varience/n;
}

static double standard_deviation(double num[],int n){
return Math.sqrt(varience(num,n));
}
}
0249質問です05/02/02 23:51:41
以上で終わりです。長くて、省略されていたりしてすいません。とにかく困っています。どうぞよろしくお願いします。
0250デフォルトの名無しさん05/02/02 23:53:41
ソースみないでレス。
NaNってあるけどparseIntしとるけ?
0251デフォルトの名無しさん05/02/03 00:06:50
>>249
クラスFrameMainの閉じカッコがないけど、それをつければ動くよコレ。
動かした手順書くわ。
(1) 下の2行のテキストファイルtest.txtを用意。
---ここから
3
5
---ここまで

(2) プログラムを実行して、[Load Data]ボタンを押す。
テキストエリアに
3 5
と出力される。

(3) [Calculate]ボタンを押す。
平均と分散と標準偏差が出力される。
025225105/02/03 00:11:28
>>250
ちなみに、、数値変換できない文字列に対して
「Integer.parseInt()は例外投げる」
「Double.parseDouble()はNaNを返す」
だったと思うよ。
■ このスレッドは過去ログ倉庫に格納されています