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

★★ Java の宿題ここで答えます Part 57 ★★

■ このスレッドは過去ログ倉庫に格納されています
0001JavaScriptは板違い、Web制作板をご利用ください2006/07/07(金) 15:24:01
【Java宿題スレッド基本ルール・五箇条の御誓文】
1:問題文は自己省略せずに、直接全部貼り付けてください。
2:課題の「丸投げ」が最も好ましい提示法です。なるべく丸投げしてください。
3:数学問題は「○×法でせよ」だけでなく、その数式、前提条件も説明してください。
4:課題&宿題関連の質問はOKですが、それ以外の一般的な質問は禁止です。
5:もし回答プログラムがアップされたら、その返答と動作報告をお願いします。

【課題提示用テンプレ】
【 課題 】与えられた課題文をそのまま書きます 《必須》
【 用語 】数学用語、専門用語の意味、説明を書きます 《あれば必須》
【 期限 】提出期限、解答希望日があれば書きます
【 Ver  】希望するJavaバージョンがあれば書きます
【 補足 】課題について自分なりに補足する事、何か思う事があれば書きます。
       丸投げでない場合は、途中までのソースとその経過報告、
       質問点、疑問点を書きます(なるべく丸投げにしてください)

【回答プログラムの掲載場所】
Java質問スレWiki  http://www.wikiroom.com/java/
ソースポストネット  http://sourcepost.sytes.net/

【前スレ】
http://pc8.2ch.net/test/read.cgi/tech/1145447187/
0002デフォルトの名無しさん2006/07/07(金) 15:32:30
前スレ>980
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28023
0003デフォルトの名無しさん2006/07/07(金) 19:03:46
前スレ>972
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28024
0004前スレ9722006/07/07(金) 22:53:25
>>3
ちゃんと動きました、ありがとうございます
0005☆さぉり☆2006/07/07(金) 22:54:31
すみません、JAVAのブロック崩しのプログラムがほしんです…
0006デフォルトの名無しさん2006/07/08(土) 02:23:27
>>5
ググれ
0007デフォルトの名無しさん2006/07/09(日) 01:24:22
テストに、JAVAの歴史と今後みたいなことを書くんですけど
どんなことを書けばいいのでしょうか?特に、今度ってのが困ります。
それと、JAVAの特長ってのも書くんですけどどのようなことをかけばいいんですか?
やっぱり、バイトコードとか、ハードに依存性があるとかですか?
0008デフォルトの名無しさん2006/07/09(日) 02:09:30
ぐぐったら山ほど出てくるでしょ
0009デフォルトの名無しさん2006/07/09(日) 02:19:58
>>7
他の言語と比べてみるとわかりやすいかも。
0010デフォルトの名無しさん2006/07/09(日) 03:58:43
>>7
http://www.amazon.co.jp/gp/product/4875663226/でも買って読めば?
0011デフォルトの名無しさん2006/07/09(日) 14:35:29
【 課題 】Pro3_0702Sample02.java
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28036
を参考にして、以下の処理を行うアプレットを作成せよ。クラス名はPro3_0702とする。
Member.java
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28035
を使用する。
・アプレット初期化時に2名の通常会員と1名のゴールド会員を作成する。
・3名の会員番号を追加したチョイスchと、文字を「表示」としたボタンbt、文字列を表示するラベルlbを作成し、アプレットに追加する。
・ボタンbtに、ボタンを押したことを受け取るリスナbtActionListenerを追加する。
・クラスbtActionListener中のメソッドactionPerformed(ActionEvent e)の中で、チョイスで選択した番号の会員情報(氏名、ポイント、会員種別)をラベルlbに表示する。

【 期限 】7月10日17:00まで
アプレットに関しては、教科書の範囲を越えているので各自で調べてくださいと言われましたが、さっぱりなのでお願いします。
0012デフォルトの名無しさん2006/07/09(日) 17:32:00
>>11
この問題、Memberクラスの設計おかしくないかな?
GoldMemberやNormalMemberをインスタンス化するにはMemberのインスタンスが
必要になるような気がする。内部クラスがstaticなら外部クラスの名前だけで
内部クラスをnewできるけど。この場合、GoldやNormalをMemberの内部クラスにする意味が
ないような気がするが。

とりあえず、Memberをabstractでなくして
さらにコンストラクタをprivateでなくしたMember
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28039
を使って、アプレットクラスPro3_0702
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28038
を作ってみた。
ついでに、アプレットを動かすためのhtml
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28040
appletviewerでしか確認してないので注意。

