★★ Java の宿題ここで答えます Part 66 ★★at TECH
★★ Java の宿題ここで答えます Part 66 ★★ - 暇つぶし2ch550:デフォルトの名無しさん
08/12/05 18:03:27
大学と講師の名前出てるww
しかも親切にメルアドまで…

551:デフォルトの名無しさん
08/12/05 20:05:50
すいません。
期限が迫っていますので>>523をお願いしますorz

552:デフォルトの名無しさん
08/12/05 21:18:55
>>547
URLリンク(sourcepost.sytes.net)
JDK5以上用に作った。
過ごす時間は最大値、最小値の間で一様分布。
複数の個体が入るのを待っている場合、次に入ることのできる個体に特定の順序はない。
最初に入ろうと試みた時刻の古い順序ではない。
最初全部外にいるので動作させてから10秒以上待たないと動きがない。

553:デフォルトの名無しさん
08/12/06 00:29:28
>>549
URLリンク(rg550.hp.infoseek.co.jp)
プログラムは書いてやった。考察やらは自分で書け。
4年でも22日まであれば余裕だろ。

554:デフォルトの名無しさん
08/12/06 01:15:37
>>547
URLリンク(rg550.hp.infoseek.co.jp)

555:554
08/12/06 01:18:35
あ、書けたw
>>552に先越された形になったが、ろだにアップした後こっちに書こうとしたら制限されてたもんで。
勿体無いから書いとくww

556:デフォルトの名無しさん
08/12/06 02:11:09
【 課題 】1円、5円、10円、20円の硬貨を組み合わせてn円にする組み合わせ方の個数Anを求めるプログラムをかけ
【 形態 】1. Javaアプリケーション(main()で開始)
【 GUI  】.4. 制限なし/
【 期限 】12/7 24:00
【 Ver  】1.6.0_07
【 補足 】丸投げです。ごめんなさい・・どなたかよろしくおねがいします。

557:デフォルトの名無しさん
08/12/06 03:25:58
>>556
public static int A(int n){
int count = 0;
for(int a=0; a<=n/1; a++){
for(int b=0; b<=n/5; b++){
for(int c=0; c<=n/10; c++){
for(int d=0; d<=n/20; d++){
if(a*1+b*5+c*10+d*20 == n) count++;
}
}
}
}
return count;
}

558:名無し
08/12/06 18:28:51
問題 au携帯電話の「ダブル定額ライト」プランの税込料金を計算するプログラムを作成しなさい。
動作は以下のとおり。
(1)自分の学生書番号と氏名の表示
(2)利用パケット数(整数)を入力
(3)利用パケット数が0以上である場合は、税込料金(整数)を表示
(4)利用パケット数が負である場合は、エラーメッセージを表示。
補足 
①定額1わずか1000円/月(税込1050円)、12500パケットまで
②使った分だけ1000円/月(税込1050円)+超過分、12500パケット超~52500パケット未満、0.08円/パッケト(税込0.084円)
③定額2最大4200円/月(税込4410円)で使い放題、52500パケット以上4200円/月(税込4410円)

