★★ Java の宿題ここで答えます part51 ★★
1 :
Java :
2005/03/30(水) 12:49:00 【Java宿題スレッド基本ルール 五箇条の御誓文】
1. 投稿の前に自助努力しましょう。少なくとも回答をコンパイル・実行
できる程度にはJava に習熟しておきましょう。
2. また、キーワード検索を行なうなどして、少なくとも問題文の意味を
理解したうえで投稿しましょう。それが無理なら、問題文は自己省略せずに、
直接全部貼り付けてください。最悪の場合、宿題&課題をそのまま丸投げ
するのが一番好ましい提示法です。
3. 数学問題は「○×法でせよ」だけでなく、その解を出す為の数式や
前提条件などを具体的かつ詳細に説明してください。
4. もし自分の提示課題への回答プログラムが返って来たら、
動いた動かなかった位の報告をお願いします。
5. 宿題&課題とその回答プログラムに対する質問はOK ですが、
一般的な質問は質問スレで行なってください。また、多言語の課題は
原則としてスルーされますので、ご了承願います。
【回答プログラムの掲載場所】
Java質問スレWiki
http://www.wikiroom.com/java/ ソースポストネット
http://sourcepost.sytes.net/ 【前スレ】
【初心者】Java の宿題ここで答えます 5.0【歓迎】
http://pc8.2ch.net/test/read.cgi/tech/1107350368/l50
ファイルを読み込んで、キーボード入力から得た文字列を検索し、 見つかった行番号と、その一行を表示するというプログラムを完成させよ。 1.「ファイルの絶対パスを入力して下さい」というメッセージを表示する。 2.絶対パスは、存在していることを前提とすること。 3.「検索する文字列を入力してください」というメッセージを表示する。 4.絶対パスからファイルの内容を読み込む。 5.3で得られた文字列が一致する行を行番号と連結させVectorに格納。 6.そのVectorを画面に出力する。 メインクラスをMainOPfile,ファイル操作クラスをOperateIOクラスとすること。 ファイル内検索メソッド 引数:ファイルの絶対パス(String)、検索する文字列(String) 戻り値:Vector よろしくお願いします。
>>1 乙
>>3 MainOPfile クラス
import java.io.*;
import java.util.*;
public class MainOPfile {
private static final String strAsk1 = "ファイルの絶対パスを入力して下さい。";
private static final String strAsk2 = "検索する文字列を入力してください。";
public static void main(String[] args) {
try {
OperateIO oprIO = new OperateIO();
String strLine, path, seek;
Vector vector;
System.out.println(strAsk1);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
path = br.readLine();
System.out.println(strAsk2);
seek = br.readLine();
vector = oprIO.seekLine(path, seek);
for (int i = 0; i < vector.size(); i++) {
System.out.println(vector.get(i));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
OperateIO クラス class OperateIO { public Vector seekLine(String path, String seek) { Vector vector = new Vector(); int intLine = 1; int point; String strLine; FileReader fr; try { fr = new FileReader(path); BufferedReader br = new BufferedReader(fr); for ( ;(strLine = br.readLine()) != null; intLine++) { point = strLine.indexOf(seek); if(point >= 0) vector.add(new String(intLine + ": " + strLine)); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return vector; } }
>>3 引数として 正規表現1 正規表現2 を与えておいて、
「実行したディレクトリの以下にあるすべてのファイルのうち、
ファイル名が1にマッチしたもののすべての中から、
2にマッチした行をファイル名とともに(標準出力に)出力する
(たとえば"java ff .*\.java .*System\..*"とかすると、
「*.java」の形のファイルから「System.」という文字列を含む行を
全部抽出する)」とかいったツールがあるのだが、なんなら晒そうか?
>>4-5 無事動きました。ありがとうございました。
>>6 現在は必要なさそうです。
また機会がありましたらよろしくお願いします。
8 :
M.B. :2005/03/31(木) 21:15:03
保守あげ。
9 :
デフォルトの名無しさん :2005/03/31(木) 21:49:27
902 :901続き :2005/03/24(木) 10:45:30 上に追加した要素のほかに、 ArrayList, LinkedList, Vector, Stack, または Queue を使って新要素を追加しなさい。 例えば、Queueを使ってパックマンの敵のようにステージのどこかで待機していて ある一定時間たつと一匹ずつステージに出てきてパックマンを追い回すやつを作るとか。 上の例は本当にその通りじゃなくてもいいらしいです。 他の面白そうなものを自分で考えてもいいそうです。 903 :902続き :2005/03/24(木) 10:46:20 前回例で出た、パックマンの敵(Robot eater)を今回は必ず追加しなさい。 ハッシュテーブルを追加し、ロボット、robot eater、その他の動きのある ものをハッシュテーブルにストアしなさい。 ハッシュテーブルにストアする物のタイプはIDを必要とします。 ハッシュテーブルに追加する際、物とIDが必要となります。 ハッシュテーブルから削除する際、IDを必要とします。 ハッシュテーブルから物を探すとき、IDを使って探します。 ハッシュテーブルは75%以上に物を含んではいけません。 もし、いっぱいになった場合、ハッシュテーブルは拡張されます。 以下は先生がくれた案です。 上の要求を満たして下の例と同じものを作れとのことです。 各robot eaterと彼の現在の位置を格納するrobot eaterに関するハッシュ表を使用することです。 ユーザが「キー」を拾ったら、robot eaterを攻撃して消すすことができます。 robot eaterはステージ上を移動できます。 様々なポイントでゲームでrobot eaterを加えることができます。 以上です。長くなって申し訳ないのですが、お願いいたします。 皆様、いつもありがとうございます。
10 :
デフォルトの名無しさん :2005/04/01(金) 00:14:35
指定したファイルの行数、文字数をカウントするプログラムを作成せよ。 第一引数にファイルを指定する。 です。よろしくお願いします。
改行文字を、文字数としてカウントしないなら。 import java.io.*; public class Count { static class Result {int lineCount; int charCount; } public static void main(String[] args) { if (args.length < 1) throw new IllegalArgumentException("ファイル名が指定されていません"); File file = new File(args[0]); if (!file.exists() || file.isDirectory()) throw new IllegalArgumentException("指定されたファイルは存在しないか、ディレクトリです。 ファイル名:" + file.getAbsolutePath()); Result result = null; try { result = count(file); } catch (IOException e) { throw new RuntimeException("ファイルの読み取り中に例外が発生しました。発生した例外:", e); } System.out.println(result.lineCount + "行 " +result.charCount + "文字"); } static Result count(File file) throws IOException { BufferedReader br = new BufferedReader(new FileReader(file)); int lineCount = 0; int charCount = 0; String str; while ((str = br.readLine()) != null) { lineCount++; charCount += str.length(); } Result result = new Result(); result.lineCount = lineCount; result.charCount = charCount; return result; } }
12 :
デフォルトの名無しさん :皇紀2665/04/01(金) 11:10:41
>>12 英語苦手なんでチト時間掛かる
とりあえずStep1ができたところだ
>>12 Step2終了
で、Step3なんだけど、generateStringってメソッドを
「書き直せ(rewrite)」って書いてあるんだけど
どっかに元ソースがあんのか?
つかそうじゃないと出来ない気が....って漏れの英語力がないだけ???
15 :
デフォルトの名無しさん :皇紀2665/04/01(金) 15:09:07
すいませんっ。 generateStringメソッドをStep3に追加しました。 本当に助かります。ありがとうございます。
>>15 おk
もうちっと待ってね
ちなみに聞いておくけど、期限は?
17 :
デフォルトの名無しさん :皇紀2665/04/01(金) 15:41:17
期限は来週の月曜までなんですが、 恥ずかしながらVectorやHashMapをちゃんと理解してないので、 この宿題を参考にしてちゃんと理解したいと思います。 自分の為に時間を割いていただいて本当に感謝です。
>>17 出来たよん、次レス以降に分割で貼り付けます
この問題、コレクション関連を勉強するにはなかないい問題だから
頑張って勉強してねん
でも、漏れのへぼコードが役に立つだろうか...
一応動いたので勘弁してください
19 :
その1 :皇紀2665/04/01(金) 16:05:06
>>12 import java.util.*;
import java.io.*;
class Generate {
private static Map rules;
// main (same as question)
public static void main(String[] args){
try {
String fileName = "grammar.txt";
if (args.length > 0) fileName = args[0];
FileReader filr = new FileReader(fileName);
BufferedReader bread = new BufferedReader(filr);
Generate world = new Generate(bread);
} catch (Exception e) { System.err.println("caught exception " + e); }
}
// Step1
public static LinkedList split(String line){
StringTokenizer st = new StringTokenizer(line, " ");
LinkedList list = new LinkedList();
while(st.hasMoreTokens()){
list.add(st.nextToken());
}
return list;
}
20 :
その2 :皇紀2665/04/01(金) 16:05:45
>>12 // Step2
public Map readGrammar (BufferedReader f){
HashMap grammarMap = new HashMap();
try {
String line;
while((line = f.readLine()) != null){
LinkedList words = split(line);
if(words.isEmpty()) continue;
String category = (String)words.removeFirst();
if(grammarMap.containsKey((Object)category)){ // category exist
Vector element = (Vector) grammarMap.get((Object)category);
element.add(words);
}
else{ // category not exist
Vector element = new Vector();
element.add(words);
grammarMap.put((Object)category, (Object)element);
}
}
}catch(Exception e){
System.err.println("caught exception " + e);
}
return grammarMap;
}
21 :
その3 :皇紀2665/04/01(金) 16:06:49
>>12 // Step3
public static String generateString (String start) {
if (rules.containsKey(start)) {
Vector v = (Vector) rules.get(start);
int i = (int) (v.size() * Math.random());
// LinkedList rule = (LinkedList) v.elementAt(i);
LinkedList rule = (LinkedList) v.get(i);
String result = "";
// Enumeration e = rule.elements();
// while (e.hasMoreElements())
// result = result + generateString(
// (String) e.nextElement());
// return result;
Iterator ite = rule.iterator();
while(ite.hasNext()){
result = result + generateString((String) ite.next());
}
return result;
}
return start + " "; // add padding at end
}
>>12 // Step4
public Generate(BufferedReader bread){
rules = readGrammar(bread);
for(int i = 0 ; i < 10 ; i++){
System.out.println(generateString("SENTENCE"));
}
}
}
23 :
デフォルトの名無しさん :皇紀2665/04/01(金) 16:30:50
コードありがとうございます!動作も確認できました。
これを参考にさせていただいて、もっと勉強していこうと思います。
>>13 さん、本当にありがとうございました。
24 :
13 :皇紀2665/04/01(金) 17:22:58
_∧∧__ / ̄ ̄ ̄ ̄ |( ゚д゚)| < 今日は英語を読んで疲れたからもう寝る! |\⌒~\ \____ \ |⌒⌒|
乙
26 :
M.B. :int 2ch =05/04/01(金) 20:12:38
>>18 > でも、漏れのへぼコードが役に立つだろうか……
> 一応動いたので勘弁してください
ちょっとヘボいほうが、思考過程が如実に現れているので
勉強になる。
プロだとパクってそれっきり、とかいうケースが多いので、
そのままパクれないほどめっきりヘボいか、ライブラリとして
そのまんま利用可能なほどクリアーなほうが望ましいかも
しれないが。
27 :
イリュミナートX軍帥・伯魔壬旭 :int 2ch =05/04/01(金) 22:19:15
前スレ
>>903 現スレ
>>9 今忙しくて・・・。
2~3日の間に回答を載せるかもしれないので(未確定)
いましばらくお待ちください。
ちなみに団体名とその尊称が変わりました。
>>27 エイプリルフールだけあって神が戻ってきた!
もうミスしてばっかり。
前スレ
>>982 -
埋め立て乙。読み流してたら、多重ループを抜け出せなかった頃の思い出がよみがえってきた。
ほろ苦い記憶を抱えて寝ます。佳い夢を。
32 :
デフォルトの名無しさん :int 2ch =05/04/02(土) 03:17:44
このスレまだロボット馬鹿が粘着してるの?
前スレ
141 :
>>137 その1:05/02/12 01:24:20
のマインスイーパ、バグがあったよ。
static ChoiceFormat cfOpen = new ChoiceFormat(
"0# |1#1|2#2|3#3|4#4|5#5|6#6|7#7|8#8|9#9|10#爆"
);
「5#6」になってた。5つで囲まれてるのに表示が6だった。
もしかしてここの人たちをためす意味でわざとバグって
たりして・・・
35 :
デフォルトの名無しさん :2005/04/03(日) 21:57:49
香具師の前スレからの叩かれっぷりにワラタ
36 :
デフォルトの名無しさん :2005/04/05(火) 00:25:04
11さん>ありがとうございます。 追加で文字列の長さ+ファイルの行数+絶対パスを表示するプログラムを教えてください。
37 :
11 :2005/04/05(火) 00:42:26
>>36 人のソースは見たくないし、自分のソースでも数日以上経っている
ものは見たくもない。
だから、追加とかじゃなくて、いちから要求を書いてほすぃ。
私以外の人ならなおさら、
>>11 のソースを読んで、それに何かを
追加するなんてことは、やりたくないだろうと思う。
39 :
36です :2005/04/05(火) 01:08:24
37さん色々聞きたいのでメールいただけませんか?
40 :
M.B. :2005/04/05(火) 09:14:12
>>36 ファイルの行数
result.lineCount
絶対パス
file.getCanonicalPath()
41 :
No.1 :2005/04/06(水) 23:16:56
ゲームプログラミング Battleship 一般的なゲームとして知られているBattleshipを作成しなさい. ゲームはネットワーク対戦型で,プレイヤーはホストとホストに接続する対戦相手である. フィールドは基本設計が10*10マス,その中に配置される船のスペースは Battleship 4マス Destroyer 3マス Submarine 2マス と定義する.もし可能であれば10*10マス以外のグリッドの数を任意で決められるように しなさい.その時の選択肢は10*10, 15*15, 20*20, 任意の数字をキーボードから入力( このとき縦と横のグリッド数は同じでなければならない)を用意しなさい. 船の配置はコンピュータが適当な位置を割り振るRandomと各プレイヤーが配置を決める Selfの2種類用意しなさい.また各船の配置数(例えばBattleship:2, Destroyer:3, Submarine:2など)を決められるようにしなさい.各船ともに必ず1隻は配置すること. 船の配置は水平方向,垂直方向のみで対角線方向には配置しないこと.
42 :
No.2 :2005/04/06(水) 23:18:52
このプログラムはGUIであることが前提である.しかしGUIビルダーなどを用いず, 自分自身でコードを考えて書くこと.GUIアプリケーションを作成する上で一つ問 題となることがある.それは自分のコンピューターで正しく動作していても違う コンピュータ,ディスプレーで正しく表示又はアプリケーションが実行できないこ とである.絶対的な値をすでにプログラムに記述している場合はこのような現象が 起きる.このような問題が起きないようにしなさい. コミュニケーションプロトコルについて. 次のコミュニケーションプロトコルを実装しなさい. 1.ゲーム開始時にhostは<START>を送ること 2.ホストが終了した場合には<END>を送ること 3.もし何か特別なメッセージを送る場合には<SUPPORTS>とそれに続けて送りたい文 字列を続けること.これに対しての返答は<YES>または<NO>で答えること.特別なメッ セージとは,例えばゲーム終了後にplay again?というメッセージを送り返答が<YES> であれば再戦するなど.その他の例は各自で考えよ. 4.先行,後攻はランダムに決めること.そのときクライアントに<FIRSTGO>を送りど ちらが先行であるか表示する. 5.船の配置をselfで行った場合に,船の配置が終了したら<READY>を送ること.双方 が<READY>を送りゲーム開始とする. 6.対戦相手とチャットができるように<TALK>を実装すること. 7.プレイヤーがマスを選んだ時に<FIRE>を送ること. 8.その時のレスポンス<MISS>,<HIT>,<SUNK>,<ILOSE>のいずれかを送ること. 9.<ILOSE>が送られるとゲーム終了である.ゲーム終了まで7-9を繰り返す.
43 :
No.3 :2005/04/06(水) 23:20:32
メッセージのタイプを定義すると <START> ::= 'START' <SUPPORTS> ::= 'SUPPORTS' string <YES> ::= 'YES' <NO> ::= 'NO' <END> ::= 'END' <FIRSTGO> ::= 'FIRSTGO' ('YOU' | 'ME') <READY> ::= 'READY' <TALK> ::= 'TALK' string <FIRE> ::= 'FIRE' integer integer <MISS> ::= 'MISS' <HIT> ::= 'HIT' <SHIP> <SUNK> ::= 'SUNK' <SHIP> <ILOSE> ::= 'ILOSE' <SHIP> ::= 'BATTLESHIP' | 'DESTROYER' | 'SUBMARINE' その他の拡張について 上記の基本設計ができていればどのように拡張しても構わない.例えば船や海を表 すグラフィックを表示させたり,FIREやSUNKの時に効果音を入れるなど.リアルタ イムチャット機能などを盛り込んでもおもしろいであろう.またBattleshipが実行 できるサイトを参考にして違うルールを取り入れても良い.その時は通常のルール で行うNormalと特殊ルールで行うAdvanceを選択できるようにすると良い.もし時間 があり可能であれば,コンピュータとの対戦ができるようにしなさい.簡易AIを搭 載できればさらにボーナス点を与える.独創性のある拡張にはさらにボーナス点を 与える.GUIデザインも重要である.ユーザーフレンドリーなインターフェースを設 計しなさい.疑問点は各自で調べ問題文の意図がつかめなければ自分なりに解釈を せよ.レポートに解説があれば多少問題の主旨から離れていても問題ない.
44 :
No.4 :2005/04/06(水) 23:22:08
「一般的なゲームとして知られているBattleship」 そもそもどういうゲームよ?
46 :
M.B. :2005/04/07(木) 09:16:56
47 :
デフォルトの名無しさん :2005/04/08(金) 19:54:18
また4月か。
48 :
まゆみ☆ :2005/04/08(金) 22:04:55
たすけてください!! 言語 ASP & javascript + vbs CREATEOBJECTにてExcel起動を行っているのですが, Windows 2000 server IIS5だと問題なく動作するのですが、 Windows 2003 server IIS6だとそのページさえいきません。。。 現象としてはグループで分類し240件を超えてしまうと まったく動作しなくなってしまいます。 それ以下だとプリントできます。 どなたかお知恵をお貸しください どうぞよろしくお願いいたします。 以下にリンクスクリプトを記載いたします。 長文失礼いたします。 //リンクを行う parent.menu2.location.href = "TanPrint.asp";
スレ違い。
51 :
デフォルトの名無しさん :2005/04/10(日) 06:24:07
53 :
デフォルトの名無しさん :2005/04/10(日) 19:08:58
ageてみよう・・・。
ぶらくら?
55 :
デフォルトの名無しさん :2005/04/11(月) 17:00:35
>>55 英語が不得意なので出題者に質問したいのだが、
なぜ問題文の文章が過去形なのだ?
問題文というのはそういうふうに書くものなのか?
Implemented a silly sentence generator.
You should build the program on ~
とかなら分かるのだが。
57 :
55 :2005/04/12(火) 13:45:17
>>56 文頭が欠けてました…すいません。
"In programming assignement1,
you implemented a silly sentence generator."
が正しい文章です。
58 :
ぽて :2005/04/13(水) 12:27:36
さっそく課題出されました。お願いします。 □ 問題: 一定の幅と高さをもつボードがある。図のようにボード上には左上隅を原点とする座標 系(x 座標、y 座標)が定義されているとする。この時、つぎの条件を満たすように二 辺の長さとボード左上の位置を表す座標をもつ長方形をボード上に配置するプログラ ムを作成せよ。 (1) 配置に関する機能とそのメソッド名は以下の通りである。 • 幅、高さ、位置(x座標、y座標)を与えて長方形を作成する。create • 長方形を指定して指定したx方向、y方向へ指定した距離分移動する。move • 長方形を指定して、指定した倍率で幅と高さを拡大する。expand • 長方形を指定して、指定した倍率で幅と高さを縮小する。shrink • 長方形を指定して削除する。delete • ボード上の長方形をすべて削除する。deleteAll • 2 つの長方形の重なり部分を抽出し、長方形として配置する。Intersect (2) その他に次の機能をもつ • ボードの状態を表示する。displayBoard • 操作を終了する。 exit (3) ユーザはキーボードから(1)の機能に対応するコマンドと必要なデータを入力し、 結果のボード上のデータ(どの位置にどの長方形が配置されているか)を標準出 力に出力する。 (4) ボード上で同じ幅、高さ、位置をもつ長方形は同一の長方形とみなす。 (5) 長方形とは面積をもつものとし、点および線分は長方形とはみなさない。 (6) ボードの大きさを設定できる。
59 :
ぽて :2005/04/13(水) 12:28:02
続きです。 <注意> • ある操作によって、ボードから長方形がはみ出す場合には、その入力の値を無効と して、操作をやり直すこととします。 • 拡大と縮小の倍率は幅と高さそれぞれ別に指定するものとします。 • このプログラムの使い方はつぎのとおりです。 − 起動すると、コマンド一覧が表示される。 − ユーザはコマンドを選択し、要求されるパラメータを入力する。 − コマンドの実行が終了すると、コマンド一覧に戻り、exit が実行されるまで操 作を選択することができる。 • ボード上に配置できる長方形の数の上限を10 個に設けることにします。 • 「ボードの状態を表示する」とはボード上にあるすべての長方形の属性(幅、高さ、 x 座標、y 座標)を表示するということです。 • 「ボード上のデータ(どの位置にどの長方形が配置されているか)」ということで すが、長方形は上記の属性がすべて等しい値の場合は同じとみなすので、ここでは これら4つの属性でボード上の長方形を識別できるものと考えます。識別子が必要 かどうかは考えてください。 • これらの属性(幅、高さ、x 座標、y 座標)のデータ型を何にするかも考察してく ださい。
60 :
デフォルトの名無しさん :2005/04/13(水) 14:06:57
お願いします。丸投げします。 セッションオブジェクトを使って、前回の計算結果を用いて 足し算を行うサーブレットを作成してください。 実行結果 1回目のアクセス 0+1=1 2回目のアクセス 1+2=3 3回目のアクセス 3+3=6 4回目のアクセス 6+4=10
乱数を発生させて結果を出力するプログラムを作っています。 乱数を発生させる所まではうまくいったのですが、ファイルへの出力部分で手間取っています。以下のように組んだのですが、エラーとして 『RandomTest.java:12: シンボルを解決できません。 シンボル: メソッド write (double) 場所 : java.io.FileWriter の クラス writer.write(rnd);』 と出てしまいます。色々と試みてみたのですがうまくいきません。 Double型の変数は、このメソッドでは出力することができないのでしょうか? 大変初心者の質問で申し訳ありません。 import java.io.*; class RandomTest{ public static void main(String[] args){ try{ int i; FileWriter writer = new FileWriter("./test.txt"); for( i=0 ; i<10 ; i++){ rnd=Math.random(); System.out.println(rnd); writer.write(rnd); // 出力 } writer.close(); // 出力ファイルを閉じる }catch(Exception e){ System.err.println(e); System.exit(0); } } }
62 :
デフォルトの名無しさん :2005/04/14(木) 15:29:42
age
お前が選んだのは 「9」 だな
>>61 writer.write(rnd); を
writer.write(String.valueOf(rnd)); に変えればとりあえずの目的は達成できます。
その上で、効率の良い出力をするために
FileWriter writer = new FileWriter("./test.txt"); を
BufferedWriter writer = new BufferedWriter(new FileWriter("./test.txt")); に変えた方が良いです。
あと、これは質問スレに書き込むほうが適切だと思われます。
65 :
M.B. :2005/04/14(木) 22:05:40
>>64 同じコテハン主義者としてひとこと言わせてもらうと、
それだけJava について語っておいて、
「Java超初心者」というハンドルは厭味だと思うぞ。
ついでながら、文字出力で効率を考えるような頭があったら、
StringBuffer に詰め込んでおいて一気に吐く、とかいった
方法を考えたほうが、もっと人生を有効に使える気がするが。
>>65 > StringBuffer に詰め込んでおいて一気に吐く、とかいった
> 方法を考えたほうが、もっと人生を有効に使える気がするが。
StringBuffer を使うと、それをメモリにためておくことになるわけですよね。
大量のデータを出力する場合、ある程度のところで StringBuffer の中身
を吐き出す処理をしないと、プログラム自体が食うメモリの大きさに影響し
てきちゃうんじゃないかなぁ。
BufferedWriter を使うことによっても、内部的な Buffer を使うことになる
わけだけど、それは適当なところで実際のストリーム(今回の場合ファイル)
に書き込んでくれるので、メモリのことは考えなくて済む。
StringBuffer を使う方法は、どこまでメモリにため込んでおくかをプログラマが
考えないといけないので、人生を有効に使うのには役立たず、逆に考慮すべき
事項が増えてしまうんじゃないか、という気がしますがいかがでしょう。
67 :
M.B. :2005/04/15(金) 12:56:30
>>66 文字というのはテキスト処理の一部として使われることが
ほとんどだろうから(当たり前か(-_-;))文書という
カタマリ単位で処理したほうがナイスなような気がする。
BufferedWriter は、むしろプログラム間(あるいはデバイス間)で
同期を取ったりするときに便利なんじゃなかろうか。
>>67 反論されてるんだからワケワカランこといわずに
きちんと
>>66 に答えたら?w
5. 宿題&課題とその回答プログラムに対する質問はOK ですが、 一般的な質問は質問スレで行なってください。また、多言語の課題は 原則としてスルーされますので、ご了承願います。
課題は乱数を出力するプログラム。どう考えても文章と組み合わせるとは思えない。 加えて、ファイルアクセスがボトルネックなら実行速度に差はない。 むしろロードとかで速度が低下する事すら考えられる。 何より、BufferedWriterは取り扱いが非常に簡潔、プログラムの見通しも立ちやすい。 (StringBufferを使ったコードって、何行増えるよ?) Keep It Simple, Stupid. ついでに、65の書き込みで質問者に通じると思うか? 質問者はBufferの概念すら理解してないと思うが。 質問者の立場になって答えられん奴は質問スレにいるべきではない。
>>58-59 ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=23188 課題をやってみました。
前半の(6)の意図が不明だったので、コンストラクタに引数を渡して、
ボードの大きさを指定できるようにしました。
上の意味が良く分からない場合は、249行目のカッコ内の数字を変えれば
ボードの大きさが変えられると考えておいてください。
汚いソースではありますが、一応動くと思いますのでおそらく評定はつきます。
>>65-
コテハン主義というより、上の恥ずかしいスパゲッティコードを作成するような
正真正銘の超初心者なので、こんな名前欄を設定してしまいました。
そして名乗っておいて、ソースの提示が1日遅れるこの有様…。
なんだか私のせいでスレが荒れてしまったようで本当に申し訳ありませんでした。
>>70 残念だがここは質問スレではないわけだが。
>>60 // IncrementalServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class IncrementalServlet extends HttpServlet {
private int counter;
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
HttpSession session = req.getSession();
int data;
Object dataInteger = session.getAttribute( "data" );
if( dataInteger == null ) data = 0;
else data = ( (Integer)dataInteger ).intValue();
res.setContentType( "text/html; charset=Shift_JIS" );
PrintWriter out = res.getWriter();
out.println( "<html><head>" );
out.println("<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">");
out.println("</head><body>");
counter++;
int old_data = data;
data += counter;
out.println( counter + "回目のアクセス " + old_data + "+" + counter + "=" + data + "<br>" );
out.println( "</body></html>" );
session.setAttribute( "data", new Integer(data) );
}
}
74 :
デフォルトの名無しさん :2005/04/16(土) 18:12:48
お世話になります。 ビッグオー記法の課題です。 O(n)とO(logn)処理回数の違いを表すプログラムを作成してください。 よろしくお願いします。
75 :
74 :2005/04/16(土) 18:16:21
すいません。処理回数ではなく、処理時間です。
76 :
M.B. :2005/04/16(土) 22:33:50
>>74 System.out.println(" 1 10 100 1000 10000");
System.out.println(" 1 2 3 4 5");
馬鹿サーチ(O(n))と二分探索(O(log2n))で
同じことをやって、データサイズと処理時間の関係を
表示するというのも一つの手だが。
77 :
ぽて :2005/04/16(土) 22:36:34
>>70 Java超初心者サマ
こんな長いプログラム作って頂いてありがとうございました
ただline.spirit(とCharacter.toString(
でコンパイルエラーとなってしまいます;
Javaのバージョンが古いせいでしょーか
>>77 Javaのバージョンが1.3以下であるならば、おそらくそうです。
1.3以下の環境でしか作成してはいけないという条件で、かつどうしても書き直して欲しいという場合はそのように書き込んでください。
そうでない場合は、これを機会にJava 5.0 を導入することをお勧めします。
79 :
ぽて :2005/04/17(日) 01:13:18
ウチのは1.3でした。 そうですね、これを機に新しいの導入してみます。 ありがとうございました
80 :
74 :2005/04/17(日) 11:04:28
>>76 馬鹿サーチ(O(n))と二分探索(O(log2n))で
同じことをやって、データサイズと処理時間の関係を
表示するというのも一つの手だが。
教えてもらえませんか?お願いします。
81 :
デフォルトの名無しさん :2005/04/17(日) 12:37:40
age
>かつどうしても書き直して欲しいという場合は
読み返してみたら、大変傲慢な書き込みをしておりました。すみません。
お詫びというか、バグフィックスです。
>>71 のメソッド intersect() を以下のように書き換えてください。よろしくお願いします。
private void intersect() { Object[] obj = rectArray.toArray(); Rect[] rects = new Rect[obj.length]; for(int i = 0; i < obj.length; i++) rects[i] = (Rect)obj[i]; if(rects.length > 1) { for(int i = 0; i < rects.length - 1; i++) { Rect rectA = rects[i]; int al = rectA.getPosition().width; int at = rectA.getPosition().height; int ar = rectA.getPosition().width + rectA.getSize().width; int ab = rectA.getPosition().height + rectA.getSize().height; for(int j = i + 1; j < rects.length; j++) { boolean blnCreate = false; Rect rectB = rects[j]; int bl = rectB.getPosition().width; int bt = rectB.getPosition().height; int br = rectB.getPosition().width + rectB.getSize().width; int bb = rectB.getPosition().height + rectB.getSize().height; if((al <= bl && bl < ar) && ((bt < at && at <= bb) || (at <= bt && bt < ab))) blnCreate = true; else if ((bl <= al && al < br) && ((at < bt && bt <= ab) || (bt <= at && at < bb))) blnCreate = true; if(blnCreate) { int rl, rt, rr, rb; if(al < bl) rl = bl;else rl = al; if(at < bt) rt = bt;else rt = at; if(ar < br) rr = ar;else rr = br; if(ab < bb) rb = ab;else rb = bb; create(rl, rt, rr - rl, rb - rt); }}}}}
>>74 情報処理試験が終わってようやく時間ができたのでやってみた。
// SearchAlgorithm.java
public class SearchAlgorithm {
long n;
public static void main(String[] args) {
new SearchAlgorithm().start();
}
private void start() {
for( n=1; n<1000000000000000000L; n*=10 ) {
System.out.println( "n = " + n );
// 0~nのちょうど真ん中の位置にある値を見つけるとする。
long find = n / 2;
// 線形探索
if( n < 10000000000L ) linearSearch( find );
// 二分探索
binarySearch( find );
System.out.println();
}
}
/** 線形探索。O(n)の例。*/
private void linearSearch( long find ) {
System.out.println( "Start Linear Search..." );
long start = System.currentTimeMillis();
for( long i=0; i<n; i++ ) {
if( i == find ) {
System.out.println( "Found!! value: " + find );
break;
}
}
long end = System.currentTimeMillis();
System.out.println( "End Linear Search..." );
85 :
84 :2005/04/17(日) 20:11:19
つづき
System.out.println("Time: " + (end-start) + "msecs." );
}
/** 二分探索。O(log(2)n)の例。*/
private void binarySearch( long find ) {
System.out.println( "Start Binary Search..." );
long start = System.currentTimeMillis();
long lowerBound = 0;
long upperBound = n - 1;
long cursor = -1;
while( lowerBound <= upperBound && lowerBound != cursor ) {
cursor = (lowerBound + upperBound) / 2;
if( cursor >= find ) upperBound = cursor;
else lowerBound = cursor + 1;
}
if( cursor >= 0 && cursor == find ) {
System.out.println( "Found!! value: " + find );
long end = System.currentTimeMillis();
System.out.println( "End Binary Search..." );
System.out.println("Time: " + (end-start) + "msecs." );
}
}
}
数字はマシンスペックにあわせて調整してください。
二分探索はうちの環境だと綺麗に倍になりません。出力上は全て0msecです。
>>83 そのコテハンやめなさいって。荒れる元だから。
86 :
60 :2005/04/17(日) 21:19:05
>73 様
解答ありがとうございます。しかし、書き込んだその日に解けました。
僕はtry,catch文でつくりましたので、73様の解答も今後の参考にしたいと思います。
下にソースを晒しときます。
import javax.servlet.*;
import javax.servlet.http.*;
public class Training8_2Servlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=Windows-31J");
java.io.PrintWriter out = response.getWriter();
out.println("<HTML><HEAD><TITLE>Session Test"+ "</TITLE></HEAD><BODY>");
HttpSession session = request.getSession(true);
int sum=0;
int count=1;
int result;
try { count = Integer.parseInt((String)session.getAttribute("yourCount") );
} catch (Exception ex) { count = 0; }
count++;
session.setAttribute("yourCount",Integer.toString(count));
try {sum =Integer.parseInt(
(String)session.getAttribute("yourResult"));
} catch (Exception ex) {sum =0;}
result=(sum+count);
session.setAttribute("yourResult",Integer.toString(result));
out.println("<h1>"+sum+"+"+count+"="+result+"</h1>");
out.println("<A href=\""
+ response.encodeURL("
http://localhost:8080/no08/servlet/sample08.Training8_2Servlet ")
+ "\">次の計算</A>");
out.println("</BODY></HTML>");
out.close(); }}
87 :
74 :2005/04/18(月) 09:39:34
>>84 早速の解答ありがとうございました。
とても助かりました。
また何かありましたらよろしくお願いします。
sage
保守
保守
(・д・)
(・д・)
(・д・)
うぜえな
(・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・) (・д・)
サーブレットでフォームを作ってください。 フォームに入力されたデータをセッションに登録し、次の入力画面に そこまでたまったデータに入力されたデータを追加し、入力欄と一緒に表示 するものです。お願いします
98 :
74 :2005/04/19(火) 12:36:51
たびたびすいません。
>>84 で得た値をグラフ化することはできないでしょうか?
>98 可能です。 Excelに値を貼り付けてグラフボタンをクリックしましょう。 Javaで実現したいのなら、一番普通なのは、AWTを使ってウィンドウこさえてそこにお絵描きする方法。 AWTってのはJavaアプレットなんかに使われるGUIのためのパッケージな。 アプレットで図形を描画するサンプルはぐぐれば腐るほど出てくるので、それに時間測定ルーチン組み込むのが一番早いと思う。 あるいは、得た値を使ってprint文でアスキーアートのグラフを書くという手もある。 技術的にはショボいが、非常にお手軽。
>>74 には処理時間ではなく「回数」と書いてあるようだが。
どこまでを回数にすればいいのかな
break するまでの for(の中の if)の回数と、
while の回数(trueの回数+false 1回分)かな
死ぬ
103 :
デフォルトの名無しさん :2005/04/20(水) 17:18:05
ハフマン符号の符号化・複合化プログラムを お願いします・・・。
>>97 import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class FormServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
doAction(req, res);
}
public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
doAction(req, res);
}
public void doAction(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
HttpSession session = req.getSession();
Enumeration enumeration = session.getAttributeNames();
int elements = 0;
// セッションオブジェクトに格納されている要素数を数える。
while( enumeration.hasMoreElements() ) {
enumeration.nextElement();
elements++;
}
req.setCharacterEncoding( "UTF-8" );
if( req.getParameter("inputtext") != null && req.getParameter("inputtext").length() > 0 ) {
String inputtext = (String)req.getParameter("inputtext");
// セッションオブジェクトに連番のキーで値を格納。
session.setAttribute( "" + (elements++), inputtext );
}
res.setContentType( "text/html; charset=UTF-8" );
PrintWriter out = res.getWriter();
out.println( "<html><head>" );
out.println("<META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
out.println("</head><body>");
105 :
104 :2005/04/20(水) 19:10:16
つづき // セッションオブジェクトの要素を出力 for( int i=0; i<elements; i++ ) { out.println( session.getAttribute( "" + i ) + "<br>" ); } out.println( "<form method=\"POST\" action=\"./FormServlet\">" ); out.println( "<input type=\"text\" name=\"inputtext\">" ); out.println( "<input type=\"submit\" value=\"push me\">" ); out.println( "</form>" ); out.println( "</body></html>" ); } }
106 :
デフォルトの名無しさん :2005/04/20(水) 19:58:15
108 :
デフォルトの名無しさん :2005/04/21(木) 14:02:42
どなたか教えていただけないでしょうか?お願いします。
>>58-59 に対する回答が
>>71 と
>>83 にありますが、これに下の機能を追加していただけないでしょうか?
(1)長方形とボードに色をつける。
・ボードの色はwhiteとする。
・長方形の色として指定できる色は以下の通りである。
-red
-blue
-yellow
-gray
(2)長方形に対する配置の機能のうち、intersectを以下のように拡張する。
・重なり部分の色を以下の規則でマージして、色を決定する。
-色の組み合わせが同じであればgrayとする。
-色の組み合わせがyellowとblueならば、greenとする。
-色の組み合わせがredとyellowならば、orangeとする。
-色の組み合わせがredとblueならば、magentaとする。
-その他の場合はcyanとする。
(3)長方形は色が異なってもボード上で同じ幅、高さ、位置を持つ場合は同一の長方形とみなす。
(4)ファイル名を指定してボードの状態をファイルに出力する機能を追加する。
コマンドはsaveとする。
お願いいたします。
2枚のグレースケールjpeg画像の諧調値を単純に引き算してできる差分画像を描画したいのですが わかる方教えていただけないでしょうか。お願いいたします。
>>109 手抜きです。
普通はPixelGrabberとMemoryImageSource使うのかな。
import java.awt.*;
import java.awt.image.*;
import java.net.URL;
import javax.imageio.ImageIO;
public class Q109 extends Applet
{
BufferedImage out_image;
public void init()
{
try
{
BufferedImage in_image = ImageIO.read(new URL(getCodeBase(), "src.jpg"));
BufferedImage sub_image = ImageIO.read(new URL(getCodeBase(), "sub.jpg"));
out_image = new BufferedImage(in_image.getWidth(), in_image.getHeight(),BufferedImage.TYPE_BYTE_GRAY);
byte[] inbuf = ((DataBufferByte) in_image.getRaster().getDataBuffer()).getData();
byte[] subbuf = ((DataBufferByte) sub_image.getRaster().getDataBuffer()).getData();
byte[] outbuf = ((DataBufferByte) out_image.getRaster().getDataBuffer()).getData();
for (int i = 0; i < inbuf.length; i++)
{
outbuf[i] = (byte) (inbuf[i] - subbuf[i]);
//if ((outbuf[i] & 0xFF) > (inbuf[i] & 0xFF)) {outbuf[i] = 0};
}
}
catch (Exception e){e.printStackTrace();}
}
public void update(Graphics g){paint(g);}
public void paint(Graphics g){if(out_image != null)g.drawImage(out_image, 0, 0, null);}
}
111 :
109 :2005/04/22(金) 17:24:25
>>110 さん
こんなに早く答えていただいて本当にありがとうございます。
無事表示できました。
>普通はPixelGrabberとMemoryImageSource使うのかな。
さらに機能を拡張していこうとする場合、
これらを用いて書いておいた方がいいのでしょうか。
ネットワークで送られてきた画像に対してリアルタイム処理で
差分画像を表示させるのが目的です。
112 :
71 :2005/04/23(土) 21:52:14
113 :
デフォルトの名無しさん :2005/04/25(月) 18:02:41
>>112 さん ありがとうございます!助かりました。
察しのとおり、次からGUIになる悪寒です。
114 :
デフォルトの名無しさん :2005/04/25(月) 18:12:03
アプレットビューアではちゃんと動くのにWEBブラウザでとつでん読み込めなくなったんだけど・・・こんなことって普通ないですよね? あと画像がフルパスでは表示できるのに相対パスでは表示できない(取得できない?)んですけど関係ありますかね? eclipse使ってます。
116 :
デフォルトの名無しさん :2005/04/26(火) 17:30:07
三桁の数字を当てるゲームを作ってください。 乱数で3桁別々の数字を決め、キー入力された数字を桁ごとにチェックし、 入力した数字が乱数と比べて桁は違うが、どこかにその値を使っていたらパー、 値と桁が合っていたらイーグル、とし、 パー数とイーグル数を表示します。 HTMLは使わずに、1つのJSPで作ってください。
ちなみに、そのゲームは、hit & blow と呼ぶのが普通。 ある有名なゲーム内のミニゲームで「コードブレイカー」と呼ばれてたので、そう呼ぶ人もいるけど。
マスターマインドという名前で商品化もされてるね。
119 :
デフォルトの名無しさん :2005/04/26(火) 23:42:36
2つの数字を入力して、 最大公倍数と、最小公約数を表示させる。というものを作りたいのですが、 わかる方よければおしえていただけませんか?よろしくお願いします。
最大公倍数は無限大で、最小公約数は1だなぁ。と、酒の勢いに任せて揚げ足を取ってみる。
121 :
119 :2005/04/27(水) 00:16:01
しまった・・・。 最大公約数と、最小公倍数でした;; どうか、よろしくお願いします。
122 :
デフォルトの名無しさん :2005/04/27(水) 00:53:51
自宅(下宿)から大学までの途中にある「もの」(店、ポスト、桜の木...) を順に並べて(Vectorクラスを使って)リストを作り、一番気に入っているものがリストの何番目にあるか を調べて表示するJavaのプログラムを作れ。 途中にあるものは公園、小学校、プール、銀行で気に入ってるのは公園でお願いします。
123 :
M.B. :2005/04/27(水) 09:02:27
>>116 電算業界ではMOO という名前で呼ばれること多し。
有沢誠さんの『プログラミング・レクリエーション』
(近代科学社)に出てたはず(うろおぼえ)。
124 :
M.B. :2005/04/27(水) 09:04:02
>>121 前スレに「Euclid の互除法」によるGCM(最大公約数)を
求めるルーチンがあったはず。
最小公倍数は二つの数の積をGCM で割れば出る。
125 :
デフォルトの名無しさん :2005/04/27(水) 10:34:06
ねえねえ 最小公倍数って0じゃないの?
最小公女セイラ
127 :
質問君 :2005/04/27(水) 12:50:51
うが~。どなたかご教授くださいまし。 Javaでプロクシサーバーのプログラムを書いています。 あるポートで待ち受けて、ブラウザ(クライアント)からの リクエストを取得し、それを外部へ代理で送信し、レスポンスを 代理で受信して、それをそのままクライアントへ返すプログラム です。 この一連の処理はうまくいっているのですが、HTMLページ内の 画像だけ表示されません。GETホニャララで送ったリクエストの レスポンスが、どうやら複数返ってきているようなのですが…。 そのうちのHTMLだけ受け取っているようでして。 もしかして、代理で受信した時にバイナリかテキストか判別しないと いけないのでしょうか。難しくてもう泣きそうです。っうえっうえwwww
128 :
初心者です :2005/04/27(水) 14:22:22
どなたか助けてください。。 0~9の整数の乱数を30個出力する問題です。 Java.until.Randomクラスを使って作成したいのですが どなたかお願いします。
129 :
デフォルトの名無しさん :2005/04/27(水) 17:06:43
Java って 右トリム 左トリムってないの???? 教えてくだせい
>>127 HTML内にimgタグで画像が入っていた場合、別途クライアントからその画像
に対するHTTPリクエストが出ます。なので、そのリクエストをハンドリング
すればいいはずですが。
>>128 nextIntで取得した数を10で割った余りを乱数とする。
それを30回繰り返せばいい。
>>129 どちらかの空白だけ取るってのはないね。
>>128 回答例
import java.util.Random;
public class Sample01 {
public static void main(String[] args) {
Random rnd = new Random();
for(int i = 0; i < 30; i++)
System.out.println(rnd.nextInt(10));
}
}
132 :
120 :2005/04/27(水) 22:00:11
>>119 酒の勢いで揚げ足を取ったので、今宵は酒のツマミにソースを貼ってみる。
酒のツマミなのでエラー処理がおざなり。適当に改良しておくれ。
import java.io.BufferedReader; import java.io.InputStreamReader;
public class Sample01 {
public Sample01() {
int i1, i2, igcd; long llcm;
System.out.println("二つの引数を入力して下さい。");
i1 = getInt("引数1:"); i2 = getInt("引数2:");
igcd = getGCD(i1, i2); llcm = i1 * i2 / igcd;
System.out.println(i1 + " と " + i2 + " の最大公約数は " + igcd + "です。");
System.out.println(i1 + " と " + i2 + " の最小公倍数は " + llcm + "です。");
}
public static void main(String[] args) { new Sample01(); }
public int getInt(String strMsg) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print(strMsg);
String line = reader.readLine();
return (Integer.parseInt(line));
} catch(Exception e) {
e.printStackTrace();
System.exit(1);
} return 0;
}
public int getGCD(int i1, int i2) {
int i3;
while(i2 != 0){
i3 = i1%i2; i1 = i2; i2 = i3;
}
return i1;
}
}
>>122 泥酔状態で作ってみた。「もの」だから、小粋にインスタンスにした。
今日は私しかコードを晒してないけど、ひょっとして察してないのは私?だとしたらごめんなさい。
import java.util.Vector;
public class Sample01 {
private Vector list = new Vector();
public Sample01() {
Item park = new Item("公園", true); list.add(park);
Item school = new Item("小学校"); list.add(school);
Item pool = new Item("プール"); list.add(pool);
Item bank = new Item("銀行"); list.add(bank);
String strExp = "何もかもが気に入りません";
outer:
for (int i = 0; i < list.size(); i++) {
Item item = (Item)list.get(i);
if(item.isFavorite()) {
strExp = "私のお気に入りの" + item.getName() + "は、\n" +
"自宅(下宿)から大学までの途中にある目印っぽい建物の中で、\n" +
(i + 1) + "度目に通り過ぎます。";
break outer;
}
}
System.out.println(strExp);
}
public static void main(String[] args) { new Sample01(); }
}
class Item {
private String name; private boolean favorite;
public Item(String name, boolean favorite) { this.name = name; this.favorite = favorite; }
public Item(String name) { this(name, false); }
public String getName() { return name; }
public boolean isFavorite() { return favorite; }
}
134 :
質問君 :2005/04/28(木) 13:26:08
>>130 自己解決しました。ありがとうございました。
1.クライアントからの要求をいったんテキストデータをBufferedReader
で受けて、接続先を解析
2.リクエストをテキストデータで接続先へ送る(BufferedWriter)
3.接続先から受けとったデータはInputStreamで受けて、そのまま
くらいあんとへOutputStreamで送る
これでできました。HTTP 1.xプロトコルだと接続要求が複数発生します
ので、すべて個別のスレッドを生成して送受信しました。3のように
受け取ったデータをReaderやWriterでラップせずに送ったらうまく
いきました^^
ただ、いくつかソケットで例外が出たり、HTTPSのサイトは見れなかったり、
CGIにPOSTできませんが…
>>134 URLConnectionを使ってみたら?httpsもキャストするだけで対応してくれるし楽だよ。
URL url = new URL("接続先");でURLのインスタンスを作ってgetProtocol()の戻り値で分岐、
httpsならHttpsURLConnection uc = (HttpsURLConnection)url.openConnection();
httpならHttpURLConnection uc = (HttpURLConnection)url.openConnection();
ってな感じでいけるはず。
POSTする時は、こんな感じでOutputStreamを取ってリクエストボディを流せばおk。
uc.setRequestMethod("POST");
uc.setDoOutput(true);
OutputStream out=uc.getOutputStream();
余裕があったら触ってみそ。
リストの中からレコードを探し出すプログラムを作れ、と言う問題がでました。 配列の中からレコードを探し出すプログラムはできたのですが、リストはどうしてもできません。 どうぞお力を貸してくださいお願いします…m(_ _)m
ありがちなのは、Object型で返されたのを欲しい型にキャストしてない、とかか。 情報が少なすぎて回答は厳しい。つーか何を回答して欲しいのかも分からん。 どこまでは出来てどこで躓いたのかも分からんし。 自力で調べるならイテレータ(反復子)あたりをキーワードに調べるとカコイイのが書ける。 配列同様に長さ分のループを回してget()で値を抜き出すと配列同様に書けるけど、速度は落ちるし美しくない。
138 :
136 :2005/04/30(土) 11:20:11
あとで読み直したら、137さんの言うとおり何を回答したらいいか分からないですね。 すいませんでした。 問題は、リストと配列でそれぞれ検索のプログラムを書いて、リストの便利さを理解するというものです。 リストのプログラムの方はさっぱり分からないです…。 条件は リストで線形検索をする。 リストの先頭と終わりに1個づつ余分な要素(ダミー)を追加する。終わりの1個は番兵である。 先頭の方は番兵と違って効率をよくすることにはつながらないが、場合分けを減らしてプログラムを 簡単にするために役立つ。 です。 どうぞよろしくおねがいします
ファイルの内容を読み込んで出力という内容のプログラムを 作っているのですが質問です。ソースが import java.io.*; public class yomikomi { public static void main(String[] args) throws Exception{ BufferedReader reader=new BufferedReader(new FileReader("input.txt")); String line; while((line=reader.readLine())!=null){ System.out.println(line); } } } で、input.txt中身が a b c d e だとすると、aが出力されずにb,c,d,eのみ出力されます reader.ready()を使えばいいとアドバイスをもらったのですが ライブラリを見ても使い方がわかりませんでした。 レベルが低いですがお願いします
140 :
デフォルトの名無しさん :2005/05/01(日) 15:33:49
乱数をつかってコンピューターに1~100までに範囲にある整数を一つだけ 決めさせて、それをユーザーが当てる「数当てゲーム」を作成する。 乱数>入力した値 → "もっと大きい値です" 乱数<入力した値 → "もっと小さい値です" 乱数== 入力した値 → "当たり" (終了する) どなたか解答おねがいします
それ、TOMCATのサンプルだろ?w <%@ page import = "num.NumberGuessBean" %> <jsp:useBean id="numguess" class="num.NumberGuessBean" scope="session"/> <jsp:setProperty name="numguess" property="*"/> <html> <head><title>Number Guess</title></head> <body bgcolor="white"> <font size=4> <% if (numguess.getSuccess()) { %> Congratulations! You got it And after just <%= numguess.getNumGuesses() %> tries.<p> <% numguess.reset(); %> Care to <a href="numguess.jsp">try again</a>? <% } else if (numguess.getNumGuesses() == 0) { %> Welcome to the Number Guess game.<p> I'm thinking of a number between 1 and 100.<p> <form method=get> What's your guess? <input type=text name=guess> <input type=submit value="Submit"> </form> <% } else { %> Good guess, but nope. Try <b><%= numguess.getHint() %></b>. You have made <%= numguess.getNumGuesses() %> guesses.<p> I'm thinking of a number between 1 and 100.<p> <form method=get> What's your guess? <input type=text name=guess> <input type=submit value="Submit"> </form> <% } %> </font> </body> </html>
>>142 138じゃないけど
番兵ってアルゴリズムの話するときは必須の単語だと思うよ
ある処理していって最後にそれにぶつかったら処理を終わる目印みたいなもの
番兵が無いときは自分で定義したりする場合もある
>144 具体的にどんなデータを入れるのか指示はされてるのか、という事だと思う。
きちんと番兵を実装してるのに無視される>143が哀れ
147 :
136 :2005/05/01(日) 22:43:25
>>138 さん
番兵の意味は144さんの通りみたいです。
もし、145さんの言っている意味であればすいません。
入れるデータの種類は特に言われなかったのですが、
ストリングができれば大丈夫だと思います。
>>143 さん
大変参考になります。ありがとうございます。
リストは扱ったことが無かったので、かなり苦戦してました。
ソースみて勉強したいと思います。
148 :
136 :2005/05/01(日) 22:44:36
149 :
136 :2005/05/01(日) 22:45:33
0からnまでの非負整数(0, 1, 2, 3, …,n-1, n)を、以下の順に表示する プログラムを作りたいです。例えばn=3の場合は、以下の様になります。 0 1 2 3 0 1 3 2 0 2 1 3 0 2 3 1 … 3 2 0 1 3 2 1 0 また、これに加えて、「指定した数を含まないものを表示する」という条件 を加えた場合、どのようなアルゴリズムになるのでしょうか? 例えばn=3で、2を指定すると、 0 1 3 0 3 1 1 0 3 1 3 0 3 0 1 3 1 0 と表示するものです。お願いします。
>>150 アホかお前は。Cスレと同じ質問ここにも貼りやがって。
152 :
150 :2005/05/02(月) 01:27:22
>>151 質問をする立場で何なのですが、Cスレで「スレ違い」だと言われたので
向こうでは謝罪し、Javaスレで改めて質問しています。
いわば、誘導されたものと見なされると思うのですが、どうでしょうか。
>>152 あちらのCのコードをJavaで書くと云々なら話はわかるが、
ここしか読んでない人は無駄な思考を強いる事になるな。
お前は何も考えないからなんとも思わないんだろうけど。
たかが自動回答装置ふぜいが
155 :
150 :2005/05/02(月) 01:42:50
>>153 申し訳ありませんが、
>>151 からは
>>153 のような意は取れません。
しかし、
>>153 の通りです。申し訳ありませんでした。
改めてお願いをします。以下のCで書かれたコードを、Javaではどう書けば
よろしいのでしょうか?これは、Cスレで別の方が質問したものへの解答で
あり、
>>150 の前半を実現したものです。
改行多すぎで送信不可でしたので、ソースは次のレスに貼ります。
156 :
150 :2005/05/02(月) 01:43:12
#include <stdio.h> #include <stdbool.h> void swap(int* x, int* y) {int temp = *x; *x = *y; *y = temp;} void reverse(int* first, int* last) { for(; ; ) if (first == last || first == --last) return; else swap(first++, last); } bool next_permutation(int* first, int* last) { int* i = last - 1, *j, *k; if (first == last || first + 1 == last) return false; for(; ; ) { j = i--; if (*i < *j) { k = last; while (!(*i < *--k)); swap(i, k); reverse(j, last); return true; } if (i == first) { reverse(first, last); return false; } } } int main() { int i, a[] = {0, 1, 2, 3}; do { for (i = 0; i < sizeof(a) / sizeof(a[0]); i++) printf("%d", a[i]); printf("\n"); } while (next_permutation(a, a + sizeof(a) / sizeof(a[0]))); return 0; }
ただし、↑は転載いただいたCのソースに基づいていません。すみません。
160 :
M.B. :2005/05/02(月) 09:17:14
>>147 「番兵(sentinel)」はfor 文(FORTRANならDO文)の場合には
有効な手だが、Iterater を使うとhasNext()があるので
ほとんど不要(リストの内容をカンマで区切って表示する
場合を考えるとわかりやすい。最後のカンマを出さないように
する部分が簡単になる)。
先頭に一個ダミーを置く「生贄」はどっちでも使える(データに
ヘッダがついていて、空のデータセットがある場合を
考えるとわかりやすい)。
161 :
116 :2005/05/02(月) 12:25:01
hit&blowを作ってほしいのですが、だめですか?
162 :
M.B. :2005/05/02(月) 13:01:59
>>161 十五分で作ったので死ぬほどいいかげん。
x の中身をセットする部分と入力のチェックは適宜改良せよ。
import java.io.*;
public class HB {
public static void main(String [] args) throws Exception {
String x = "1234", y;
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
System.out.println("4 桁の数字を入力");System.out.flush();
do {
System.out.print("");System.out.flush();
y = in.readLine();
int Hit = 0, Blow = 0;
for (int hcnt = 0;hcnt < 4;hcnt += 1) {
if (x.charAt(hcnt) == y.charAt(hcnt)) Hit += 1;
for (int bcnt = 0;bcnt < 4;bcnt += 1) {
if ((x.charAt(bcnt) == y.charAt(hcnt)) && (bcnt != hcnt))
Blow += 1;
}
}
System.out.println(Hit + " Hit, " + Blow + " Blow.");
} while (!x.equals(y));
System.out.println("正解です。");
}
}
>>155 全然 C のソースに基づいてないけど、再帰使ってこんな感じどう?
public class
Q51_150 {
static int[]
Insert( int[] p, int pPos ) {
int[] v = new int[ p.length + 1 ];
for ( int i = 0; i < pPos; i++ ) v[ i ] = p[ i ];
v[ pPos ] = p.length;
for ( int i = pPos; i < p.length; i++ ) v[ i + 1 ] = p[ i ];
return v;
}
static int[][]
Permutation( int p ) {
if ( p == 1 ) {
int[][] v = {{0}};
return v;
} else {
int[][] w = Permutation( p - 1 );
int[][] v = new int[ w.length * p ][];
for ( int i = 0; i < w.length; i++ ) {
for ( int j = 0; j < p; j++ ) {
v[ i * p + j ] = Insert( w[ i ], j );
}
}
return v;
}
}
>>163 public static void
Body( int[] p ) {
int[][] w = Permutation( p.length );
for ( int i = 0; i < w.length; i++ ) {
for ( int j = 0; j < w[ i ].length; j++ ) {
System.out.print( "," + p[ w[ i ][ j ] ] );
}
System.out.println();
}
}
public static void
main( String[] p ) {
int[] w = { 0, 2, 3 };
Body( w );
}
}
165 :
150 :2005/05/02(月) 19:41:10
LinkedListクラスの要素(数字を入れている)をint型変数に格納することは できないのでしょうか? 例えば LinkedList lk = new LinkedList(); lk.addFirst(1); int i = lk.getFirst(); とすると、当然怒られます。 get(int index)やget First()などはObjectを返すことは分かっているのですが、 要素が数値の場合、要素をint型変数に入れることは出来るのでしょうか? キャストやInteger.parseInt等は駄目でした。 ご教授お願いします。
どうしてもintっていうのなら 自作でそういうクラス作るしかない あと いわゆるオブジェクト指向らしい方法は オブジェクトコンポジションでIntArrayクラスの中にCollectionのクラス持って addFirst(int i) int getFirst() とかのインターフェース作れば外見上int出し入れできる
lk.addFirst(new Integer(1)); int i = ((Integer)lk.getFirst()).intValue();
169 :
166 :2005/05/03(火) 16:46:41
>>167 レスありがとうございます。ええっと、自己解決しました。
以下のようにすると、int型変数に入れることができました。
int i = ((Integer)(lk.getFirst())).intValue();
では、失礼します。
170 :
166 :2005/05/03(火) 16:47:26
>>168 あぁぁ、更新してから書き込むべきでした。
ありがとうございました。
171 :
デフォルトの名無しさん :2005/05/03(火) 21:57:34
あの~、JAVAでプログラミングの課題をしてるんですが、簡単な動画を作れとあるのですが・・・ あのパラパラ漫画みたいなのまではマルチスレッドとかつかってできたんですが、前の絵が消えず、 残像(?)が残ってしまいます・・・これどうやったら消えますか?どなたか教えてください。
paint() では無くて update() 使う
でもってそうなるとこんどは、「ちらつき」の質問かなぁ
super.paint(g)呼び出していない
perlを使って「a」「c」を「c」「d」に置換する方法を教えてください。
s/a/c/g s/c/d/g
アホだな
>>175 tr/ac/cd/g
tr使ったこと無いからどうなるか分からん。
cをdに置換してからaをcに置換しないと、とかマジレス。
simula言語での記述 _r=/a/c/
181 :
デフォルトの名無しさん :2005/05/04(水) 20:49:58
すみません、どなたか助けてください・・・。
>>112 さんが作ってくれたプログラムをGUI化しろと言われてしまいました。悪寒的中です。
条件は、
-入力は標準入力のままでよい。
-コマンドの入力毎に表示を更新する。
-作成された順番に表示する。
です。
どなたかお願いいたします。
客というのはそういうものだ
184 :
デフォルトの名無しさん :2005/05/04(水) 23:36:17
誰か助けてください・・・ 画面に現在の時刻をリアルタイムで表示する、 キーボードで時間が合わせられる、 時計プログラム(アナログ+デジタル両方)を作れといわれました。 リアルタイムって・・・どうするんだ~ 初心者ですいませんm(_)m
Observer パターンでググったらそのまま サンプルがヒットしそうな課題だな
>>184 作ってもいいけど
ちょっと機能が多いな・・・
188 :
184 :2005/05/05(木) 00:02:17
>187 追記で申し訳ないのですが、 デジタルとアナログはまた別々に作れとのことでした。 デジタルなんかはただの文字だけでいいみたいなんですが・・・ あとアプレット形式です。
>>188 アナログは極座標使うと簡単だよ。
針の長さと針の角度を与えれば線が引けるので。
後付は解いてもらってる人に大変失礼やっちゅーねん・・・
>>190 赤の他人に宿題頼んでる時点でそいつがまともな神経だとは思わないことだ。
>>189 いや、184にとってはもっと難解な部分があるよ
>>192 ハードリアルタイムはちょっと・・・じゃないな。
awtしばりならTimer使えないからスレッド作らんといかんと。
こういう話か。
194 :
184 :2005/05/05(木) 00:11:48
後付してすいませんm(_)m 書き込みしてから友人にアドバイスをもらったもので・・・
>キーボードで時間が合わせられる、 ココの部分詳しく教えてください なんかテキストボックス用意して値入れてOKボタン押せば 「アプレットの表示」が変わるとか言う事だよね OSの時間かえるという意味じゃないよね そういうことはおれ出来ないから
>>193 まぁ、Timer使うにしろスレッド使うにしろ悩みそうだよな
ちなみにJApplet使っていいの(Swingベース)
それならjavax.swing.Timerつかえるんだが・・・
197 :
184 :2005/05/05(木) 00:25:45
>>193 ハードリアルタイムでない場合は点数が下がってしまうらしいです^^;
>>195 それが僕も迷っているのですが、
こういう方法で変えなさいというのがありません。
多分そのやり方で問題ないと思います。
import java.awt.*; import java.awt.event.*; import java.util.Calendar; import javax.swing.*; public class Clock extends JApplet { private JComboBox bH = new JComboBox(),bM = new JComboBox(),bS = new JComboBox(); private JLabel oH = new JLabel("--"),oM = new JLabel("--"),oS = new JLabel("--"); private JButton r = new JButton("RESET"); private Calendar cal = Calendar.getInstance(); public void init() { Container c = this.getContentPane(); JPanel t = new JPanel(); t.add(this.oH); t.add(this.oM); t.add(this.oS); JPanel i = new JPanel(); for (int h = 0; h < 24; h++) this.bH.addItem(String.valueOf(h)); for (int m = 0; m < 60; m++) this.bM.addItem(String.valueOf(m)); for (int s = 0; s < 60; s++) this.bS.addItem(String.valueOf(s)); i.add(this.bH); i.add(this.bM); i.add(this.bS); i.add(this.r); JPanel base=new JPanel(); base.add(t); base.add(i); c.add(base, BorderLayout.CENTER);
this.r.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Clock.this.cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt((String) Clock.this.bH.getSelectedItem())); Clock.this.cal.set(Calendar.MINUTE, Integer.parseInt((String) Clock.this.bM.getSelectedItem())); Clock.this.cal.set(Calendar.SECOND, Integer.parseInt((String) Clock.this.bS.getSelectedItem())); Clock.this.oH.setText(String.valueOf(Clock.this.cal.get(Calendar.HOUR_OF_DAY))); Clock.this.oM.setText(String.valueOf(Clock.this.cal.get(Calendar.MINUTE))); Clock.this.oS.setText(String.valueOf(Clock.this.cal.get(Calendar.SECOND))); } }); } public void start() { int delay = 1000; ActionListener taskPerformer = new ActionListener() { public void actionPerformed(ActionEvent e) { Clock.this.oH.setText(String.valueOf(Clock.this.cal.get(Calendar.HOUR_OF_DAY))); Clock.this.oM.setText(String.valueOf(Clock.this.cal.get(Calendar.MINUTE))); Clock.this.oS.setText(String.valueOf(Clock.this.cal.get(Calendar.SECOND))); Clock.this.cal.add(Calendar.SECOND, 1); } }; new Timer(delay, taskPerformer).start(); } } //以上 //一回で収めようと短く書いたが無理だった //入力チェックメンドイのでコンボボックスにした
200 :
184 :2005/05/05(木) 02:18:27
>>198-199 動作確認しました、ありがとうございます。
早くこんなプログラムかけるようになりたいです。
暇だ なんか問題出してください 今なら解いて見たい気がする
じゃあ、上で解けて無いhit&blowをJSPでつくってください
203 :
M.B. :2005/05/06(金) 13:06:57
>>202 JSP ではなくてアプレットじゃないか?
JSP だと、クッキーかなんかでアクセスした人間を
区別してアクセスした人間ごとに別の解を生成する
必要がありそうに思うが。
204 :
デフォルトの名無しさん :2005/05/06(金) 13:15:39
205 :
デフォルトの名無しさん :2005/05/06(金) 14:22:22
Y=X1^2-4X2+5X3 この2次方程式のX1,X2,X3にどのような値が入ってもyを自動的に算出するメソッドを考えてもらえませんか?
int f(int x1, int x2, int x3){ return x1*x1+x2+x2+x2+x2+x3+x3+x3+x3+x3; }
>>204 -4X2+5X3って-4x^2+5x^3ではないだろうか
勘違いしてたつってくる
>>206 どうでもいいがx2は足すんじゃなくて引くんだろ
210 :
205 :2005/05/06(金) 16:00:25
Y=X1^2-4X2+(1/3)X3 でした。
>>210 右のように使ってください。ちなみに動作確認はしてません。 Y = f(X1, X2, X3);
int f(int x1, int x2, int x3){
return (int)(x1 * x1 - 4 * x2 + x3 / 3);
}
ホントに int でいいのかよ
ホントに longlong でいいのかよ
215 :
181 :2005/05/06(金) 23:48:32
>>183 さん、ありがとうございます!
無事、動きました。
216 :
116 :2005/05/06(金) 23:50:31
>>M.B.さん 参考になるものをつっくて頂きありがとうございます。 せっかく作ってもらったのですが、当方、初心者にてJSPに転用できませんでした。 みなさんお願いします。JSPでhit&blow作ってもらえないでしょうか? 途中までは作ってあるんですが、hitとblowを判定、表示が出来なくて 困ってます。本当にお願いします。 途中までのソースを晒しますので、それをもとにお願いします。
>>216 >hitとblowを判定、表示が出来なくて
アプレット版にロジックがあるはずだが。
次スレはJavaの宿題に有料で答えます。だな。
218 :
デフォルトの名無しさん :2005/05/06(金) 23:54:52
219 :
116 :2005/05/07(土) 00:11:34
<%@ page contentType="text/html;charset=Shift_JIS" %> <% int num1,num2,num3,num4,hit; //num4が正解の数字 boolean isRight; Integer num4Int=(Integer)session.getAttribute("num4"); Boolean isRightBoo=(Boolean)session.getAttribute("isRight"); if(num4Int==null || isRightBoo==null){ isRight=true;}else{isRight=isRightBoo.booleanValue();} if(isRight){ do{num1=(int)(Math.random()*10);} while(num1==0); do{num2=(int)(Math.random()*10);} while(num2==num1); do{num3=(int)(Math.random()*10);} while(num3==num1 || num3==num2); num4=num1*100+num2*10+num3; isRight=false; session.setAttribute("num4",new Integer(num4)); session.setAttribute("isRight",new Boolean(isRight)); }else{ num4=num4Int.intValue();}%>
220 :
116 :2005/05/07(土) 00:15:49
上の続きです <html><head><title>hit&blow</title></head> <body><h1>hit&blow</h1><br><% int ans; String s=request.getParameter("answer"); if(s!=null){try{ ans=Integer.parseInt(s); if(num4==ans){isRight=true; HttpSession hs = request.getSession(true); out.println("<p>正解!</p>"); }else if(num4>ans&&ans>=1){ out.println("<p>もっと上の数字です</p>"); }else if(num4<ans&&ans<=999){ //解答が正解より大きい out.println("<p>もっと下の数字です</p>"); }else{out.println("<p>3桁の数字を入力してください</p>");} }catch(NumberFormatException e){ out.println("<p>数字は整数で入力してください</p>"); }}%><hr> <%String NextPage="hitandblow.jsp"; NextPage=response.encodeURL(NextPage); if(!isRight){%> 3桁の数字を当ててください。<br> (3桁の中に同じ数字はありません。)<br> 数字を入力してください。<br> <form action="<%=NextPage%>"> <input type="text"name="answer"> <input type="submit"> </form><%}else{%> <a href="<%=NextPage%>">もう一度する</a> <%}%></body></html>
221 :
sage :2005/05/07(土) 03:39:59
アルゴリズムの質問をさせてください。 傾いている長方形があります。 /\ / \ / / \ / ・点A \/ 4頂点にはそれぞれ(X,Y)の値があります。 この長方形内に点Aがあるかどうかを判定させるにはどうすればよいでしょうか? ・・・ちなみに作成しているのはシューティングの当たり判定です。。。 どうか、よろしくお願いします。
222 :
221 :2005/05/07(土) 03:43:04
↑いろいろ失敗してしまいました。。。 /\ / \ / / \ / ・点A \/ です。
223 :
デフォルトの名無しさん :2005/05/07(土) 04:40:00
四角形を三角形に分割して判定 (面状にあるかどうかを判定したい点をGとする) 三角形ABCがあり、辺ABの法線をN(AB)とすると、 N(AB)と点Gとの内積の符号が、N(AB)と点Cとの 内積の符号に等しければ点Gは辺ABの内側にある。 まとめると、(N(AB)・G)(N(AB)・C)>=0⇒点GはABの内側。 点Gが辺AB, BC, CA の内側にある(すなわち三角形の面上にある) ⇔(N(AB)・G)(N(AB)・C)>=0 かつ (N(BC)・G)(N(BC)・A)>=0 かつ (N(CA)・G)(N(CA)・B)>=0 これを使って判定。
>>223 すばらしい解だ
俺には到底導き出せないが
それは理論であって
それを、どのようにPGで組むかがアルゴリズムなのだが・・・
>>221 GeneralPath 使って領域を定義してそいつに判定させる方法もあるよ。
領域の作成
java.awt.geom.GeneralPath w = new java.awt.geom.GeneralPath();
w.moveTo( x0, y0 );
w.lineTo( x1, y1 );
w.lineTo( x2, y2 );
w.lineTo( x3, y3 );
w.closePath();
判定するには
w.contains( x, y );
227 :
デフォルトの名無しさん :2005/05/08(日) 00:08:51
>>223 流し読みして即レス。
普通こういう場合って外積使わね?
javaでお願いしたい課題があるのですが、優しい方メールください。
メールで個人的なやりとりなんてせんで、ネット上から参考になる サイトを探すとか、ちょっとした質問はここで聞くとか
質問です。おねがいします。 100/8 の 商を 変数syo に 余りを 変数amariに 100/8=12 あまり 4 と表示させるにはどうすればいいのでしょうか? 余りの入力の仕方がよくわからないのですが、 おねがいします
>>230 ファイル名:amari_sho.java
class amari_sho {
public static void main(String args[]) {
int amari;
int sho;
sho = 100/8;
amari = 100%8;
System.out.println("100/8=" + sho + " 余り " + amari);
}
}
>>232 はint型にそのまま100/8を入れているから、厳密にはそれだと
他の数値を入れた場合不備が出る可能性もあるから
例えばマイナスの演算とか、その辺は注意しといてね
すいません度々質問おねがいします。 割り算の時に小数点まで表示させるにはどうすればいいのでしょうか? たとえば 5%3=1.66・・・・・・・・6のようにです
%は、余りだが・・・ 細かい突っ込みは置いといて double d=(double)5/(double)3; にしとけばイイ
>>236 それをやってみたのですが1.66・・・67となるのですが、いいのでしょうか?
>>239 桁を無限にってわけにもいかんし、性質上最後の桁が四捨五入されているからでしょ
そういうもんだと割り切って問題ないならそれで行くべし
>>241 >四捨五入されているからでしょ
丸め誤差だと思うが。。。
>>242 ようわからんけど、四捨五入じゃないみたいだね
ためしに7/3でやったら 2.333・・・5 だったっけ
>>244 整数は2のn乗の組み合わせで表現できるのと同様に、浮動小数点数では2の-n乗で数字を表現する。
しかしながら、これには問題があってどうあがいても表現できない数字がある。
0.9 ≒ 0.5 + 0.25 + 0.125 + ...
246 :
デフォルトの名無しさん :2005/05/08(日) 11:39:27
アプレットで表示されるカラーイメージのRとGを入れ替えて、カラーイメージを表示させるには どうしたらよいですか?
247 :
デフォルトの名無しさん :2005/05/08(日) 18:27:54
第一引数で指定したディレクトリの配下のファイルをファイルの配列で返すプログラムを教えてください。
>>246 そのままの方法取るしかないと思う
RGB要素取得するメソッドあったはずなので
取り出しておいてRとG入替えて再セットすればいい
>>247 APIにそのままのメソッド載ってるよ
249 :
デフォルトの名無しさん :2005/05/11(水) 04:00:22
問題はまず画像を取り込んで以下の作業をした画像を表示するというものです 1.垂直方向に向きを変える 2.水平方向に向きを変える 3.時計回りに90度、反時計回りに90度回転させる 1と2はできたのですが3がどうしてもうまく出来ません。 たぶん配列の操作がうまく出来ていないからだと思います。 分かる方は教えてください。
>>249 参考にしてみて
public class
Q51_249 {
static void
Show( int[][] p ) {
for ( int y = 0; y < p.length; y++ ) {
int[] w = p[ y ];
for ( int x = 0; x < w.length; x++ ) System.out.print( "\t" + w[ x ] );
System.out.println();
}
}
public static void
main( String[] p ) {
int wSH = 2;
int wSW = 3;
int[] wS[] = { { 11, 12, 13 }, { 21, 22, 23 } };
Show( wS );
int[] wD[] = { { 0, 0 }, { 0, 0 }, { 0, 0 } };
for ( int y = 0; y < wSH; y++ ) {
for ( int x = 0; x < wSW; x++ ) wD[ x ][ - y + wSH - 1 ] = wS[ y ][ x ];
}
Show( wD );
}
}
251 :
デフォルトの名無しさん :2005/05/12(木) 11:44:20
>>251 こんな親切な出題はじめてみた。もう一晩考えなさい。
クラス変数で int randtbl[] = new int[100]; で、プログラム中に int i=0; while(true) { randtbl[i] = (int)(Math.random()*100); i++; if(i>100)break; } があるとプログラムが停止しちゃうんだけどどうして? Math.random()のところで停止してるようなんだけど、 いまいちわからないんです。
>>253 配列の長さと添え字についてよく考えてみろ
>>253 どこを突っ込んだらいいのか悩むが
> if(i>100)break;
i == 100 のときどうなるか考えてみ。
ていうか、for 使わないのは何かわけでもあるんかいな?
256 :
デフォルトの名無しさん :2005/05/14(土) 16:33:43
すみません、どなたか教えてください。
>>183 さんが作ってくれたプログラムに、最後の仕様変更が来ました・・・。
仕様変更
コマンドはボタンとしてアプレット上に表示されている。
以下のように必要なパラメータの入力とマウスクリックによる長方形の
指定を行ってからコマンドを選択する。
・create
-幅、高さ、x座標、y座標、色をテキストボックスに入力する。
・move
-マウスクリックで対象の長方形を指定する。
-x方向の移動距離をテキストボックスに入力する。
-y方向の移動距離をテキストボックスに入力する。
・expand
-マウスクリックで対象の長方形を指定する。
-x方向の倍率をテキストボックスに入力する。
-y方向の倍率をテキストボックスに入力する。
・shrink
-マウスクリックで対象の長方形を指定する。
-x方向の倍率をテキストボックスに入力する。
-y方向の倍率をテキストボックスに入力する。
・delete
-マウスクリックで対象の長方形を指定する。
・deleteAll
・intersect
-マウスクリックで対象の長方形を2つ指定する。
以下のコマンドは実装しない。
・displayBoard
・save
・exit
どうか、お願いいたします。
258 :
デフォルトの名無しさん :2005/05/14(土) 16:52:23
点数の分布をヒストグラムとして表示するプログラムを作りなさい。 0~100の整数をキーボードから繰り返し読み込み(-1が入力されたら 終わり),0点台(0~9点),10点台(10~19点),...,90点台, 100点の 人がそれぞれ何人いるかをヒストグラムで表示しなさい。 って問題が分からないとですorg 配列、if、for文でできそうなのですが・・・。
259 :
デフォルトの名無しさん :2005/05/14(土) 17:31:36
配列をlistで返したいのですがどうやればいいのですか?
260 :
デフォルトの名無しさん :2005/05/14(土) 17:59:11
>>258 オブジェクト指向でないバージョン
import java.io.*;
public class Q258 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int[] histgram = new int[11];
try {
String line = null;
while ((line = in.readLine()) != null) {
try {
int value = Integer.parseInt(line);
if (value == -1) {
break;
}
if (value < 0 || 100 < value) {
throw new NumberFormatException();
}
histgram[(value/10)]++;
} catch (NumberFormatException e) {
System.out.println("0~100の整数値を入れろゴラ");
}
}
} finally {
in.close();
}
for (int i = 0; i < histgram.length; i++) {
System.out.println((i*10) + "点台\t" + histgram[i]);
}
}
}
261 :
デフォルトの名無しさん :2005/05/14(土) 18:05:05
>>259 オブジェクトの配列をList化するならArraysクラスのasListメソッドを利用する。
primitive型の配列の各要素をList化したいのであれば、
標準のAPIにはないので自作するか、
Jakarta Commons LangのArrayUtilsクラスを利用する。
使用しているJDKが5.0以上であれば、AutoBoxingが実装されているので
Primitive型の配列でもArrays.asListメソッドで変換できる。
263 :
デフォルトの名無しさん :2005/05/15(日) 02:24:04
>>262 TurtleappletクラスとTurtleクラスは同一パッケージ内なのでimportする必要なし。
これってキャベツの絵が描いてある(お世辞にも良書とは言えない)本のサンプルじゃないのけ?
265 :
デフォルトの名無しさん :2005/05/15(日) 11:09:19
>>260 ありがとうございます!!
ただ、俺のレベルで260さんの文を書くとバレると思うので、
try 、catch、finally(まだ習っていないので)抜きでオブジェクト指向
バージョンもお願いできますか?それとどのような勉強をすれば260さんの
ようにプログラミングできるようになるのかも教えて下さい。
この参考書使えばいいとかでも構わないので。
266 :
デフォルトの名無しさん :2005/05/15(日) 11:16:55
宿題スレで聞けと言われたのでここで質問させてください。 今配列について勉強してますが、ある問題が分かりません。 「一連の整数(1~100まで)を5つ入力し,その中の最大値と最小値を表示する プログラムを作る.」 これってif文やfor文もつかうんですよね?私が考えたのは public class hairetu { public static void main(String[] args) { double[]x = new double[5]; 最初の値と次の値を比較(小さいほう又は大きいほうを覚える) その値と次の値を比較 (``) } } ってかんじで、細かい文の構成が浮かびませんor2 できる人にとっては簡単かもしれませんがよかったら教えてください。 それとKeyboardValueをインストールしたのですが、使い方が分かりません。 classを作るのですか?
>>262 下のURLに傲慢な添削と解答例を載せました。参考程度にどうぞ。
ttp://www.uplo.net/dl.html ファイル:244
パスワード:answer
ちなみに、リコンパイルするときはコマンドプロンプトで
..\解答例>javac main\Turtleapplet.java
と入力してください。
>>268 ありがとうございます。添削までしてくれて本当に助かります。
是非とも復習と今後の勉強の参考にさせて頂きます。又この課題や
別の課題でなんかあったら質問するので宜しくお願いします。
課題が出ましたが、ちょっと解けそうにありません。 どなたかよろしくお願いします。 [MyArray.java:昇順配列の定義] package binarySearch; // 配列と格納されているデータの数を記憶するクラス public class MyArray { int[] array = null; int count; // @param n 格納するデータの数の上限。1以上であること public MyArray( int n ) { array = new int[n]; count = 0; }
/ 配列内に昇順にデータを格納するメソッド @param x 新たに格納する整数値/ public void ascendingInsert( int x ) { if( count == array.length-1) { System.out.println("これ以上データを挿入できません"); return; } array[count] = x; if( count > 0 ) { for(int i=0; i<count; i++) { if( array[i] == array[count] ) { count--; break; } else if( array[i] > array[count] ) { int work = array[i]; array[i] = array[count]; array[count] = work; } } } count++; }
/2分探索メソッド @param x 探索する整数 @return 配列 array 内の値 x の位置を返す。存在しない場合は -1 を返す/ public int bSearch( int x ) { int first = 0; int last = count-1; while( first <= last ) { int m = (first+last)/2; System.out.println( x+"と"+array[m]+"を比較" ); if( array[m] == x ) { return m; } else if( array[m] < x ) { first = m+1; } else { last = m-1; } } return -1; } //配列内のデータを標準出力に出力 public void show() { for(int i=0; i<count; i++) { System.out.print (array[i]+" "); } System.out.println(); } }
以上のプログラムに、データ削除メソッドを追加せよ、というものです。 作成手順が挙げられていたので記しておきます。 ・x を MyArray.bSearch( x ) を用いて探索し、存在しない場合は削除できないことをメッセージで返し終了 ・x の後ろにも他のデータがあるなら、後ろのデータをすべて1つずつ前に詰める( x が最後尾ならこの操作はいらない)。 このとき、x は1つ後ろのデータによって重ね書きされて消える ・データの個数 count を1つ減らす です。 お願いします。
>>270 メソッドdelete()をクラスMyArrayに追加してください。
/**
* 配列から指定された値を削除
* @param x 削除する値
*/
public void delete( int x ) {
// 探索して配列の何番目にあるかを取得。
int pos = bSearch( x );
// 配列内に消去する値が存在しない場合
if( pos == -1 ) {
System.out.println( "値 " + x + " は配列内に存在しないので削除できません。" );
return;
// 配列内に消去する値が存在する場合
} else {
for( int i=pos; i<count; i++ ) {
array[i] = array[i+1];
}
count--;
System.out.println( "配列から値 " + x + " を削除しました。" );
}
}
274さん、275さんありがとうございます! 自宅に帰ったらやってみます。
277 :
デフォルトの名無しさん :2005/05/15(日) 17:38:57
>>267 ,274さん
ありがとうございます!!早速やってみます。
報告は試してからにしろよボケども
279 :
デフォルトの名無しさん :2005/05/15(日) 18:05:45
>>260 コンパイルには成功したのですが、実行結果が表示されません。
Enterキーを押したら
「0~100の整数値を入れろゴラ」
とだけでました。試しに整数とか適当にいれましたが何も起こりません。
どうすれば結果が出るのですか?
280 :
デフォルトの名無しさん :2005/05/15(日) 18:23:27
お、いるな。自分よりレベルが低い人を見るとケチつけずにはいられないケツの穴の小さい香具師w
>>279 それだと、永久にwhileループおわらない
問題見ていないけど
"Q"か"q"押せばおわるように
whileループの先頭に↓いれてみれば?
if(line.equalsIgnoreCase("q")){
break;
}
282 :
260 :2005/05/15(日) 18:44:00
>>279 >>281 問題文に-1を入力したら終了って書いてあるんだが・・
出題者って問題すら読んでないのか。
283 :
260 :2005/05/15(日) 18:48:17
追記すると、 Readerがnullを返す条件はEOFを入力された場合。 EOFはWindowsはCtrl+Z Linuxの場合はCTRL+D
>>260 ところで
in.close();は必要なのか?
285 :
274 :2005/05/15(日) 18:51:30
>>266 すみません、要求された用件を満たしていませんでした。ソースを直しておきましたので下のものを参考にして下さい。
ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=24113 最小値と最大値を求めるだけでしたら、上の25-27行目を消して、以下のようなコードを差し込んでも大丈夫です。
//とても乱暴なコードここから
int max = Math.max(Math.max(Math.max(Math.max(intArray[0], intArray[1]), intArray[2]), intArray[3]), intArray[4]);
int min = Math.min(Math.min(Math.min(Math.min(intArray[0], intArray[1]), intArray[2]), intArray[3]), intArray[4]);
System.out.println("最小値: " + min);
System.out.println("最大値: " + max);
//ここまで
286 :
260 :2005/05/15(日) 19:02:53
標準入出力に対してはcloseしてはいけないけど、 ラッパークラスに対してはcloseしないとまずいんじゃないの? ストリームをインスタンス化してるわけだし。
288 :
デフォルトの名無しさん :2005/05/15(日) 19:13:44
オセロゲームを作っています。 ポインタがマス目の上にのっかったら 四角い枠がでるようにしたいのですが うまい方法が思いつきません。 マスからポインタをはずすと枠も消えるようにしたいです。 だれかご教授ねがいますm(_)m
289 :
デフォルトの名無しさん :2005/05/15(日) 19:17:52
>>287 なるほどね
でも、ラッパークラスも中で子のストリームを
public void close() {
child.close();
}
していると思うんだ
290 :
260 :2005/05/15(日) 19:42:30
>>289 closeしちゃまずいですね(^-^; ごめんなさい。
ラッパークラスのcloseメソッドはコンストラクタで指定したストリームをcloseする実装になっているので、
System.inも閉じちゃうようです。
orz
>>288 それ宿題なのか?という突っ込みはさておき、
MouseMotionListenerのmouseMoved()でマウス座標からどのマスにポインタがあるかを求めて、
それが前回と違っていたらそのマスに枠を描画するようにフラグ立てて再描画すればいい。
292 :
288 :2005/05/15(日) 21:45:24
>>291 さん
あほみたいにmouseEnteredでやろうとしてました・・・
どーもです
293 :
288 :2005/05/15(日) 21:48:06
ちなみに自由課題の宿題でした。 今はコンピュータ対戦機能の実装でつまってます。
>>268 さんに書いててもらったプログラムは無事にエラー無く動きました。
色々な形を作ってコンパイルしても問題無しです。本当に有難う御座いま
す。又
>>1 さんのルールをしっかり読んでいなくてすみません。今度から気
をつけます。
1.int型の配列data「500×300」がある。 このデータの配列を逆(上下・左右)にするプログラムをclass arrayの下に作り、 class ex1(メイン)から起動するようなプログラムを作れ。 2.1で反転したdataに対して、以下の演算を施した結果の配列EDGE[500×300]を求めて、 data+EDGE(加算)を行った結果をdata配列に入れるプログラムを作れ。 2 2 data[i][j]= Σ Σdata[i+k][j+l]*W[R][l] k=0 l=0 考え方はW[3×3]のラプラシアンフィルターを使う。 よろしくお願いします。
296 :
258,266 :2005/05/16(月) 02:04:02
>>281 ,282,274
みなさんありがとうございます。
おかげさまで無事できました。感謝してます☆
297 :
デフォルトの名無しさん :2005/05/16(月) 02:05:37
コンパイルするときに「')'がありません」というエラーメッセージが出るのですが、 ()の数は合っています・・・。 どのような原因が考えられますか?
298 :
291 :2005/05/16(月) 04:35:09
>>293 なるほど自由課題ね。
コンピュータ対戦だけど、どのレベルで作るつもり?
簡単な作りで良ければ、打てるマスをリストアップし、それぞれのマスに打った場合の石の数の数の変化を
数値にして評価する評価関数に渡して結果の最も大きいマスに打たせればおけ。
とりあえず全く先を考えずにその手番に取れる石の数が最も大きいマスに打つ1手読みCPUでも作って動かしてみるといい。
そのあとはその評価をスタックさせて、n手読みの評価を行って比較するとか、
評価関数を石の数だけでなく、それぞれの石の価値を考慮した物にするとか・・・
スタック数が多くなると調べるループの数が膨大になるので、枝切りを考える必要がある。
この辺の話はググると無数に出てくるので探してみ。
299 :
288 :2005/05/16(月) 06:47:27
>>291 さん
まったくその通りなんですが、
ためしにググって出てきたソースを自分のに絡めてみたんですがうまく実行できず・・・
とりあえずはどこでもいいから置くような、園児並みの知能からはじめようかと思ってます。
最悪、人対人のゲームになりますが・・・藁
一日あるのでやってみようかと思います。
300 :
デフォルトの名無しさん :2005/05/16(月) 17:07:10
>>256 の問題なんですが、教わった内容より遥かに難しくてかなり参っています。
どなたか是非教えて頂けませんでしょうかorz
何方か、定期的にあるメソッドを呼び出す、又はそれを解除する、といった処理方法を教えて頂けないでしょうか? 例えば、5000ミリ秒毎にReadTbl(DBのテーブルを検索してA値を取得する既存のもの) という名前のメソッドを呼び出し、Aの値を見て5000ミリ秒毎の監視を続けるor解除を決定する、といった感じです。 よろしくお願いします。
いつからここは質問スレッドになったんだ
303 :
デフォルトの名無しさん :2005/05/16(月) 21:00:13
ttp://hp.vector.co.jp/authors/VA012735/ のサイトの古いほうの花火みたいなんをクリックした地点で爆発させたいのだが、どうすればいいでしょうか?
ソースみてもどこをコピればいいかわかりません。今クリックしたとこに絵なら(四角とか)ならだせるのは作れたのですが。。。花火そのもののグラフィックがどのようにすればいいかわかりません。
自由課題です。
教えてください。
304 :
デフォルトの名無しさん :2005/05/16(月) 21:30:07
>>301 一度解除したらそれ以降はそのメソッドを呼び出さなくても良いのであれば、次のでいいのでは?
while(true){
Object A = ReadTbl();
//Aのチェック後、
//監視を続ける場合
Thread.sleep(5000);
//解除する場合
break;
}
>>303 見た感じ、パーティクルで処理してるっぽいね。
「パーティクル」でぐぐればサンプル沢山出てきそうだ。
306 :
デフォルトの名無しさん :2005/05/16(月) 22:04:46
パーティクルむづいです。あきらめます。。。。 ありがとうございました。
質問スレッドで無視された・・・申し訳ないけどこっちにマルチさせてもらいますつД`) Swing jtableの中にボタンを配置する方法がわかりません。 googleで検索したら、 tablemodelを実装した別クラスを用意しなければならないって書いてるけど、上手くできません。 誰かサンプルのコードを書いてくれませんか。お願いします。
308 :
デフォルトの名無しさん :2005/05/16(月) 23:01:50
>>307 それ、非常に難しかったのを覚えています
つーか、結局それできなかったし俺
SunのCoreJava2っていうでかい本があって
それに載っているのはわかっているけど・・・
Amazonで「Core Java」で検索してください いくつか種類あるけど 赤いやつです
参考にしてください
今となっては内容古いけど、かなりいい情報がある
309 :
307 :2005/05/16(月) 23:10:29
>>308 情報ありがとう。でも、本を買ってたら間に合わないんです( ´Д`)
310 :
デフォルトの名無しさん :2005/05/16(月) 23:31:23
>>309 しょうがない、俺はまったく理解できていないけど
多分ここだろうというソースを載せる
JButton b=new JButton("OK");
TableColumnModel tcm=table.getColumnModel();
TableColumn tc=tcm.getColumn(3);//3番目のカラム
tc.setCellEditor(new DefaultCellEditor(b));
てな感じになってた
311 :
デフォルトの名無しさん :2005/05/16(月) 23:34:39
アプレットでButtonを押してTextFieldに入力した文字を比較して 同じならtrue、間違っていたらfalseを表示させたいんですが コンパイルは通るんですけどButtonを押すとNullPointerが出てきます。 違う話題中すみませんが教えていだけないでしょうか。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class Game extends Applet implements ActionListener{ Button bt; TextField tf1,tf2; Graphics g; String str; public void init(){ setBackground(Color.yellow); tf1 = new TextField(apple,12); tf2 = new TextField(12); bt = new Button("判定"); add(bt); add(tf1); add(tf2); bt.addActionListener(this); }
public void actionPerformed(ActionEvent ae){ String b = ((TextField)tf2).getText();//文字を読み込む if(str.equalsIgnoreCase(b)) { g.setColor(Color.blue); g.drawString("true",100,150); }else{ g.setColor(Color.red); g.drawString("false",100,150); } } }
313 :
デフォルトの名無しさん :2005/05/16(月) 23:37:12
public void actionPerformed(ActionEvent ae){ String a = ((TextField)tf1).getText(); //←間違ってました訂正です String b = ((TextField)tf2).getText();//文字を読み込む if(a..equalsIgnoreCase(b)) //←間違ってました訂正です { g.setColor(Color.blue); g.drawString("true",100,150); }else{ g.setColor(Color.red); g.drawString("false",100,150); } } }
314 :
311 :2005/05/16(月) 23:38:57
315 :
デフォルトの名無しさん :2005/05/16(月) 23:39:15
>>312 >if(str.equalsIgnoreCase(b))
String a = ((TextField)tf1).getText();//文字を読み込む ←これがない?
String b = ((TextField)tf2).getText();//文字を読み込む
if(a.equalsIgnoreCase(b)) ←strじゃなくてaじゃない?
317 :
デフォルトの名無しさん :2005/05/16(月) 23:41:40
あーgがNULLだとおもう
318 :
デフォルトの名無しさん :2005/05/16(月) 23:45:07
つうか g引っ張ってくる対象 つまり 絵を書く対象が そもそもこの中にないよ CanvasとかJPanel画面に貼り付けないと
319 :
デフォルトの名無しさん :2005/05/16(月) 23:51:09
>>318 Canvasですか。分かりました勉強してきます。
本当ありがとうございました。
320 :
295 :2005/05/16(月) 23:52:04
1を自分なりに途中までやったんですが、さっぱりわかりません。 class ex1{ public static void main (stcing[],arg){ arry f = new array(); f=process(); } } class array{ int data[500][300]; int i,j,temp; int array(int[][],data){ for(i = 1; i <= 500; i++){ for(j = 1; j <= 300; j++){ temp = data[i][j]; data[i][j] = data[500-i][300-j]; data[500-i][300-j] = temp; } } retrun array; } } void process(){ array(data); sxstem.out.print|n("逆配列="+data); } 2のほうはマジでお手上げなのでお願いします。
321 :
295 :2005/05/16(月) 23:53:08
>>320 3行目のarryはarrayの間違え。
322 :
デフォルトの名無しさん :2005/05/16(月) 23:55:04
>>319 すまんそれAppletだったな・・・
public void paint(Graphics g) {
g.drawString("false",100,150);
}
でいける
323 :
311 :2005/05/17(火) 00:13:51
>>322 その文をどこにどのように入れるといいんですか?
324 :
311 :2005/05/17(火) 00:16:11
すいません自己解決しました。 今日は本当にありがとうございました。
325 :
デフォルトの名無しさん :2005/05/17(火) 00:25:01
>>311 あんまAppletくわしくないけど
String result="";
public void paint(Graphics g) {
g.drawString(result, 100, 150);
}
public void actionPerformed(ActionEvent ae) {
Graphics g = this.getGraphics();
String a = ((TextField) tf1).getText();
String b = ((TextField) tf2).getText();
if (a.equalsIgnoreCase(b)) {
g.setColor(Color.blue);
result = "true";
this.update(g);
}
else {
g.setColor(Color.red);
result = "false";
this.update(g);
}
g.dispose();
}
326 :
311 :2005/05/17(火) 00:55:03
>>325 すいませんわざわざありがとうございました。
327 :
デフォルトの名無しさん :2005/05/17(火) 01:33:41
ユーザーよりHTMLファイル名を入力させて、その中からイタリック体と太字を検索するアプリケーションを作成してください!
328 :
デフォルトの名無しさん :2005/05/17(火) 01:59:38
配列のHighArrayで配列の中で一番大きな値または空の場合は-1をかえすget(Max) を追加する問題を教えてください。以下ソースです。 class HighArray { private double[] a; private int nElems; public HighArray(int max) { a = new double[max]; nElems=0; } public boolean find(double searchKey) { int j; for(j=0;j<nElems;j++) if(a[j]==searchKey) break; if(j==nElems) return false; else return true; } public void insert(double value) { a[nElems] = value; nElems++; }
329 :
デフォルトの名無しさん :2005/05/17(火) 02:02:24
>>328 続きです
public boolean delete(double value) {
int j;
for(j=0;j<nElems;j++)
if(value==a[j])
break;
if(j==nElems)
return false;
else {
for(int k=j;k<nElems;k++)
a[k]=a[k+1];
nElems--;
return true; } }
public void display() {
for(int j=0; j<nElems; j++)
System.out.print(a[j]+" ");
System.out.println(""); }}
class HighArrayApp{
public static void main(String[] args){
int maxSize=100;
HighArray arr;
arr = new HighArray(maxSize);
arr.insert(77);arr.insert(99);arr.insert(44);arr.insert(55);arr.insert(22);arr.insert(88);arr.insert(11);arr.insert(00);arr.insert(66);
arr.insert(33);arr.display();int searchKey=35;
if(arr.find(searchKey))
System.out.println("Found"+searchKey);
else
System.out.println("Can't find" + searchKey);
arr.delete(00);arr.delete(55);arr.delete(99);arr.display();
} }
330 :
デフォルトの名無しさん :2005/05/17(火) 04:38:06
もしよろしければ最大値をメソッドを返すと同時に削除するような プログラムもお願いします
331 :
301 :2005/05/17(火) 10:35:10
>>304 ありがとうございます。何とかいけそうです。どもでしたm(_ _)m
>>328 HighArrayに以下のメソッドを追加してください。max(true); とすると、最大値を返してその最大値を消します。
public double getMax(boolean delete) {
double max;
int maxElement;
if(nElems <= 0)
max = -1;
else if(nElems == 1)
max = a[0];
else
max = Math.max(a[0], a[1]);
if(nElems > 2) {
for(int i = 1; i < nElems - 1; i++) {
max = Math.max(max, a[i]);
}
}
if(delete == true && max != -1)
delete(max);
return max;
}
public double getMax() {
return getMax(false);
}
333 :
デフォルトの名無しさん :2005/05/17(火) 19:15:27
問題 整数を入れて菱形を表示させるプログラムを作りなさい for文を用いること 実行例 整数(奇数)を入れてください:3 -*- *** -*- 整数(奇数)を入れてください:5 --*-- -***- ***** -***- --*-- 整数(奇数)を入れてください:7 ---*--- --***-- -*****- ******* -*****- --***-- ---*--- お願いします
335 :
デフォルトの名無しさん :2005/05/17(火) 23:36:38
どなたか
>>256 をお願いします・・・。
もうここだけが頼りなのです・・・。
これが最後なのでぜひともご慈悲を・・・。
337 :
336 :2005/05/18(水) 00:23:25
>>336 の作成に当たって
>>183 さんのソースを利用させていただきました。
遅ればせながらお礼申し上げます。ありがとうございました。
338 :
デフォルトの名無しさん :2005/05/18(水) 00:46:22
327と重複しますが、宜しくお願いします。 ユーザーよりHTMLファイル名を入力させて、ファイルを読み込み、その中からイタリック体と太字を検索するアプリケーションを作成してください! 実行画面は、こんな感じになると思います。 HTML名を入力ください:________ イタリック体は:____________ 太字は:_____________
>>338 javax.swing.text.html.parserあたりのAPI調べてみ
出先から携帯で書いているのでソースまでは作ってやれんが勘弁してくれ。
↑のパッケージ名もうろ覚えなのでスペル間違っていたらスマソ。
340 :
デフォルトの名無しさん :2005/05/18(水) 02:56:05
↑有難う御座います。スペルは、あっています。利用の仕方が分かりませんでした。 お時間のある時に助けてください。
800×640のウィンドゥ上に100枚程度の画像をランダムに描画するプログラムがある ↓その描画部分 public void paint(Graphics g){ //描画部 Random rnd=new Random(); for(int i=0;i<image.length;i++){ int x=(int)(rnd.nextDouble()*(getSize().width-image[i].getWidth(this))); int y=(int)(rnd.nextDouble()*(getSize().height-image[i].getHeight(this))); g.drawImage(image[i],x,y,this); } } 実行すると画像が多く重なり合っているが、これを見やすいように 整理して表示できる プログラムを作成せよ。 ・ウィンドゥのサイズは変更しないこと ・できるだけ全体が見渡せること。 これをどう変更すればいいのか教えてくださいm(__)m
343 :
デフォルトの名無しさん :2005/05/18(水) 13:24:49
public class hoge { public hoge(){} void process() throws IOException{ while(true){ System.out.println("整数(奇数)を入力してください:"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String num = br.readLine(); int i = Integer.parseInt(num); if(i < 1 || i % 2 == 0){ System.out.println("エラー"); } else { int space = i / 2; for(int j = 1; j < i; j+=2,space--){ System.out.println(createString(j,space)); } for(int k = i; k > 0; k = k-2,space++){ System.out.println(createString(k,space)); }}}} private String createString(int num,int space){ StringBuffer sb = new StringBuffer(); for(int i = 0;i<space;i++){ sb.append("-"); } for(int j = 0;j < num;j++){ sb.append("*"); } for(int i = 0;i<space;i++){ sb.append("-"); } return sb.toString(); }}
344 :
デフォルトの名無しさん :2005/05/18(水) 13:25:44
345 :
デフォルトの名無しさん :2005/05/18(水) 14:43:42
この問題が解けなくて困っています。どうかよろしくお願いしますm(_ _)m while文を用いて、キーボードから99が入力されるまで繰り返す処理を完成させてください。 キーボードからの入力は以下のとおりです。 BufferedReader br = new BufferedReader(new InputStreamReader(System.in), 1); String s = br.readLine(); // 文字列の入力 int a = Integer.parseInt(s);// String型をint型にする場合
346 :
デフォルトの名無しさん :2005/05/18(水) 14:43:53
コマンドシェルから入力した文字列を出力するプログラムを作成しなさい。 ソースコードファイルはprog2.javaとします。 例 コマンドシェルからjava prog1 data1 data2と入力すると実行結果は data1 data2 となります。 という問題で import java.io.*; public class prog2 { public static void main(String[] args) { for(int i=0;i>2;i++) { System.out.println(args,i.length); } } } とし、prog1.classのソースファイルパラメータに data1 data2 と記入しました。 結果 JAVA\prog2.java:9: int は間接参照できません。 System.out.println(args,i.length); と出ました。 よくわからないので修正、書き方の指導でも構いませんのでアドバイスお願いします。
347 :
347 :2005/05/18(水) 15:04:02
自己解決しました;汚して申し訳。 一応できたの貼っておきます(`・ω・´) import java.io.*; public class prog2 { public static void main(String[] args) { for(int i=0; i<args.length; i++) { System.out.println(args[i]); } } }
349 :
デフォルトの名無しさん :2005/05/18(水) 16:16:15
>>345 意味がよくわからんけど・・・
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in), 1);
String s;
while(true){
System.out.print("99を入れるまで終わらん:");
try {
s = br.readLine();
int a = Integer.parseInt(s);// String型をint型にする場合
if(a == 99)
break;
//以下なんらかの処理
} catch (Exception e) {
e.printStackTrace();
}}}
こういうことか?
350 :
初心者 :2005/05/18(水) 21:49:35
皆さん、ソース作成をヨロシクお願いします。 簡単な物で構いませんので、作成お願いします。 【問題】Javaアプリケーションを起動する時にコマンドラインに指定する 2つの数値を、四則計算出来るプログラムを作成せよ。 【条件】・数値はint型を用いること。 ・エラー表示にはtry-catchを用いること。 【実行結果表示例】演算結果:○○
351 :
初心者 :2005/05/18(水) 21:59:33
↑の350は 某大学のプログラミング入門講義の課題です。
352 :
デフォルトの名無しさん :2005/05/18(水) 22:06:40
演算子もコマンドで受け取るの?
353 :
初心者 :2005/05/18(水) 22:19:34
350の【実行例】 加算の場合(1234+7890)↓ >java Shisoku 1234 addi 7890 演算子もコマンドで受け取ります。 演算子は下の4つでお願いします。 加算は、addi 減産は、minu 乗算は、bai 除算は、divi
逆ポーランドにしたい俺ガイル
355 :
デフォルトの名無しさん :2005/05/18(水) 22:35:09
356 :
初心者 :2005/05/18(水) 22:38:46
逆ポーランドの方が簡単そうですが、 try-catchの練習も兼ねてるらしいのです。 コマンドラインの引数が3つ以外の場合にエラーを表示させる等で、 try-catch文みたいです。 とにかく、よろしくお願いします。 参考にさせていただきます。
357 :
デフォルトの名無しさん :2005/05/18(水) 22:56:27
// 0 除算の結果はどうでもいい という方向性で・・・ public class Shisoku { public static void main(String[] args) { try { if ((args == null) || (args.length != 3)) throw new Exception("入力内容を確認してください 整数 addi|munu|bai|divi 整数"); if (args[1].equals("addi")) System.out.println("演算結果:" + (Long.parseLong(args[0]) + Long.parseLong(args[2]))); else if (args[1].equals("minu")) System.out.println("演算結果:" + (Integer.parseInt(args[0]) - Integer.parseInt(args[2]))); else if (args[1].equals("bai")) System.out.println("演算結果:" + (Long.parseLong(args[0]) * Long.parseLong(args[2]))); else if (args[1].equals("divi")) System.out.println("演算結果:" + (Double.parseDouble(args[0]) / Double.parseDouble(args[2]))); else throw new Exception("演算子を確認してください"); } catch (NumberFormatException e) { System.err.println("数値を入力してください"); } catch (Exception e) { System.err.println(e.getMessage()); } } }
358 :
デフォルトの名無しさん :2005/05/18(水) 22:59:26
>>357 しまった、入力値が整数の判定は自分で付け加えてくれ あれだと 小数点もいけてしまう
359 :
初心者 :2005/05/18(水) 23:04:29
>357、358 ありがとうございます。 最後に質問させてもらいたいのですが、 除算でDouble型を用いているんですよね?
360 :
デフォルトの名無しさん :2005/05/18(水) 23:37:02
361 :
デフォルトの名無しさん :2005/05/18(水) 23:40:09
つうか、引き算もLongだな orz
JTableの一つのセルにだけチェックボックスってできますか?
363 :
デフォルトの名無しさん :2005/05/18(水) 23:46:14
>>362 できるよ 戻り値をBooleanにすればいい
>>363 すいません。ちょっとサンプルコードを書いてくれませんか?
TableCellEditorを実装したクラスを作るんですよね?
367 :
デフォルトの名無しさん :2005/05/19(木) 22:08:42
アメリカの学校の宿題なのですが、ソースもしくは、サンプルがあるURL教えて下さい! JFCを利用してグラフ化アプリケーションかアプレットを作成。(棒グラフ、折れ線グラフおよびデータを別々のタブとして作成)ユーザが棒グラフか折れ線グラフのどちらかを選んで切り替えを可能にする。
問題 Dequeにもとづいてスタッククラスを作れ。 Stackクラスと同じメソッドと機能がなければならない。 以下Stackクラスのソースです。 public class StackX { private int maxSize; private long[] stackArray; private int top; public StackX(int s) { maxSize = s; stackArray = new long[maxSize]; top = -1; } //----------------------------- public void push(long j) {stackArray[++top] = j;} //----------------------------- public long pop() {return stackArray[top--];} //----------------------------- public long peek() {return stackArray[top];} //----------------------------- public boolean isEmpty() {return (top == -1);} //----------------------------- public boolean isFull() {return (top == maxSize - 1);} //----------------------------- } よろしくおねがいします。
369 :
デフォルトの名無しさん :2005/05/20(金) 12:27:49
LinkedList使えば、簡単に出来そう。 出先なんで、ソースは出せんけども。
370 :
デフォルトの名無しさん :2005/05/20(金) 13:22:38
階乗を見つけるプログラムを書きたいんですけど、教えてもらえますか?
>>370 見つける?計算するじゃなくって?
long fuct( long a ) {
if ( a == 1 ) {
return a;
}
return a * fuct( a - 1 );
}
372 :
デフォルトの名無しさん :2005/05/20(金) 14:02:41
ありがとうございます。
373 :
デフォルトの名無しさん :2005/05/20(金) 14:23:28
宿題ではないんですけど、すみません。 コンパイルした時に 警告: [unchecked] raw 型 java.util.Stack のメンバとしての push(E) への無検査呼び出しです。 stack.push(line); って出ます。動作は問題ないんですけど、スタックをpushする前に検査するのは どのようにしたらいいのでしょうか? あと、Stack#pushとかっていう表記はどういう意味でしょうか?
375 :
デフォルトの名無しさん :2005/05/20(金) 15:53:55
J2SE5.0の話だと思うけど。 Genericsを使ってStackをインスタンス化すれば 出なくなるんじゃないかな。 >あと、Stack#pushとかっていう表記はどういう意味でしょうか? Stackクラスのpushメソッド
376 :
374 :2005/05/20(金) 16:15:49
>>375 さん、どもです。Genericsを使うっていうのやってみます。
377 :
368 :2005/05/20(金) 17:44:33
>>369 、
>>373 ありがとうございます。
LinkedListという便利なものがあったんですね、勉強になりました。
378 :
デフォルトの名無しさん :2005/05/20(金) 23:55:13
第一引数で渡したディレクトリ配下のファイルを全て取得するプログラムを教えてください。
やだ
380 :
デフォルトの名無しさん :2005/05/21(土) 00:06:48
File#list()で再帰すればほとんどできたも同然だ でもJavaのlsは、遅いよ 一つ問題(Question)がある Javaの場合、ファイルリストはキャッシュされるか否か さてどっちでしょう?
381 :
205 :2005/05/21(土) 14:23:13
入力 名字: □ 名前: □ 郵便番号: □-□ 検索 という風にjavaでプログラミングしたいのですが、どうしたらいいのでしょうか?お願いします。
エスパーの登場をお待ちください。
10個の数を入力して小さい順にソートし出力するプログラムを 教えてもらえないですか? (バブルソートのプログラム)
384 :
デフォルトの名無しさん :2005/05/21(土) 15:40:20
>>383 入力方法は
一個入れたらEnterで、10個たまったら自動的に出力でいいの
385 :
デフォルトの名無しさん :2005/05/21(土) 15:54:16
386 :
デフォルトの名無しさん :2005/05/21(土) 16:12:50
>>383 //入力値 int バージョン
public class BS {private static final int MAX = 10;public static void main(String[] args) {System.out.println(Integer.MAX_VALUE);System.out.println(Integer.MIN_VALUE);
try {int[] src = read();src = sort(src);print(src);}catch (IOException e) {e.printStackTrace();}}
public static int[] read() throws IOException {int[] src = new int[MAX];BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;int count = 0;while ((count < MAX) && ((line = br.readLine()) != null)) {try {int temp = Integer.parseInt(line);
src[count++] = temp;}catch (NumberFormatException e) {System.err.println("-2147483648~2147483647の整数を入力してください整数を入力してください");
}}return src;}public static int[] sort(int[] src) {if (src == null || src.length < 2) {return src;}
for (int i = 0; i < (MAX - 1); i++) {for (int j = 0; j < (src.length - 1); j++) {if (src[j] > src[j + 1]) {
int temp = src[j];src[j] = src[j + 1];src[j + 1] = temp;}}}return src;}
public static void print(int[] src) {for (int i = 0; i < MAX; i++) {System.out.println((i + 1) + "\t" + src[i]);}}}
387 :
デフォルトの名無しさん :2005/05/21(土) 16:55:30
10進数の数字を入れると 3進数で表示するプログラムを作ってください お願いします
ごめんなさい。作る事は出来ませんが...恐らくこうなるだろうって事だけを話します。
まず10進法から2進法にするとき、割ったあまりを並べて行きますよね?
ここで出てきた商をどんどん割って同じようにやっていきます。ここで商を格納する
配列をp[i],余りをq[i]、余りの桁数をnとすると
q[n-i]=p[i]%3;//三進数なら
となるはずです。n-iとしたのは2進法の場合直す際、逆順に数字を格納していくから
です。桁数を任意に変えられるようにするのならばp[i],q[i]は可変長配列の方がいい
と思います。メゾッドについてはgoogle検索してsunのサイトを見て下さい。
私も
>>365 で困っているので、問題を見るだけでもいいのでお願いします。
>>387 import java.io.*;
public class Radix {
public static void main(String[] args) throws IOException {
System.out.print( "10進数で数字を入力 > " );
BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
String read = br.readLine();
int number = Integer.parseInt(read);
System.out.println( Integer.toString( number, 3 ) );
}
}
IntegerのAPI使っちゃだめですか。そうですか。
三角形のそれぞれの頂点にx,yの座標値とr,g,bのカラー情報を定義し 内部を内挿補間法を用いて塗りつぶすというプログラムなんですが 教えてくださいお願いします
>>384 はい、それでいいと思います。
>>385 その本はド素人にも理解しやすい内容ですか?
もしそうであれば買いますが・・・。
(現在いい参考書を探していますがなかなか見つからないので)
>>386 ありがとうございます。
392 :
デフォルトの名無しさん :2005/05/22(日) 00:31:18
入力 名字: □ 名前: □ 郵便番号: □-□ 検索 という風にjavaでプログラミングしたいのですが、どうしたらいいのでしょうか?お願いします。
>>392 public class WhatAFoolIAm {
public static void main(String[] args) {
System.out.println(" 入力\n" + " 名字: □\n" + " 名前: □\n" + "郵便番号: □-□ 検索");
}
}
394 :
デフォルトの名無しさん :2005/05/22(日) 04:56:24
ページ内にある画像を指定してプリントアウトさせるプログラムってないんですか? ┌─────┐ │ 画 像 │ └─────┘ (プリントアウト)←ボタン 画面全体ではなくて、画像を指定したいのです。 お願いします。
ページって何だよ。 プリントアウトのボタンを押したときに、画像を印刷するような機能を考えたら良いと思うよ。 というか、なんでもいいから印刷する機能自体は作れるのか?
396 :
394 :2005/05/22(日) 05:41:21
早く答えてください!急いでるんです!
397 :
394 :2005/05/22(日) 05:42:56
まだですか? こんな質問も答えられないのですか?
398 :
394 :2005/05/22(日) 10:37:42
死ね
399 :
392 :2005/05/22(日) 12:09:09
>>393 ありがとうございます。
しかし□の部分はJtext Fieldで作りたいと思っていますので、よろしくお願いします。
400 :
デフォルトの名無しさん :2005/05/22(日) 13:09:51
ホームページ内の画像を指定して、画像のみをプリントアウトさせるための Javaがあれば教えていただきたいです。 言葉足らずで申し訳ないです。
401 :
デフォルトの名無しさん :2005/05/22(日) 13:53:30
学校の課題でプログラミング組んでみたけど動かね~! プロフェッショナルなおまいら、俺のプログラムのどこを直せばいいか教えてくれYO!言語はJavaっす。 課題: double型の乱数データのソートに要する時間を計測することで、 最小値選択法とクイックソートの比較をせよ。 実際には、ソート対象のデータ個数をコマンド引数で入力し、 Math.random()メソッドを用いて配列にデータをセットする。 TIMES=10回のソート時間を計測して、平均値を計算する。 System.currentTimeMillis()メソッドを用いること。
403 :
へたれのプログラム :2005/05/22(日) 13:57:46
public class TimeSimple { final static int TIMES = 10; static long t = 0; public static void main( String[] args ) { double[] p = new double[ Integer.parseInt( args[0] ) ]; System.out.println( "case1 : simple sort" ); sortmain( p, 1 ); System.out.println( "case2 : quick sort" ); sortmain( p, 2 ); } static void sortmain( double[] p, int sortmethod ) { for( int i = 0; i < TIMES; i++ ) { for( int j = 0; j < p.length; j++ ) { p[j] = Math.random(); } System.out.println( "Start sorting #" + i + "..." ); switch( sortmethod ) {
404 :
へたれのプログラム :2005/05/22(日) 13:59:19
case 1: t -= System.currentTimeMillis(); sort1(p); t += System.currentTimeMillis(); break; case 2: t -= System.currentTimeMillis(); sort2(p); t += System.currentTimeMillis(); break; } System.out.println( "... finished." ); } System.out.println( "Average time for sorting " + p.length + "elements: " + ( t / TIMES ) + "[msec]" ); } static boolean greaterThan( double p0, double p1 ) { return p0 > p1; }
405 :
へたれのプログラム :2005/05/22(日) 14:01:38
static void sort1( double[] p ) { for( int i = 0; i < p.length-1; i++ ) { int min = i; for( int j = i + 1; j < p.length; j++ ) if( greaterThan( p[min], p[j] ) ) min = j; double tmp = p[i]; p[i] = p[min]; p[min] = tmp; } } static void sort2( double[] p ) { qsort( p, 0, p.length-1 ); } static void qsort( double[] p, int lower, int upper ) { if( lower < upper ) { double pm = ( lower + upper ) / 2; int i = lower; int j = upper;
406 :
へたれのプログラムとエラーメッセージ :2005/05/22(日) 14:04:57
連投スマソ。これで最後 while( greaterThan( pm, p[i] ) ) i++; while( greaterThan( p[j], pm ) ) j--; if( i <= j ) { double tmp = p[i]; p[i] = p[j]; p[j] = tmp; i++; j--; } } qsort( p, lower, j ); qsort( p, upper, i ); } } } エラーメッセージ Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 30 at TimeSimple.qsort(TimeSimple.java:59) at TimeSimple.sort2(TimeSimple.java:51) at TimeSimple.sortmain(TimeSimple.java:27) at TimeSimple.main(TimeSimple.java:11)
>>399 多分、Eclipseでプログラミングしてるんでしょ?
Swing系の課題ならJBuilderを使ってみ。おどろくほど簡単にできるから。
409 :
401 :2005/05/22(日) 15:58:55
>>408 すげー!!!ばっちり動いたZE!俺6,7時間は苦しんだのにあっという間かよ!
My Godに認定しますた。あと関係ないんだけどここに書き込んでる間
Nortonが何回か反応してびびった。ウィルス流行ってるみたいだしみんなも気をつけろよ!
バイビー!!
Nortonが反応するのは心配ない。
411 :
401 :2005/05/22(日) 16:16:28
バイビー!!とか書いといて戻ってくんの恥ずかしいんだけどさ・・・
// デバッグ用
//for(int i=0; i<p.length; i++) System.out.println( i + ": " + p[i] );
てちょくちょく書いてあんだけどどういう意味があるのか教えてくれまいか?
>>410 そうなの?んじゃとりあえず安心。
単元名:プログラム演習 課題:太郎君と次郎君はお小遣いを浪費する癖があります。そこでお母さん は以下の様な貯金箱を作りました。貯金箱はキーボード入力ができ、まず 始めにユーザID、貯金箱番号、パスワードを入力する。ユーザIDは太郎君 がANI、次郎君がOTOとする。プログラムの実行はコマンドライン引数で、 java CHOKINBAKO ユーザID 貯金箱番号 パスワード で実行する。 ユーザ認証に失敗したら強制終了とする。認証が成功したらログイン ユーザの名前、貯金額を表示する。次に、キーボードから s 100 が入力され たら100円を貯金、b 200が入力されたら貯金箱から200円引き出す。 貯金額の上限は無いが、引出しがマイナスになってはならない。 それぞれの操作が終了したら現在のログインユーザの名前、貯金額を画面 に表示する(太郎君の場合、tarou 2100 と表示)。 また、q が入力されたらプログラムを終了すること。 太郎君と次郎君の、ユーザID,貯金箱番号,パスワード,貯金箱所有者名,現在の貯金額 はcoinbank.txtに以下の様に書き込まれているとする。 尚、最低限以下の関数を作成すること。 ユーザID、貯金箱番号から、貯金箱所有者名を取得するgetOwner関数、 ユーザID、貯金箱番号から、現在の貯金額を取得するgetAmount関数、 ユーザID、貯金箱番号、現在の貯金額から、ユーザ名の現在の貯金額を足す (引く)setPrice関数をそれぞれ作成せよ。 --------coinbank.txt--------- ANI,0001,tarou,anitarou,2000 OTO,0002,jirou,otojirou,1500 --------coinbank.txt--------- 提出期限:2005年5月23日 どなたかよろしくお願いします。
413 :
412 :2005/05/22(日) 18:26:04
すみません、提出期限は2005年5月25日でした。まちがえました。
414 :
デフォルトの名無しさん :2005/05/22(日) 18:42:39
>>現在の貯金額から、ユーザ名の現在の貯金額を足す (引く)setPrice関数をそれぞれ作成せよ。 addPriceにしたい・・・
415 :
デフォルトの名無しさん :2005/05/22(日) 18:43:36
>>412 これってトランザクション考える必要あるの?
416 :
へたれ初心者 :2005/05/22(日) 18:45:56
【お願いします】 2つの数値を四則演算出来るプログラムを大学の課題で作成しています。 以下のプログラムを作ってみましたが、 抽象クラス、Tasuクラス、Hikuクラス、Kakeruクラス、Waruクラス、メインクラス を用いたプログラミングに変更していただけませんか? // 0 除算の結果はどうでもいい という方向性で・・・ public class Shisoku { public static void main(String[] args) { try { if ((args == null) || (args.length != 3)) throw new Exception("入力内容を確認してください 整数 addi|munu|bai|divi 整数"); if (args[1].equals("addi")) System.out.println("演算結果:" + (Integer.parseInt(args[0]) + Integer.parseInt(args[2]))); else if (args[1].equals("minu")) System.out.println("演算結果:" + (Integer.parseInt(args[0]) - Integer.parseInt(args[2]))); else if (args[1].equals("bai")) System.out.println("演算結果:" + (Integer.parseInt(args[0]) * Integer.parseInt(args[2]))); else if (args[1].equals("divi")) System.out.println("演算結果:" + (Integer.parseInt(args[0]) / Integer.parseInt(args[2]))); else throw new Exception("演算子を確認してください"); } catch (NumberFormatException e) { System.err.println("数値を入力してください"); } catch (Exception e) { System.err.println(e.getMessage()); } } }
417 :
412 :2005/05/22(日) 19:18:33
>>414 すみません、指定がsetPrice関数なんです。
>>415 貯金(引き出し)したらその結果を画面に表示し、続けて貯金(引き出し)
した場合は前の操作の結果に対して足す(引く)を行いその結果を画面に
表示します。貯金(引き出し)操作を止め、プログラムを終了する際に
coinbank.txtに最後の結果を書き込みます。
よろしくお願いします。
418 :
デフォルトの名無しさん :2005/05/22(日) 19:49:33
>>416 そのまえに、なんでInteger.parseIntに書き直しているのか・・・・
入力される値の上限下限決まっているなら先に書けよ
419 :
デフォルトの名無しさん :2005/05/22(日) 19:51:57
>>417 2人同時に書き込んだらどうするの?
同じIDで複数の人がこのプログラム立ち上げたらどうすんの?
420 :
デフォルトの名無しさん :2005/05/22(日) 19:53:47
>>416 >以下のプログラムを作ってみましたが、
って、
>>357 が作った奴じゃないのか?
おまえが作ったわけではあるまい
421 :
デフォルトの名無しさん :2005/05/22(日) 19:56:51
//どうせユーティリティーなのだからstatic メソッドで・・・ if (args[1].equals("addi")) System.out.println("演算結果:" + (Tasu.execute(args[0],args[2]))); else if (args[1].equals("minu")) System.out.println("演算結果:" + (Hiku.execute(args[0],args[2])); else if (args[1].equals("bai")) System.out.println("演算結果:" + (Kakuru.execute(args[0],args[2])); else if (args[1].equals("divi")) System.out.println("演算結果:" + (Waru.execute(args[0],args[2])); else throw new Exception("演算子を確認してください");
422 :
416です :2005/05/22(日) 20:18:33
357さんに作っていただいた物です。 357さんありがとうございました。 int型に変更しています。 【課題】 スーパークラスとしてabstractを用いたクラスを作成し、 サブクラスとして、Tasuクラス、Hikuクラス、Kakeruクラス、 Waruクラスを作成しなさい。 その他は416を参照してください。
423 :
412 :2005/05/22(日) 20:20:13
>>419 すみません、説明不足でした。
このプログラムはローカルマシンにあるcoinbank.txtに対して行うプログラム
です。スレッドではないです。太郎君の処理が行われている時は次郎君の処理
は考えなくてよいです。よろしくお願いします。
424 :
デフォルトの名無しさん :2005/05/22(日) 20:21:34
intに変更したら答え変わっちゃうよね?わかってる?ちなみにminuもLongじゃないとダメだから・・・
>スーパークラスとしてabstractを用いたクラスを作成し、
>サブクラスとして、Tasuクラス、Hikuクラス、Kakeruクラス、 Waruクラスを作成しなさい。
って言うことは
>>421 のようなやりかただと回答としては×って言うことか
425 :
デフォルトの名無しさん :2005/05/22(日) 20:28:22
スーパクラスをOperationとして Map map=new HashMap(); map.put("addi",new Tasu()); map.put("minu",new Hiku()); map.put("bai",new Kakeru()); map.put("divi",new Waru()); って初期化やっておいて Object o=map.get(args[1]); if(o!=null) System.out.println(((Operation)o).execute(args[0],args[2])); else throw new Exception("演算子を確認してください"); かな?先生の意図しているやり方は
>>421 の言いたい気持ちはよく分かるが
今回の問題だと
抽象クラス#execute()を抽象メソッドにして
それぞれの計算用クラス(Tasu, Hiku, …)をそのサブクラスにして
それらでexecute()を実装する
ということを求めているのだろう。
型は全部統一した方が楽だね。
427 :
416です :2005/05/22(日) 20:29:28
>424さん Long型でもint型でもOKっす。 421のやり方だとダメなんです。 ヨロシクお願いします
428 :
421 :2005/05/22(日) 20:29:56
429 :
426 :2005/05/22(日) 20:34:53
>>428 の言いたい気持ちはよく分かるが
そういわれても
>>425 と
>>426 はカキコが18秒しか離れていないのだよ。
つまり俺は425を読まずに426書いた。OK?
430 :
デフォルトの名無しさん :2005/05/22(日) 20:44:29
>Long型でもint型でもOKっす。 ほんとかよ?桁あふれわかっているのか 1000000 bai 1000000 ってやってみろよ そのintバージョンで
>>430 それを言ったらlongを溢れた場合のことも考えなきゃいけない。
432 :
デフォルトの名無しさん :2005/05/22(日) 20:51:04
433 :
デフォルトの名無しさん :2005/05/22(日) 20:52:18
>>432 の言いたい気持ちはよく分かるが
そういわれても
>>430 と
>>431 はカキコが55秒しか離れていないのだよ。
つまり俺は430を読まずに431書いた。OK?
435 :
へたれ初心者 :2005/05/22(日) 22:46:30
これまでのカキコに漏れがありましたので、再度、問題を記載します。皆さんヨロシクお願いします。 【問題】 2つのint型数値を四則計算出来るプログラムを作成せよ。その際、スーパークラスとして抽象クラス、サブクラスとしてTasuクラス、 Hikuクラス、Kakeruクラス、Waruクラスを作成せよ。 プログラム実行形式は、 『>java Shisoku 数値 演算種別 数値』とし、加算の場合は「pl」、 減算の場合は「mn」、乗算の場合は「ba」、除算の場合は「dv」を 演算種別として用いること。 以前357さんにソースを作って頂いたのですが、 スーパークラスを用いたいのです。 皆さんヨロシクです
436 :
デフォルトの名無しさん :2005/05/22(日) 22:51:13
>>416 そのcoinbank.txtってのは、どういう書式で情報もってるんかね?
>>435 ('A`) モウー サイショカラモンダイダシテッテ イッテルデショー
コタエルノ マンドクセ
438 :
412 :2005/05/22(日) 23:06:29
>>436 もしかして
>>416 ではなく、
>>417 のcoinbank.txtですか?
ユーザID:char型、サイズ3
貯金箱番号:varchar2、サイズ20
パスワード:char型、サイズ20
貯金箱所有者名:varchar型、サイズ40
現在の貯金額:int型
です。また、それぞれnullはだめです。
>438 なんでcoinbank.txtの書式を聞かれてるのにプログラム内部のデータ構造を答えてるんだよ。 しかもデータ型決まってるなら先にいえよ。
もまえら落ち着け。
>>412 をよく嫁。
太郎君と次郎君の、ユーザID,貯金箱番号,パスワード,貯金箱所有者名,現在の貯金額
はcoinbank.txtに以下の様に書き込まれているとする。
--------coinbank.txt---------
ANI,0001,tarou,anitarou,2000
OTO,0002,jirou,otojirou,1500
--------coinbank.txt---------
そのままじゃね?
>>435 教官にせめて演算種別の元々の言葉を統一しろと言ってやれ
plus minusとdivはわかるがdivならaddとsubにしろって言いたいし
掛け算のbaって一体なんなんだよ・・・baiか?
442 :
デフォルトの名無しさん :2005/05/23(月) 00:56:51
ああ、書いてあったのね。スマソ つか、charとかvarcharとかvarchar2とか・・・(;´Д`)
444 :
デフォルトの名無しさん :2005/05/23(月) 03:42:58
キュー(待ち行列)の問題なのですがclass Queueを書き換えて待ち行列の 内容を表示したいのですがよろしくお願いします。以下ソースです。待ち行列を 挿入するクラスは省略してます import java.io.*; class Queue{ private int maxSize; private long[] queArray; private int front; private int rear; private int nItems; public Queue(int s){ maxSize=s; queArray=new long[maxSize]; front=0; rear=-1; nItems=0; } public void insert(long j){ if(rear==maxSize-1) rear=-1; queArray[++rear]=j; nItems++; }
445 :
444 :2005/05/23(月) 03:43:51
続きです。 public long remove(){ long temp =queArray[front++]; if(front==maxSize) front=0; nItems--; return temp; } public long peekFront() { return queArray[front]; } public boolean isEmpty() { return(nItems==0); } public boolean isFull(){ return(nItems==maxSize); } public int size(){ return nItems; } }
800×640のウィンドゥ上に100枚程度の画像をランダムに描画するプログラムがある public void paint(Graphics g){ //描画部分 Random rnd=new Random(); for(int i=0;i<image.length;i++){ int x=(int)(rnd.nextDouble()*(getSize().width-image[i].getWidth(this))); int y=(int)(rnd.nextDouble()*(getSize().height-image[i].getHeight(this))); g.drawImage(image[i],x,y,this); } } 実行すると画像が多く重なり合っているが、これを見やすいように 整理して表示できる プログラムを作成せよ。 ・ウィンドゥのサイズは変更しないこと ・できるだけ全体が見渡せること。 どう変更すればいいのですか?
447 :
390 :2005/05/23(月) 09:22:27
どなたかよろしくお願いします
448 :
M.B. :2005/05/23(月) 12:06:20
>>390 > 内部を内挿補間法を用いて塗りつぶすというプログラムなんですが
>>1 > 3. 数学問題は「○×法でせよ」だけでなく、その解を出す為の数式や
> 前提条件などを具体的かつ詳細に説明してください。
「内挿補間法」ってなんだ?
449 :
デフォルトの名無しさん :2005/05/23(月) 13:34:49
どなたかお願いします m(__)m ランダムに7文字の文字列を20個出力するプログラムを作る。 その文字列はA,B,C,D,E,F,G,H、Iのいづれかとする。 コンパイル、実行する。 コマンドラインから引数を1つ指定して実行する。 例えばaaaを引数として、実行する。 >java Sample aaa ランダムな7文字の文字列の先頭にaaaを結合した文字列を20個表示する。
450 :
適当 :2005/05/23(月) 14:03:28
public class Sample { public static void main(String[] args) { String argstr = ""; if(args.length > 0) { argstr = args[0]; } char chr[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' }; String str; for(int i = 0; i < 20; i++) { str = argstr; for(int j = 0; j < 7; j++) { int rnd = (int)(Math.random() * chr.length); str = str + chr[rnd]; } System.out.println(str); } } }
451 :
デフォルトの名無しさん :2005/05/23(月) 15:06:32
変数が2変数のときのコンストラクタとオブジェクトの作り方がわかりません ↓なんですがどうしたらいいの? クラス class AAA { double x; double y; コンストラクタ AAA(double ) { this. = ; } public double zzz() { return(x * y); } } オブジェクト AAA aaa = new AAA(); double ZZZ =aaa.zzz(); System.out.println("ZZZ" + ZZZ);
//コンストラクタ AAA(double xx, double yy) { x = xx; y = yy; } //オブジェクト生成 AAA aaa = new AAA(xxx, yyy);
453 :
デフォルトの名無しさん :2005/05/23(月) 15:23:55
>446 画像の大きさと形は? ・全部同じ大きさと形だったりすると話は非常に簡単 ・画像の大きさ*数が配置するスペースに対しじゅうぶん小さいなら割と適当に並べてもいいのでやはり簡単 ・画像の大きさ*数がキャンパスの大きさに対しギリギリだったりすると配置をそれなりに最適化しないといけない ・画像の大きさ*数を考えるとどうやっても重なり合うようなら、どういう状態を「見やすい」とするかは個人の主観による
455 :
444 :2005/05/23(月) 16:26:42
444です。どなかたお願いします
ナップザック??
>>435 > その際、スーパークラスとして抽象クラス、サブクラスとしてTasuクラス、
Hikuクラス、Kakeruクラス、Waruクラスを作成せよ。
「設計に問題あり。」と答えてやれ。まじで。
その先生がどんな答えを想定してるのかがわからん・・・。
459 :
457 :2005/05/23(月) 18:07:38
一応作ってみた。 class Shisoku{ public static void main(String[] args){ try{ if(args.length != 3){ throw new ArrayIndexOutOfBoundsException("引数の数は3だって"); } String operator = args[1]; int i1 = Integer.parseInt(args[0]); int i2 = Integer.parseInt(args[2]); AbstractShisoku as = null; if(operator.equals("pl")){ as = new Tasu(i1, i2); }else if(operator.equals("mn")){ as = new Hiku(i1, i2); }else if(operator.equals("ba")){ as = new Kakeru(i1, i2); }else if(operator.equals("dv")){ as = new Waru(i1, i2); }else{ throw new IllegalArgumentException("そんなコマンドはないよ"); } as.calc(); as.print(); }catch(NumberFormatException nfe){ System.err.println("int型つってんだろうがよ"); }catch(Exception e){ System.err.println(e.getMessage()); } } }
460 :
457 :2005/05/23(月) 18:08:26
abstract class AbstractShisoku{ protected int i1; protected int i2; protected int answer; public AbstractShisoku(int i1, int i2){ this.i1 = i1; this.i2 = i2; this.answer = 0; } abstract public void calc(); public void print(){ System.out.println("演算結果:" + answer); } } public class Tasu extends AbstractShisoku{ public Tasu(int i1, int i2){ super(i1, i2); } public void calc(){ answer = i1 + i2; } }
461 :
457 :2005/05/23(月) 18:13:07
問題点 ・演算の結果が int をはみ出た場合を考慮してない。 →出題が "int" とうたっているから内部的にもあえて int で持ってみた。 ・題意に沿っているのかどうかわからない。 →そもそも出題が(ry あと、main メソッドは一部改行をケチって書いたので注意。
>>435 出題者はこんな解答を求めてるんじゃねーの?
※エラー処理は適当。
それにしても出題者のレベルがxxxだよね。
import java.util.HashMap;
import java.util.Map;
public class Shisoku {
public static void main(String[] args) {
if (args.length < 3) {
throw new UnsupportedOperationException();
}
int result = new Calculator().calc(args[1], Integer.parseInt(args[0]), Integer.parseInt(args[2]));
System.out.println(result);
}
}
463 :
462 :2005/05/23(月) 21:33:11
class Calculator { private Map opeMap = new HashMap(); public Calculator() { setup(new Tasu()); setup(new Hiku()); setup(new Kakeru()); setup(new Waru()); } private void setup(AbstractOperator op) { opeMap.put(op.getOperator(), op); } public int calc(String op, int a, int b) { AbstractOperator ope = (AbstractOperator) opeMap.get(op); if (ope != null) { return ope.calc(a, b); } throw new UnsupportedOperationException(); } }
464 :
462 :2005/05/23(月) 21:34:02
abstract class AbstractOperator { public abstract String getOperator(); public abstract int calc(int a, int b); } class Tasu extends AbstractOperator { public String getOperator() { return "pl"; } public int calc(int a, int b) { return a + b; } } class Hiku extends AbstractOperator { public String getOperator() { return "mn"; } public int calc(int a, int b) { return a - b; } }
465 :
462 :2005/05/23(月) 21:34:22
class Kakeru extends AbstractOperator { public String getOperator() { return "ba"; } public int calc(int a, int b) { return a * b; } } class Waru extends AbstractOperator { public String getOperator() { return "dv"; } public int calc(int a, int b) { return a / b; } } // ここで終わり
466 :
390 :2005/05/23(月) 22:00:31
Filechooserでセレクトファイルのパスを取得する方法はわかったのですが、 自分自身のファイル(hoge.class)のパスを取得する方法がわかりません。 何かオブジェクトを生成しないと自分自身のパスは取得できないのでしょうか? よろしくお願いします。
468 :
446 :2005/05/24(火) 01:21:51
>>454 ・画像の大きさ*数を考えるとどうやっても重なり合うようなら、どういう状態を「見やすい」とするかは個人の主観による
↑コレに当てはまります
個人の主観による、とありますが方法は自由なので何でもアリらしいです
スクロールバーとかページ切り替えボタン付けたりするのかしら?
469 :
デフォルトの名無しさん :2005/05/24(火) 11:13:06
ウィンドゥを出してページを切り替えるボタンとかをセッティングしたいんだ どうするんディスカ?
meibo.txtを読み込み、名前、身長、年齢をフィールドに持つクラスを作る。 そして、コマンドライン引数で年齢を与えたときに、その年齢の人がいれば、名前と身長を表示する。 ただし、名前はHashSetで管理する。また、その年齢の人がいるかどうかを判断するメソッドage(int n)を実装すること。 meibo.txtの中身(名前、身長、年齢が半角スペースで区切ってある) Aさん 178.4 56 Bさん 191.5 23 StringTokenizerで読み込めばいいのは分かるのですが、どうやってHashSetで管理すればいいのか分かりません。
Java歴1週間の者ですが、質問させて下さい。 「2の10剰を計算するプログラムを作成」という問題で、 自分なりに一生懸命がんばってみた結果一応できたんですが、 自分で書いた癖にどうも理解できないところがありまして。 class test { public static void main(String[] args) { int x = 1, i = 1 ; for (i = 1; i <= 10; i++) { x =2 * x; } System.out.println(x); } } これで一応コンパイルもでき、実行結果も正しく出力されたんですが、 xとiを関連付けるものがないのに何故これで上手くいったのか謎です。 どなたか教えて下さい。
>>473 「変数iを用いているforループの中でxのかけ算を行っているからxとiは関連づけられている」と考えることはできると思います。
ループなんてそんなもん。 ループカウンタなんてループの内容と なんの関係もないし。 こういうものだと納得すれ
簡単のため、例外処理は無いとします。 ファイルからデータを読み取り、スペース(" ")で区切られた塊ごとに文字列や値を取っていくことを したいです。例えば、1行目が aaaaa 123 cc 3 というファイルなら、String型変数にaaaaを、int型変数に123(百二十三)を、String型変数にccを、 int型変数に3を、というようにしたいです。 以下、データを読み取る部分を書きます。文字列なのか、数値なのかをどのように判定すればスマート に収まるのか、ご教授お願いします。 *import java.lang.*; ... String FileName = "filename.dat"; String line; BufferedReader reader = new BufferedReader(new FileReader(FileName)); while((line = reader.readLine())!=null){ StringTokenizer st = new StringTokenizer(line, " "); while(st.hasMoreTokens()){ if( ??? ){ Integer.parseInt(st.nextToken()) を適当なint型変数に入れる } else { 残りは文字列として扱う } } } reader.close(); お願いします。
ヒント:String#matches
parseIntして、NumberFormatExceptionが発生したら文字列という風にするのはどうかと思ったが例外処理はつかったらダメなのか?
480 :
477 :2005/05/25(水) 15:49:02
>>478 出来ました。ありがとうございます。
>>479 ありがとうございます、それでもいけそうですね。
こちらのやり方にも挑戦してみます。
例外処理は勿論使っていますが、質問の内容とは関係が無かったので
ソースが見やすいようにと省略をしているだけです。
481 :
472 :2005/05/25(水) 18:12:35
>>476 ありがとうございます。無事動きました。
482 :
473 :2005/05/25(水) 22:23:03
そういうもんなんですかねぇ… なんとなく理解はできました。
483 :
M.B. :2005/05/25(水) 23:12:40
なんつーかこのスレはマメな香具師が多いのだが、 このマメさ加減を異性に対して発揮したら(べつに同性に 発揮しても個人の自由だと思うが)、人生に新たな展開が ありそうに思うのは漏れだけだろうか?(いや、漏れだけでは ない。反語表現) 本稼動用のデータが当初の話よりめちゃくちゃ大きくて JVM がヒープ領域喰いつくしてコケやがったぜ馬鹿野郎。 今夜はコードの大直しで残業だ畜生。
484 :
デフォルトの名無しさん :2005/05/25(水) 23:27:33
486 :
デフォルトの名無しさん :2005/05/26(木) 13:56:53
コマンド引数としてあたえられた1個以上の整数の和を 計算するアプリケーションを作成せよ。なお、文字列を 変換するにはIntegerクラスのparseIntメソッドを使って 次のようにすればよい。 int i; i = Integer.parseInt("123"); お願いします
int s=0;while(int i=0;i<args.length;++i)s+=Interger.parseInt(args[i]);
>>487 いくらレベル低い質問だからって嘘教えるなよな。
>>486 ほれ。でもこの程度で他人に頼ってるようじゃ(ry
public static void main (String args[]) {
if(args.length==0){
System.out.println("引数がありません。");
System.exit(1);
}
int i=0;
int answer=0;
try{
for(;i<args.length;++i){
answer+=Integer.parseInt(args[i]);
}
System.out.println("引数の合計値は"+ answer+"です。");
}catch(NumberFormatException nfe){
System.out.println("与えられた第"+(i+1)+"引数は整数値として解釈出来ません。");
System.exit(1);
}
}
>>488 どうでもいい事だがエラーメッセージは引数の位置よりその内容を表示したほうがいいような気がする
System.out.println(args[i] + "は整数値として解釈出来ません。");
お、即レスが。 ふむ、確かにどこでどのような例外が発生したかが明確な方がいいな。 それじゃ、こんな感じでどうだ? System.out.println("第"+i+"引数 "args[i] + " は整数値として解釈出来ません。");
491 :
sage :2005/05/26(木) 18:54:53
文字列に含まれる文字数のカウント第一のコマンド引数(1文字とする)で 与えられた文字が,第2のコマンド引数に何個含まれているかを求める CountChar を作れ。 お願いします。
492 :
デフォルトの名無しさん :2005/05/26(木) 19:04:18
>>491 java CountChar a abcaabc
だと「3」を出すって感じであってますか?
↓はそれを意識して作りました。
// CountChar.java
public class CountChar {
public static void main(String[] args) {
if( args.length != 2 ) {
System.err.println( "コマンドライン引数の数が不正." );
System.exit(1);
}
char[] chars1 = args[0].toCharArray();
char[] chars2 = args[1].toCharArray();
int count = 0;
if( chars1.length != 1 ) {
System.err.println( "第1引数は文字1文字にしてください." );
System.exit(1);
}
for( int i=0; i<chars2.length; i++ ) {
if( chars2[i] == chars1[0] ) count++;
}
System.out.println( args[1] + "の中に" + args[0] + "は" + count + "個あります." );
}
}
>>492 ほれ。
class CountChar {
public static void main (String args[]) {
if(args.length!=2){
System.out.println("引数は 検索する文字 検索される文字列 の順で2つ与えて下さい。");
System.exit(1);
}else if(args.length<1){
System.out.println("第1引数に2文字以上の文字列("+args[0]+")が与えられています。\n1文字目を検索対象とし、2文字目以降は無視されます。");
}
char chr=args[0].charAt(0);
char[] targetChars=args[1].toCharArray() ;
int count=0;
for(int i=0;i<targetChars.length;i++){
if(targetChars[i]==chr)count++;
}
System.out.println(args[1]+"に含まれる"+chr+"の数は、"+count+"です。");
}
}
>>491 490は間違い、こっちが正しい。すまん。
System.out.println("第"+(i+1)+"引数 "args[i] + " は整数値として解釈出来ません。");
495 :
デフォルトの名無しさん :2005/05/26(木) 22:13:06
496 :
デフォルトの名無しさん :2005/05/27(金) 00:13:38
>>485 void move(double length){
x = x + length * Math.cos(3.14159/180*angle);
y = y - length * Math.sin(3.14159/180*angle);
line.addElement(new Point((int)x, (int)y));
}
void turn(double deg){
angle= angle+deg;
angle = angle-angle+(angle % 360);
}
void paint(Graphics g){
g.setColor(c);
for(int k = 0 ;k<line.size()-1;k++){
g.drawLine(((Point)line.elementAt(k)).x,((Point)line.elementAt(k)).y,
((Point)line.elementAt(k+1)).x,((Point)line.elementAt(k+1)).y);
}
}
497 :
デフォルトの名無しさん :2005/05/27(金) 02:15:26
ルートの計算、乗数の計算ってどうやるんですか? ^の演算子は使えないんですよね
499 :
デフォルトの名無しさん :2005/05/27(金) 02:49:17
>>496 レス有難う御座います。それはTurtleクラスのmoveやturnのメゾッドですね。
Vectorクラスを用いたTurtleクラスのプログラムを書いてくれて有難う御座います。
私の現在の進行状況を話します。
まず一つの亀に対して、
マウスクリック時に取得した座標A(x1,y1),一つ前のマウスクリック時に得た座標をB(x2,y2)
とします。このmoveとturnに受け渡す値を現在考えています。
このとき
(2点間の距離)=(Turtleクラスのmoveに受け渡す距離)=Math.sqrt{(x1-x2)~2+(y1-y2)~2}
又,A,BをMath.atan2により極座標に変換した時の角度を各々r1,r2とします。この時
(BはAに対して動かす角度)=Math.abs(r2-r1);
となりますよね?この角度をturnに受け渡すプログラムは現在考えています。
以下の進行状況や問題はを:
>>485 ,とtp://www.geocities.jp/htbgr132/oshiete/now1.zip
にまとめてあります。宜しくお願いします。
コマンド引数として与えられた1個以上の整数を、 小さい順に表示するアプリケーションを作成せよ。 お願いします。
重複がないならTreeSetにいれてしまうとか ソートしながら配列に詰め込んでいく方法は他に準備されてない? 全部入れた後ソートするならArraysとか for (int i = 0; i < length; i++){ num[i] = Integer.parseInt(args[i]); } Arrays.sort(num);
あるn次元のDoubleのList aと、同じくn次元のDoubleのListのList bListListを比較して、 aと全く同じ数値を持つListがbListListに含まれて"いない"か否かを返す boolean isNotContain(List a, List bListList)を作りたいのですが どういう風に書くべきでしょうか。なんかIteratorとネストがいっぱいでうまく書けんとデス a = (1, 2, 3) bListList = {(1, 2, 1), (1, 2, 2), (1, 2, 3)} これは含まれているのでfalse a = (2, 2, 2) bListList = {(1, 2, 1), (1, 2, 2), (1, 2, 3)} これは含まれていないのでtrue
ListとDoubleならこんなあほな比較でIteratorを消す。 使うなよ s = a.toString(); while(b.hasNext()){ if (s.equals(b.next().toString))return false; }
・
>>505 のいう「次元」が size をさしている。
・size は n で固定。
と仮定して。
boolean isNotContain = false;
Iterator ite = bListList.iterator();
while(ite.hasNext()){
List list = (List)ite.next();
for(int i = 0; i < a.size(); i++){
if( ! (a.get(i)).equals(list.get(i)) ){
isNotContain = true;
break;
}else{
isNotContain = false;
}
}
}
こんな感じかなぁ
508 :
507 :2005/05/27(金) 16:02:44
ごめん。for のあとに if( ! isNotContain ){ break; } を足しておいて。 といいつつ、実は while( ite.hasNext() ){ if( a.equals( (List)ite.next() ) ){ isNotContain = false; break; }else{ isNotContain = true; } } これでいけるわ。List#equals の仕様を確認しる。
>>508 あれ?Listのequalsって要素同士の比較はObjectのequalsを使ってて
要素のDoubleが、数値は同じでもオブジェクトが別だから使えないと思ってたんですが…
ちょっとやってみます
510 :
デフォルトの名無しさん :2005/05/28(土) 00:33:10
だれか問題出して
511 :
デフォルトの名無しさん :2005/05/28(土) 01:03:06
args.lengthの数で場合分けしたいのですが、 一つしか値が入力されてない場合って else if(args.length<1) じゃダメなんですか?うまく動きません。
513 :
デフォルトの名無しさん :2005/05/28(土) 01:07:00
>>511 else if(args.length==1)でいいのでは?
args.lengthは要素数
要素番号は[0]しかないので
0だと勘違いしているのかな?
514 :
511 :2005/05/28(土) 01:11:09
>>513 回答ありがとうございます。
0から数えるんじゃないんですか?
1こ、2こ、3こ以上で場合分けしたいんですが、3こ以上のときは
else if(args.length>2)でうまくいったんですが・・・
515 :
511 :2005/05/28(土) 01:12:54
あ、>だからこれでいいのか・・・スマソ
516 :
511 :2005/05/28(土) 01:32:32
できないので引き続き・・・ 値を2つ代入する計算をするプログラムを作ってます。 コマンドプロント上で入力するのですが、一つもしくは三つ以上入力された場合に 独自のエラーメッセージを出したいのですが int n=args.length; if(n>2){System.out.println("値が三つ以上あります");} else if(n<2){System.out.println("値が一つしかありません");} else if(n==2){・・・以下計算式 と書いたら値を二つ入れた場合はちゃんと計算結果が表示されます。 3つ以上入れた場合も「値が三つ以上あります」と表示されます。 でも値を一つしか入れなかった場合、「値が一つしかありません」とは表示されず javaのエラーメッセージが出ます。 どうしてだと思いますか?
取りあえず、全部のソースを出せ。他の所が原因かもしれないだろ あと、エラーメッセージ
518 :
デフォルトの名無しさん :2005/05/28(土) 01:39:13
int n=args.length; のまえに 普通は args!=nullで引っ掛ける必要がある if(args==null) { System.out.println("値がありません"); return; } int n=args.length; if(n>2){System.out.println("値が三つ以上あります");} else if(n<2){System.out.println("値が一つしかありません");} else if(n==2){・・・以下計算式
519 :
デフォルトの名無しさん :2005/05/28(土) 01:40:54
>>517 >どうしてだと思いますか?
と、書かれているのだから
コレを「問い」と考えろ
>>518 > int n=args.length;
> のまえに
> 普通は
> args!=nullで引っ掛ける必要がある
ねーよ。
要素数 0 の配列だ。
521 :
デフォルトの名無しさん :2005/05/28(土) 05:14:05
HTMLのファイル名を入力して、そのファイルの中からイタリック体の文字を探してリストにして出力するアプリケーションを作成しようと努力しましたが、まだ出来ません。宿題の締め切りが迫っています!助けてください。
>>516 おまいさんのを例に簡単にだが作ってみた。
class Test{
public static void main(String[] args){
int n = args.length;
if(n>2){System.out.println("値が三つ以上あります");}
else if(n<2){System.out.println("値が一つしかありません");}
else if(n==2){System.out.println(args[0]+args[1]);}
}
}
少なくともこいつは動いた。
>>517 のいうようにほかに原因があるんじゃね?
523 :
デフォルトの名無しさん :2005/05/28(土) 11:11:34
else if(n<2){System.out.println("値が一つしかありません");} ↑値が0のときもコレに入るんじゃね?
524 :
デフォルトの名無しさん :2005/05/28(土) 13:41:27
入力 名字: □ 名前: □ 郵便番号: □-□ 電話番号: □-□-□ という風にjavaでプログラミングしたいのですが、どうしたらいいのでしょうか? □の部分はJtextFieldでお願いします
>>521 // FindItaric.java
import java.io.*;
public class FindItaric {
File htmlFile;
public static void main(String[] args) {
FindItaric self = new FindItaric();
self.print();
}
public FindItaric() {
System.out.print("htmlファイルのパスを入力 > ");
BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
try {
htmlFile = new File( br.readLine() );
} catch( IOException ioe ) {
ioe.printStackTrace();
}
}
public void print() {
try {
BufferedReader br = new BufferedReader( new FileReader(htmlFile) );
StringBuffer buffer = new StringBuffer();
String line;
while( (line=br.readLine()) != null ) {
buffer.append(line);
}
System.out.println( htmlFile.getAbsolutePath() + "の斜字体部分を抜き出します...\n------" );
String string = buffer.toString();
for( int i=0; i<string.length(); ) {
int start = string.toLowerCase().indexOf("<i>", i);
if( start == -1 ) break;
526 :
525 :2005/05/28(土) 13:50:05
>>521 // つづき
int end = string.toLowerCase().indexOf("</i>", start);
String part = string.substring( start + 3, end );
System.out.println( part.trim() );
i = start+1;
}
System.out.println( "------\n正常終了." );
} catch( FileNotFoundException fnfe ) {
System.err.println( htmlFile.getAbsolutePath() + "が見つかりません.." );
} catch( IOException ioe ) {
ioe.printStackTrace();
}
}
}
>>365 ttp://www.uplo.net/dl.html ファイル:393 パスワード:answer
自由描画の課題は白紙にしておきましたので、日曜にでも適当に埋めて提出してください。
TurtleApplet.java 内の MainCanvas#showFreeShape が該当するメソッドです。
現在のまま提出すると蹴られますのでご注意下さい。
530 :
デフォルトの名無しさん :2005/05/29(日) 02:52:37
>>528 綺麗だなコレ ツーかGUIなんだけど俺が5.0使っているからなのかな「メニュー」とかめちゃカッコイイ
おまえそれだけできるのであれば、自分でやれよまったく・・・
532 :
528 :2005/05/29(日) 09:03:37
>>532 >すぐにでもコードを挿し直せると判断した上で書き込みました。
クリエイティブな部分は自分でやったから、実装は便所の書き込み掲示板のクズに投げればいいと。
534 :
デフォルトの名無しさん :2005/05/29(日) 09:14:33
>>532 おまえさぁ、教えられたことはできるけど
考えること創造力が足りないんじゃないの?
さすがAV世代だ
536 :
デフォルトの名無しさん :2005/05/29(日) 10:48:08
入力 名字: □ 名前: □ 郵便番号: □-□ 電話番号: □-□-□ という風にjavaでプログラミングしたいのですが、どうしたらいいのでしょうか? □の部分はJtextFieldでお願いします。一回プログラム書いてもらえませんか?期限が明日までなのでお願いします。
>>536 なんか面白い話してくれたらいいよ。
と、いうかそれは見た目だけ作ればいいのか?
538 :
デフォルトの名無しさん :2005/05/29(日) 12:29:54
あるところにクマがいました 体も白けりゃ 尾も白い
540 :
537 :2005/05/29(日) 13:08:53
541 :
538 :2005/05/29(日) 13:15:19
がんばったんですがダメですか
>>527 さんのコードは見ましたが
this.を利用していない点で信用できません
さらに
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
とかやっちゃってるし
部品貼り付けるときにSwingUtilities.invok系使ってないし・・・
結構皆さん、おみそなんですね
>>541 おまえにはプログラマは向いてない。やめたほうがいいかもしれない。
どうせthisとsuperの違いすらよくわかんないだろ?
>this.を利用していない点で信用できません ・・・・。(´・ω・`) >setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);とかやっちゃってるし ・・・・。(´-`).。oO(ダメだこりゃ)
545 :
527 :2005/05/29(日) 15:21:50
Javaの継承はis aの関係だからthisでも問題はないが、 なぜ親クラスのメソッドをわざわざ自分自身を示すthisと明示する必要があるのか。 教えてエロイ人(´・ω・`) それと、DISPOSE_ON_CLOSEの何がダメなの?(´・ω・`) リスナー登録すれば、DISPOSEイベントをキャッチできると思ってるんですけど。 SwingUtilitiesのinvoke系ってイベントの非同期化かなんかのメソッドだっけ? イベント処理するクラスをきちんと用意しろってこと? あの文面でイベント処理のスレッドを考慮して云々とは読み取れないんですけど。 つうか言い訳するとデスネ、 普段はフレームワークまわりを作ってるわけで、GUI詳しくないんですよ。゚(゚´Д`゚)゚。 あと、信用できないなら自分でヤッテクレ・・・(´-ω-`)
546 :
538 :2005/05/29(日) 18:43:26
thisっていうのは super(title) のことを言っているんではないのです 例えば Container root = getContentPane(); txtLastname = new JTextField(20);の部分は Container root = this.getContentPane(); this.txtLastname = new JTextField(20);と書いてくださいということです SwingUtilitiesに付いては(厳密に言えば)部品を貼り付けるときにも使うべきなのです >普段はフレームワークまわりを作ってるわけで、GUI詳しくないんですよ。 多分そうかなぁと思っていました、業務でSwingGUI使っている人いないだろうなと思いましたし いくらプロでも知らないことはわからないだろうと思っていました つーかこんだけ言う奴が元の質問者じゃないって事ぐらい早く気付いて そして句読点
servletの宿題もここでよろしいのですか?
549 :
527 :2005/05/29(日) 20:18:05
>>546 インスタンス変数にthisをつけるのはわかるけど、
(is aの関係でも)getContentPane()は親の機能なのでthisつけるのは賛成できないかな。
と、宗教チックな事を言ってみる。
>SwingUtilitiesに付いては(厳密に言えば)部品を貼り付けるときにも使うべきなのです
なぜ、使うべきなのか教えてください。
それがプログラムの構造的なものから来ているのか、使用しない場合の危険性としてどういう点が挙げられるのか等。
特に厳密にと念を押している点についてもお願いします。
説明が面倒であれば、それについて論じているページ(信頼性の高いサイト)でも。
ちなみに、業務でもSwing使っているところはありますよん。
わたしゃー携わってませんけど、某パッケージ製品とか。
551 :
550 :2005/05/29(日) 20:38:25
552 :
538 :2005/05/29(日) 20:54:41
>>549 >なぜ、使うべきなのか教えてください。
僕のような学生でも知っていることです
いつもあなたたちが言っているように「API読め」とか言いたいです
>ちなみに、業務でもSwing使っているところはありますよん。
そういうときだけそうやって言うし・・
現状少ないのは事実
PGだけの実力は余り大差ないのね
別にその業界行くわけではないけど
「プログラミングできるの?キャー頭いいのね」とかいう女がバカに見えた
本人たちも気に入ってもらえると思って大げさにしている感があるが・・・
553 :
550 :2005/05/29(日) 21:01:32
「APIを読め」なんていったい誰が言ってたのか非常に興味があったりw
554 :
M.B. :2005/05/29(日) 21:17:46
>> ちなみに、業務でもSwing使っているところはありますよん。 > そういうときだけそうやって言うし…… > 現状少ないのは事実 「IE がSwing をサポートしてないから、Applet 化することを考えて AWT を使え」みたいな話が通用してたりするから仕方がない部分もあるが、 そんな話に乗っかる香具師は、1.5 に乗り換えそこなって 絶滅すると思われ。 ……show() で警告が出たときは正直焦った(^_^!)
>>554 IEでサポートされないJavaも滅びかけてる気もします。
556 :
527 :2005/05/29(日) 22:44:00
確かにチュートリアルの方に載っていたわ。Sun推奨の方法なのね。 どんな障害が出るのかは書かれていないけど・・・。 あくまでも、「業務でSwingGUI使っている人いないだろうなと思った」に対して、 「そんなことはありませんよ」というだけなのですが、 >そういう時だけそうやって言う ・・・意味がわからないです。 その文面だと業務でSwingを使ってる事はないと読みとれたものですから・・・。 揚げ足取るなってこと? 確かにSwingの業務実績は少ないと思います。 そもそもJavaを採用する場合、WEBをターゲットとした案件が殆どですから。 リッチクライアントとしてWebStartから起動するなんて事もありますけど。 おっしゃる通り、デバドラやファーム書いてる人は別として、 Javaは業務アプリを対象とした場合が多いのでJavaのPGの能力なんてものは、 大半の人は趣味でやってる人と能力は変わらないと思うよ。 J2EEのインフラ系(フレームワーク、EJBとか)の実装をやってる人はまた別だと思うけど。 それに実装ってそんな時間かからないしね・・・。(ものによるけど) それよりも、設計とかミーティングとかのが時間割かれるわけで、 予算・スケジュール管理やるようになると、業務に携わっても仕様決めたりレビューしたり(T-T)クスン 1.5はなかなかいい感じに仕様追加されてるけど、 AIXとかで動くVMってまだまだ出そうにないんだよね。 それよりも、Generics使ってフレームワーク作ったら死にそうだ・・。 コンヴァリアントとか考えると頭痛くなるよ。(’A`)ヴァー
557 :
デフォルトの名無しさん :2005/05/29(日) 23:13:20
>>502 Rabbit.class
---------------
import java.awt.Graphics;
class Rabbit{
private double prex, prey;
private double angle,damyangle;
private int spx = 200, spy = 200;
Turtle[] kamekichi = new Turtle[4];
Rabbit(int x, int y){
prex = x;
prey = y;
angle = 0;
damyangle = 0;
int[] pointx = {x,x + spx, x, x + spx};
int[] pointy = {y,y, y + spy, y + spy};
for(int i = 0;i<4;i++){
kamekichi[i] = new Turtle(pointx[i],pointy[i]);
}
}
558 :
デフォルトの名無しさん :2005/05/29(日) 23:14:06
>>557 続き
void move(int x, int y, Graphics g){
damyangle = angle;
angle = (int)Math.toDegrees(Math.atan2((y-prey),(x-prex)));
double length = Math.sqrt(Math.pow((x-prex),2)+Math.pow((y-prey),2));
for(int i = 0;i<4;i++){
kamekichi[i].turn(angle-damyangle);
kamekichi[i].move(length*(i+1));
kamekichi[i].paint(g);
}
prex = x;
prey = y;
}
}
ーーーーーーーーー
559 :
デフォルトの名無しさん :2005/05/29(日) 23:15:43
>>558 続き
TurtleApplet.class
----------------------
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class TurtleApplet extends Applet {
Rabbit rabit;
private int xx = 0, yy = 0;
private boolean f = true;
public void init() {
// アプレットの背景色を白に設定
this.setSize(new Dimension(800, 600));
setBackground(Color.white);
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
if(f){
repaint();
xx = e.getX();
yy = e.getY();
rabit = new Rabbit(xx,yy);
f = false;
}
}
560 :
デフォルトの名無しさん :2005/05/29(日) 23:16:31
>>559 続き
public void mouseReleased(MouseEvent e){
if(!f){
f=true;
rabit = null;
}
}
});
addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
Graphics g = getGraphics();
rabit.move(e.getX(),e.getY(), getGraphics());
g.dispose();
}
});
}
public void paint(Graphics g) {
super.paint(g);
}
}
561 :
547 :2005/05/30(月) 00:19:57
htmlフォームより受けたパラメーターを、”サーブレットでXMLファイルに書き出す方法”(←ここ)が分からないので、誰か教えていただけると嬉しいのですが・・・。 こんな抽象的な質問じゃだめですよね・・・(汗
562 :
547 :2005/05/30(月) 00:29:36
注釈で「プリント文でファイルに書き出せばよい。」ともあります。。
564 :
547 :2005/05/30(月) 02:45:16
単純にテキストファイルとしてxmlのソースを書き出す感じっぽいです・・・。 追加質問なのですが・・・具体的な課題を書いたほうが質問しやすいでしょうか・・・。 履修申請のフォームを作るという課題なのですが フォームで科目ごとにチェックボックスがあり、チェックされている科目のみ「科目名」「教員名」をxmlファイルとして出力するというモノです。 ※最初に考えたのは、フォームで name="(科目コード)" value="1" にして、サーブレットで科目ごとすべて値を受け取り もしvalueが1ならばprintするというものを描いたのですが、 それだと値がnullの場合(チェックされない場合)にエラーが出てしまうためダメでした・・・。 全然ダメダメな私に誰か力をください・・・。
565 :
547 :2005/05/30(月) 06:22:26
私なりに頑張って、すごく効率の悪いプログラムではありますが課題の要求するものは出来ました。 しかし、どう考えてもスマートではないので、もしやっていただける方がいましたらスマートなやり方を教えていただけると幸いです。 ちなみに私のやり方は・・・ 上で書いたようにフォームで name="(科目コード)" value="1" にして、サーブレット側で String s(科目コード) = req.getParameter("(科目コード)"); を科目数分書き(この時点でスマートじゃない・・・ if節で s(科目コード)がnullじゃなかったらxxx.write((XML文))を。というメソッドをまた科目数分・・・ これを.xml形式でBufferedWriterを使って出力。 ということで一応要求するものはできました。
566 :
デフォルトの名無しさん :2005/05/30(月) 12:56:02
2週間以上考えたんですが、出来ませんでした。どなたか教えて下さい。 入力した数字を棒グラフと折れ線グラフにするんですが、どちらのグラフかは 選べるようにします。(ボタンで選択化にする?) 入力する数字の数には制限を設けません。(X軸、Y軸とも) アプレット、アプリケーションのどちらでも結構です。宜しくお願いします!
>>569 いや、そのまんまなんだけどね・・・。
引数を int の配列に突っ込んで Arrays#sort かませばソートしてくれる。
で、それを表示すればよい。
↓エラーチェックとかしてないサンプル
import java.util.Arrays;
public class Test{
public static void main(String args[]){
int num[] = new int[args.length];
for (int i = 0; i < args.length; i++){
num[i] = Integer.parseInt(args[i]);
}
Arrays.sort(num);
for (int i = 0; i < num.length; i++){
System.out.println(num[i]);
}
}
}
>>528 >>532 >>557 >>558 >>559 >>560 本当に皆さん有難うございます。rabbitクラスの読ませ方は私でも思いつきませんでした。あと一日
ですが参考にさせていただきます。未熟者の私にいろいろ教えていただき有難うございました。
現在rabbit部分は実装していませんが、4匹の亀がうまく動いているので減点覚悟で提出しよう
と思っています。
572 :
デフォルトの名無しさん :2005/05/30(月) 16:34:54
>>570 java.util.Arraysでなく違うのをimportしてました汗
>>547 全体の仕様が不鮮明なので得られる情報のみで。
checkboxのnameを全て同じ名前にします(例:kamoku)
valueは各科目の固有の値(科目id)を。
そんでもって科目を表すクラスを作る。
class KamokuConst {
String id;
String kamoku;
String teacher;
あとはゲッターセッター
}
科目を扱うクラスを作る。
class KamokuManager extends HashMap {
このクラスには科目(キーは科目id)を格納する。
ソースコードに直打ちはナンセンスなのでpropertiesファイルにでもして読み取りましょう。
}
JSPで書き出すときは、KamokuManagerをぶん回してinputタグをはき出す。
Servletで処理をする場合にはパラメータ名"kamoku"を取得する。
request.getParametersValueを使えば科目idのString配列が帰ってくる。
ただし、チェックが一つの場合にはgetParameterを使用する事になるので、そこは工夫してくれ。
↓
getParametersValueがnullならgetParameterの取得を試みる。nullでなければそのまま返す。
getParameterもnullならチェックは無し。nullを返す。
getParameterがnullでなければ、サイズが1の文字列配列として返す。
こういうメソッド作っておけば、常に配列で受け取れる。
ある実行プログラムを終了させたいのですが、コマンドライン引数を System.out.println("数字を入力してください。"); String inputValue = null; // inputValueに代入したい inputValue = Io.stdin(); // Io.stdin()はキーボード入力を処理するメソッド に入れて、inputValueの中身が数字と文字列のごちゃまぜの時に、 プログラムを終了させるにはどうすればいいのですか? if(ここの条件式が分かりません。){ System.exit(-1); }
>>576 if(inputValue.matches("\D")) {
System.out.println("数字以外の文字も含まれているため終了します");
System.exit(-1);
}
>>575 解答あったんですね。ありがとうございました
579 :
576 :2005/05/30(月) 22:52:54
Integer.parseInt()でNumberFormatException投げさせる方が一般的じゃないかナーと思った。 どうしてもif文じゃなきゃヤだという場合はしょうがないけど。。
>>580 私は576さんではありませんが、その場合ですとどのように書くのでしょうか?
後学のために教えていただけると幸いです。
582 :
580 :2005/05/30(月) 23:22:32
>>576 のIo.stdin()なるメソッドを使うとこうなると思います。
System.out.println("数字を入力してください.");
String inputValue = Io.stdin();
int i = 0;
try {
i = Integer.parseInt(inputValue);
// iを用いた処理...
} catch(NumberFormatException nfe) {
System.out.println("整数に変換できないため終了します.");
System.exit(-1);
}
583 :
581 :2005/05/30(月) 23:27:56
>>582 ありがとうございます。似たような問題で詰まっていたので助かりました。
584 :
デフォルトの名無しさん :2005/05/31(火) 20:39:27
585 :
デフォルトの名無しさん :2005/06/01(水) 00:59:01
全然分からないので教えて下さい。 次のクラスを作成し、実行するプログラムを作って下さい。 1.次のように、在庫管理を表すZaikoクラスを作成して下さい。ただし、 個数は、非負の数にして下さい。 フィールド private String name; // (名前) private int count;// (個数) メソッド public void setName(Stringn); // (名前を設定) public void setCount(int c); // (個数を設定) public String getName(); // (名前を得る) public int getCount(); // (個数を得る) public void disp(String n, int c); // (在庫内容を表示する) コンストラクタ public Zaiko(); // (初期値を[noname],0とする) public Zaiko(String n,int c); // (初期値を指定する)
586 :
デフォルトの名無しさん :2005/06/01(水) 01:24:05
コマンドフロンプトでjavaを使い * ** *** **** *** ** * と表示させたいのですがどうすればいいのでしょうか? 星4個になるまでは class Sample1 { public static void main(String args[]) { for(int a=1; a<=9; a++){ for(int b=0; b<a; b++){ System.out.print("*"); } System.out.print("\n"); } } } と言うことはわかってますがそれ以降のやり方がわかりません
587 :
デフォルトの名無しさん :2005/06/01(水) 01:29:48
訂正 class Sample1 { public static void main(String args[]) { for(int a=1; a<=4; a++){ for(int b=0; b<a; b++){ System.out.print("*"); } System.out.print("\n"); } } }
588 :
521 :2005/06/01(水) 01:50:37
525&531有難う御座いました。助かりました。
589 :
デフォルトの名無しさん :2005/06/01(水) 02:17:51
586 587 とけました
>587 public static void main(String[] args){ System.out.println("*"); System.out.println("**"); System.out.println("***"); System.out.println("*****"); System.out.println("***"); System.out.println("**"); System.out.println("*"); }
System.out.println("*\n**\n***\n*****\n***\n**\n*");
なんかよーわからんが、 int n = 4; for(int a=1; a<n*2; a++){ int c = (a>n?n*2-a:a); for(int b=0; b<c; b++){ System.out.print("*"); } System.out.print("\n"); } こうしたい?
594 :
591 :2005/06/01(水) 18:20:13
on_
>>590 をコピって書いたから・・・。
真面目に素直に書くとこんな感じかな?
int size = 4;
for(int i = 1; i < size; i++){
for(int j = 1; j <= i; j++){
System.out.print("*");
}
System.out.println();
}
for(int i = size; i > 0; i--){
for(int j = i; j > 0; j--){
System.out.print("*");
}
System.out.println();
}
}
}
フレームを開く その中に小さな画像が何枚かポツンポツンとある、どこでもいい クリックするとクリックした画像がフレームいっぱいに等比拡大する もう一度クリックすると元に戻る そんなプログラムを作ってください orz
596 :
デフォルトの名無しさん :2005/06/01(水) 20:46:44
597 :
584 :2005/06/01(水) 21:19:37
>>584 ヨロシクお願いします!今週末、提出します。
598 :
デフォルトの名無しさん :2005/06/02(木) 00:26:19
宿題ってわけではないですが、次のようなのを作ってもらえませんか?
ミニロト、ロト6の当選チェックアプリ
コマンドラインでもGUIでも、どっちでもOK
入力は
ミニロトorロト6の指定
弟何回の指定か、抽選年月日指定のどっちかをサポート
購入数字を空白区切りで記録したファイル名(1行に1組で組数は十分大きな数まで)
出力は
当選した購入数字の組と、等数
一組も当選してない場合は、当たりなしのメッセージ
抽選数字データは
http://www.takarakuji.mizuhobank.co.jp/index.html などから自動取得する
こんな感じで、よろしく
宿題以外はスレ違い
600 :
デフォルトの名無しさん :2005/06/02(木) 00:46:15
javaでツリーコマンドを表示するプログラムを教えてくり!
601 :
547 :2005/06/02(木) 00:54:25
>>574 遅くなって申し訳ないです。アドバイスありがとうございます!
提出は前の状態でしましたが、これからちょっと頑張って教えてくださった方法で作り直してみます。
602 :
デフォルトの名無しさん :2005/06/02(木) 01:27:06
585の者なんですけど、どなたか分かるかたいたら教えて下さい!!
603 :
デフォルトの名無しさん :2005/06/02(木) 03:19:47
javaでunixのツリーコマンドのようなプログラムを教えてくだされ。
javadoc?
605 :
デフォルトの名無しさん :2005/06/02(木) 14:46:27
readLineメソッドが改行を読み込んだ時、 戻り値として何が返ってくるのか教えてください。 期待する結果としては、改行を表すコードをコンソールに表示したいです。 それを実現するプログラムを是非教えてもらいたいです。 お願いします!
1.3次元3角形のそれぞれの頂点にx、y、zの座標値、および法線Nと光源入射ベクトルLを、前回問題のr、g、bのカラー情報に代わって定義し、 3角形内部を、内挿補間法を用いて塗りつぶしを行う。3角形内部のカラーを内挿補間されたベクトルから Phongシェーディングによる輝度を求め表示すること。 2.上記問題でLのそれぞれの3成分をスクロールバーを用いて変化させ、3角形上で輝度が変化することを確認する。よって1の問題も当初からスクロールバーを用いても良い。 お願いします。
>605 改行を読み込んだ時点でも糞も無い。 Java.io.BufferedReader.readLine()は改行までを一気に読み込み、改行文字を除いた読み込み内容を返す。 他のクラスの同名のメソッドも同じような動作をするはず。 従って、このメソッドを使って改行コードを返すコードを書くのは不可能。 BufferedReaderとかの使いたいクラスを継承してクラス作れ。 んで、read()を使って一文字ずつ読んでいって、改行が登場した時点で処理を分けるようなメソッド書け。
608 :
605 :2005/06/02(木) 15:21:50
>607 ありがとう!
609 :
デフォルトの名無しさん :2005/06/02(木) 19:28:39
すみません、ちょっとお伺いします。 Stackっていうクラスありますよね? Stackでは格納できる要素数の上限は決められないのでしょうか。 どなたか分かる方教えていただけないでしょうか。 宜しくお願いします。
610 :
デフォルトの名無しさん :2005/06/02(木) 20:28:33
>>609 addメソッドあたりをオーバーライドしてやればよいかも知れんけど、
要素数の上限が決まっているなら、普通の配列を使ってやった方がええよ。
例えば上限100のスタックなら、たった↓だけのことだし。
Object[] array = new Object[100];
int pos = 0;
void push(Object o) {
array[pos++] = o;
}
Object pop() {
return array[--pos];
}
上限を超えればArrayIndexOutOfBoundsExceptionが飛ぶので検出できる。
611 :
デフォルトの名無しさん :2005/06/03(金) 00:13:18
>>596 class Blob{
private boolean[][] blob;
private int x, y;
private boolean[][] damydata;
private int serchcount;
public static void main(String args[]){
boolean[][] data = {{true,false,true,true,false},
{false,true,true,false,false},
{false,false,false,false,false},
{true,false,false,true,false},
{true,false,true,true,true}};
Blob blo = new Blob(5,5,data);
blo.mainSerch(3,2);
System.out.println(blo.mainSerch(1,2));
System.out.println(blo.maxblobcount());
}
612 :
デフォルトの名無しさん :2005/06/03(金) 00:14:01
>>611 next
Blob(int x, int y, boolean[][] blob){
this.x = x;
this.y = y;
this.blob = blob;
damydata = new boolean[x][y];
}
int getserchcount(){
return serchcount;
}
int maxblobcount(){
serchcount = 0;
int max =0;
for(int i = 0;i<x;i++){
for(int j = 0;j<y; j++){
if(max<mainSerch(i,j)) max = serchcount;
}
}
return max;
}
613 :
デフォルトの名無しさん :2005/06/03(金) 00:14:35
>>612 next
int mainSerch(int px, int py){
for(int i = 0;i<x;i++){
for(int j = 0;j<y;j++){
damydata[i][j]=false;
}
}
serchcount = 0;
serch(px+1,py+1);
return serchcount;
}
void serch(int px, int py){
if(px>=0 && py>=0 && px<x && py<y){
if(damydata[px][py]) return;
if(blob[px][py]){
serchcount++;
damydata[px][py]=true;
serch(px+1,py+1);
serch(px+1,py);
serch(px,py+1);
serch(px-1,py);
serch(px+1,py-1);
serch(px-1,py+1);
serch(px-1,py-1);
serch(px,py-1);
}
}
}
}
614 :
デフォルトの名無しさん :2005/06/03(金) 00:17:37
>>613 です
考え方としてだけですが、
ダミーの配列をもって、ポイントを検索したかどうか、記入し
ていく方法です。
データの収得方法は、考えていません。
配列も、boolean型となっています。
615 :
609 :2005/06/03(金) 00:34:49
>>610 ありがとうございます!
解決できました!
616 :
596 :2005/06/03(金) 00:36:28
>611,612,613 ありがとうございます。 大変助かりました。 熟読して理解するようにがんばります。 本当にありがとうございました。
617 :
デフォルトの名無しさん :2005/06/03(金) 05:25:48
>>616 さん
引数のx,y逆になってますので交換して与えて試してください。
データを格納した順序と同じ順序で取り出すことができるデータ構造を 待ち行列という。整数型のデータを格納する待ち行列クラスを定義せよ。 お願いします。
619 :
デフォルトの名無しさん :2005/06/03(金) 10:53:42
>>618 シングルスレッドで、かつサイズ固定でいいなら、
↓が一番高速で簡単な実装かな
class Queue {
int[] array = new int[100];
int pos1 = 0,pos2 = 0;
void push(int a) {
if (pos1 - pos2 >= array.length) throw new ArrayIndexOutOfRangeException();
array[(pos1++ % array.length)] = a;
}
int pop() {
if (pos1 <= pos2) throw new ArrayIndexOutOfRangeException();
return array[(pos2++ % array.length)];
}
}
マルチスレッドなら各メソッドをsynchronized指定すればよい。
割り当てたサイズを超えるか、空の待ち行列からデータを取ろうとした場合、
例外を投げるのではなく、サイズを割り当てなおしたり、
別スレッドからpopが呼び出されて空きができるまで待ったり、
あるいはデータが追加されるまで待つという実装も考えられる。
その辺りを正確に説明すれば、もっとよい答えが返ってくるかも。
パフォーマンスを犠牲にしてもよいなら、プリミティブではなく、java.lang.Integerクラスを使うようにして、
Jakarta Commons辺りか、J2SE5でjava.utilパッケージに加わったQueueの多種多様な実装を使えばよい。
それでは宿題にならないと言うなら、ソースをダウソしてパクったらイイ(・∀・)!
>>618 public class JavaQueue extends ArrayBlockingQueue
{
}
621 :
デフォルトの名無しさん :2005/06/04(土) 15:42:11
>>618 LinkedListのオブジェクトコンポジションで解決たい
622 :
デフォルトの名無しさん :2005/06/04(土) 16:41:17
import java.io.*; public class Kasa{ public static void main (String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("降水確率を入力してください。"); String line = reader.readLine(); int n =Integer.parseInt(line); System.out.println("降水確率は"+n+"%です!"); if(n >= 50); {System.out.println("傘を忘れないように!");} else {System.out.println("傘はたぶんいりませんね!");} System.out.println("いってらっしゃい!"); } catch(IOException e){ System.out.println(e);} catch(NumberFormatException e){ System.out.println("数字の形式が正しくないよ"); } } } こんにちは。 これで実行するとelseの部分でひっかかってしまいます。 elseを消去するとできるんですがなんでelseを入れるとできなくなってしまうんでしょうか? お願いします(>.<)
;
624 :
デフォルトの名無しさん :2005/06/04(土) 16:45:59
>>623 すいません、わかりました、初歩的なミスですね・・。
ありがとうございます
readLine()を使って、コマンドライン引数として指定されたファイルを上から順にコマンドプロンプト上に表示するようにしているのですが。 その際読み込ませるテキストファイルで 10 4 テスト ・・・ とやってそれを実行するとコマンドプロンプト上では 10 4 テスト ・・・ のように間に改行が一行入ってしまいます。 これはなぜなのでしょうか? テスト以降の文字列はちゃんと改行もそのままで読み込んでくれているのですが。 どなたかわかる方よろしくお願いします。
テキストをそのままコピーしたつもりなのにこれでも一行改行が多くなってしまっている・・・。 これは何か使用なのでしょうか・・・。
627 :
デフォルトの名無しさん :2005/06/04(土) 17:34:41
>>625 プログラムの書き方の問題だろう
ソース見せないと何もいえない・・・
628 :
デフォルトの名無しさん :2005/06/04(土) 17:49:17
int[ ] x[ ]; xの使い方はどうなるか、簡単な例をプログラムで。 また,なぜ,そうなのか理由をコメントで記述 お願いします
629 :
デフォルトの名無しさん :2005/06/04(土) 18:21:56
import java.io.*; public class Kasa{ public static void main (String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("降水確率を入力してください。"); String line = reader.readLine(); int n =Integer.parseInt(line); System.out.println("降水確率は"+n+"%です!"); if(n > 100) {System.out.println("降水確率は100までで記入してください!");} else if(n >= 50) { {System.out.println("傘を忘れないように!");} else {System.out.println("傘はたぶんいりませんね!");} System.out.println("いってらっしゃい!"); } } catch(IOException e){ System.out.println(e);} catch(NumberFormatException e){ System.out.println("数字の形式が正しくないよ");} } } すいません、先ほどの続きです。降水確率を101以上だとするといってらっしゃいって文字が出ないようにしたくて こうしたんですけど最後のelseでエラーがでます。なんでだかわかりません、お願いします
class Kasa{ public static void main (String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("降水確率を入力してください。"); String line = reader.readLine(); int n =Integer.parseInt(line); System.out.println("降水確率は"+n+"%です!"); if(n > 100) {System.out.println("降水確率は100までで記入してください!");} else if(n >= 50) {System.out.println("傘を忘れないように!");} else {System.out.println("傘はたぶんいりませんね!");} System.out.println("いってらっしゃい!"); } catch(IOException e){ System.out.println(e);} catch(NumberFormatException e){ System.out.println("数字の形式が正しくないよ");} } } お兄ちゃんが直してあげたぞ。 Javaに慣れてないなら、いきなり長いソースを書かずに、 一文づつ一文づつ書いてコンパイルするとよろし。
631 :
デフォルトの名無しさん :2005/06/04(土) 18:32:43
いや・・このやり方はできたんですけど、 これだと101以上を入力するといってらっしゃいって文字が出ちゃうんで出ないように したいんですよ。 で、出ないようにしたくて上記のようにしたらelseでエラーになっちゃうんです
class Kasa { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader( System.in)); try { System.out.println("降水確率を入力してください。"); String line = reader.readLine(); int n = Integer.parseInt(line); System.out.println("降水確率は" + n + "%です!"); if (n > 100) { System.out.println("降水確率は100までで記入してください!"); } else { if (n >= 50) { System.out.println("傘を忘れないように!"); } else { System.out.println("傘はたぶんいりませんね!"); } System.out.println("いってらっしゃい!"); } } catch (IOException e) { System.out.println(e); } catch (NumberFormatException e) { System.out.println("数字の形式が正しくないよ"); } } } ほれ
633 :
デフォルトの名無しさん :2005/06/04(土) 18:50:33
>>632 あ、ありがとうございます。
なんか急にできるようになりました。
なんでさっきのでできなかったのが原因が不明です・・。
>>625 System.out.println("hoge");
は
hoge
と出力した後に改行するぞ。
うむ。 C++のprintfとは違うのだ
636 :
デフォルトの名無しさん :2005/06/04(土) 20:55:50
(´-`).。oO(C++のprintf……)
複数のボタンを作ってボタンによってそれぞれ異なる図形を表示させるプログラムを作りたいんですけど どうしたらよいでしょうか?
639 :
デフォルトの名無しさん :2005/06/04(土) 21:41:26
button1.addActionListener(new ShikakuAction(canvas)); button1.addActionListener(new MaruAction(canvas)); button1.addActionListener(new SankakuAction(canvas));
640 :
638 :2005/06/05(日) 03:27:16
フレーム作ってボタン配置して図形を表示させるパネルを設置しているのですが どうもよくわかりません。
ボタンを押した時に、どの関数が実行されるかはaddActionListenerで指定するだろ。 そこで別々の関数を指定してやればいいだけの話だ。 つーか、どこが分からないのかさっぱり分からん。 そもそもボタン1つでそれを押すと図形を表示するプログラムは書けるのか?
642 :
デフォルトの名無しさん :2005/06/05(日) 04:31:21
638 も 641 も Java GUI の入門書を買って読んだ方がいいよ
>>642 人をバカにするしか脳がない僕と君。一緒に死ぬか。
1週間ほど悩んでいますが、どうしても自己解決できないので質問に来ました。
ウィンドウ内を、「20枚のgif画像によるアニメーション」が直線的に動き、
1.ウィンドウの端にぶつかると跳ね返る
2.ウィンドウの端にぶつかるとアニメーションの再生/停止が切り替わる
というものを作るという課題です。
1.はすぐに実現できたのですが、2.がどうも上手くいきません。
public void run()内のコメント文が、自分が考えたものなのですが、
コメント文を外してコンパイル、実行をすると、全く動作しないものとなって
しまいます。推敲お願いします。
ttp://www.uplo.net/ ステルス型
ファイル:538
パスワード:trap
int main() { /*これ*/ /*printf("fsa")*/ return 0; }
>>644 >ウィンドウの端にぶつかるとアニメーションの再生/停止が切り替わる
というのは、gifのパラパラマンガが行われる/行われないってことであって、
兎の直線的な動作は常に発生するんですよね?
648 :
644 :2005/06/05(日) 12:13:17
>>647 はい、その通りです。
説明が不十分で申し訳ありません。
649 :
デフォルトの名無しさん :2005/06/05(日) 14:01:43
>>644 public void run() {
boolean flag = false;
while (true) {
if(flag) current_f = (current_f+1)%frames;
if((x<10)||(width-80<x)){
flag = !flag;
dx = -dx;
}
if((y<10)||(height-80<y)){
flag = !flag;
dy = -dy;
}
this.repaint();
try{
Thread.sleep(interval);
}catch (InterruptedException ie) {}
}
}
フラグをつけて、切り替える
650 :
644 :2005/06/05(日) 14:42:58
>>649 ありがとうございます。
それでも実現可能なのですが、(情報小出しすみません)Thread型のctrl
をフラグとして使い、gifアニメのコントロールはstartAnim、stopAnimで制御
をすることになっているのです。
・・・お願いします。
651 :
デフォルトの名無しさん :2005/06/05(日) 15:15:05
int[ ] x[ ]; xの使い方はどうなるか、簡単な例をプログラムで。 また,なぜ,そうなのか理由をコメントで記述 お願いします
652 :
デフォルトの名無しさん :2005/06/05(日) 19:38:52
653 :
デフォルトの名無しさん :2005/06/05(日) 19:42:01
異次元配列の使い方教えて欲しいんだろ?
654 :
デフォルトの名無しさん :2005/06/05(日) 19:42:35
int[] x[]; なんて書いたらコンパイルが通らないので、xは使えません
656 :
651 :2005/06/05(日) 19:56:35
課題: 配列の追加問題 インストラクション: int[ ] x[ ]; xの使い方はどうなる?簡単な例をプログラムで。また,なぜ,そうなのか理由をコメントで記述 課題のページには上記のこと以外は書かれていません
657 :
654 :2005/06/05(日) 20:05:59
あ、ほんとだ。2次元配列になった。 int[][] x; って書け、まぎらわしい。
659 :
デフォルトの名無しさん :2005/06/05(日) 20:34:41
その書き方って int[] x[],y; ってやるとき意外積極的に使いたくないな
660 :
655 :2005/06/05(日) 20:55:17
まーなんにせよ良い課題ではない罠。 変数側に括弧つけるのはCの名残だからという、消極的な理由だったと思う。 Javaで推奨されている方法ではなかったはず。 659のような場合も、普通は2行に分けて書くでしょ。
661 :
654 :2005/06/05(日) 21:00:59
>>658 パズルか、クイズ大会じゃないんだから、
学生か研修生がやるような課題じゃないな...
汚いプログラムの読み方を練習したいなら、実務に入ってからでも遅くないぞ。
それはともかく、多分
for (int i = 0; i < height; ++i) {
for (int j = 0; j < width; ++j) {
...
}
}
というようなループを回して、碁盤のようなデータを格納するような
例が模範解答なんだろうけど、実務で多次元配列って使わないな。
Cとは違って、Javaの2次元配列の実態は1次元配列のオブジェクトを並べたもで、
あんまり効率がよくないので、1次元配列で書き換えて、
x[i * width +j]というようにアクセスすることが多い気がする。
>>661 実務実務って、それこそアプリ分やなんてそれこそ多岐に渡ってるんだからそんな言葉では片づけられんでしょう。
1つのgif画像と、1つのボタンをウィンドウに配置し、 ボタンを押す毎にgif画像が(ONの画像)⇔(OFFの画像)と交互に 変化するものを作るというものです。 以下のようにやっていますが、どうやらJLabelに画像をセットする ところでエラーが起きているようです。どこが悪いのでしょうか? import java.awt.*; import java.awt.event.*; import javax.swing.*; class ImageSwitch extends JPanel implements ActionListener { JLabel label; JButton btn; ImageSwitch() { label = new JLabel(new ImageIcon("./test.gif")); btn = new JButton("Switch"); btn.addActionListener(this); setLayout(new BorderLayout()); add(label, BorderLayout.NORTH); add(btn, BorderLayout.SOUTH); }
664 :
663 :2005/06/05(日) 21:17:08
//続き public void actionPerformed(ActionEvent ev) { boolean flag = true; if (ev.getSource() == btn) { if(flag){ label.setIcon(new ImageIcon("./test2.gif")); } else { label.setIcon(new ImageIcon("./test.gif")); } flag = (!flag); } } public static void main(String args[]) { ImageSwitch st = new ImageSwitch(); JFrame f = new JFrame("Switch"); f.getContentPane().add(st, BorderLayout.CENTER); f.pack(); f.setVisible(true); } } お願いします。
>661 効率を気にしなくていい場合、二次元配列の方が直感的。 人間が機械に歩み寄れば、機械が楽になり人間が大変になるのは当然。 だけど、それって最近の流行と反してないか? 理解のしやすさまで考えたら、二次元配列にすべきデータはそのままにしといた方がいい。
666 :
デフォルトの名無しさん :2005/06/05(日) 21:40:42
>>650 現状維持のままで行くなら、このような感じで、
コンストラクターに書き足し
Thread t = new Thread(this);メインスレッドをここで立ち上げ、
t.start();
run()内のコメントをはずし、
if(ctrl != null){
current_f = (current_f+1)%frames;
}
とする。
startAnim()内は、
if(ctrl == null){
ctrl = new Thread();//thisを外す
ctrl.start();
}
とする。
main(String args[])内を
//r.startAnim()これを外すということ
667 :
デフォルトの名無しさん :2005/06/05(日) 22:23:34
>>663 エラーの内容をコピペーしてみて。
多分、FileNotFoundExceptionが出てると予想
668 :
663 :2005/06/05(日) 22:29:10
>>667 レスありがとうございます。エラーはこんな感じです。
イメージソースに関するエラーなのでしょうか、よく分からない状態です。
D:\java>java ImageSwitch
java.lang.NullPointerException
at sun.java2d.pipe.DrawImage.copyImage(Unknown Source)
at sun.java2d.pipe.DrawImage.copyImage(Unknown Source)
at sun.java2d.SunGraphics2D.drawImage(Unknown Source)
at sun.awt.image.ImageRepresentation.drawToBufImage(Unknown Source)
at sun.java2d.pipe.DrawImage.copyImage(Unknown Source)
at sun.java2d.pipe.ValidatePipe.copyImage(Unknown Source)
at sun.java2d.SunGraphics2D.drawImage(Unknown Source)
at sun.java2d.SunGraphics2D.drawImage(Unknown Source)
at javax.swing.ImageIcon.paintIcon(Unknown Source)
at javax.swing.plaf.basic.BasicLabelUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintWithOffscreenBuffer(Unknown Source)
at javax.swing.JComponent.paintDoubleBuffered(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
669 :
663 :2005/06/05(日) 22:31:16
続きです at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) 何行目がオカシイと言われれば直しようがあるのですが…。お願いします。
JSP/サーブレットを使用しての、自動販売機システムを作成せよ 1.商品ボタン5つ 2.硬貨投入ボタン5つ 3.投入金額の表示 4.返却枚数の表示 5.釣り銭切れの表示
671 :
663 :2005/06/05(日) 22:44:26
>>667 氏、また考えて頂いていた方
大変申し訳ありません。問題なのはソースではなく、GIFファイルの方でした。
大学のサーバからftpソフトを使ってファイルを持ってきたのですが、その時に
GIFファイルが正しく持ってこれていなかったようです。
スレ汚しスイマセンでした。
672 :
デフォルトの名無しさん :2005/06/05(日) 23:45:34
>>670 結構めんどくさそうだね~
題意だけを考えると
商品の在庫は無限だけど
つり銭切れは、あるんだよね
ココで書くにはトラン処理はめんどくさい・・・
数値を引数にして実行をすると、その個数文 * を標準出力するものを作れ。 なお、* を複数個表示するときには、各 * を表示するごとに10[msec]のinterval を置くこと。という宿題です。 引数の数値文 * を表示することは難なく出きるのですが、10[msec]のインターバルを置く というところに詰まっています。 //引数があること前提で int num = Integer.parseInt(args[0]); for(int i=0; i<num; i++){ System.out.print("*"); } System.out.println(); とすると、当然ですが一瞬でズバっと表示されてしまいます。 宜しくお願いします。
674 :
デフォルトの名無しさん :2005/06/06(月) 00:06:13
#include <stdio.h> int main(){ int point; do{ printf("テストの点数を入力してください[0~100の整数]\n"); printf("点数 = ? --->"); scanf("%d" , &point); }while(!(0 <= point && point <= 100)); if(point >= 80){ printf("あなたの評価はAです\n"); }else if(point >= 70 && point < 80){ printf("あなたの評価はBです\n"); }else if(point >= 60 && point < 70){ printf("あなたの評価はCです\n"); }else{ printf("不合格です\n"); } return 0; }
>>673 int num = Integer.parseInt(args[0]);
for(int i=0; i<num; i++){
System.out.print("*");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
}
System.out.println();
お、何だか同じような宿題があるな。僕のはちょっと違うけど。 ボタンを押したときや、JTextFieldに何かを入力してEnterを押したときなど、 イベントが発生したときに行う処理は public void actionPerformed(ActionEvent e){} 内に書きますよね。 このとき、たとえばJLabel型のlbに 3 2 1 発射 と表示させたい場合、どうすればよいのでしょう? 各文字表示の間には、口で言うときのように適当な間をおくようにしたいのです。 lb = setText("3"); Thread.sleep(1000); lb = setText("2"); Thread.sleep(1000); lb = setText("1"); Thread.sleep(1000); lb = setText("発射"); とやってみましたが、イベントが発生してから3秒たった後に 発射 と表示されるだけでした。標準出力のようにはいかないんですかね。 どうしたらよいでしょう?
677 :
673 :2005/06/06(月) 01:05:42
>>675 レスが遅くなりました。
一番最初に作られるスレッドを制御する感じにするのですか。
このように書けるのですね。ありがとうございます。
678 :
644 :2005/06/06(月) 02:35:31
>>666 亀レススマソ
動作しました。やはり、startAnim無いのthisは外さないと
できませんよね。ありがとうございます。
679 :
デフォルトの名無しさん :2005/06/06(月) 10:18:00
>>676 イベントの処理と、ボタンの描画はEventDispatchThreadという
1つのスレッドが担当しているので、
イベント処理中は描画もできないから
もう1つスレッドを投げてやらないといけない。
Thread t;
public void actionPerformed(ActionEvent e) {
try{
if (t != null) t.join();
} catch (InterruptedException e) {}
t = new Thread() {
public void run() {
try{
lb = setText("3");
Thread.sleep(1000);
lb = setText("2");
Thread.sleep(1000);
lb = setText("1");
Thread.sleep(1000);
lb = setText("発射");
} catch (InterruptedException e) {}
}
};
t.start();
}
たぶん、これでいける
680 :
676 :2005/06/06(月) 12:35:46
>>679 いけました!
このようなスレッドの作り方が出来るのですね。
これは他にも応用がきかせられそうです。
ありがとうございます。
681 :
デフォルトの名無しさん :2005/06/06(月) 16:54:49
はじめまして。 考えて見たのですがどうしてもできなかったので、どなたか助けていただけませんか。 do~while文を使って、 * ** *** **** ***** ****** ***** **** *** ** * を作りたいのですが・・。よろしくお願いいたします。
既視感・・・。 このスレ検索しろ。 forを使った例しか載ってなかったかもしれないが、とりあえず自分で置き換えてみ。
683 :
681 :2005/06/06(月) 17:16:27
検索してみましたが見当たりませんでした。 *を増やすときに数字ではないので、増えなかったです。 よろしくお願いします。
684 :
デフォルトの名無しさん :2005/06/06(月) 17:19:59
なんか、ひし形作る問題のソース流用できそう。 検索汁
> *を増やすときに数字ではないので 意味がわからん。on_ 数字じゃなかったら何で増やすのか? forで書かれているのをdo~whileで置き換えればいいだけ。 お前のようなやつはこれで十分。 do{System.out.println("*\n**\n***\n****\n*****\n******\n*****\n****\n***\n**\n*\n");}while(false);
686 :
681 :2005/06/06(月) 17:49:33
class abc{ public static void main(String[] args){ int b,c; do{ do{ b=("*"); b++; System.out.println(b); {while(b<=6); } c=("******"); c--; System.out.println(c); {while(c<=1); } } 菱形のを参考に作ってみましたが、何度やってもエラーになります。 本当にすみませんがよろしくお願いします。
>>685 どうぞ。とりあえず動くことは動く。
public class Test{
private static final int MAX = 6;
public static void main(String args[]){
boolean isForward = true;
int width = 1;
do{
int tmp = width;
do{
System.out.print("*");
tmp--;
}while(tmp > 0);
System.out.println();
if(isForward){
if(width >= MAX){
width--;
isForward = false;
}else{
width++;
}
}else{
width--;
}
}while(width > 0);
}
}
689 :
681 :2005/06/06(月) 18:04:10
ありがとうございます!!!動きました!! 参考になりました!! 本当にありがとうございます。 しかし、自分には難しかったので、これを参考に作ってみます。 本当にありがとうございました。
690 :
681 :2005/06/06(月) 18:19:12
class abc{ public static void main(String[] args){ int b,c; do{ do{ b=("*"); b++; System.out.println(b); {while(b<=6); } c=("******"); c--; System.out.println(c); {while(c<=1); } } 先ほどのはやっぱり難しかったです。 失礼を承知で・・。 これでの間違いは何がありますか?? 本当にすみません。 よろしくお願いします。
基本的な文法・ルールを覚えなさい。話はそれからだ。 とりあえず・・・。 > b=("*"); これは何をしているつもりなのか? > do{ > 中略 > {while(b<=6); > } do~whileの構文は do{ ... }while(条件);
何がやりたいのかをまず考えろ。図形をパターン化しろ。 1行目には*が1つ。2行目には*が2つ。 3行目には*が3つ。4行目には*が4つ。 5行目には*が5つ。6行目には*が6つ。 n行目には*がいくつあればいいんだ?分かるかい? 分かったらfor(i=1;i<=6;i++)のループを書け。 その中で、System.out.print("*")を*の数だけ繰り返せばいい。 (printlnとprintの違いは改行の有無。自分で実行して確かめろ) これで上半分は完成だ。 あとは同じように下半分もやりゃあいい。 とりあえず6までの階段を書け。 それが書ければ段数を指定できるプログラムへの修正は一瞬だ。
693 :
681 :2005/06/06(月) 23:28:43
親切にありがとうございます!!考えてみます!!
代入文、ifやfor,whileといった制御構造は、日本語で言えばてにをはのレベルだ。 基礎の基礎であり、知らないと何も書けない。 名詞と動詞の違いに当たる、データ型の違いに関する理解も滅茶苦茶。 「int b」と宣言した以上、bは整数だ。「"*"」は文字列なので、絶対にbの中には入らない。 きつい言い方になるが、日本語の文を書けない奴には、作文は教えられない。 つまり、あなたはまだプログラムを教えられるレベルに達していない。 やり方は>692の考え方で分かるだろうが、分かったところで恐らく書けないでもどかしい思いをするだけだろうな。 構成を考えられたとしても、日本語が分からなければ文は書けないという事だ。
695 :
681 :2005/06/07(火) 10:59:39
>「int b」と宣言した以上、bは整数だ。「"*"」は文字列なので、絶対にbの中には入らない。 少し納得しました。「"*"」これをひとつ増やすという意味を作るということですか?本当に初心者ですみません。 今、一番最初から本を読み直しています。 本当にありがとうございます。
696 :
681 :2005/06/07(火) 11:18:46
1行目は1回繰り返して改行、2行目は2回繰り返して改行、3行目は3回繰り返して・・・という形ということですか?? 連続投稿すみません。 少し分かってきた気がしました(まだ全然ですが・・・)
> 「"*"」これをひとつ増やすという意味を作るということですか?本当に初心者ですみません。 くどいようだけど、プログラム以前の問題。 まず日本語。人の発言を理解する能力と、自分の思考を伝える能力を身に着けないと いつまで経っても無理。 それから、Javaの文法やルール、基本的な言語の構成を一から理解していく。
698 :
681 :2005/06/07(火) 11:42:50
分かりました。ありがとうございました。 基本から理解して、がんばってみます。
GUIのTextFieldを右寄せで表示するにはどうしたらイイの?
アラビア語で書く
read API doc or 手作り
702 :
デフォルトの名無しさん :2005/06/08(水) 09:51:22
>>699 AWTでは手作りするよりないな。
SwingのJTextFieldならsetHorizontalAlignmentというのがある。
「直線」「矩形」「楕円」を描画するものを作る課題です。
プルダウンメニューを配置し、プルダウンメニューより選択した図形を、
ウィンドウ内でドラッグ&ドロップした範囲に描画するというものです。
一応カタチにはなっているのですが、1つ問題を発見しました。
例として、矩形を選択し、矩形を描きます。矩形が描かれた状態で、プルダウンメニュー
より、選択図形を変更します。ここで、直線を選択するとします。
もし、矩形がプルダウンメニューにかかる位置にあった場合、選択図形を直線に変更し
た時点で、プルダウンメニューがかかっていた場所のみが直線になってしまうのです。
矩形がプルダウンメニューにかからない位置にある場合でも、別のウィンドウを重ねた
りウィンドウ全体を最小化するなどすると、選択図形を変更しただけなのに、既に描かれ
た図形までも変化してしまいます。
おそらくは再描画に関する問題なのかとは思いますが、解決できません。
よろしくお願いします。
ttp://up.razor.jp/index.html ファイルNo:2809
DLパス:drawtest
704 :
デフォルトの名無しさん :2005/06/08(水) 14:15:39
>>681 本気で基本文法だけは覚えろよ。
煽るだけじゃあれなんで、こんなやり方もあると言ってみる。
int size=6;
StringBuffer buffer=new StringBuffer();
while(str.length()<size){
buffer.append('*');
System.out.println(buffer);
}
while(buffer.length()>0){
buffer. deleteCharAt(0);
System.out.println(buffer);
}
>>703 以前に描画した図形の情報が保存されていないから、システムから再描画を呼ばれた時に
新しい情報で再描画してしまうんだな。描画にバッファ画像使ってみそ。
・ユーザーからの描画操作があった場合、バッファ画像に描く。
・paintなりpaintComponentなりでは、drawImageでバッファ画像を描画する。
あとは自分で出来るよな。頑張れ。
706 :
703 :2005/06/08(水) 19:16:11
>>705 解決できました!
ヒントの提示、ありがとうございました。
707 :
705 :2005/06/08(水) 22:19:19
>>706 解決したようで何より。
あんな簡単なアドバイスに礼なんか期待してなかったが、言われてみるとやはり気持ちいいな。
おかげでちょっといい気分になれた。ありがとう。
学校がらみで教えてください。 学校の環境で、MySQLとサーブレットとJSP、JAVABeansを利用して作ったものを 自宅に持ってきて動作させようと、TOMCATにそのまま入れたら javax.servlet.ServletException: org/aspectj/lang/Signature org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779) org.apache.jsp.AddForm_jsp._jspService(AddForm_jsp.java:139) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) というエラーが出ます。 何が原因でしょうか?これだけでは情報不足ですかね・・・。
711 :
デフォルトの名無しさん :2005/06/09(木) 17:25:35
713 :
711 :2005/06/09(木) 17:39:29
2104048です。お願いします。
ワロス
メールで担当教官に提出しておいたw
提出までやってくれるなんて! ツーチャンネルは親切なインターネットですね。
ついでに通報もしておいた
あー、ちょっと前にいた壊滅的だった人もここの学校なのかな。 航空大学校レベルタカスwwwwww
2005年度 宮崎産業経営大学用と書いてあるから宮崎産業経営大学の講師をしてるんじゃない?
プログラムに独創性を求めてどーする。
JTableって列をドラッグ&ドロップできるようなんですけど、 これを無効にするにはどうしたらいいでしょうか? setEnabledだと、列の編集する無効になってしまうようで・・・ お願いします。
>721 JTableHeader header = table.getTableHeader(); header.setReorderingAllowed(false); でどうでしょう?
723 :
>>711 その1 :2005/06/10(金) 12:15:20
import java.io.*; import java.util.*; public class HW91 { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("学籍番号を入力してください:"); int number = 0; try { String line = br.readLine(); number = Integer.parseInt(line); } catch (NumberFormatException ex) { System.out.println("不正な数値を入力しました"); System.exit(0); } catch (Exception ex) { System.out.println("入力エラーが発生しました"); System.exit(0); } System.out.println("学籍番号は" + number); System.out.println("余りは" + number % 3); int count = 1; int num = +1; char[] cs = null;
724 :
:>>711 その2 :2005/06/10(金) 12:16:05
switch (number % 3) { case 0: do { cs = new char[count]; Arrays.fill(cs, '*'); System.out.println(new String(cs)); if (count == 6) { num = -num; } count += num; } while (count > 0); break; case 1: for ( ; count != 0; ) { cs = new char[count]; Arrays.fill(cs, '*'); System.out.println(new String(cs)); if (count == 6) { num = -num; } count += num; } break;
725 :
>>711 その3 :2005/06/10(金) 12:16:28
case 2: while (count != 0) { cs = new char[count]; Arrays.fill(cs, '*'); System.out.println(new String(cs)); if (count == 6) { num = -num; } count += num; } } } }
マインスイーパー(?) っぽいプログラムを作成中なのですが 1000 1101 1001 という物が定義されていたとき 4000 4402 4002 みたいに縦横斜めの数を調べて書き換えるにはどーすればいいのでしょうか?
>>726 #define SIZE 10
int data[SIZE][SIZE];
int check_bomb(int x, int y)
{
int count = 0;
if(data[x][y] == -1) return -1; /*爆弾*/
if(x > 1 && data[x-1][y] == -1) count++;
if(y > 1 && data[x][y-1] == -1) count++;
if(x < SIZE-1 && data[x+1][y] == -1) count++;
if(y < SIZE-1 && data[x][y+1] == -1) count++;
if(x > 1 && y > 1 && data[x-1][y-1] == -1) count++;
if(x < SIZE-1 && y < SIZE-1 && data[x+1][y+1] == -1) count++;
if(x > 1 && y < SIZE-1 && data[x-1][y+1] == -1) count++;
if(x < SIZE-1 && y > 0 && data[x+1][y-1] == -1) count++;
return count;
}
>728 何をやりたいんだか。
C厨はどこにでもわきやがる
>>729-730 勘違いしたスマソ。
お詫びにJava版。
class Mine {
static final size = 10;
int data[][] = new int[size][size];
public int checkBomb(int x, int y) {
int count = 0;
if(data[x][y] == -1) return -1; //爆弾
if(x > 1 && data[x-1][y] == -1) count++;
if(y > 1 && data[x][y-1] == -1) count++;
if(x < size-1 && data[x+1][y] == -1) count++;
if(y < size-1 && data[x][y+1] == -1) count++;
if(x > 1 && y > 1 && data[x-1][y-1] == -1) count++;
if(x < size-1 && y < size-1 && data[x+1][y+1] == -1) count++;
if(x > 1 && y < size-1 && data[x-1][y+1] == -1) count++;
if(x < size-1 && y > 0 && data[x+1][y-1] == -1) count++;
return count;
}
}
>>731 いや、言語だけでなく、内容も間違ごうとるんだよ。
マインスイーパーではなく、パインスーパー「っぽい」
というところがミソ。
733 :
デフォルトの名無しさん :2005/06/11(土) 03:46:17
「直線」「矩形」「楕円」を描画するものを作る課題です。
プルダウンメニューを配置し、プルダウンメニューより選択した図形を、
ウィンドウ内でドラッグ&ドロップした範囲に描画するというものです。
ttp://up.razor.jp/index.html ファイルNo: 2874
DLパス: sage
プルダウンメニューで図形を選択し
その選択肢をマウスイベントのif分岐に反映させるところが
うまくいきません。
if文内にどのような関数なりをいれればいいでしょうか?
またその前に決定された選択肢を呼び出すには
どのようなに仕組めばいいのでしょうか?
お願いします
734 :
>>710 その1 :2005/06/11(土) 08:42:12
import java.awt.*; import java.awt.event.*; import java.awt.image.*; import javax.swing.*; public class HW92 { static JFrame frm = new JFrame(); static JLabel graph = new JLabel(); static JTextField atf = new JTextField(8); static JTextField btf = new JTextField(8); static JTextField ctf = new JTextField(8); static JButton read = new JButton("読込"); static JButton clear = new JButton("消去"); static JButton quit = new JButton("終了"); static BufferedImage img = new BufferedImage(400, 400, BufferedImage.TYPE_INT_ARGB); public static void main(String[] args) { read.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { readExpression(); } }); clear.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { clearGraph(); } }); quit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } });
735 :
:>>710 その2 :2005/06/11(土) 08:42:42
graph.setOpaque(true); graph.setBackground(Color.white); graph.setBorder(BorderFactory.createEtchedBorder()); graph.setHorizontalAlignment(SwingConstants.CENTER); graph.setHorizontalTextPosition(SwingConstants.CENTER); graph.setFont(new Font("Dialog", Font.BOLD, 20)); graph.setForeground(Color.red); graph.setIcon(new ImageIcon(img)); clearGraph(); JPanel left1 = new JPanel(); left1.setOpaque(false); left1.add(new JLabel("Aの係数")); left1.add(atf); JPanel left2 = new JPanel(); left2.setOpaque(false); left2.add(new JLabel("Bの係数")); left2.add(btf); JPanel left3 = new JPanel(); left3.add(new JLabel("Cの係数")); left3.setOpaque(false); left3.add(ctf); JPanel left = new JPanel(new GridLayout(3, 1)); left.setOpaque(false); left.add(left1); left.add(left2); left.add(left3);
736 :
::>>710 その3 :2005/06/11(土) 08:43:09
JPanel bottom = new JPanel(); bottom.setOpaque(false); bottom.add(read); bottom.add(clear); bottom.add(quit); JPanel base = new JPanel(new BorderLayout(16, 16)); base.setBorder(BorderFactory.createEmptyBorder(16, 16, 16, 16)); base.setBackground(new Color(230, 230, 255)); base.add(graph); base.add(left, BorderLayout.WEST); base.add(bottom, BorderLayout.SOUTH); frm.getContentPane().add(base); frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frm.pack(); frm.setVisible(true); } static void readExpression() { clearGraph(); double coeA = 0; double coeB = 0; double coeC = 0;
737 :
:::>>710 その4 :2005/06/11(土) 08:43:41
try { coeA = Integer.parseInt(atf.getText()); coeB = Integer.parseInt(btf.getText()); coeC = Integer.parseInt(ctf.getText()); } catch (Exception ex) { graph.setText("数値の入力が不正です"); return; } double maxX = -coeB / coeA; if (maxX == 0) { graph.setText("数値の入力が不正です"); return; } double[] cdntXs = new double[100]; double[] cdntYs = new double[100]; double gradX = maxX / 100; double maxY = 0; for (int i = 0; i < 100; i++) { cdntXs[i] = gradX * i; cdntYs[i] = coeA * (cdntXs[i] * cdntXs[i]) + coeB * cdntXs[i] + coeC; if (Math.abs(cdntYs[i]) > maxY) { maxY = Math.abs(cdntYs[i]); } } double gradY = maxY / 100; Graphics g = img.getGraphics(); g.setColor(Color.blue);
738 :
>>710 その5 :2005/06/11(土) 08:44:10
for (int i = 0; i < 99; i++) { double srcX = i * 4; double srcY = -(cdntYs[i] / maxY * 200) + 200; double dstX = (i + 1) * 4; double dstY = -(cdntYs[i + 1] / maxY * 200) + 200; g.drawLine((int) srcX, (int) srcY, (int) dstX, (int) dstY); } } static void clearGraph() { graph.setText(null); Graphics g = img.getGraphics(); g.setColor(Color.white); g.fillRect(0, 0, img.getWidth(), img.getHeight()); g.setColor(Color.black); g.drawLine(0, img.getHeight() / 2, img.getWidth(), img.getHeight() / 2); graph.repaint(); } }
739 :
デフォルトの名無しさん :2005/06/11(土) 13:41:29
クイックソートのプログラムなのですが、ところどころ何をしてるのかわからないところがあります。 一行ずつ解説つけてもらえませんか? お願いします。 public static void quickSort(int[] arr, int left, int right){ if (left <= right) { int p = arr[(left+right) / 2]; int l = left; int r = right; while(l <= r) { while(arr[l] < p){ l++; } while(arr[r] > p){ r--; } if (l <= r) { int tmp = arr[l]; arr[l] = arr[r]; arr[r] = tmp; l++; r--; } } quickSort(arr, left, r); quickSort(arr, l, right); } }
>>638 もう見ていないかもしれないが、もしかして俺と同じ授業を受けていない?
月曜日4限、教科書:JAVA2プログラミング講座、前期と後期で違う先生がやる授業じゃない?
肝心の質問を書くのを忘れてた
俺も
>>638 >>640 と同じ課題が出ていて、教科書を参考にしたらこんなのになった
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
public class Report{
public static void main(String[] args){
ReportFrame f = new ReportFrame("課題1");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
class ReportFrame extends JFrame{
private int index;
private JPanel panel;
private JButton[] b;
private Shape[] s;
public ReportFrame(String title){
setTitle(title);
b = new JButton[]{
new JButton("弧"),
new JButton("楕円"),
};
s = new Shape[]{
new Arc2D.Double(100.0, 70.0, 200.0, 180.0, 100.0, 260.0, Arc2D.PIE),
new Ellipse2D.Double(100.0, 70.0, 190.0, 140.0),
};
JPanel bp= new JPanel(); ActionListener listener = new ActionListener(){ public void actionPerformed(ActionEvent e){ for(index=0; index<2; index++){ if(e.getSource() == b[index]){ break; } } panel.repaint(); } }; for(int i=0;i<2;i++){ b[i].addActionListener(listener); bp.add(b[i]); } panel = new JPanel(){ public void paint(Graphics g){ super.paint(g); Graphics2D g2 = (Graphics2D)g; setBackground(Color.WHITE); g2.setPaint(new Color(100,230,100)); g2.setStroke(new BasicStroke(15F)); g2.draw(s[index]); } }; setSize(400,400); panel.setSize(400,300); getContentPane().add(bp,BorderLayout.SOUTH); getContentPane().add(panel,BorderLayout.CENTER); } }
これで private JPanel panel; はclass ReportFrameの先頭で宣言しているのに JPanel bp ( >743の先頭 ) はコンストラクタ内で宣言している この違いは一体何? 後、このソースってJAVAで書かれたものとしてはグチャグチャなの? どうもカプセル化とかできている気がしないんだけど
>>744 > これで private JPanel panel; はclass ReportFrameの先頭で宣言しているのに
> JPanel bp ( >743の先頭 ) はコンストラクタ内で宣言している
> この違いは一体何?
参考にした教科書が悪いかも。
今回のケースなら、区別する必要はないでしょう。
個人的にはコンストラクタ内で宣言すると思う(ReportFrameの属性にする必要がないと思うので)。
> どうもカプセル化とかできている気がしないんだけど
ReportFrameのフィールド4つはprivateで宣言されてるから
他クラスからこれらを変更することはできません。
と言う意味ではカプセル化はできてます。
>>745 thx
panelの方は匿名内部クラスで使っているから外側で宣言する必要があるのかな?
もうちょっと勉強しなおして、次からは質問スレの方にでも行こうと思います
プログラミング超初心者で授業の課題で困っています 10匹のタートルが順に六角形を描き競争するプログラムです どのタートルが次の辺を描くかはランダムにきめ いずれかのタートルが六角形を描き終わったら プログラムを終了するものとします public class T51 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(600,300); Turtle[] hm = new Turtle[10]; for(int i = 0 ; i < 10; i++){ hm[i] = new Turtle(i * 50 + 25,150,0); f.add(hm[i]); } for(int i = 0; i < 10; i++){ for(int j = 0; j < 6; j++){ hm[i].fd(10); hm[i].rt(360/6); } } } } ここまでは分かったのですが乱数を発生させるための (int)(Math.random()*10)の使い方がよく分かりません 期限は月曜までです。お願いします。
スプライン補完です //design this method. のところをお願いします package ncx.ex08; import java.io.*; import ncx.ex02.MathVector; import ncx.ex02.MathMatrix; import ncx.ex03.GaussElimination; import ncx.ex07.Interpolation; public class CubicSpline implements Interpolation { private int N; private MathVector x; private MathVector y; private double[][] c; public CubicSpline(MathVector x, MathVector y){ setN(x.getLength()); setX(x); setY(y); init(); }
protected void setN(int N){ this.N = N; } public int getN(){ return N; } protected void setX(MathVector x){ this.x = new MathVector(x); } public double getX(int i){ return x.getElement(i); } public double getDX(int i){ return getX(i) - getX(i - 1); } protected void setY(MathVector y){ this.y = new MathVector(y); } public double getY(int i){ return y.getElement(i); }
public double getDY(int i){ return getY(i) - getY(i - 1); } protected void setC(int i, int j, double c){ this.c[i][j] = c; } public double getC(int i, int j){ return c[i][j]; } protected void init(){ c = new double[4][getN()]; MathMatrix A = new MathMatrix(getN(), getN()); MathVector Y = new MathVector(getN(), false); //design this method. } public double f(double x) { double r = 0.0; //desing this method. return r; }
public static void main(String[] args) throws IOException{ if (args.length != 1){ System.err.println("usage: java ncx.ex08." + "CubicSpline n"); System.exit(1); } int n = Integer.parseInt(args[0]); int N = n + 1; MathVector x = new MathVector(N); MathVector y = new MathVector(N); for (int i = 0;i < N;i++){ x.setElement(i, -1.0 + 2.0*(double)i/(double)n); y.setElement(i, 1/(1 + 25.0*Math.pow(x.getElement(i), 2))); }
CubicSpline cs = new CubicSpline(x, y); PrintWriter pw = new PrintWriter(new FileWriter("results" + n + ".dat")); pw.println("# x f(x)"); for (double X = -1.0;X <= 1.0;X += 0.01){ pw.println(X + " " + cs.f(X)); } pw.close(); System.out.println("The results have been stored in" + "results" + n + ".dat"); } }
753 :
>>709ルビン その1 :2005/06/12(日) 09:25:43
package hw93; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.io.*; import java.util.*; import javax.imageio.*; import javax.swing.*; import java.util.List; public class HW93 { // static final int WIDTH = 300, HEIGHT = 300; static final Color BACK = Color.blue, FORE = Color.green; // static List polygonPoints = new ArrayList(); //ポリゴン図形の配列 static JFrame frame = new JFrame(); static JLabel label = new JLabel(); static BufferedImage rubin; static int[][] around = new int[][] { {0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1} }; public static void main(String[] args) { try { InputStream in = ClassLoader.getSystemResourceAsStream("hw93/rubin.gif"); rubin = ImageIO.read(in); } catch (Exception e) { System.out.println("画像ファイル rubin.gif が見つかりません"); System.exit(0); }
754 :
:>>709ルビン その2 :2005/06/12(日) 09:26:15
makePolygonPoints(); frame.getContentPane().addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { drawPolygon(); } }); frame.getContentPane().add(label); frame.setSize(WIDTH, HEIGHT); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.setVisible(true); } static void makePolygonPoints() { Point startPt = findStartPoint(); Point pt = startPt; int returnIndex = 0; loop: while (true) { polygonPoints.add(pt); for (int i = 0; i < around.length; i++) { Point nextPt = new Point(pt.x + around[i][0], pt.y + around[i][1]); if (isBorder(nextPt.x, nextPt.y) && !polygonPoints.contains(nextPt)) { pt = nextPt; returnIndex = 0; continue loop; } }
755 :
::>>709ルビン その3 :2005/06/12(日) 09:26:41
if (startPt.distance(pt) < 2) { break; } ++returnIndex; pt = (Point) polygonPoints.get(polygonPoints.size() - returnIndex - 1); } } static Point findStartPoint() { for (int y = 0; y < rubin.getHeight(); y++) { for (int x = 0; x < rubin.getWidth(); x++) { if (isBorder(x, y)) { return new Point(x, y); } } } return null; } static boolean isBorder(int x, int y) { int rgb = rubin.getRGB(x, y); if (rgb == Color.white.getRGB()) { return false; }
756 :
:::>>709ルビン その4 :2005/06/12(日) 09:27:09
for (int i = 0; i < around.length; i++) { try { rgb = rubin.getRGB(x + around[i][0], y + around[i][1]); } catch (Exception ex) { continue; } if (rgb == Color.white.getRGB()) { return true; } } return false; } static void drawPolygon() { int[] xs = new int[polygonPoints.size()]; int[] ys = new int[polygonPoints.size()]; for (int i = 0; i < polygonPoints.size(); i++) { xs[i] = ((Point) polygonPoints.get(i)).x; ys[i] = ((Point) polygonPoints.get(i)).y; xs[i] = (int) (xs[i] * (frame.getContentPane().getWidth() / 200.0)); ys[i] = (int) (ys[i] * (frame.getContentPane().getHeight() / 200.0)); } BufferedImage img = new BufferedImage(frame.getContentPane().getWidth(), frame.getContentPane().getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics g = img.getGraphics(); g.setColor(BACK); g.fillRect(0, 0, img.getWidth(), img.getHeight()); g.setColor(FORE); g.fillPolygon(xs, ys, xs.length); label.setIcon(new ImageIcon(img)); } }
757 :
デフォルトの名無しさん :2005/06/12(日) 09:30:05
ウィンドウのサイズ変更に合わせて図形も拡大縮小します。
758 :
デフォルトの名無しさん :2005/06/12(日) 10:42:30
hw93というパッケージを作成し、それに HW93.class と rubin.gif を含めないと実行できません
1から50までの数字を一行に10ずつ表示するプログラムを作成しなさい。 お願いします。
>>759 class Hoge{ public static void main(String[] args){System.out.println(" 1 2 3 4 5 6 7 8 9 10\n11 12 13 14 15 16 17 18 19 20\n21 22 23 24 25 26 27 28 29 30\n31 32 33 34 35 36 37 38 39 40\n41 42 43 44 45 46 47 48 49 50");}}
>>759 class Sample0003 {
public static void main(String[] args) {
for(int i=0; i < 50; i++) {
System.out.print((i+1) + " ");
if((i)%10==0)
System.out.println();
}
}
}
>>759 class Sample0003 {
public static void main(String[] args) {
for(int i=0; i < 50; i++) {
System.out.print((i+1) + " ");
if((i+1)%10==0) System.out.println();
}
}
}
プログラムの宿題で、7+14+21+・・・+994= という表記をして結果を算出というのが出たんですけど、 for文でやるのですが int (i = 0; i % 7 = 0 && i < 1000; i++) system.out.print(i + "+") のように書くと最後の994のあとにも+がついてしまうので、 それを何とか解決したいんですが、 アドバイスお願いできないでしょうか。 あるいはfor文を使った全く別のやり方でもいいので、 ぜひ解答例をお願いします。
767 :
デフォルトの名無しさん :2005/06/12(日) 17:59:55
(int)(Math.random()*10)は 整数0~9までのいずれか発生させるから int result=(int)(Math.random()*10); でコレに該当する亀を動かすようにすればいい //Turtle[] hm = new Turtle[10];なので hm[result].move(); //おわったらまた int result=(int)(Math.random()*10);にもどる これをどれかが6回呼ばれたら終わるように書けばいい
766です。 for (int i = 0 ~ の間違いでした。
自分が書いたものを全部コピペしてみなよ
>>768 でもまだおかしいよ
770 :
デフォルトの名無しさん :2005/06/12(日) 18:18:26
>>766 System.out.print(i);
if(i!=994){
System.out.print("+");
}
こういうやり方でいいんでないの?
>>768 これでいいかな??
class Sample0004 {
public static void main(String[] args) {
int sum = 0;
for(int i=0; i < 1000; i++) {
if((i+1)%7==0) {
if(i>6) System.out.print(" + ");
sum+=i+1;
System.out.print((i+1));
}
}
System.out.println(" = " + sum);
}
}
766です。
>>769 すいません、まだその先は深く考えてなかったもので・・・。
とりあえず、その問題が解決したら考えようと・・・、
やっぱあれじゃその先が無理なんですかね?
>>770 ,771
どうもありがとうございます。
ちなみに自分はほんと初心者でsumとかもよく理解できてないんですがw
まあ教科書でも見ながら理解してみようと。
どうもでした。
>>767 すみません。よく理解できないので
>>747 のソースに付け加えてもらえますか?
お手数おかけしてすみません
775 :
デフォルトの名無しさん :2005/06/12(日) 18:55:35
ちょと待て TurtleFrame Turtle ↑このクラスの中身教えろ 勘で書いてもいいけど時間の無駄
クラスの中身?
予想:
>>747 までは先生が黒板に書いてくれた。それが何を意味しているのかさっぱり理解していない
>>777 当たりです。どうしようもないんです。
今更プログラミングの授業取ったこと後悔してます
自分には向いてない…。
766です。困ったことにsumはまだ習ってなく、 しかもこの課題が出るまでの教科書の範囲にも出てこないんですが、 この問題ってsum使わずに出来るんですかね? 最後の結果なんてのはまさか("7+14+21+・・・+994")と 書くわけにもいかないですし・・・。 ちなみに問題が『1から1000までの7の倍数のみの総和をとり、 結果を表示するプログラムの作成』なので、 できれば自分で考えた994という数字は使いたくないのですが。 実際sumも994も使わずに初歩の記号だけで出来るのかどうかは よくわからないのですが、ぜひ初心者にもわかりやすい 解答方法がありましたらご指導お願いします。 あ、994はこの際使ってしまおうかとも考えてます。
780 :
デフォルトの名無しさん :2005/06/12(日) 19:22:20
>>778 いや、そうは言っても コレだけの情報じゃどうしようもないだろう
なんか適当に一匹亀作って6角形書いて終わりのプログラム作ってごまかせ
つーかいい事思いついた
なんか適当に俺らが未完成のプログラム書いてそれを提出すればいい
GUIなのか?
題意から考えると
10個の点のうちどれか一つが6マス動いたら止まればいい?
6マスが6角形を形成するように動けばいいのか?
OK、じゃあint sumをint aに変更だ
LISPの宿題の焼き直し?
>>780 >>747 の時点では10匹の亀が一斉に六角形を描き始めるんです。
それを0~9の乱数を発生させて出た数にの番号(添字)に相当する
亀に次の辺を描かせて、どの亀が一番早く六角形を描き終わるかを競争させる
とあるんですが…これでは説明不足ですか?
>>784 public class T51 {
public static void main(String[] args){
TurtleFrame f = new TurtleFrame(600,300);
Turtle[] hm = new Turtle[10]; // 配列オブジェクトを生成
for(int i = 0 ; i < 10; i++){
hm[i] = new Turtle(i * 50 + 25,150,0); // タートルを生成,配列の各要素に代入
f.add(hm[i]);
}
for(int i = 0; i < 10; i++){
for(int j = 0; j < 6; j++){
hm[i].fd(10); // hm[i] に代入されている
hm[i].rt(360/6); // タートルに対するメソッド呼び出し
}
}
}
}
TurtleFrameのソースを出せと言っているんだ
その意味が解りません ごめんなさい いい加減スレ汚ししてそうなので消えます
すみません。もしかしてこれですか? // // Turtle Graphics Library extension for teaching OO concepts // as a modification of Tatsuya Hagino's Turtle Graphics Library // Copyright (C) 2000, Hideki Tsuiki, Kyoto University // Turtle Graphics Library for Information Processing I // Copyright (C) 1998, Tatsuya Hagino, Keio University // // Permission to use, copy, modify, and distribute this software // for educational purpose only is hereby granted, provided that // the above copyright notice appear in all copies and that both // the copyright notice and this permission notice appear in // supporting documentation. This software is provided "as is" // with no warranty. import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.lang.Math; import java.util.Vector; /** タートルを表示する枠のクラス。 */
public class TurtleFrame extends TurtlePanel implements ActionListener, ItemListener { JFrame frame; // menu JRadioButtonMenuItem[] speedMenu; static String[] speedMenuString = {"no kame", "fast", "normal", "slow"}; /** TurtlePanel を、width x height の大きさで作成する。 */ public TurtleFrame(int width, int height) { super(width, height); frame = new JFrame("Turtle"); JMenuBar menubar = new JMenuBar(); JMenu file = new JMenu("File", true); menubar.add(file); JMenuItem quit = new JMenuItem("Quit"); quit.addActionListener(this); quit.setActionCommand("quit"); file.add(quit);
JMenu speed = new JMenu("Speed", true); menubar.add(speed); speedMenu = new JRadioButtonMenuItem[speedMenuString.length]; ButtonGroup bg = new ButtonGroup(); for (int i = 0; i < speedMenuString.length; i++) { speedMenu[i] = new JRadioButtonMenuItem(speedMenuString[i], false); speedMenu[i].addItemListener(this); speed.add(speedMenu[i]); bg.add(speedMenu[i]); } speedMenu[Turtle.speedNormal].doClick(); frame.setJMenuBar(menubar); Container c = frame.getContentPane(); c.setLayout(new BoxLayout(c, BoxLayout.Y_AXIS)); setAlignmentX(JComponent.CENTER_ALIGNMENT); c.add(this); frame.pack();
frame.setDefaultCloseOperation(3); // EXIT_ON_CLOSE frame.setVisible(true); synchronized(mappedLock) { if (!mapped) { try { mappedLock.wait(); } catch (InterruptedException e) { } } } } /** TurtleFrame を、デフォルトの大きさ(400x400) で作成する。 */ public TurtleFrame() { this(400,400); } // exit public void exit() { System.exit(0); }
// menu bar event handler public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); if (cmd.equals("quit")) System.exit(0); else if (cmd.equals("restart")) /*restart()*/; else if (cmd.equals("ps")) /*savePostscript()*/; } // menu event handler public void itemStateChanged(ItemEvent e) { JRadioButtonMenuItem s = (JRadioButtonMenuItem)e.getItem(); for (int i = 0; i < speedMenuString.length; i++) { if (s == speedMenu[i]) { Turtle.speedAll(i); break; } } } }
Turtleのソースも。 それから問題文も一字一句間違わずに書いて。 丸投げしてもらった方が早いんで。
Turtleソース // // Turtle Graphics Library extension for teaching OO concepts // by Hideki Tsuiki, Kyoto University // as a modification of Tatsuya Hagino's Turtle Graphics Library // Copyright (C) 2000, Hideki Tsuiki, Kyoto University // Turtle Graphics Library for Information Processing I // Copyright (C) 1998, Tatsuya Hagino, Keio University // // Permission to use, copy, modify, and distribute this software // for educational purpose only is hereby granted, provided that // the above copyright notice appear in all copies and that both // the copyright notice and this permission notice appear in // supporting documentation. This software is provided "as is" // with no warranty.
import java.awt.*; import java.awt.event.*; import java.io.*; import java.lang.Math; import java.util.Vector; /** タートルのクラス。 */ public class Turtle{ /** もし、このフィールドの値が true なら、 * 亀を用いた描画を行う。false なら、亀を表示せず、高速な描画を行う。 * 初期値は true。*/ boolean withKame = true; /** もし、false なら、個々のタートルの * withKame の値に関わらず、全てのタートルに高速な描画を行う。 * 初期値は true。*/ public static boolean withKameAll = true; public Color kameColor = Color.green; // animation parameters static double rotateStep = 5.0 *Math.PI/180.0 ; static int moveStep = 5; static int[] speedStep = {100000, 20, 5, 2};
// turtle animation speed constants final static int speedNoKame = 0; final static int speedFast = 1; final static int speedNormal = 2; final static int speedSlow = 3; // set the menu static void speedAll(int s) { if (s < 0 || s >= speedStep.length) return; rotateStep = speedStep[s] *Math.PI/180.0; moveStep = speedStep[s]; withKameAll = (s > 0); } TurtlePanel f; // set by TurtlePanel double angle;// turtle current angle double x, y;// turtle current position double dx, dy;// dx = sin(angle), dy = -cos(angle) boolean penDown;// pen status (up or down) Color c = Color.black; // pen color int kameType = 0; // turtle animation rubber line int rx, ry; boolean rubber = false; int moveWait = 20; int rotateWait = 20;
/** (x, y) という座標に angle の角度で、Turtle を作成。 */ public Turtle(int x,int y, int ia) { this.x = ((double)x + 0.5); this.y = ((double)y + 0.5); setangle((double)ia *Math.PI/180.0); penDown = true; } /** (200,200) という座標に 0 度の角度で、Turtle を作成。 */ public Turtle() { this(200,200, 0); } // turtle static final int kameFig[][] = { {-12,-6,-12,6,0,18,12,6,12,-6,0,-18,-12,-6}, {-18,-12,-12,-6}, {-6,-24,0,-18,6,-24}, {12,-6,18,-12}, {12,6,18,12}, {-6,24,0,18,6,24}, {-18,12,-12,6}, {-18,12,-18,-12,-6,-24,6,-24,18,-12,18,12,6,24,-6,24,-18,12}, {-15,-15,-18,-24,-9,-21}, {9,-21,18,-24,15,-15}, {15,15,18,24,9,21}, {-9,21,-18,24,-15,15}, {-3,24,0,30,3,24}, {-6,-24,-12,-36,-6,-48,6,-48,12,-36,6,-24} };
static final int kameRFig[][] = { {-12,-6,-12,6,0,18,12,6,12,-6,0,-18,-12,-6}, {-18,-12,-12,-6}, {-6,-24,0,-18,6,-24}, {12,-6,18,-12}, {12,6,18,12}, {-6,24,0,18,6,24}, {-18,12,-12,6}, {-18,12,-18,-12,-6,-24,6,-24,18,-12,18,12,6,24,-6,24,-18,12}, {-15,-15,-24,-18,-9,-21}, {-9,21,-24,18,-15,15}, {-3,24,-3,30,3,24}, {-6,-24,-6,-36,0,-48,12,-48,18,-36,6,-24}, {9,-21,18,-30,15,-15}, {15,15,18,30,9,21} }; static final int kameLFig[][] = { {-12,-6,-12,6,0,18,12,6,12,-6,0,-18,-12,-6}, {-18,-12,-12,-6}, {-6,-24,0,-18,6,-24}, {12,-6,18,-12}, {12,6,18,12}, {-6,24,0,18,6,24}, {-18,12,-12,6}, {-18,12,-18,-12,-6,-24,6,-24,18,-12,18,12,6,24,-6,24,-18,12}, {-15,-15,-18,-30,-9,-21}, {-9,21,-18,30,-15,15}, {-3,24,3,30,3,24}, {-6,-24,-18,-36,-12,-48,0,-48,6,-36,6,-24}, {9,-21,24,-18,15,-15}, {15,15,24,18,9,21} };
800 :
794 :2005/06/12(日) 20:25:34
なんか依頼者のソース書き込みが途切れたので、途中で申し訳ないが書いておく。 TurtleFrameが継承してるTurtlePanelも載せといて。 …ってか唐突にあきらめた?
public double kameScale = 0.4; public int kame[][] = kameFig; public int kameR[][] = kameRFig; public int kameL[][] = kameLFig; // draw animation turtle void kameDraw(Graphics g, int data[][]) { int ix = (int)x, iy = (int)y; g.setColor(kameColor); for (int i = 0; i < data.length; i++) { int px = 0, py = 0; for (int j = 0; j < data[i].length; j += 2) { int kx = data[i][j], ky = data[i][j+1]; int nx = (int)((kx*(-dy) + ky*(-dx)) * kameScale); int ny = (int)((kx*dx+ ky*(-dy)) * kameScale); if (j > 0) g.drawLine(ix + px, iy + py, ix + nx, iy + ny); px = nx; py = ny; } } g.setColor(c); g.fillOval(ix - 1, iy - 1, 2,2); }
問題文です 配列…六角形を描くタートルレース T51は10匹のタートルが順に六角形を描くプログラムです。 これを六角形を描く競争をするプログラムに変更してください。 どのタートルが次の辺を描くかはランダムに決め、いずれかのタートルが 六角形を描き終わったらプログラムを終了するものとします。 具体的には0~9の乱数を発生させ、出た数の番号(添字)に相当するタートルに次の辺を 描かせて、どのタートルが一番早く六角形を描き終わるかを競争するプログラムです。 0~9の乱数を発生させる式は (int)(Math.random()*10) ソースコードの要所には、何をしている部分かを示す注釈を書き入れなさ
804 :
デフォルトの名無しさん :2005/06/12(日) 20:40:46
LCpadをつかっているんですけど、 プログラム #include <stdlib.h> int heads() { return rand() < RAND_MAX/2; } main(int argc, char *argv[]) { int i, j, cnt; int N = atoi(argv[1]), M = atoi(argv[2]); int *f = malloc((N+1)*sizeof(int)); for (j = 0; j <= N; j++) f[j] = 0; for (i = 0; i < M; i++, f[cnt]++) for (cnt = 0, j = 0; j <= N; j++) if (heads()) cnt++; for (j = 0; j <= N; j++) { printf("%2d ", j); for (i = 0; i < f[j]; i+=10) printf("*"); printf("\n"); } } これなんですけど、引数NMをかくためにはどうやってやるんですか?
805 :
794 :2005/06/12(日) 20:52:27
こんなんでいいっすか京大生。 public class T51 { public static void main(String[] args) { TurtleFrame f = new TurtleFrame(600, 300); Turtle[] hm = new Turtle[10]; // 配列オブジェクトを生成 for( int i = 0; i < 10; i++ ) { hm[i] = new Turtle(i * 50 + 25, 150, 0); // タートルを生成,配列の各要素に代入 f.add(hm[i]); } // i番目の亀がどこまで進んだのかを格納する変数。 int[] counts = new int[10]; // とりあえず無限ループ for( ; ; ) { // 0から9までの乱数決定→亀をランダムに指定 int random = (int)(Math.random()*10); // 指定した亀を10歩動かす hm[random].fd(10); // 指定した亀を60度回す hm[random].rt(360/6); // random番目の亀が60度回ったことをcountsをインクリメントすることで表現 counts[random]++; // 6回回れば六角形を書いたので終了 if( counts[random] == 6 ) break; } } }
>>805 本当にありがとうございます。
実行できました。
お手数おかけしてすみませんでした。
807 :
デフォルトの名無しさん :2005/06/12(日) 21:01:11
double a,b,f; a=5.123456 ; b=6.123456 ; f=a*b; System.out.println("f="+f); 実数aとbの積fを出力します。このときに小数2桁目までを出力させるにはどうすればいいでしょうか? ↑のプログラムではf=31.37325・・・と表示されます。これをf=31.37と表示させたいのですが。
766です。
>>781 ありがとうございました。
自分の問題提示の不注意でハプニングがありましたが、
(1000まで含むのであれだと1001まで計算してしまったw)
class Sample0004 {
public static void main(String[] args) {
int a = 0;
for(int i=0; i <= 1000; i++) {
if(i%7==0) {
if(i>7) System.out.print(" + ");
a+=i;
System.out.print(i);
}
}
System.out.println(" = " + a);
}
}
に変えたら上手くいきました。元となるものの提供どうもでした。
sumってただの変数に過ぎないってことなのかな・・・。
もう1個課題あるんでがんばろう。
そして、わからなければ再びアドバイスもらいにカキコw
なんにせよ助かりました~。
すいません丸投げになりますがお願いします。 課題:以下のコードをFrameをつかってGUIに。 import java.io.*; import java.util.Random; import java.math.*; public class Mazer { public static void main(String[] args) throws IOException { String strMaze, strLocX, strLocY, strInput; int intCheckMove, intCount, intMazeLength, intLocation, intMoves, intLocY, intLocX; intCheckMove = 0; intMoves = 0; intCount = 0; String[] ArrView = new String[9]; BufferedReader intReader = new BufferedReader(new InputStreamReader(System.in)); Random RandomGenerator = new Random(); strMaze = "0000000000"; strMaze = strMaze + "0111100110"; strMaze = strMaze + "0010011100"; strMaze = strMaze + "0011010110"; strMaze = strMaze + "0110100100"; strMaze = strMaze + "0011111100"; strMaze = strMaze + "0000009000"; intMazeLength = strMaze.length(); String[] ArrMaze = new String[intMazeLength];
810 :
809 :2005/06/12(日) 21:31:58
while (intCount < intMazeLength) { ArrMaze[intCount] = strMaze.substring(intCount,intCount +1); intCount++; } do { intLocation = RandomGenerator.nextInt(intMazeLength); } while (!ArrMaze[intLocation].equals("1")); do { intMoves++; System.out.println("-------------------------------"); ArrView[0] = ArrMaze[intLocation -11]; ArrView[1] = ArrMaze[intLocation -10]; ArrView[2] = ArrMaze[intLocation -9]; ArrView[3] = ArrMaze[intLocation -1]; ArrView[4] = "*"; ArrView[5] = ArrMaze[intLocation +1]; ArrView[6] = ArrMaze[intLocation +9]; ArrView[7] = ArrMaze[intLocation +10]; ArrView[8] = ArrMaze[intLocation +11]; strLocX = String.valueOf(intLocation -11);
811 :
809 :2005/06/12(日) 21:33:30
if (strLocX.length() < 2) { strLocX = "0" + strLocX; } intLocX = Integer.parseInt(strLocX.substring(1,2)); strLocY = String.valueOf(intMazeLength - intLocation +10); if (strLocY.length() < 2) { strLocY = "0" + strLocY; } intLocY = Integer.parseInt(strLocY.substring(0,1)); if (intCheckMove == 0) { System.out.println("That is an illegal move."); intMoves--; } intCheckMove = 0; intCount = 0; while (intCount < intLocX) { System.out.print(" "); intCount++; }
812 :
デフォルトの名無しさん :2005/06/12(日) 21:36:55
813 :
809 :2005/06/12(日) 21:37:16
intCount = 0; while (intCount < 3) { System.out.print(ArrView[intCount]); intCount++; } System.out.println(); intCount = 0; while (intCount < intLocX) { System.out.print(" "); intCount++; } intCount = 3; while (intCount < 6) { System.out.print(ArrView[intCount]); intCount++; } System.out.println(); intCount = 0; while (intCount < intLocX) { System.out.print(" "); intCount++; }
814 :
809 :2005/06/12(日) 21:37:46
intCount = 6; while(intCount < 9) { System.out.print(ArrView[intCount]); intCount++; } intCount = 0; while (intCount < intLocY) { System.out.print("\n"); intCount++; } System.out.println("which way would u like to move w a s d"); strInput = intReader.readLine(); if (strInput.equals ("w") && !(ArrMaze[intLocation-10]).equals("0")) {intLocation = intLocation -10;intCheckMove=1;} if (strInput.equals ("a") && !(ArrMaze[intLocation-1]).equals("0")) {intLocation--;intCheckMove= 1;}
815 :
809 :2005/06/12(日) 21:38:05
if (strInput.equals ("s") && !(ArrMaze[intLocation+10]).equals("0")) {intLocation = intLocation +10;intCheckMove= 1;} if (strInput.equals ("d") && !(ArrMaze[intLocation+1]).equals("0")) {intLocation++;intCheckMove= 1;} } while (!(ArrMaze[intLocation]).equals("9")); System.out.println("congratulations. "+intMoves+" moves."); } }
816 :
809 :2005/06/12(日) 21:48:19
>>807 f=(double)((int)((a*b)*100))/100;
私にはこれしか思い浮かびませんでした Orz
>>807 Double f = new Double(a*b);
String str = f.toString()
str = str.substring(0,str.indexOf(".") + 2);
丸投げですみません。 ロト6は1~43までの数字から異なる6つの数字を予想する宝くじである。 このロト6を購入する際の参考になるよう、6つの数字の組を乱数で 生成するプログラムを作成せよ。 ヒント:乱数は次のクラスとメソッドを利用せよ。(1~9までの乱数発生例) int x = (int)(Math.random()*9) + 1 注意:同じ数字が2回以上出てはならない点に注意せよ。 同じ数字を防ぐいい方法がどうにも・・・。ぜひお願いします。
820 :
デフォルトの名無しさん :2005/06/13(月) 02:01:16
age
>>819 import java.util.TreeSet;
public class Q819 {
public static void main(String[] args) {
TreeSet<Integer> number = new TreeSet<Integer>();
while(number.size()<6) number.add((int)(Math.random()*43)+1);
for(int x : number) System.out.print(x+" ");
}
}
822 :
デフォルトの名無しさん :2005/06/13(月) 02:24:23
>>819 Math以外は自作系
public class Q819 {
public static void main(String[] args) {
int[] loto = new int[6];
for(int i=0;i < loto.length; i++) {
i[i] = 0;//念のため何も入っていない意味の「0」入れておく
}
for(int i=0; i < loto.length; i++) {
while((i[i] = getNumber(loto,(int)(Math.random()*43) + 1 ))==0){}
}
for(int i=0; i < loto.length; i++) {
System.out.print(loto[i]);
if((i+1)<loto.length) {
System.out.print(",");
} else {
System.out.print("\n");
}}
}
public static int getNumber(int[] loto,int rand) {
for(int i; i < loto.length; i++) {
if(loto[i]==rand) {
return 0;
}
}
return rand;
}
}
823 :
デフォルトの名無しさん :2005/06/13(月) 02:27:56
訂正 public class Q819 { public static void main(String[] args) { int[] loto = new int[6]; for (int i = 0; i < loto.length; i++) { loto[i] = 0;//念のため何も入っていない意味の「0」入れておく } for (int i = 0; i < loto.length; i++) { while ((loto[i] = getNumber(loto, (int) (Math.random() * 43) + 1)) == 0) { } } for (int i = 0; i < loto.length; i++) { System.out.print(loto[i]); if ((i + 1) < loto.length) { System.out.print(","); } else { System.out.print("\n"); } } } public static int getNumber(int[] loto, int rand) { for (int i = 0; i < loto.length; i++) { if (loto[i] == rand) { return 0; } } return rand; } }
>>821 ,
>>822 ,823
どうもありがとうございました。せっかく書いていただいたので
理解してから自分らしくアレンジして打ち込もうと思います。
今日までの課題なもんで早速取り掛かります。どうも~
簡単なchatを作るという課題です。
サーバとするChatServer.javaと、クライアントとするChatClient.javaを作ってあります。
先にChatServerを実行してから、ChatClientを実行します。
とりあえずchatみたいなものは作れているのですが、最後の一歩が出来ません。
以下、現状です。
1.1つのサーバに対し、2つのクライアントから接続をする。それぞれC1、C2とする。
2.C1がメッセージ「aaa」を送信すると、C1のウィンドウのみに「aaa」と表示される。
3.次に、C2がメッセージ「bbb」を送信すると、C2のウィンドウのみに「bbb」と表示される。
4.次に、C1がメッセージ「ccc」を送信すると、C1のウィンドウのみに「bbb」と追加される。
やりたいことは、「自分以外のクライアントが送信処理を行ったときに、自分のウィンドウも更新される」
ということです。上の例では、2.の時点で、C1、C2両方のウィンドウに「bbb」と出て欲しいのです。
↓にファイルをアップロードしました。添削をお願いします。
ttp://www.uplo.net/ ステルス型 DOWNLOAD
ファイル:716
パスワード:jchat
826 :
デフォルトの名無しさん :2005/06/14(火) 00:30:38
827 :
825 :2005/06/14(火) 00:53:30
>>826 ここって宿題の質問をするスレじゃないんですか?
毎週毎週って、初めて書き込むんですけど…。
828 :
デフォルトの名無しさん :2005/06/14(火) 00:54:27
>>827 おーおー噛み付いてきおった
威勢のいいこと
829 :
825 :2005/06/14(火) 10:42:36
>>828 あなたは良い反面教師ですね・・・。と思っていましたが、何とか自己解決
出来ました。激励ども。
フレームを開く その中に小さな画像が何枚かポツンポツンとある、どこでもいい クリックするとクリックした画像がフレームいっぱいに等比拡大する もう一度クリックすると元に戻る そんなプログラムを作ってください orz
>>831 ざっと見て思ったことです。
宿題は「電気ポットの動きを作る」ということだけを言われているのか
(仕様を考えるところも含めて宿題になっているのか)?
あるいは、Excelの仕様は守らなければならない要件になっているのか?
Excelの仕様はSheet1じゃなくてSheet2を見てくれと言っているのか?
Excelの仕様には書かれていない、ソースコードの20行目から33行目は何か?
1秒間に与える熱量についての言及は必要ないか?
833 :
デフォルトの名無しさん :2005/06/14(火) 21:55:53
課題:自動販売機 インストラクション: 自動販売機クラスZihankiを作成(Zihanki.java) フィールド int js; 「ジュース保持個数」 int m; 「投入金額合計」 メソッド void insertCoin(int c);「お金を入れる」 int ejectCoin();「投入金額を全部出す」 String Buy(); 「購入ボタン」(戻り値"オレンジジュース"か"お金が足りません"か"売り切れ"か"故障"他) ジュース1種類のみで1本120とする お願いします。
>>832 Sheet2でお願いします。
一秒間に与える熱量については特に指定はありません
待機秒数を設定できれば有難いです。
20行目から33行目の奴は自分で実装したいと思って挫折した代物です。
>>333 class Zihanki{
int m=0;
int js=10;
void insertCoin(int c){m+=c;}
int ejectCoin(){
int coin=m;
m=0;
return coin;
}
String Buy(){
if(((int)Math.randam()*20)==0){return "故障w";}
if(m<120){return "お金が足りません";}
if(js<1){return "売り切れ";}
js--;
m-=120;
return "オレンジジュース";
}
}
良くわからんがこんな感じか?
通勤中の電車内で書いたので動くかどうかはシラネ。
以下のような九九の表を出力するプログラムを作成しなさい *¦1 2 3 4 5 6 7 8 9 --+--------------------------------- 1¦ 1 2 3 ・・・・・・・9 2¦ 2 4 6・・・・・・・18 (中略) 9¦ 9 18 27・・・・・・81 1 九九の答えは0付きの2桁の数 2 掛ける数はスペース付きの2桁の数 3 ループ処理できる箇所はループを使うこと substringsを使うらしいですがもうお手上げですorz
あるObjectがどのようなバイト列から成っているのかを知るにはどうすれば良いのですか?
839 :
838 :2005/06/15(水) 15:34:41
質問変更です。 あるObjectを一度文字列に変換してから、再びObjectに戻すことは可能ですか? 可能ならどうするのでしょうか?
>839 永続化、シリアライズ、Serializable などなどでググれ。
841 :
838 :2005/06/15(水) 15:51:15
>>840 おぉ、実現できそうです。
早速のレスありがとうございます。
842 :
838 :2005/06/15(水) 18:33:00
何度もすみません。これが最後の質問です。
ttp://www.wakhok.ac.jp/~maruyama/summer99/node9.html を参考にして、オブジェクトを渡すものを作りたいのですが、
↑のサイトにある上から1つ目、2つ目のソースコードように Date型を渡すこと
は出来ました。しかし、Link型のものを渡しても、エラーこそ起こりませんが、
sizeが0で中身は当然空っぽのものしか渡されません。
Link型のものはSerializableインターフェースを実装しているので問題無いかと
考えたのですが、どうして出来ないんでしょうか?
843 :
838 :2005/06/15(水) 18:38:54
スレ汚しすいません。
>>842 の「Link型」は「List型」の間違いです。 orz
>>836 1 九九の答えは0付きの2桁の数
2 掛ける数はスペース付きの2桁の数
3 <略>
substringsを使うらしいですがもうお手上げですorz
たかだか2桁だし、これでいいんじゃない?
もちろん、 0<=n<=99 が大前提です。
private static String zeroFill2(int n) {
return "" + ((n < 10) ? ("0" + n) : n);
}
private static String zeroSuppress2(int n) {
return "" + ((n < 10) ? (" " + n) : n);
}
>>837 非情に素早い対応、有難う御座いました。
おかげでなんとか間に合いました。
非情だと?
ゴルゴ13みたいな対応だと言うことだ
三角形のそれぞれの頂点にx,yの座標値とr,g,bのカラー情報を定義し 内部を内挿補間法を用いて塗りつぶすというプログラムなんですが 教えてくださいお願いします
>半角空白でくぎりながら連続入力の仕方 あん?
>>850 ●JDK1.4以上の場合:
String str = "5 5 4 3 4";
String[] answers = str.split(" ");
で配列に分割するのがおすすめ。
●JDK1.3以下の場合:
java.util.StringTokenizer を import 宣言した上で
String str = "5 5 4 3 4";
StringTokenizer tokenizer = new StringTokenizer(str, " ");
String 設問1の回答 = tokenizer.nextToken();
String 設問2の回答 = tokenizer.nextToken();
・・・・・・
といった感じに、ひとつずつ処理するのがおすすめ。
853 :
852 :2005/06/16(木) 12:47:26
ん、いや、入力の仕方?? ようちえんからかえるとき、おともだちにきいてください。
854 :
838 :2005/06/16(木) 12:48:58
以下(
>>856 )のソースをベースにして、下記の改良を加えなさい。
・クラス Cat において、猫の年齢をint型で返す メソッドnenrei( )を作成して組み込みなさい
・クラス Pet のmainメソッドの末尾に、「クラスCatで定義されたメソッドnenrei( )を使って
cat1,cat2の平均年齢を計算して表示するプログラム」を、追加しなさい。
ヒント:
メソッドnenrei( ) は、 クラスCatに用意された年齢変数ageの値を返すだけでよい
平均年齢は、クラスPetの側で、cat1,cat2の値の和を2で割り、System.out.println()命令で画面に出せばよい。
正直さっぱりわからないのでよろしくお願いします・・・_| ̄|○
856 :
855 :2005/06/16(木) 15:21:52
class Cat { String name; String place; int age; void setData(String n, String p, int a){ name = n; place = p; age = a; } void print(){ System.out.println(place + ":"+name+" "+age+"歳"); } void print(String p, int a){ place = p; System.out.println(place + ":ねこは"+a+" 匹です。"); } void print(String variety){ System.out.println(place + ":"+name+" "+age+"歳"+variety); } } class Pet { public static void main(String[] args) { Cat cat1 = new Cat(); Cat cat2 = new Cat(); Cat cat3 = new Cat(); cat1.setData("ロビン","う ち",10); cat2.setData("ちび","となり",14); cat1.print("雑種"); cat2.print(); cat3.print("う ら",0); } }
public int nenrei(){ return age; } と System.out.println( (cat1.nenrei() + cat2.nenrei()) / 2 ); ろくな先生じゃなさそうだな。
>>857 ありがとうございます。
そんなちょっと追加するだけで出来るものだったのか・・・_| ̄|○
無事動きました。精進します
>836 >844 説明文の仕様とサンプルとして提示された出力例が矛盾してるのは… まあ、このスレじゃ良くある事か('A`)
860 :
デフォルトの名無しさん :2005/06/16(木) 22:51:48
10進表記の整数を入力し、その整数を2進表記に変換して画面に表示する プログラムをfor文やwhile文などを使わないで 「再起」を使ってやる方法を教えてください。お願いします (実行例) 整数を入力してください 10 1010
861 :
860 :2005/06/16(木) 23:01:02
間違えました再起じゃなくて再帰でした
862 :
デフォルトの名無しさん :2005/06/16(木) 23:21:19
春・夏・冬休みあり
毎年確実にボーナスあり
老後をリッチに過ごすための共済年金あり
分厚すぎる退職金あり
残業ほぼ皆無
土日休日あり
性犯罪を犯しても転勤で継続
民間業者からの接待その他は大歓迎
休職してても給料・ボーナスは貰えます
昼食は栄養バランスの整った給食がタダ同然で食べられます
民間人には秘密の謎の調整金や手厚い住宅手当などの各種手当も豊富にあります
特殊教育諸学校 校長 :年収1260万円
高等学校 校長 :年収1200万円
小中学校 校長 :年収1150万円
特殊教育諸学校 教頭 :年収1120万円
高等学校 教頭 :年収1100万円
小中学校 教頭 :年収1060万円
特殊教育諸学校 教諭45歳:年収 960万円
高等学校 教諭45歳:年収 920万円
小中学校 教諭45歳:年収 900万円
特殊教育諸学校 教諭35歳:年収 800万円
高等学校 教諭35歳:年収 760万円
小中学校 教諭35歳:年収 760万円
教職員平均年収:850万円
教師夫婦平均年収:1700万円
教師夫婦30歳前半にて6000万円以上の
住居購入率70%以上
教師夫婦定年退職時平均貯蓄額=2億4000万円
http://www.2log.net/home/zk1/archives/blog36.html 彼らの恵まれた生活は皆様の税金で支えられています。
>>860 こんなんでいいのかなー。。
// Binary.java
import java.io.*;
public class Binary {
StringBuffer buf = new StringBuffer();
public static void main(String[] args) throws IOException {
System.out.println("整数を入力してください");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int number = Integer.parseInt( br.readLine() );
Binary self = new Binary();
self.toBinary(number);
System.out.println( self.buf.reverse() );
}
public void toBinary(int number) {
if( number != 0 ) {
buf.append(number%2);
toBinary(number/2);
}
}
}
864 :
デフォルトの名無しさん :2005/06/16(木) 23:37:59
>>863 ありがとうございます。
ちょっと事情があって家ではできないので
明日学校でためしてみます。
自由課題で、ドラッグ&ドロップで木構造を変更できるJTree(のサブコンポーネント)が必要になったんですが、 なんとか自分で作ろうと一晩中ぐぐったりAPIドキュメントととにらめっこしたりてたんですが、 難しいのか自分が馬鹿なのかさっぱり理解できませんorz どなたか簡単なサンプルを作っていただけませんか? 面倒なようならわかりやすい解説サイトでもかまいません。 誰か助けて下さい。
ある行列A(i×j型)とあるベクトルu(j×1)が存在して、この二つの積の計算を反復させる (つまりA*uを計算して、それで出てきたベクトルをuに入れてまたA*uを計算というのを繰り返す)というプログラムを作りたいのですが、 うまくいきません。10回程度反復できればいいのですが.....。よろしくお願いします。
867 :
840 :2005/06/17(金) 18:25:10
>842 リストの中身がSerializableじゃないってことはないだろうな?
>>866 public static void main(String[] args) {
int[][] m;
int[] v;
//initialize
for (int i = 0; i < 10; i++) {
v = mu(m, v);
}
}
private int[] mu(int[][] m, int[] v) {
int[] r = new int[m.length];
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < v.length; j++) {
r[i] += m[i][j] * v[j];
}
}
return r;
}
869 :
デフォルトの名無しさん :2005/06/17(金) 19:29:40
jの宣言
iの宣言
for(int count = 0;count <10:count++){
j = A(i*j)*u(j);
}
>>866 こうゆうことでっか。
それとも私は、ばかかな。
870 :
デフォ :2005/06/17(金) 20:24:19
drawImageとかメディアトラッカーにくっついてる (パラメータで渡す)thisって何だ? サブクラスのコンストラクタにContainerで渡してきて使う ってやり方には切れた!クラスを深く切ってるとムカツク! クラスに分けられねえじゃねえかよ、このクソ言語! 初学者はいつまでもメインのクラスにづらづらと ドローイメージもなんもかんもぶっこんどくような ものしか作れねえってことなのか?ちょっとこみいった ことを知ろうとするとネットにもどこを探していいのか わからねえし。 こんてなーって何なんだよこのバカ!そんなものゲーム作るのに 必要なのか? ジェットエンジン渡してプラモデル作れみたいなこといいやがって。 それと、重要なことを知りたくなったら知れるようにしとけ日本語関係者! むかつくやつらだ・・・!
(1)2次元平面上の点を表すクラスpointを作成せよ。 ただし、コンストラクタは必ず2つの引数取るものとし、 フィールドには直接アクセスできないようにすること。 (2) (1)で作成したpointクラスを継承して、2次元平面上の直線を表すクラス segmentを作成せよ。フィールドには新たに方向ベクトルを加えるものとする。 コンストラクタは、2引数または4引数とする。 2引数の場合は、原点を通り、与えられた方向ベクトルを持つ直線を、 4引数の場合は、与えられた点を通り、与えられた方向ベクトルを持つ直線を表すものとする。 (3)別の直線との交点を求めるメソッドintersect()を定義せよ。 intersectの返り値はpoint クラスのオブジェクトである。 この問題が出たのですが、継承とか、javaの文法とかは分かるのですが、 この問題をどうやってjavaで表現すれば良いか分かりません。 とりあえず、途中まで組んでみたのを下に示します。 よろしくお願いします。
872 :
871 :2005/06/17(金) 20:28:02
873 :
デフォルトの名無しさん :2005/06/17(金) 21:48:42
質問です C++ではVisual C++でコンパイルやソースを書いているのですが、 JavaではVisual C++のような感じで開発はできますか? J2SDKをダウンロードしたのですが、 どう使えばいいかさっぱりわかりませんでした・・・
875 :
デフォルトの名無しさん :2005/06/17(金) 22:13:55
そういわずに、是非お願いします・・・ あと、.jarのアイコンが不安定なので一般的なものに変えたいです。 ダブルクリックで起動させるにはどうすれば良いでしょうか?
>>873 IDE使いたけりゃ、EclipseかNetBeansでも落としな。
>>865 ttp://up.razor.jp/index.html ファイルNo 3036
受信Pass hw865
-DragGestureRecognizer と DragSource
-DragGestureRecognizer/DropTarget と JTree
-DragGestureRecognizer/DragSource/DropTarget と 各リスナー
を関連付けるAPIにクセがあるので、
ここをうまく切り抜けるのがポイントかなって思った。
#さらに、DropTarget 自体が DropTargetListener だったり、
#でも DragSource は DragSourceListener ではなかったり、
#もう、わけ分からん。
878 :
デフォルトの名無しさん :2005/06/17(金) 22:40:16
また質問です J2SDKをインストールする際に、 最後のほうのデータフォルダに関する所で InternetExploreのチェックリストがあります。 これの意味がわかりません。 チェックははずすべきなのでしょうか?
879 :
デフォルトの名無しさん :2005/06/17(金) 22:48:29
>>878 入れとけ。IEでAppletがSun謹製のJREで動くようになる。
880 :
866 :2005/06/17(金) 23:03:14
>>868 >>869 ありがとうございます。なんかよくわかんないので自分で作ったんだけど最後のベクトルの値が手計算とうまく合わないプログラムを
載せてみます。間違えを指摘してもらえるとうれしいです。
public class houbutu{
public static void main (String[] args){
int N=5;
double [][]A=new double [N][N];
double []K=new double [N];
double []U={1.0/6.0,2.0/6.0,3.0/6.0,2.0/6.0,1.0/6.0};
int i,j;
double r=0.36;
double t;
for(i = 0; i < N ;i++){
for(j = 0; j < N ;j++){
A[i][j]=0;
if(i==j){
A[i][j]=1.0-2*r;
}
else if(i+1==j){
A[i][j]=r;
}
else if(i==j+1){
A[i][j]=r;
}
}
}//行列Aを定義//
881 :
866 :2005/06/17(金) 23:03:39
for(i = 0; i < N; i++){ for(j = 0; j < N; j++){ System.out.print(A[i][j] +"\t"); } System.out.println(""); } //行列Aを表示// for(i = 0 ; i < N ;i++){ System.out.println(U[i] +"\t");//最初のベクトルUを表示// } for(t=0;t<2;t++){ for(i = 0; i < N; i++){ for(j = 0; j < N; j++){ K[i]+=A[i][j]*U[j]; U[j]=K[i] } } } System.out.println(""); for( i = 0; i < N; i++){ System.out.println(K[i] +"\t");//最後のベクトルUを表示// } } }
882 :
デフォルトの名無しさん :2005/06/17(金) 23:13:36
Java 2 Platform Standard Edition 5.0 と Java 2 Platform, Standard Edition, v 1.4.2 (J2SE) の違いがまったくわかりません。 どっちのダウンロードがお勧めですか?
いいかげんにしろ
884 :
デフォルトの名無しさん :2005/06/17(金) 23:16:59
そうゆう事を言わずに教えてください! 名前も似てるし、どっちが新しいバージョンなのかわかんないです・・・
5.0は、Genricsとか可変長引数とか色々言語仕様が拡張されているが、これからHello worldやるやつには関係ないから気にスンナ。
5.0のが新しい
887 :
デフォルトの名無しさん :2005/06/17(金) 23:20:57
じゃあ5.0にするお
888 :
デフォルトの名無しさん :2005/06/18(土) 00:17:38
なぜか拡張子jarを右クリックすると 二つのJREが表示されて気持ち悪いので Javaに関するプログラムを一度すべてさくじょしました。 今後はこのようなことがないようにしたいのですが JDKとJREをそれぞれダウンロードして実行するのが良いでしょうか? それともJDK付属のJREをインストールするべきでしょうか?
宿題以外は質問スレいけ
>>871 スジはあってる。
19行目~:
double a1;
a1=vx/vy; →不要。
方向ベクトル(vx, vy)と等価なので、敢えてインスタンス変数で持つ必要はない。
もしインスタンス変数にするのなら、代入文はコンストラクタ内になるはず。
32行目~:
vx=v1/super.x;
vy=v2/super.y; →誤り。
(v1, v2)は方向ベクトルだから、そのまま(vx, vy)に代入する。
あとは、intersect() で、連立方程式
(x, y) = (a1, b1) + B1*(vx1, vy1)
(x, y) = (a2, b2) + B2*(vx2, vy2) (B1,B2は任意の実数)
つまり、
(x - a1) / vx1 = (y - b1) / vy1
(x - a2) / vx2 = (y - b2) / vy2
を解けばいい。
893 :
838 :2005/06/18(土) 02:52:28
>>867 お恥ずかしい、まさにそこが原因でした。
ありがとうございました。
894 :
デフォルトの名無しさん :2005/06/18(土) 12:59:15
JDK5.0とeclipseをインストールして使っています。 C++では拡張子がcのファイルをダブルクリックするとソースが表示できましたが、 eclipseで拡張子jarのファイルをダブルクリックで開くにはどのような設定が必要ですか?
895 :
871 :2005/06/18(土) 13:01:06
897 :
デフォルトの名無しさん :2005/06/18(土) 13:24:58
おk
もはや
>>894 の質問は
>>1 の五箇条の御誓文5番の
> 宿題&課題とその回答プログラムに対する質問はOK ですが、
に当てはまっていないような気がする。
>>877 ログが流れた模様です。
>>865 氏ではありませんが勉強のため再upお願いできませんでしょうか?
902 :
デフォルトの名無しさん :2005/06/18(土) 21:49:16
Javaの質問です 『あの芸能人のhpが大変です』 例の6匹の亀を操るウサギシリーズなんですがいいですか?
904 :
デフォルトの名無しさん :2005/06/18(土) 22:04:07
>>903 2年前です『あの芸能人のhpが大変です』
いいですか?
905 :
デフォルトの名無しさん :2005/06/18(土) 22:15:12
>>895 なんにせよ、Point のフィールドは、privateにして、
getX(),getY()メソッドは必要かと、
intersect の引数は、segumentでは、ないかと。
906 :
デフォルトの名無しさん :2005/06/18(土) 22:17:11
>なんにせよ、Point のフィールドは、privateにして、 なんで?
907 :
デフォルトの名無しさん :2005/06/18(土) 22:17:50
>>905 追加。疑問は、残ります。なぜ、point を継承しているのか。
なにかメリットはあるのかと。
908 :
デフォルトの名無しさん :2005/06/18(土) 22:20:22
オブジェクトコンポジションにしないと死ぬわけでも無かろうに
909 :
デフォルトの名無しさん :2005/06/18(土) 22:20:33
910 :
デフォルトの名無しさん :2005/06/18(土) 22:21:35
911 :
デフォルトの名無しさん :2005/06/18(土) 22:23:56
>>910 中途半端に言うのであれば、(自分はさもしっているかのように)余計な事言うな
言うのであればなぜか理由明確にすれ
912 :
デフォルトの名無しさん :2005/06/18(土) 22:31:49
>>911 pointの継承を使うのであれば、
インスタンスを持って、操作する方がいいと思いました。
そう思ったのは、継承するからには、
フィールドあるいは、そのオブジェクト自身が、多重にわたって、
活用される、というわけでもないし。
メソッドを作っていて、継承もとのオブジェクトが、
何か、呼び出すわけでもないし。
メリットを思いつくことができなかったのですが、
何かこういうわけで、継承しているのです。
というのがあれば、おしえていただきたいのですが、
913 :
デフォルトの名無しさん :2005/06/18(土) 22:39:11
>>912 つづき
私もこの問題を解いていて
どういう様にサブクラスを作るのか。あらこれ考えてのことです。
さも知っているかのように、言っているのではありません。
え?ていうか課題が「pointを継承して~」なんで継承してただけじゃないの?
915 :
デフォルトの名無しさん :2005/06/18(土) 22:47:39
うーん 継承したことによるデメリットを述べて、それをもって継承しない方法のメリットに変換しているような気が・・・
916 :
デフォルトの名無しさん :2005/06/18(土) 23:03:11
>>914-915 >>913 です。
自分勝手で申し訳ないのですが、
もっか、オブジェクト指向の本を読んでいて、その勉強してますので、
自分勝手な意見になってしまい申し訳ありませんでした。
確かに必ずsegumentクラスを作るには、pointクラスを作るという法則
は成り立ちますが、(勝手にそのためかなと思っていますが、
先生は継承の学習にもなるかなと思って、こういう問題を出したのかな、
とかも考えたりして、かなり自分個人の今の状況で物事を言ってること
すみませんでした。
917 :
デフォルトの名無しさん :2005/06/18(土) 23:15:39
>>881 K[i]+=A[i][j]*U[j];
k配列も移動しているのに、+=です。これはおかしいかと
918 :
871 :2005/06/18(土) 23:50:55
えーと、様々な議論がなされていますが、 フィールドがprotectedなのは自分で作ってみた時点でpointクラスのx,yに アクセスする必要があると思ったのでそうしただけですので、 自分のプログラムが間違っていたら別に変えても良いのですが、 後、引数にクラスを持ってくる方法とか、インスタンスとかの用語がまだ しっかりと理解していないので、コードに示していただくと嬉しいです。
919 :
デフォルトの名無しさん :2005/06/18(土) 23:53:56
それはおかしい。 お前が意味調べりゃすむことだろ。
920 :
901 :2005/06/19(日) 00:41:41
921 :
892 :2005/06/19(日) 02:32:47
>>895 892です。
う、確かにこの指摘じゃ何を言いたいのか分からない。
こういうことが言いたかった。
交点座標を (X, Y) とし、
連立ベクトル方程式は
(X, Y) = (直線1.x, 直線1.y) + B1*(直線1.vx, 直線1.vy)
(X, Y) = (直線2.x, 直線2.y) + B2*(直線2.vx, 直線2.vy)
(B1,B2は任意の実数)
B1,B2を消した連立方程式が
(X - 直線1.x) / 直線1.vx = (Y - 直線1.y) / 直線1.vy
(X - 直線2.x) / 直線2.vx = (Y - 直線2.y) / 直線2.vy
で、こんな感じに書いてほしかった。
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=24958 激しくインデントがずれたので、
「Download as file」して見たほうがいいかも。
922 :
892 :2005/06/19(日) 02:34:28
ちなみに・・・
>>905 フィールドの件も引数型の件も、作成者の気持ち次第かと。
ただ、問題文を読むと、フィールドは private を指示しているようにも読める。
個人的には、private + segment の組合せがベストだと思う。
>>907 クラス設計の話はさておき、「継承」の理解度チェックのためにこうなったのかと。
>>912 >pointの継承を使うのであれば、
>インスタンスを持って、操作する方がいいと思いました。
そのとおりだと思います。
>>916 >先生は継承の学習にもなるかなと思って、こういう問題を出したのかな、
やはり、そこか!
ま、オブジェクト指向を論ずる前に、オブジェクト指向になってなくてもいいから
プログラム(アルゴリズム)を組めるようになるこった。
intersect() を見る限り、まだまだ力量不足。
>
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=24943 というか、直線A,B,Cは、全部傾きが1だから、交わらないんじゃ・・・
923 :
892 :2005/06/19(日) 02:54:35
なんか、語弊があるな・・・ ×個人的には、private + segment の組合せがベストだと思う。 ○個人的には、おっしゃるとおり、private + segment の組合せがベストだと思う。
924 :
デフォルトの名無しさん :2005/06/19(日) 13:32:43
>>866 どういう答えを導き出したいのか分からないので答えようがない
>>924 導かれる答えが分かっているのなら初めからプログラムなんて組まん
926 :
デフォルトの名無しさん :2005/06/19(日) 13:49:45
927 :
デフォルトの名無しさん :2005/06/19(日) 20:58:06
変数を入力させ、マイナス、小数点、半角数字以外はエラーとしたい。 どういうメソッドがよろしいですかね?
言ってるとおりでいいなら String.matches("[-\\.\\d]+")
929 :
デフォルトの名無しさん :2005/06/19(日) 21:48:41
どなたかご指導を!!
現在オラクル8IDB PL/SQL にてwebページを作成しています。
リンク先に値を渡したいのですがうまくいきません。
ソースです。 <script type="text/javascript"><!--function FC(WO) { switch(WO.FSGo.selectedIndex){
case 0:document.forms[0].action="192.168.0.90" break;case 1:
document.forms[0].action="
http://10.195.0.1/pls/kintai/KN_YUU "
break; case 2: document.forms[0].action="
http://10.195.0.1/pls/kintai/KN_FURI "
break; case 3: document.forms[0].action="
http://10.195.0.1/pls/kintai/KN_DAI "
break; case 4: document.forms[0].action="
http://10.195.0.1/pls/kintai/KN_TOKU "
break; }
document.forms[0].submit();
}
//-->
</script></head><body>
<form method="post" action="">
<select name="FSGo" onChange="FC(this.form)" >
<option> <option>有給 <option>振休 <option>代休 </select>
<input type="hidden" name="hidden1" value="'||SY||'">
</TD></form>');どなたか解る方お願い致します。
>>929 JavaScriptはスレ違い。
あと、IPアドレス載っちゃってるけどいいの?
931 :
デフォルトの名無しさん :2005/06/19(日) 22:16:32
>>930 IPはダミーですのですれ違いなら他にいきます。
すみませんでした
932 :
デフォルトの名無しさん :2005/06/19(日) 22:40:03
ほぼ丸投げに近いのですが 例えば、java Find3 the < sample.txt を実行すると、sampleファイ ル中に出現するtheの単語の数を数えてその数を画面上に表示する。 ただし、指定された文字列の大文字小文字は区別しないものとする。 つまり、theとTheは一致する。また、the とtheyは一致してはなら ない。 標準入力から入力されるファイルは一般的な英文であるとし、指定 した文字列が正確に数えられるように工夫せよ。 大文字小文字の区別はできたのですが、文末や改行のところの単語、つまり スペースに挟まれていない単語の検索方法がわかりません。 お願いします。
933 :
932 :2005/06/19(日) 22:41:32
プログラムはこんなかんじです。 import java.io.*; public class Find2 { public static void main (String[] args) { if (args.length !=1) { System.out.println("使用法:java Find2 検索文字列 < 検索対象ファイル"); System.out.println("例:java Find2 System < Find2.java"); } String findstring = " "+args[0]+" "; System.out.println("検索文字列は「" + findstring + "」です。"); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); int p = 0;
934 :
933続き :2005/06/19(日) 22:42:05
try { String line; int linenum = 0; while((line = reader.readLine()) !=null) { line = line.toLowerCase(); int n = line.indexOf(findstring); while(n >= 0) { p++; line = line.substring(n+args.length); n = line.indexOf(findstring); } linenum++; } }catch (IOException e) { System.out.println(e); } System.out.println(findstring + "が出てきた回数は" + p + "回です。"); } }
935 :
927 :2005/06/19(日) 23:51:29
すいません、訂正です。 0.0056とか.00065とか-2.3600などの数値はOKだが それ以外はNGとしたいんです。全角とかもNGです。 お願いします。
>>933 char c = args[0].charAt(0);
String w = "[" + Character.toLowerCase(c) + Character.toUpperCase(c) + "]" + args[0].substring(1, args[0].length());
Matcher m = Pattern.compile("\\s" + w + "\\s").matcher(text);
int i = 0;
while (m.find()) i++;
こういうのが欲しいんじゃないよね。
>>935 try{
double d = Double.parseDouble(string);
}catch(Exception e){
System.out.println("だめ");
}
0.--..... こう言うのが通っちゃうのはいやん。 ^-?\d*\.?\d*$ こんな感じ?
939 :
877 :2005/06/20(月) 01:40:49
現在学校で多分木に関する課題を行っています。 括弧表記法で入力された物をコンピューターに理解させるアルゴリズムの部分がまったく見当もつきません。 どなたか教えていただけないでしょうか? よろしくお願いします。
>>936 textをtoLowerCase()するならこれでいいじゃん。
Matcher m = Pattern.compile("\\s" + args[0].toLowerCase() + "\\s").matcher(text.toLowerCase());
int i = 0;
while (m.find()) i++;
>>940 もっと詳しく。
942 :
940 :2005/06/20(月) 10:53:57
コマンドライン引数として "(AA (BA BB) (CA CB))" このような形のものが与えられるので、それをコンピュータ内部に取り込ませて、そこから 括弧表記 後置表記 図表現 の3種類の方法で出力するということをやりたいのです。 がこの「コンピュータ内部に取り込ませて」の部分のアルゴリズムがまったくわかりません。 一応 class Node { String word; Node left, right; Node(String str) { word = str; left = null; right = null; } } のような形で2分木の場合におけるクラスがヒントとして与えられているのですが・・・。 どなたかよろしくお願いします。
943 :
デフォルトの名無しさん :2005/06/20(月) 15:09:23
この課題では、多分木のノードと二分木のノードのどちらを作成するのですか? ノードの内容となる文字列の区切りは、括弧とスペース(空白)でよいのですか?
944 :
940 :2005/06/20(月) 19:41:45
基本的に作成するのは2分木で、それの応用として多分木を作るそうです。 私はその最初の2分木のアルゴリズムすら理解できなくて・・・。 また区切りはそれでよいです。
945 :
デフォルトの名無しさん :2005/06/21(火) 08:53:36
しかし、これだと AA (BA BB) (CA CB)) ルートの下に3つノードがあるのですが・・・ 2分木ではムリです・・・
>>945 import java.util.Vector;
class Node {
String word;
Vector<Node> children; //いくつでもどーんと来やがれ!
}
>>946 あ、それです。
構文解析部分も作りなさい。
セパレータは先に述べた括弧と半角空白です。
お願いします。
2分木ではないね。 VectorはArrayListでいいんじゃない?
Vectorはマルチスレッドセーフだけど、ArrayListはそうじゃないから 拡張性からしたらVectorの使用の方が正しいね。 並列プログラミングも視点にいれないと駄目だよ。
マルチスレッドは難しいとはいえ、シングルスレッドプログラミング だけのJavaでは、正に牛肉の無い牛丼と言った感じだ。
Vectorは古いから、ArrayListの方がいいんじゃないかと…。 スレッドセーフにも出来るし。
>>951 > Vectorは古いから
すると時代は StringBuffer より StringBuilder?
953 :
デフォルトの名無しさん :2005/06/21(火) 13:14:29
おお、M.Bたんが。懐かしい。 このスレってみんなどっか行っちゃうのだよな・・・
>>952 Enumeration より Iterator
Vector より ArrayList
Dictionary より Map
Hashtable より HashMap
Stream より Channel
StringBuffer より StringBuilder
が密かなトレンド。
>>953 俺も帰ってきたぞ。名無しだが。
2ch より @IT?
955 :
デフォルトの名無しさん :2005/06/21(火) 14:30:48
パッケージの作り方教えてください。
>>954 2ch より人間レベルが低いが Java House がいい。
スレNo.はもうこのまま52, 53, 54, …となってしまうのだろうか。。。
>>954 >Hashtable より HashMap
javadocによるとHashtableはスレッドセーフで、HashMapはそうじゃないみたいなことが
書いてあるけど、それでもHashMapのほうがいいのかな?
>>959 Collections/ConcurrentHashMap
>>959 synchronized されているからといって
スレッドセーフとは限らない。
当初考えられてたよりもスレッドセーフは微妙で、
長い?議論の末やっと 5.0 になって
メモリモデルが改善されたなどという微妙なところがあったりする。
Map の同期化については、いい題材で、
IBMの記事になってたりする。
でも、5.0 では標準ライブラリに
ダグリーのスレッドセーフなコレクションが載ってると思うから、
必要ならばそれを使うのが吉かと。
962 :
デフォルトの名無しさん :2005/06/23(木) 21:21:29
名前を入力したら学生番号が出力されるプログラムってありませんか?
あるだろうな。
>>962 1人/日ってとこだな。\70000で請け負うぞ。
965 :
デフォルトの名無しさん :2005/06/23(木) 21:39:47
留年しちゃいます。誰か作って下さい。 全く分かりません
>>965 それが自分の実力じゃないか
留年しろよ
>>965 ///// 使い方
///// java Meibo [名前]
/////
class Meibo {
public static void main(String args[]) {
// ここに名前を入れておく
String storageName[] = {"Java", "C" , "Pascal"};
// ここに学生番号を入れておく
String storageNumber[] = {"001", "002", "003"};
// 当たり前だが名前と学生番号は対応する順序で無いと駄目
for(int i=0; i<storageName.length; i++)
if(storageName[i].equals(args[0])) {
System.out.println("学生番号は "+ storageNumber[i] +" です。");
System.exit(0); }
System.out.println("見つかりませんでした。");
}}
969 :
デフォルトの名無しさん :2005/06/23(木) 23:55:51
>>967 ありがとうございます
これを実行すればいいんですか?
>>969 仕様が分からないからなんともいえないけど
>>967 の配列部分に自力で学生番号と名前を入力しておけば動くよ。
971 :
デフォルトの名無しさん :2005/06/24(金) 00:38:02
967さん、本当にありがとうございます。
そんなのでいいのか?
文句があるならもっといいものを貼り付ければいいのに
RDBから実装してくれるんだろうな。楽しみだ。
975 :
デフォルトの名無しさん :2005/07/01(金) 10:01:16
ラジオボタンの判定について質問なのですが、 メインとは違うクラスでボタン、ラジオボタン等の設置をしていて、 メインクラスで public void actionPerformed(ActionEvent e) { if(ボタンを押されたとき){ if(ラジオボタンAが押されていれば){ 処理1; } else if(ラジオボタンBが押されていれば) { 処理2; } else if(ボタンBを押したとき){ if(ラジオボタンAが押されていれば){ 処理1; } else if(ラジオボタンBが押されていれば) { 処理2; } } のような判定を行いたいのですが、ラジオボタンの判定だけどうも上手くいきません。 どなたかご教授お願いします(´・ω・`) ちなみに ボタンAが押されたとき はif(e.getSource() == window.A)で上手く処理できています。 window はボタン設置等をおこなっている違うバウンダリクラスです。
976 :
デフォルトの名無しさん :2005/07/01(金) 10:04:48
ちなみに、ボールを複数表示し、それぞれのボールを選択でき、 上下左右の4つのボタンで任意に動かせるプログラムを作るという課題です。 ボタン設置などと、判定処理などは違うクラスで実装しないといけません。
>708 激亀レスだが MySQLのJDBCはAspectJのライブラリを要求されます。 AspectJをダウンロードしてインストール後、Tomcatの/common/lib に格納すれば動きます
978 :
デフォルトの名無しさん :2005/07/11(月) 01:38:51
Color c[] = {Color.yellow, Color.blue, Color.red, Color.orange, Color.green}; こう書いておいて、 ランダムでこの中から色が選ばれるようにするにはどうすればいいんでしょうか?
>>978 int tmp = (int)(Math.random() * 10.0) % c.length;
Color random_color = c[tmp];
.wavファイルの特定の周波数と周波数の間のみを再生(または新しくフィルタを通った結果の.wavファイルを出力する) するバンドパスフィルタを作れ。 バンドパスフィルタとは特定の周波数の間のみを残して、他の周波数成分をカットしてしまうフィルタである。 ・wavファイルを開く機能を実装 ・周波数帯を指定する機能を実装 ・指定された周波数帯のバンドパスフィルターとして機能する ・バンドパスフィルタを通った後の結果を再生、またはファイルへ出力する機能を実装 *1 演算速度は求めない。 *2 .wavファイルのフォーマットはモノラル16bit 44.1kHzに固定するが、長さは不定とする。 よろしくお願いします。