今思いついたが、GoldMemberとNormalMemberをstaticな内部クラスにしたほうがよかったかも
まあ普段3行以上プログラムなんて書いたことないので、回答含めて全然勘違いかもしれんが
0013122006/07/09(日) 17:55:49
やってみた。
Memberクラスのアクセス修飾はabstractのまま、コンストラクタもprivateのままで、
Memberの内部クラスGoldMemberとNormalMemberをstaticにしたMember.java
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28041
を使うと、
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28042
みたいに
こちらの方がすっきりな気がする

どちらにしても元のMemberクラスってabstractなのでどうせインスタンス作れないのに
コンストラクタをprivateと明示して書いてたり
無意味にサブクラスを内部クラスとしていたりちょっと微妙な感じがする
ここは普通にabstractなMemberを継承する外部クラスとしてGoldやNormalを作ればいいように思うが
0014122006/07/09(日) 18:05:25
Member.javaをちょっと変更して実現してしまったのですごく気になるよ
本当はそのままでもできる課題だったりするのかも
すまない、javaはまったく初心者だ
0015デフォルトの名無しさん2006/07/09(日) 18:15:21
【 課題 】英文で書かれたtextファイルがある。
そのファイルに対するThorndikeTableをつくり、結果を印字せよ。2段組印字をする。
ただし、印字用のLaTeXコードは無視する。

例)
frequency word
9996   software←新しい単語が出る度に検出、最終的に数が多いものからソートする
 ・     ・
 ・     ・
 ・     ・
56   engineering

注意:
1)件のファイルは、デバッグでは使用できない。
2)複数形の語は単数形の語として集計する。また過去形、過去分詞は現在形として集計する。
文頭のために大文字表示されている文字は、小文字表示に直して処理すること。
数字だけの語は対象外とする。
【 期限 】7/11 10:00まで
【 補足 】丸投げです。よろしくお願いします
0016デフォルトの名無しさん2006/07/09(日) 18:27:29
http://pc8.2ch.net/test/read.cgi/tech/1145447187/823n ってレスなかったの?
0017122006/07/09(日) 20:55:00
ご飯を食べて落ち着いて考えてみた。
Memberが抽象クラスなのが障害なのでMemberを継承した具象クラスConcreteMemberを作れば……
って引数なしコンストラクタがprivateじゃん
しかたがないので、ダミーの会員を一人余分に登録することでMember.javaを変更せずに
動作するアプレットにしてみた。
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28043
あとアップしてから気がついたけど
Member[] ms = new Member[3];
の「 = new Member[3]」はいらないね
会員番号が7002からになるが、とりあえずMember.javaは変更なしに動く
0018デフォルトの名無しさん2006/07/09(日) 21:09:42
【 課題 】新しいウインドウ上でドラッグをすると線が描写できるプログラムを作成せよ。
【 用語 】
【 期限 】できるだけはやくおねがいします
0019デフォルトの名無しさん2006/07/09(日) 21:36:13
>>17
ConcreteMember を MemberFactory くらいにして
createNormalMember や createGoldMember をこしらえてみると
クライアントコードが幾分わかりやすくなる気がする。
0020デフォルトの名無しさん2006/07/09(日) 21:45:36
>>19
MemberFactory よりも RootMember とか ExecutiveMember の方が面白いかも。
会員番号が 7002 からになるのも納得できるし。
0021デフォルトの名無しさん2006/07/09(日) 21:46:18
>>18
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28044
課題が簡単すぎるな・・
0022デフォルトの名無しさん2006/07/09(日) 21:57:34
>>21
ありがとうございます


コマンドプロンプトでコンパイルしたらこんなエラーがでたんですがどうしたらいいんでしょうか?

Exception in thread "main" java.lang.NoClassDefFoundError: Res18 (wrong name: th
read57_res18/Res18)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
0023デフォルトの名無しさん2006/07/09(日) 22:05:56
ファイル名がRes18じゃないじゃないの
0024デフォルトの名無しさん2006/07/09(日) 22:09:34
packageがthread57_res18になってるから配置を確認
0025デフォルトの名無しさん2006/07/09(日) 22:09:37
>>22
それコンパイルでエラーが出たんじゃなくて実行エラーじゃないの?
thread57_res18っていうディレクトリ掘ってそこにできたクラスファイルふたつをいれて
java thread57_res18.Res18
って実行汁
0026デフォルトの名無しさん2006/07/09(日) 22:10:23
それか、パッケージ作ってないなら
package thread57_res18;
を丸々削除
0027デフォルトの名無しさん2006/07/09(日) 22:19:16
ありがとうございます。
>>26さんのいうとおりにしてみたらできました!