パケット数が①5000②12500③35000④52500⑤8000⑥-1000のそれぞれの場合について実行させなさい。
難しすぎて困ってます。とける方いましたらお願いします。
【 形態 】1. Javaアプリケーション(main()で開始
【 GUI  】4. 制限なし
【 期限 】12月7日 (日) 23:59
【 Ver  】1.6.0_07
【 補足 】丸投げです。よろしくお願いします。


559:デフォルトの名無しさん
08/12/06 18:35:18
>>558
まず学生番号と氏名を書いてもらおうか

560:名無し
08/12/06 18:58:38
そこはわかるんですけど、他がまったくわかりません。

561:556
08/12/06 19:29:31
>>557
作成ありがとうございます

A(1000)だとすぐ値が出てくるのですが
A(10000)だといつまで経っても計算が終わらないです。
どう変更すればよろしいでしょうか・・?

562:デフォルトの名無しさん
08/12/06 20:02:49
>>561
無限ループおきてるわけでもなさそうだし、そのうち終わるんじゃない?

563:デフォルトの名無しさん
08/12/06 20:24:22
10006000500000回ループすれば終わるな

564:556
08/12/06 20:26:42
>562
そうですか・・
それなりのCPU使ってるとは思ってたんですがやはり時間がかかるのはしょうがないんですね
起動してしばらく放置してみますね

565:デフォルトの名無しさん
08/12/06 23:05:17
10006000500000回のループが時間かかるのはしょうがないな


566:デフォルトの名無しさん
08/12/06 23:39:33
>>564
時間かかるからやめとけw
それよりも計算量を減らしたり無駄にループを回さないように工夫をしたほうがいい
for (int a = 0; a <= n; a += 1) {
for (int b = 0; b <= n; b += 5) {
for (int c = 0; c <= n; c += 10) {
for (int d = 0; d <= n; d +=20) {
if (a + b + c + d == n) count++;
これだけでも違うし最深のループで和がnに等しくなったらそれ以上ループするのは無意味だから
if (a + b + c + d == n) {
count++;
break;
各ループでも同様にそれまでの和(a, a+b, a+b+c)がnを超えるようならそれ以上やらなくてもいいから
for (int a = 0; a <= n; a += 1) {
for (int b = a; b <= n; b += 5) {
for (int c = b; c <= n; c += 10) {
for (int d = c; d <= n; d += 20) {
if (d == n) {
count++;
break;
みたいにできる(この場合のb,c,dはそのレベルのループまでの和であって各硬貨ごとの和を表していない)
この場合の最後のbreakは加算と比較をそれぞれ1回分減らすだけだがループ回数が多いので少し速くなる
たったこれだけの工夫でも少しはマシになる
それといきなり10倍なんて試さずに2倍づつとか1000刻みとかで計算時間の予測をつけておいた方が精神衛生上いいと思うが
それより気になるのは20円硬貨の存在かもしれんw

567:デフォルトの名無しさん
08/12/07 00:16:10
O(n^4)じゃないのってあるのかなぁ
数学 組み合わせ 硬貨 とかでぐぐってるけどいい方法みつからないや

568:デフォルトの名無しさん
08/12/07 00:38:46
// A(1000, 1, 5, 10, 20);
public static int A(int n, int... coin){
if(n < 0) return 0;
if(n == 0) return 1;
if(coin.length == 0) return 0;
int sum = 0;
int[] nextCoin = new int[coin.length-1];
System.arraycopy(coin, 1, nextCoin, 0, nextCoin.length);
for(int i = 0; i <= n/coin[0]; i++){
sum += A(n-coin[0]*i, nextCoin);
}
return sum;
}

再帰を使ったのも作ってみたが、かえって遅くなった・・・
なかなか奥が深い問題だな

569:デフォルトの名無しさん
08/12/07 02:11:01
Java SwingでJButton押下時に、Javaのファイルを
読み込んで、そっちのJFrameを表示させたいのですが
どうすればいいですか?

570:556
08/12/07 03:39:27
皆さんありがとうございます
557のプログラムでA(10000)を5,6時間実行させておいたのですが結局終了しませんでした
みなさんのヒントからもうちょっと考えてみますね

追記

実はA(10000)を出せという課題だったのですが最初に書くのを忘れてたなんていまさら言えない・・
そんなにひどい値ならあきらめたほうがいいかもしれませんね



571:デフォルトの名無しさん
08/12/07 06:11:22
>>566の続き
最深のループは実は回す必要がない
その前のレベルまでの総計とnとの差が最深のループの硬貨の単価で割り切れる場合だけカウントすればいい
for (int a = 0; a <= n; a += 1) {
for (int b = a; b <= n; b += 5) {
for (int c = b; c <= n; c += 10) {
if ((n - c) % 20 == 0) count++;
さらに硬貨の種類に1円が存在する特別な場合はループの順番を入れ替えれば剰余計算が必要なくなる
for (int a = 0; a <= n; a += 20) {
for (int b = a; b <= n; b += 10) {
for (int c = b; c <= n; c += 5) count++;
そしてこの3段目のループは単にb,b+5,b+10,...<=nの個数をcountに加えているだけなのでこれも回す必要はない
よって
public class Hoge {
public static void main(String[] args) {
System.out.println(A(10000));
}
public static long A(int n) {
long count = 0;
for (int a = 0; a <= n; a += 20) {
for (int b = a; b <= n; b += 10) {
count += (n - b) / 5 + 1;
}
}
return count;
}
}
この調子でループを内側からどんどん潰して最終的にカウントなしにできると思うけれど
導出が面倒だし見た目も悪いものになるんじゃないかと思うのでこの程度で打ち切り
このくらいでもマシン次第ではあるがA(10000)程度なら時間はほとんどかからないと思う
うちのPCで計るとA(100000)でも1秒かからなかった
正答を知らないから正しくカウントしているかどうかは分からない

572:デフォルトの名無しさん
08/12/07 06:29:55
>>571はA(100000)を求めるためにカウント用の変数をlongにしてるけどintの方がたぶん速い
大きなnにすることがないのなら
public static int A(int n) {
int count = 0;
にした方がいいと思う

573:デフォルトの名無しさん
08/12/07 07:24:40
手元に平成3年発行初版の「C言語によるアルゴリズム辞典」ISBN4-87408-414-1 があるんだが、
そのものな「小銭の払い方」が載っている。
だからそんなに珍しいものじゃないと思ったんだが、珍しいものだったのか。

574:デフォルトの名無しさん
08/12/07 08:22:27
すみません。
期日が明日なのでどなたか>>523お願いしますorz

575:デフォルトの名無しさん
08/12/07 14:45:06
>>574
>>543 が書いてるだろ。
package名が気に食わないなら好きに直せばいい。

576:デフォルトの名無しさん
08/12/07 15:08:09
>>558
import java.util.*;
public class ダブル定額 {
public static void main(String[] args) {
System.out.println("学生書番号と氏名");
Scanner scanner = new Scanner(System.in);
System.out.print("パケット数?: ");
int パケット数 = scanner.nextInt();
System.out.println("料金は "+料金(パケット数)+" 円です");
}
static double 料金(int パケット数) {
if(パケット数 < 0) throw new IllegalArgumentException("パケット数に負値は指定できません: "+パケット数);
if(パケット数 <= 12500) return 1050;
if(パケット数 >= 52500) return 4410;
return 1050 + (パケット数 - 12500) * 0.084;
}
}
エラー表示は例外なw

577:デフォルトの名無しさん
08/12/07 15:12:00
日本語クラス名、変数名で不合格だなw

578:デフォルトの名無しさん
08/12/07 16:28:14
やはり>>536はソースが大きいので厳しいでしょうか?;
お時間に余裕がある方がいらっしゃいましたらお願いします;

579:デフォルトの名無しさん
08/12/07 16:40:01
>>556
static long countCoin(long n){
  long result = (n/10) * ((n/5) - (n/10)) + (n/5) + 1;
  result += (n/20) * ((n/10) * (n/5) - (n/10) * (n/10) - 1);
  result -= (n/20) * (n/20) * (n/5);
  result += (n/20) * (2 * (n/20) * (n/20) + 1) * 2 / 3;
  return result;
}

苦情は受け付ける

580:576
08/12/07 17:46:54
>>577
どうせ落ちるのは俺じゃないw
ヘタな英単語使ってそっちで無知暴露しないですむしなww

581:デフォルトの名無しさん
08/12/07 17:52:54
>>575
了解しました。
package名がアレなんでデタラメ教えられてるのかと思ってましたorz
後は自分でやってみます。
教えていただき有難うございます。

582:デフォルトの名無しさん
08/12/07 17:56:16
>>578
忘れてたw
URLリンク(rg550.hp.infoseek.co.jp)
draw がかなり適当で、ファイル入出力は確認もしてない

583:デフォルトの名無しさん
08/12/07 18:13:39
【課題】
ログイン画面でidとパスワードを入力し、その照合に一致すれば、アンケート欄
へ遷移するプログラムをservletとjspで作成しなさい。
【 形態 】3. Servlet
【 GUI  】4. 制限なし
【 期限 】12月9日
【 Ver  】1.6.0_07
【 補足 】idとパスワードの合致の判定をどうすればジャンプできるのかが
      うまくできなくて困っています。ろだ2の502.javaにアップして途中まで作ってあります。
      Jump.jspへのジャンプの判定をどうかご教授ください。お願いします。
      
      URLリンク(rg550.hp.infoseek.co.jp)

584:556
08/12/07 18:51:18
>571
すごく・・・早いです・・・
HogeでA(1000)を試したら557さんに作っていただいたものの値と等しかったので合ってると思われます
たびたびありがとうございました。感謝。

>579
ありがとうございます
一通り事が終わったら試してみます。


皆さんありがとうございました。

585:デフォルトの名無しさん
08/12/07 19:30:08
>>582
回答ありがとうございます、動作確認してみたところ少しずれているところはありましたものの
正常に動作することができました!

本当にありがとうございました<(_ _)>

586:デフォルトの名無しさん
08/12/07 22:33:50
【課題】
以下の問題はJTextFieldTest7 を元に機能を追加しなさい。コンポーネントのレイアウト等は自由に決めてよい。
URLリンク(rg550.hp.infoseek.co.jp)
[問題1]
テキストフィールドに文字を入力し、追加ボタンを押すとその内容が
リスト項目に追加されるプログラム (JListTest10A.java)を作成しなさい。
テキストフィールドでエンターキーを押した場合も追加ボタンを押した場合と同じ動作をする。
追加した項目が選択状態にならなくてもよいものとする。

[問題2]
リストの項目を選択すると、その項目名がテキストフィールドに表示されるプログラム (JListTest10B.java) を作成しなさい。

[問題3]
リストの項目を選択すると、その項目名がテキストフィールドに表示されるプログラム (JListTest10C.java) を作成しなさい。
テキストフィールドの項目名を修正して、変更ボタンを押すとリスト中の項目名が変更されるようにすること。

[問題4]
リストの項目を選択して、削除ボタンを押すとリストからその項目が削除されるプログラム (JListTest10D.java) を作成しなさい。
実際に削除を行う前にダイアログでユーザに確認をとること。

【形態】1. Javaアプリケーション(main()で開始)
【期限】12月9日 16;00
【Ver】1.5.0.11
【補足】ほぼ丸投げの状態です。よろしくお願いします

587:超初心者
08/12/07 22:47:15
【課題】
commonパッケージにjava.util.propertiesを継承して、コンストラクタ内で
ディレクトリにあるプロパティファイルをロードするConstantPropertiesクラス
を作成しなさい。またロードを行う家庭で例外が出た時の処理も入れておくこと。

『Properties properties = new ConstantProperties();』と
『String value = Properties.getProperties("~");』を使う
というヒントを頂きましたが12月からjavaを始めたばかりで
まだ分かりません。
どうかご教授ください。よろしくお願いします。

588:デフォルトの名無しさん
08/12/08 02:37:00
>>586
URLリンク(rg550.hp.infoseek.co.jp)
package消してアーカイブするの面倒だったんでそのままだ

589:デフォルトの名無しさん
08/12/08 03:36:50
>>587
>>1 誘導でお終いかと思ったら、質問スレから誘導とはな。
質問スレでは例外のことなんか書いて無かっただろ。
package common;
import java.io.*;
import java.util.*;
public class ConstantProperties extends Properties {
public ConstantProperties() throws FileNotFoundException, IOException {
InputStream is = new FileInputStream("ファイル名");
try { load(is); } finally { is.close(); }}}

590:デフォルトの名無しさん
08/12/08 10:00:02
テンプレも埋められないようなヤツはクソ

591:586
08/12/08 16:54:09
>>588
こんなに早く解答を書いてくれてありがとうございました。

592:デフォルトの名無しさん
08/12/08 22:15:31
【課題】Web 上から情報を探してくるプログラムを作成しなさい。リンクをたどることにより、
複数のページから情報を探すこと。プログラム名は WebSearcher とする。
ユーザは起点となるページの URL を複数指定できるものとする。探す情報として、以下の 2つを考える。

・内容検索: ページ内容から探す
・リンク検索: ページ内のリンクから探す
リンク先をたどる部分をマルチスレッドにより実現すること。スレッド数には上限を設けること。
また、同一サーバに接続する際には1秒以上間隔を開けることが望ましい。
リンクをたどるにあたっては、同じページを取得して無限ループに陥らないよう対策をとること。
また、たどる処理の終了条件については適切に設定すること (階層に制限、見つかるまで無制限、など)。
結果はファイルに出力できるようにすること(リダイレクトで書き込むのでもかまわない)。

ポイント
取得対象のURLの管理がポイントとなる。生産者-消費者モデルを参考にすること。なお、Queue の長さは固定とは限らない。
探して見つかった情報をどう保持するかもポイントの 1つである。適切なデータ構造を考えること。
-内容検索-
ユーザが検索語を正規表現で入力し、それにマッチする表現を探して、そのマッチした表現と、
その周囲の表現を表示すること。その際、マッチした部分が分かるようにすること。
ページ内でマッチした回数などで、マッチしたページのランキングを行い、その順に結果を表示すること。
-リンク検索-
ユーザがURLを正規表現で入力し、それにマッチするリンクを探すこと。これができれば、
例えば特定の拡張子のファイルへのリンクを収集したり、特定のサイトにリンクを張っているページを探したりすることができる。
マッチしたURLを含むページのタイトルとURL、マッチしたURLによるリンクのリンク元文字列などを表示すること。表示する順序についても検討すること。
【形態】1. Javaアプリケーション(main()で開始)
【期限】12月13日 
【Ver】1.5.0.16
【補足】下記のプログラムを参考にと補足がありました。よろしくおねがいします
URLリンク(rg550.hp.infoseek.co.jp)

593:デフォルトの名無しさん
08/12/08 23:56:10
【 課題 】URLリンク(www.is.titech.ac.jp)
【 形態 】1. Javaアプリケーション(main()で開始)
【 GUI  /4. 制限なし/
【 期限 】12/12 24:00
【 Ver  】1.6.0_07
【 補足 】丸投げです。どなたかお願いします。


594:デフォルトの名無しさん
08/12/09 02:45:13
すみませんが、>>583をどなたかお願いできないでしょうか?
servletでログイン認証したのち、JSPなどの簡単なアンケートページ
に遷移してそこで送信ボタンを押すと、完了ページに遷移して表示する
プログラムを作りたいのですが…
お時間に余裕がある方、どうかお願い致します。

途中まで作ったファイルは下記にあります。
URLリンク(rg550.hp.infoseek.co.jp)

595:デフォルトの名無しさん
08/12/09 09:51:25
>>593
MyRedBlackTree.java を作ればいいようだが、insertRedBlackNodeメソッドの他に
どんなメソッドを作ればいいんだ?
第六回として二分探索木クラス MyBinarySearchTree.java を作ったようだが、
それを元に作るのならうpしてくれ。

596:デフォルトの名無しさん
08/12/09 09:52:43
>583,594
if(id=="111" && pass=="aaa"){

if("111".equals(id) && "aaa".equals(pass)) {
これでいけると思うぜ。

597:デフォルトの名無しさん
08/12/09 15:37:08
【 課題 】AとBのボタンと適当な長方形の図を用意して、Aのボタンを押すと図が長方形の縦横の長さが2倍、
       Bのボタンを押すと0.5倍にアプレットを作成しなさい。
【 形態 】2. Applet
【 GUI  】1. AWTのみ
【 期限 】今日中
【 Ver  】1.6.0_07
【 補足 】丸投げです。すいませんがよろしくお願いします。

598:デフォルトの名無しさん
08/12/09 16:55:32
>>597
レイアウトやサイズは適当に
//<APPLET CODE="Hage.class" WIDTH="300" HEIGHT="200"></APPLET>
import java.awt.*;
import java.awt.event.*;
public class Hage extends java.applet.Applet {
private double r = 1;
public void init() {
final Canvas canvas = new Canvas() {
public void paint(Graphics g) {
g.drawRect(10, 10, (int)(60 * r), (int)(60 * r));
}
};
canvas.setPreferredSize(new Dimension(150, 150));
Button buttonA = new Button("A");
buttonA.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { r *= 2; canvas.repaint(); }
});
Button buttonB = new Button("B");
buttonB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { r *= 0.5; canvas.repaint(); }
});
add(buttonA);
add(buttonB);
add(canvas);
}
}

599:デフォルトの名無しさん
08/12/09 16:59:04
あ縦横同じ長さにしてしまった
まあ正方形も長方形のうちだけど(int)(60 * r), (int)(60 * r)の60を適当に変えて

600:デフォルトの名無しさん
08/12/09 19:09:19
>>598-599
素早い解答ありがとうございました

601:デフォルトの名無しさん
08/12/10 01:04:12
【 課題 】JAppletで電卓を作成せよ。
      発展 下のテキストフィールドに計算過程の式を表示するようにせよ。
          ( )が使われる計算、メモリ機能、平方根に対応させよ。
【 形態 】2. Applet
【 GUI  】2. Swing
【 期限 】12/11 10:00
【 Ver  】1.6.0_07
【 補足 】URLリンク(rg550.hp.infoseek.co.jp)
電卓自体は完成したのですが、発展の課題がどうしても分かりません。
      よろしくお願いします。

602:デフォルトの名無しさん
08/12/10 04:47:40
>>601
1+2*3=9 で完成といえるのか

603:デフォルトの名無しさん
08/12/10 04:53:46
普通の電卓なら1+2*3と入力すれば9になるな

604:デフォルトの名無しさん
08/12/10 04:55:45
ところが関数電卓だと7になったりもする

605:デフォルトの名無しさん
08/12/10 05:21:38
>>602
そういった計算を成立させる為に、課題の()を使った計算があるのだと思います

606:デフォルトの名無しさん
08/12/10 05:48:23
>>604
それは関数電卓だからでしょ。

607:デフォルトの名無しさん
08/12/10 06:24:38
別に関数電卓だからって訳じゃない
演算子の優先順位と結合性がどう設定されているかは電卓の仕様による
>>601は優先順位が同じで左結合性の電卓を作ったってだけ

608:デフォルトの名無しさん
08/12/10 09:36:16
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■
■■■■■■■■■


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