1 名前:JavaScriptは板違い、Web制作板をご利用ください mailto:sage [2008/09/17(水) 20:50:06 ] 【質問者へ】 回答者の便宜のため、以下の注意事項を遵守してください。 ・質問は【課題提示用テンプレ】を利用してください。 ・問題文は、出題されたまま全文を書いてください。 ・数学問題は「○×法でせよ」だけでなく、その数式、前提条件も説明してください。 ・JavaScriptは板違い、Web制作板をご利用ください。 ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。 ・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。 ・回答されたら動作報告を必ずしてください。 ・課題文が長い時、添付ファイルがある時はこちらのアップローダーを使うと便利です。 ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/main.htm 【課題提示用テンプレ】 【 課題 】与えられた課題文をそのまま書きます。 《必須》 【 形態 】1. Javaアプリケーション(main()で開始)/2. Applet/3. Servlet/ 4. 携帯(開発環境のver.必須)/5. その他(明記のこと) 《必ず選択》 【 GUI 】1. AWTのみ/2. Swing/3. SWT/4. 制限なし/ 5. その他(明記すること) 《GUIの課題の場合必ず選択》 【 期限 】提出期限、解答希望日を書きます。「できるだけ早く」はNG。 《必須》 【 Ver 】コンソールでjava -versionを実行し、その結果を貼ります。 《必須》 【 用語 】数学用語、専門用語の意味、説明を書きます。 《あれば必須》 【 補足 】課題について自分なりに補足する事、何か思う事があれば書きます。 丸投げでない場合は、途中までのソースとその経過報告、 質問点、疑問点を書きます(なるべく丸投げにしてください)。 【回答プログラムの掲載場所】 Java質問スレWiki ttp://www.wikiroom.com/java/ ソースポストネット ttp://sourcepost.sytes.net/ ろだ2 ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/main.htm 【前スレ】 pc11.2ch.net/test/read.cgi/tech/1212085079/
559 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 18:35:18 ] >>558 まず学生番号と氏名を書いてもらおうか
560 名前:名無し [2008/12/06(土) 18:58:38 ] そこはわかるんですけど、他がまったくわかりません。
561 名前:556 mailto:sage [2008/12/06(土) 19:29:31 ] >>557 作成ありがとうございます A(1000)だとすぐ値が出てくるのですが A(10000)だといつまで経っても計算が終わらないです。 どう変更すればよろしいでしょうか・・?
562 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 20:02:49 ] >>561 無限ループおきてるわけでもなさそうだし、そのうち終わるんじゃない?
563 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 20:24:22 ] 10006000500000回ループすれば終わるな
564 名前:556 mailto:sage [2008/12/06(土) 20:26:42 ] >562 そうですか・・ それなりのCPU使ってるとは思ってたんですがやはり時間がかかるのはしょうがないんですね 起動してしばらく放置してみますね
565 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 23:05:17 ] 10006000500000回のループが時間かかるのはしょうがないな
566 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 00:16:10 ] O(n^4)じゃないのってあるのかなぁ 数学 組み合わせ 硬貨 とかでぐぐってるけどいい方法みつからないや
568 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 02:11:01 ] Java SwingでJButton押下時に、Javaのファイルを 読み込んで、そっちのJFrameを表示させたいのですが どうすればいいですか?
570 名前:556 mailto:sage [2008/12/07(日) 03:39:27 ] 皆さんありがとうございます 557のプログラムでA(10000)を5,6時間実行させておいたのですが結局終了しませんでした みなさんのヒントからもうちょっと考えてみますね 追記 実はA(10000)を出せという課題だったのですが最初に書くのを忘れてたなんていまさら言えない・・ そんなにひどい値ならあきらめたほうがいいかもしれませんね
571 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 06:29:55 ] >>571 はA(100000)を求めるためにカウント用の変数をlongにしてるけどintの方がたぶん速い 大きなnにすることがないのなら public static int A(int n) { int count = 0; にした方がいいと思う
573 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 07:24:40 ] 手元に平成3年発行初版の「C言語によるアルゴリズム辞典」ISBN4-87408-414-1 があるんだが、 そのものな「小銭の払い方」が載っている。 だからそんなに珍しいものじゃないと思ったんだが、珍しいものだったのか。
574 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 08:22:27 ] すみません。 期日が明日なのでどなたか>>523 お願いしますorz
575 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 14:45:06 ] >>574 >>543 が書いてるだろ。 package名が気に食わないなら好きに直せばいい。
576 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 15:12:00 ] 日本語クラス名、変数名で不合格だなw
578 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 16:28:14 ] やはり>>536 はソースが大きいので厳しいでしょうか?; お時間に余裕がある方がいらっしゃいましたらお願いします;
579 名前:デフォルトの名無しさん mailto:sage [2008/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 mailto:sage [2008/12/07(日) 17:46:54 ] >>577 どうせ落ちるのは俺じゃないw ヘタな英単語使ってそっちで無知暴露しないですむしなww
581 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 17:52:54 ] >>575 了解しました。 package名がアレなんでデタラメ教えられてるのかと思ってましたorz 後は自分でやってみます。 教えていただき有難うございます。
582 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 17:56:16 ] >>578 忘れてたw rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/499.lzh draw がかなり適当で、ファイル入出力は確認もしてない
583 名前:デフォルトの名無しさん mailto:sage [2008/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へのジャンプの判定をどうかご教授ください。お願いします。 rg550.hp.infoseek.co.jp/cgi-bin/joyful/main.htm
584 名前:556 mailto:sage [2008/12/07(日) 18:51:18 ] >571 すごく・・・早いです・・・ HogeでA(1000)を試したら557さんに作っていただいたものの値と等しかったので合ってると思われます たびたびありがとうございました。感謝。 >579 ありがとうございます 一通り事が終わったら試してみます。 皆さんありがとうございました。
585 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 19:30:08 ] >>582 回答ありがとうございます、動作確認してみたところ少しずれているところはありましたものの 正常に動作することができました! 本当にありがとうございました<(_ _)>
586 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 22:33:50 ] 【課題】 以下の問題はJTextFieldTest7 を元に機能を追加しなさい。コンポーネントのレイアウト等は自由に決めてよい。 rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/504.java [問題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 名前:超初心者 [2008/12/07(日) 22:47:15 ] 【課題】 commonパッケージにjava.util.propertiesを継承して、コンストラクタ内で ディレクトリにあるプロパティファイルをロードするConstantPropertiesクラス を作成しなさい。またロードを行う家庭で例外が出た時の処理も入れておくこと。 『Properties properties = new ConstantProperties();』と 『String value = Properties.getProperties("〜");』を使う というヒントを頂きましたが12月からjavaを始めたばかりで まだ分かりません。 どうかご教授ください。よろしくお願いします。
588 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 02:37:00 ] >>586 ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/505.lzh package消してアーカイブするの面倒だったんでそのままだ
589 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 10:00:02 ] テンプレも埋められないようなヤツはクソ
591 名前:586 mailto:sage [2008/12/08(月) 16:54:09 ] >>588 こんなに早く解答を書いてくれてありがとうございました。
592 名前:デフォルトの名無しさん mailto:sage [2008/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 【補足】下記のプログラムを参考にと補足がありました。よろしくおねがいします rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/507.java
593 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 23:56:10 ] 【 課題 】www.is.titech.ac.jp/~kawachi/class/2008/cs1/ex07/assignment7.html 【 形態 】1. Javaアプリケーション(main()で開始) 【 GUI /4. 制限なし/ 【 期限 】12/12 24:00 【 Ver 】1.6.0_07 【 補足 】丸投げです。どなたかお願いします。
594 名前:デフォルトの名無しさん [2008/12/09(火) 02:45:13 ] すみませんが、>>583 をどなたかお願いできないでしょうか? servletでログイン認証したのち、JSPなどの簡単なアンケートページ に遷移してそこで送信ボタンを押すと、完了ページに遷移して表示する プログラムを作りたいのですが… お時間に余裕がある方、どうかお願い致します。 途中まで作ったファイルは下記にあります。 rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/502.java
595 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 09:51:25 ] >>593 MyRedBlackTree.java を作ればいいようだが、insertRedBlackNodeメソッドの他に どんなメソッドを作ればいいんだ? 第六回として二分探索木クラス MyBinarySearchTree.java を作ったようだが、 それを元に作るのならうpしてくれ。
596 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 09:52:43 ] >583,594 if(id=="111" && pass=="aaa"){ ↓ if("111".equals(id) && "aaa".equals(pass)) { これでいけると思うぜ。
597 名前:デフォルトの名無しさん [2008/12/09(火) 15:37:08 ] 【 課題 】AとBのボタンと適当な長方形の図を用意して、Aのボタンを押すと図が長方形の縦横の長さが2倍、 Bのボタンを押すと0.5倍にアプレットを作成しなさい。 【 形態 】2. Applet 【 GUI 】1. AWTのみ 【 期限 】今日中 【 Ver 】1.6.0_07 【 補足 】丸投げです。すいませんがよろしくお願いします。
598 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 16:59:04 ] あ縦横同じ長さにしてしまった まあ正方形も長方形のうちだけど(int)(60 * r), (int)(60 * r)の60を適当に変えて
600 名前:デフォルトの名無しさん [2008/12/09(火) 19:09:19 ] >>598-599 素早い解答ありがとうございました
601 名前:デフォルトの名無しさん [2008/12/10(水) 01:04:12 ] 【 課題 】JAppletで電卓を作成せよ。 発展 下のテキストフィールドに計算過程の式を表示するようにせよ。 ( )が使われる計算、メモリ機能、平方根に対応させよ。 【 形態 】2. Applet 【 GUI 】2. Swing 【 期限 】12/11 10:00 【 Ver 】1.6.0_07 【 補足 】rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/508.java 電卓自体は完成したのですが、発展の課題がどうしても分かりません。 よろしくお願いします。
602 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 04:47:40 ] >>601 1+2*3=9 で完成といえるのか
603 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 04:53:46 ] 普通の電卓なら1+2*3と入力すれば9になるな
604 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 04:55:45 ] ところが関数電卓だと7になったりもする
605 名前:デフォルトの名無しさん [2008/12/10(水) 05:21:38 ] >>602 そういった計算を成立させる為に、課題の()を使った計算があるのだと思います
606 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 05:48:23 ] >>604 それは関数電卓だからでしょ。
607 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 06:24:38 ] 別に関数電卓だからって訳じゃない 演算子の優先順位と結合性がどう設定されているかは電卓の仕様による >>601 は優先順位が同じで左結合性の電卓を作ったってだけ
608 名前:デフォルトの名無しさん [2008/12/10(水) 09:36:16 ] ■■■■■■■■■ ■■■■■■■■■ ■■■■■■■■■ ■■■■■■■■■ ■■■■■■■■■ ■■■■■■■■■ ■■■■■■■■■ ■■■■■■■■■ ■■■■■■■■■ ■■■■■■■■■