で、申し訳ないんですが、線っていうかお絵かきみたいなプログラムをつくるらしいんですよ^^;
すいません説明不足でしたね・・・
できたらお絵かきのプログラムもつくっていただけたらうれしいです
0028デフォルトの名無しさん2006/07/09(日) 22:32:26
スルー確定
0029デフォルトの名無しさん2006/07/09(日) 22:51:45
>>27
お前
「お絵かきソフトを作れ」
ってだけで誰か作ってくれると思うのかい
003027ではないけど2006/07/09(日) 23:12:26
こんばんわ、最近「クラスの基本」を習った初級者です。早速ですが課題で「下記のプログラムソースが上手く動く用にソースコードを付け足しなさい。」をお願いします。(*最後のガソリン量にはaddGas(10.0)が加算される。)
class Car{
nt num;
double gas;
void setNum(int n)
{
num = n;
System.out.println("ナンバーを" + num + "にしました。");
}
void setGas(double g){
gas = g;
System.out.println("ガソリン量を" + gas + "にしました。");
System.out.println("この車は満タンで40リットル入ります。");
}
void show(){
System.out.println("車のナンバーは" + num + "です。");
System.out.println("ガソリン量は" + gas + "です。");
}}
class Exam1{
public static void main(String args[]){
Car car1 = new Car();
Car car2 = new Car();
car1.setNum(1234);
car1.setGas(20.5);
car2.setNum(5678);
car2.setGas(30.8);
car1.addGas(10.0);
car2.addGas(10.0);
car1.show();
car2.show();
}}
0031名無し募集中。。。2006/07/09(日) 23:13:37
>>1ぐらい見ろ
003227ではないけど2006/07/09(日) 23:17:46
テンプレが足りませんでした。
提出期限、明日正午
希望するjavaバージョン1.5.0_07
補足はありません。
0033デフォルトの名無しさん2006/07/09(日) 23:30:05
【 課題 】 異なる濃度g/lと量lの食塩水が入った容器が2つある。2番目の容器の食塩水
      の半分を1番目に移したとき、2つの容器内の濃度と量を計算して表示し、さらに
      「濃いほうの濃度は、・・・g/lです」と表示しなさい。ただし、フィールド
      :容器内の濃度、容器内の量 メソッド:容器への食塩水の追加操作(追加濃
      度と量を引数) 容器からの食塩水の取り出し(取り出し量を引数、取り出し
      濃度を戻り値)
      容器内の濃度と量の表示とする「食塩水容器」のクラスを定義し、要素数2の
      オブジェクト配列を使いプログラムを作りなさい。最初の濃度と量はキーボ
      ードから入力する。

      丸投げです。お願いします。
0034名無し募集中。。。2006/07/09(日) 23:35:36
>>32
void addGas(double gas){
this.gas += gas;
}
003527ではないけど2006/07/10(月) 00:02:23
>>34
ありがとうございます。
自分のフィールドを示すthis.でgasを指定すればよかったのですか。
勉強になりました。
0036122006/07/10(月) 02:34:15
>>19
>>20
こんな感じですかね
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28045
確かにインスタンス生成のコードがちょっと分かりやすくなったような
それに具象Memberクラスの名前を変えたことで
executive memberが最初に現れて、それが他のメンバーを統括する=作るというふうに
意味的にもなんとなくすっきり感がありますね
0037デフォルトの名無しさん2006/07/10(月) 14:04:13
>>33
こんな感じ
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28049

つーか算数忘れてるよ俺・・・ orz
食塩水の濃度計算とか、見直してみて。 壮絶に怪しいから。
0038デフォルトの名無しさん2006/07/10(月) 15:04:56
>>16
完全な回答が得られなかったみたいなので…
0039デフォルトの名無しさん2006/07/10(月) 15:11:59
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28050
課題で指示されたフィールドとメソッド以外はコンストラクタを除いて実装していない。
不正値や不正操作への対策を全くとっていない。
たとえば、無限容器としても負の濃度を設定したり、容器内の食塩水量以上の取り出しを行う等。
最初に設定する濃度と量が正当であれば、取り出す量については半分を移すという課題の範囲内では問題ない。
0040デフォルトの名無しさん2006/07/10(月) 15:15:23
sorry
>>39は>>33への回答
0041デフォルトの名無しさん2006/07/10(月) 16:10:05
>>38
難しいんではなくてやたら手間がかかって面倒くさそうだね
単語の語形変化の辞書をどこまで用意すればいいのか際限ないや
これ数日でやるような課題じゃないな
0042デフォルトの名無しさん2006/07/10(月) 16:16:10
[課題]
1.以下の定積分を台形則を用いて数値計算しなさい。ただし
積分区間の分割数は100以上とする。
∫e^(x^2)dx (0≦f(x)≦2)(e(自然対数)のxの2乗 乗です)

2.コンストラクタを用いて分割数と積分区間が自由に指定できる、
以下の定積分を台形則を用いて数値計算するクラスを作成しなさい。
ただしa,bは実数とする。
∫e^(x^2)dx (a≦f(x)≦b)

[用語]
コンストラクタ・・・オブジェクト指向言語で作成したプログラム
において、データとそれを操作するための手続きを一体化した
「オブジェクト」の生成時に呼び出される特殊な関数。
オブジェクトが扱うデータの初期化などをここで行なう。
台形則・・・面積を台形で近似し求める計算方法である。
台形の面積を求めるだけなので比較的簡単に積分値を求めることが
可能である。

[期限]7/17 できるだけ早いほうが助かります。

問題丸投げですが、よろしくお願いします。
0043デフォルトの名無しさん2006/07/10(月) 18:48:55
import java.lang.StrictMath;

class C42Trapezoidal{
double a; //区間開始
double b; //区間終了
int n; //分割数
public C42Trapezoidal(double a,double b,int n){
this.a = a; this.b = b; this.n = n;
}
public double getFx(double x){
return StrictMath.pow(StrictMath.E,x*x);
}
public double getTrapezoidal(){
double sum =(getFx(a)+getFx(b))/2;
for(int i=1;i<n;++i){
sum += getFx((b-a)*i/n+a);
}
return sum*(b-a)/n;
}
}

public class C42{
public static void main(String[] args) {
System.out.println("[0-2] "+new C42Trapezoidal(0,2,100).getTrapezoidal());
}
}
0044デフォルトの名無しさん2006/07/10(月) 19:16:34
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28051
mainメソッドはHogeの方に
0045デフォルトの名無しさん2006/07/10(月) 19:19:42
無駄にいろいろ付けて遅れてしまったorz
0046デフォルトの名無しさん2006/07/10(月) 19:40:37
>>38
Ruby on Rails が当該処理を行うためのメソッドをもっているので
ソースからそのへんを抜き出してきて jruby で処理すれ
0047sage2006/07/10(月) 20:34:52
>43,44
ありがとうございます!
試してみますね〜
0048デフォルトの名無しさん2006/07/10(月) 21:59:43
動作には関係ないけれどjavadocで見直していたら
>>44の140行目あたりのコメントが変になってた
被積分関数の上限でなくて被積分関数だね
getBのコメントをコピペしたのが丸わかりだorz
0049デフォルトの名無しさん2006/07/11(火) 15:36:01
[課題]
2つのボールが300×400の範囲内を反射するアプレットを作成しなさい。

お願いします
0050デフォルトの名無しさん2006/07/11(火) 15:58:29
>>49
p://www.mm2d.net/applet-howto/howto-06.shtml
p://www.mm2d.net/applet-howto/howto-07.shtml
google(2つのボール アプレット)
脊髄反射でお願いすることばかり覚えずに少しは検索エンジンの使い方も覚えなさいということだ
0051デフォルトの名無しさん2006/07/11(火) 16:01:48
>>41
二週間ほどの余裕はあったんですけどもう何が何やらさっぱり分からなくて…
複数形がsとes、過去形がedのみとして他は無視するとして
この場合だけでもお願いできませんでしょうか
0052デフォルトの名無しさん2006/07/11(火) 16:10:53
【 課題 】ウインドウ上に円を描き、円の外からドラッグをはじめ、
ドラッグ中に円に入ったとき、円を四角形に変えるプログラムを作成しなさい
【 期限 】できれば今日中におねがいします
ドラッグ中に円に入ったとき円を四角形に変える
というところのプログラムのかきかたがよくわかりませんでした。
まるなげですが、よろしくおねがいします。
0053デフォルトの名無しさん2006/07/11(火) 17:33:35
>>51
あんまりきれいじゃないけど、こんなかんじ

public static String toPresentForm(String word) {
String ieAfterConsonant = "(\\w*[^aeiou])ie(d|s)";
String thirdPersonSingular = "(\\w*)(es|s)";
String normalPastForm = "(\\w*)ed";

if (word.matches(ieAfterConsonant)) {
return word.replaceFirst(ieAfterConsonant, "$1y");
} elseif (word.matches(thirdPersonSingular)) {
return word.replaceFirst(thirdPersonSingular, "$1");
} else if (word.matches(normalPastForm)) {
return word.replaceFirst(normalPastForm, "$1");
}
return word;
}
0054デフォルトの名無しさん2006/07/11(火) 17:43:22
>>52
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28057
アプレットなのかアプリケーションなのか分からないので両対応で。
それにawtかswingかも分からないのでawtで。
あまりきれいなコードじゃないね。
ドラッグ中のポインタ座標を監視して円内に入ったらフラグを立てることにして、
描画部分(この場合paintメソッド)で円か四角かをフラグによる場合分けで描画するのが肝?
0055デフォルトの名無しさん2006/07/11(火) 17:45:28
>>53 正規表現がまずかった
String ieAfterConsonant = "^(\\w*[^aeiou])ie(d|s)$";
String thirdPersonSingular = "^(\\w*)(es|s)$";
String normalPastForm = "^(\\w*)ed$";

あと思いつく改良としては正規表現と置換文字列は配列にしとくとか
0056デフォルトの名無しさん2006/07/11(火) 18:03:25
>>54
ありがとうございます。これをもとにもう一回勉強してきます
0057デフォルトの名無しさん2006/07/11(火) 20:29:32
>>53
どうもありがとうございます
0058デフォルトの名無しさん2006/07/11(火) 21:06:34
【 課題 】スモールコンパイラの制作で学ぶプログラムのしくみ
(ttp://www.gihyo.co.jp/books/support.php/4-7741-2177-0)
から source.zip をDLしてEclipse上で動かせ。
【 期限 】1週間
【 補足 】前に質問したのですがどうしても分かりません。
      パッケージcell作ってそれぞれクラス作ってコピペで動くんでしょうか?
      分かる方お願いします手順だけ教えてください
0059デフォルトの名無しさん2006/07/11(火) 21:21:31
>>58
鬱陶しい・・何回目だよその質問
1.source.zipをどっかに展開
2.eclipse3.1起動
3.任意のプロジェクトにcellパッケージを新規作成
4.パッケージエクスプローラーからcellパッケージを選択→右クリック→インポート→ファイルシステムから
1で展開したsourceの中のどっちか目的のフォルダを参照
0060592006/07/11(火) 21:22:22
あ、途中で書き込んだ
まあここまで書いたらわかるだろ
0061デフォルトの名無しさん2006/07/11(火) 21:59:06
>>55
先生! thisとかisとかhasとかが大変なことに

この課題は真面目にやろうとすれば形態素解析とかまでやらざるを得ない
例えば過去分詞に見えて実は形容詞として使われているとかあるし
それが面倒だからといってあまりにも機械的すぎるとthisみたいな
基本的な単語でさえおかしなことになってしまう
よく使われるものほど不規則であることが多いし

多分肝心なのは出題者の意図を汲み取ることだと思う
本当にThorndike Tableを出力するプログラムを作らせたいのか
それともテキストを一定の基本単位に分割して簡単な変形をするフィルタに通し
その出現頻度をカウントしてさらにソートする
という一連の手続きをコーディングできるかどうかをみたいだけなのか
それとも他に注目したいものがあるのか
そのあたり次第でどこまで手を抜くのかが決まってくる
出題意図を推測できないのなら出題者に直接問い質すべきだったと思う
0062デフォルトの名無しさん2006/07/11(火) 22:46:13
>>61
複数形や三人称単数は適当だった。不規則動詞は考慮外。
処理のサンプルってことで勘弁してほしい。

質問者が孤独かつ出題者に質問にいけないシャイボーイならば、
よくわからないまま変に気の利いたプログラムを提出すると後できっとひどい目に遭うので
頑張ったけどまぬけな出力結果がでる程度でお茶を濁すことをおすすめしたい
0063デフォルトの名無しさん2006/07/12(水) 00:12:09
【 課題 】引数として指定した英単語を辞書式にソートする
      プログラムを作成せよ。
【 用語 】特になし
【 期限 】7月12日(水)
【 Ver  】特になし
【 補足 】丸投げです。お願いします。
0064デフォルトの名無しさん2006/07/12(水) 02:05:55
>>63
import java.util.Arrays;
public class WordSorter {
public static void main(String[] args) {
Arrays.sort(args);
for (String arg : args) {
System.out.println(arg);
}
}
}
0065デフォルトの名無しさん2006/07/12(水) 02:33:24
>>63
もし大文字と小文字の区別をつけたくないのなら
import java.util.Arrays;
import java.util.Comparator;
public class IgnoreCaseWordSorter {
public static void main(String[] args) {
Arrays.sort(args, new Comparator<String>() {
public int compare(String s1, String s2) {
return s1.compareToIgnoreCase(s2);
}
});
for (String arg : args) {
System.out.println(arg);
}
}
}
0066デフォルトの名無しさん2006/07/12(水) 09:29:32
>>63
先生に喜ばれそうなのなら
public class Homework {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
int p = i;
for (int j = i; j < args.length; j++) {
if (args[j].compareTo(args[p]) < 0) {
p = j;
}
}
String s = args[i];
args[i] = args[p];
args[p] = s;
}
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
}
}
0067デフォルトの名無しさん2006/07/12(水) 12:41:11
>>60
ありがとうございました。でもできればその後のことも教えてください。
超初心者がこんな所にくるなとお思いでしょうがどうぞよろしくお願いします
0068デフォルトの名無しさん2006/07/12(水) 13:05:04
>>67
つーか、わざわざ>>60が書いてくれた手順をやってみたのか?
見た目とカンで見当つかないか? 少しでも頭使ってみたか?
実行ボタンとかメニューとか見えないか? 盲目か?
0069デフォルトの名無しさん2006/07/12(水) 14:18:57
俺は使ってないからわからないんだが
Eclipseのアクセシビリティのサポート状況って今どうなってるんだ?
視覚障害者はEclipseコミュニティでは無視なのか
007059=602006/07/12(水) 15:25:03
>>67
本当にわからんのかよ('A`)

5.パッケージエクスプローラからcellパッケージを選んで右クリック→実行→構成および実行
6.Javaアプリケーションのツリー表示におそらく最初から選択されてるCellというのがあるのを確認
 無ければJavaアプリケーションをダブルクリックで出てくると思う
7.メインタブでメイン・クラスがcell.Cellとなっているのを確認し、引数タブのプログラム引数に引数を指定する
8.最下部ボタン「実行」をクリック
0071 ◆ccqXAQxUxI 2006/07/12(水) 15:31:09
[課題]
1.任意の関数を台形則を用いて数値計算をするクラスを作成しなさい.ただし,以下の仕様を満足するものとする.
 a.分割数と積分区間は自由に指定可能
 b.クラスは以下で与えられるクラスNumericallntegrationを継承
public abstract class Numericallntegration{
protected integration func;//被積分関数はfunc
protected double minIntegration; //数値積分の下限
protected double maxIntegration; //数値積分の上限
protected int partitons; //分割数
public Numericallntegration(integrand f){
func = f;
minIntegration = 0.0;
maxIntegration = 1.0;
partions = 100;
}
public abstract double integration();
}
public interface integrand{
public double getValue(double x);//関数の値を返す関数
}

2.作成したクラスを使い以下の関数を積分するプログラムを作成しなさい.分割数は100以上とする.
∫Σ(1/n^x)dx  (積分範囲は2〜3、Σはn=1から10000)

3.1で作成したクラスを継承して,数値積分を別スレッドで行うクラスを作成しなさい.ただし以下の仕様を満足するものであるとする.
a.与えた秒数毎に進捗状況(何パーセント計算が終了したか)を経過時間と
 共に表示する.指定しない場合1秒毎の状況を表示.(publicメソッドを使用)
 b.計算の途中でも数値積分の値はpublicメソッドを用いて,安全に別スレッドから取り出すことができる.

[期限]7/21(金) 今週末くらいに解答頂けるとありがたいです。
[補足]問題丸投げです。
>44で頂いた解答を改良すれば何とかなると思いいじってみましたが,今回の2の問題をうまく表現できませんでした。
0072デフォルトの名無しさん2006/07/12(水) 15:40:28
>71
すみません、sage方わからずトリップついてしまいした。。
0073デフォルトの名無しさん2006/07/12(水) 16:39:09
>>71 sageはメール欄
2 はこれで
integrand ex2 = new integrand() {
public double getValue(double x) {
double result = 0.0;
for (int i = 1; i <= 10000; i++) {
result += 1.0 / Math.pow(i, x);
}
return result;
}
};

スレッドは習ってるの?
0074デフォルトの名無しさん2006/07/12(水) 17:35:40
>73
ありがとうございます
マルチスレッドを学習することがメインらしいのですが
あまりスレッドに関して講義で触れられなかったので
独習してるのですが、まだ基礎部分しかつかめてないという感じです。

0075デフォルトの名無しさん2006/07/12(水) 18:06:48
>>74
44 を変更するなら、こんな感じかな。
ループ変数をフィールドに移して、ループ内をsynchronizedにした。

public double integrate() {
div = (b - a) / ndiv;
value = integrand.func(a) + integrand.func(b);

for (progress = 1; progress < ndiv; progress++) {
innerLoop();
}
return getValue();
}

private int progress = 0;
private double value;
private double div;

public double getProgress() {
return (double)progress / ndiv * 100;
}

public double getValue() {
return value * div / 2.0;
}

private synchronized void innerLoop() {
value += 2.0 * integrand.func(a + progress * div);
}
0076デフォルトの名無しさん2006/07/12(水) 18:10:21
で、表示

private static void print(final TrapezoidalRule rule) {
System.out.println("被積分関数 : " + rule.getIntegrand());
System.out.println("分割数 : " + rule.getNdiv());
System.out.println("積分区間 : " + rule.getA() + " 〜 " + rule.getB());
new Thread(new Runnable() {
public void run() {
rule.integrate();
}
}).start();
Thread.yield();
for (;;) {
synchronized(rule) {
double progress = rule.getProgress();
if (progress < 100) {
System.out.printf("積分値(%02.2f%%) : %f\n", progress, rule.getValue());
} else {
break;
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
System.out.println("積分値 : " + rule.getValue());
}
0077デフォルトの名無しさん2006/07/12(水) 18:16:34
実害はほとんど無いと思うけど progress++ は innerLoop 内に移した方がよかったかな
0078デフォルトの名無しさん2006/07/12(水) 21:08:11
>>71
問題を見直したらまるで仕様を満たしてなかったので、ちょっと直してみた。
台形公式固有部分は抜き出せるようにした方が綺麗になると思うけれど
与えられたクラスを使いながらだと冗長になってしまうのでそのまま。
それから 2 で割る場所(getPartValueあたり)を変えたので結果が少し変わってしまった。
もとのほうが誤差は小さいんだっけ?
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28060
0079デフォルトの名無しさん2006/07/12(水) 21:28:58
【 課題 】
//BeansTestServlet.java
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;
import beans.*;
public class BeansTestServlet extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException, IOException{
res.setContentType("text/html;charset=MS932");
req.setCharacterEncoding("MS932");
PrintWriter out = res.getWriter();
TestBeans tb = new TestBeans();
out.println("<html>");
out.println("<body>");
tb.n1 = 10;
tb.n2 = 5;
out.println("</body>");
out.println("</html>");
}
}
0080デフォルトの名無しさん2006/07/12(水) 21:31:47
37,39の方ありがとうございました。
0081792006/07/12(水) 21:33:06
続き

//TestBeans.java
package beans;
public class TestBeans{
public int n1;
public int n2;
public int tasu(){
return n1 + n2;
}
}

丸投げです。
こいつを動かしたいのですが、Beansの設定(TestBeans.classの配置ディレクトリ?)が悪いらしく
「パッケージbeansは存在しません」と出力され、BeansTestServletがコンパイルできません
特殊な設定は無しに動くらしいのですが、
ご存知の方、ご教授願います
0082デフォルトの名無しさん2006/07/12(水) 21:59:11
お前が動かしたいだけであって
課題でもなんでもないような気がするが・・
0083792006/07/12(水) 22:09:52
よく見たらout.println(tb.tasu());が抜けてた

>>82
課題です
というか、次回(明日)Beansの課題を出すので
このソースを実行確認してくるように、との事で黒板を板書したものです

アルゴリズムというより実行環境の問題かも知れないので
ここで聞くのはスレ違いでしたでしょうか?
0084デフォルトの名無しさん2006/07/12(水) 22:18:23
>>83
現在どんなフォルダ構成でどんなファイル配置になってるの?
0085792006/07/12(水) 22:22:02
課題であることを建前に、単に私が私のために動かしたいだけであることは確かでしたね(ノ∀`)
もう少し自分なりに調べて、原因追求してみたいと思います

失礼しましたm(_ _)m
0086デフォルトの名無しさん2006/07/12(水) 22:22:48
折角聞いてんのに・・
0087792006/07/12(水) 22:34:07
>>84
>>86
わざわざありがとうございます

ファイル構成は、
C:\jv99\WEB-INF\classesとなっていて
jv99がコンテンツフォルダ、classesに実行classを格納しています

ちなみに、C:\j2sdk1.4.1_02直下にはbeansフォルダが存在しなかったので
それを作ってコンパイルしたBeansのclassを入れてコンパイルしてもダメでした
C:\j2sdk1.4.1_02\java\beansに入れても同じくダメでした
0088デフォルトの名無しさん2006/07/13(木) 00:59:39
要するにclasspathがよくわかってないのかね
beansディレクトリは、環境変数classpathで指定された場所に配置する
BeansTestServlet.javaがあるディレクトリ内にbeansディレクトリを作成して
そこにTestBeans.javaを置けばコンパイルできるんじゃない?
0089デフォルトの名無しさん2006/07/13(木) 01:14:24
>73,75~78
返答ありがとうございます!
元の方が誤差が多少ありそうな感じがしますね
といっても関数が手計算でもぱっとできるものではないので
確証がもてませんが・・
色々試してみますね
0090デフォルトの名無しさん2006/07/13(木) 13:37:41
初心者です。丸投げですがよろしくお願いします。(期限)本日中にお願いします。(javaバージョン)jdk1.5.0_06(補足なし)
(課題)最初に人数を入力し、入力した人数分だけの名前、それに応じた数学、英語の点数を入力し以下の最終実行例の様に各項目が
表示されるようにプログラムを組みなさい。(ただし、入力した名前とそれに対応した数学英語の点数は例文の14行目以降の結果項目に対応するようにしなさい)
何人分の点数を入力しますか?(3を入力)
1人目のデータ 名前:(Satoを入力)数学:(53を入力)英語:(22を入力)
1人目のデータ 名前:(Tanakaを入力)数学:(22を入力)英語:(89を入力)
1人目のデータ 名前:(Yamadaを入力)数学:(53を入力)英語:(67を入力)
数学の最高点をとった人
Satoさん(数学:53 英語:22)
Yamadaさん(数学:53 英語:67)
英語の最高点をとった人
Tanakaさん(数学:22 英語:89)
数学の点数が平均点(42.666666666666664)以上の人
Satoさん(数学:53 英語:22)
Yamadaさん(数学:53 英語:67)
英語の点数の平均点(59.33333333333336)以上の人
Satoさん(数学:53 英語:22)
Yamadaさん(数学:53 英語:67)
2科目とも平均点以上の人
Yamadaさん(数学:53 英語:67)
1科目でも40点未満の人
Satoさん(数学:53 英語:22)
Tanakaさん(数学:22 英語:89)
0091すみません2006/07/13(木) 13:39:51
補足ですが、(〜を入力)はその単語、数字を入力した場合の結果を表示するということです。
0092すみません2006/07/13(木) 14:30:55
もうひとつ補足です、すみません
>例文の14行目以降の結果項目に対応するようにしなさい) とありますが
元の文は
1人目のデータ 
名前:(Satoを入力)
数学:(53を入力)
英語:(22を入力)
1人目のデータ 
名前:(Tanakaを入力)
数学:(22を入力)
英語:(89を入力)
1人目のデータ 
名前:(Yamadaを入力)
数学:(53を入力)
英語:(67を入力)
という風に1項目づつ入力していく形式です。
投稿の際に、改行が多かったので縮めました。
0093デフォルトの名無しさん2006/07/13(木) 15:38:19
>>90
今やってる。 少し待て。
とりあえず仕様は満たすけど
科目が変動する場合まで考慮したほうがいいのか?
0094すみません2006/07/13(木) 15:48:12
科目が変動する場合は考慮しないでいいです。
ありがとうございます。
0095932006/07/13(木) 16:11:30
>>90
ほい
ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28065
0096すみません2006/07/13(木) 16:23:53
本当にありがとうございます。
大変助かりました。
作っていただいたソースコードも丁寧で、勉強になりました。
0097デフォルトの名無しさん2006/07/13(木) 16:40:44
double hensa = 0.0;
for (int i=0; i<1000; i++) {
hensa += (data[i] - heikin) * (data[i] - heikin);
}
hensa /= 1000.0;

System.out.println("hensa = "+hensa);

このプログラムの意味を誰か教えてくれないでしょうか。
0098932006/07/13(木) 16:40:54
>>96
後半の結果表示部分は、ひたすらfor〜が続いてて意図的にダサく作ってある。
各ループで違うのはif文の判断のみだから、ここらをイカす感じに直せばコードは半分になるし
場合によっちゃ点数が上がるかもしらんぞ。
0099デフォルトの名無しさん2006/07/13(木) 16:45:42
>>97
ここの 標準偏差、分散のとこ読んでみ。
ttp://www.stat.go.jp/howto/lecture4/02.htm

つーかダサいコードだな。 hensaとか言って分散出してるし。
0100デフォルトの名無しさん2006/07/13(木) 19:29:32
【課題】1、N人数分の名前とそれぞれの数学と英語のテストの点数を入力するプログラムを作成せよ。
    例えば3を最初に入力すると三人分の英語と数学の点数を入力して表示させるってやつです

    2、1のプログラムを元に科目ごとの平均点および最高点を求めるプログラムを作成せよ

【期限】7月14日の午前中

どうかよろしくお願いします



0101デフォルトの名無しさん2006/07/13(木) 19:59:21
>>97
分散。
平均値からどのくらいはなれているかを調べるやつ


sumは何の値を格納していますか?

public static void main(String args[]) {
double data[] = new double[1000];

for (int i=0; i<1000; i++) {
data[i] = 5.0 + 15.0 * Math.random();
}

double sum = 0.0;
for (int i=0; i<1000; i++) {
sum += data[i];
}

if (sum > 12500.0) {
System.out.println("sum > 12500");
} else {
System.out.println("sum <= 12500");
}

System.out.println("sum = "+sum);
}
}
お願いします。
■ このスレッドは過去ログ倉庫に格納されています