【初心者】Java質問・相談スレッド103【大歓迎】
at TECH
[前50を表示]
700:デフォルトの名無しさん
07/07/17 17:32:52
とりあえずスレタイがちょうど目に付いたという理由で
「スレ立てるまでもない質問はここで」スレの過去ログを
いくつか見てみたけど、だいたい1スレ7000行弱に収まってるね。
ってことは10万行つったら15スレ分ぐらい、
それを一気に表示されたって使う方は困るし、それよりは
うまく分割するとか有益な情報を抽出するとかって方に
注力した方が得るものは大きいと思う。
701:デフォルトの名無しさん
07/07/17 17:42:37
解決としてバッファリング用の作業クラスを一つ作りファイルから必要分だけ抽出し表示用のクラスに
送り込めるようにするのがいいと思う。
但し、どうしても必要な場合に限定し、できうる限り整理されたデータを用いるべき。
702:デフォルトの名無しさん
07/07/17 19:21:45
その前に必要なデータの抽出だ。
703:デフォルトの名無しさん
07/07/17 19:47:51
>>688 こんなんでいいんでないの?
import java.awt.*;
import javax.swing.*;
public class J688 extends JFrame{
JTextArea textArea = new JTextArea(10*10000, 40);
JScrollPane scrollPane = new JScrollPane(textArea);
public J688(){
super();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
for(int i=1;i<=textArea.getRows();++i) textArea.append("Line:"+i+"\n");
add(scrollPane, BorderLayout.CENTER);
setPreferredSize(new Dimension(300, 300));
pack();
setVisible(true);
}
public static void main(String[] args) {
new J688();
}
}
704:デフォルトの名無しさん
07/07/17 22:09:22
初歩的な質問ですいませんが。
標準入力でインスタンスの数が変わる場合、インスタンスの生成で
インスタンス名をどう指定すればいいんでしょう?
Player player1 = new Player;
と言う感じに固定ならば書きますが、このplayer1が可変な場合に
変数などでどう表せば良いのかでつまづいて…。
705:デフォルトの名無しさん
07/07/17 22:11:19
「インスタンスの数」ってなんだい?
そこんとこもう少し詳しく
706:デフォルトの名無しさん
07/07/17 22:16:08
なんかよくわからんがエスパーで回答してみる
System.inで読んだ内容からk個のインスタンスを作るんだったら
普通にk個インスタンスを生成して片っ端からListに入れればいいんじゃね?
707:デフォルトの名無しさん
07/07/17 22:20:19
引数可変でその数だけ同一オブジェクトを生成するなら配列にでもぶちこんどけ
ってパパが言ってた。
708:デフォルトの名無しさん
07/07/17 22:29:48
すみません
質問させてください
現在修行中の身で、JavaSE5.0を使って色々とOJTしております
XMLを扱う場面で先輩からJAXB2.0なる便利なものを教えていただきました。
途中からJavaSE6に変えてJAXB2.0を楽しんでいたのですが、会社の命令でJavaSE6禁止命令が出ました(出ましたというより、もともと5.0か1.4しか使っちゃだめらしいです)
そこで困っているのですが、またまた、先輩社員からJavaSE5.0使って、SE6のJAXB2.0だけコピーすりゃいいじゃんと言われました
そんなことできるんですか?
709:704
07/07/17 22:35:09
>>705-707
早速どうもです
何と言うか、インスタンスの数が2つと決まっていれば
Player player1 = new Player;
Player player2 = new Player;
と言う感じに2つ作れば出来ますが、標準入力で指定された数作ろうとした場合
下みたいな感じで配列なりで表してfor文ででも回せば良いかと思ったのですが。
m = 標準入力;
for(int n = 0 ; n>=m ; n++ ){
Player **** = new player;
}
ここの***をどう記述したら良いのかが分からずどうにもうまく行かなくて。
初心者で引数可変、Listがちょっと分かりませんが調べてみます。
710:デフォルトの名無しさん
07/07/17 22:56:07
>>708
JAXB自体はJavaSE6以前からある。ここね。
URLリンク(jaxb.dev.java.net)
ここからダウンロードしたファイルからjar取ってきて、クラスパスに足せばいいよ。
「SE6のJAXBだけコピー」と言われると違うが、お前さんの解釈違いの可能性もあるので
その先輩さんのことはとやかく言わないでおく。
711:デフォルトの名無しさん
07/07/17 23:04:44
>>708
いや、そんな事したらライセンスとライブラリの依存関係解決を別個にやる羽目になるじゃん。
JAXBのページがsunかその周辺のサーバーにホストされてるからそこ当たってみ。
>SE6のJAXB2.0だけコピーすりゃいいじゃん
ライセンス管理意識なさ過ぎ。
712:デフォルトの名無しさん
07/07/17 23:13:36
ファイル出力時のflush()についての質問です。
少し前に下記のようなコードを書いてプログラムを走らせたところ、出力ファイルの末尾が切れていました。
String output_file_str = "hoge.txt";
FileWriter output_file = new FileWriter(output_file_str);
BufferedWriter output_file_buf = new BufferedWriter(output_file);
/* 出力処理 */
output_file_buf.close();
output_file.close();
調べた結果、close()する前にflush()をしなければいけないということが分かったので、下記のように直して現状は正しく動作しています。
String output_file_str = "hoge.txt";
FileWriter output_file = new FileWriter(output_file_str);
BufferedWriter output_file_buf = new BufferedWriter(output_file);
/* 出力処理 */
output_file_buf.flush();
output_file_buf.close();
output_file.close();
713:712
07/07/17 23:14:20
続きです
ここで、ふと疑問に思ったのが、FileWriterとBufferedWriterの両方にflushが存在している点で、
FileWriterは一文字単位でしかやり取りできない、BufferedWriterを使うことで行単位などでもやり取りができるということから
【BufferedWriter】−【FileWriter】−【ファイル】
とつながっていると思うのですが、この場合
output_file_buf.flush(); /* BufferedWriterの内容をすべてFileWriterにflush()する */
output_file_buf.close(); /* BufferedWriterの中身はすべて出力済みなので閉じてOK */
output_file.flush(); /* FileWriterの内容をすべて指定したファイルにflush()する */
output_file.close(); /* FileWriterの中身はすべて出力済みなので閉じてOK */
と両方でflushすべきなのかどうかで迷っています。
いくつかのページを参考に調べてみると、
String output_file_str = "hoge.txt";
BufferedWriter output_file_buf = new BufferedWriter(new FileWriter(output_file_str));
/* 出力処理 */
output_file_buf.flush();
output_file_buf.close();
といった感じにひとつずつ変数を定義するのではなくまとめて書かれていたのですが、FileWriterを明示的にflushしなくても安全なのでしょうか?
以上です。どなたかアドバイスよろしくお願いします。
714:デフォルトの名無しさん
07/07/17 23:19:03
>>712
> 調べた結果、close()する前にflush()をしなければいけないということが分かったので
それは嘘。close() する前に flush() する必要はない。
715:デフォルトの名無しさん
07/07/17 23:42:06
>>710>>711
レスさんくすです
先輩のアドバイスは私の解釈違いかも知れないのでスルーしてください
JAXBはSE6以前からあったんですね
SE6で標準APIに加えられたとの解釈でOKですかね?
716:712
07/07/18 00:05:20
>>714
表現が少しあいまいでした。
正確には研究室の先生に出力が途切れる現象を伝えたところ、flush()すれば大丈夫との回答が得られ、実際にflush()の行を追加したところ、すべてが出力されたという状態です。
BufferedWriterのjavadocでは
flush
public void flush()
throws IOExceptionストリームをフラッシュします。
定義:
クラス Writer 内の flush
例外:
IOException - 入出力エラーが発生した場合
--------------------------------------------------------------------------------
close
public void close()
throws IOExceptionストリームを閉じます。
定義:
クラス Writer 内の close
例外:
IOException - 入出力エラーが発生した場合
とあって、closeが内部でflushを行ってからストリームを閉じるとは書いてはないので、実は明示的に行わないとまずいのではと思ったのですが・・・
でもいくつかのページではcloseはflushを行った後にストリームを閉じるって書いてあって、でも各ページの説明で使っているサンプルコードにはちゃんとcloseの前にflushが入っているわけで・・・
初めに出力されなかった問題点はもっと別のところにあるのかな?
717:デフォルトの名無しさん
07/07/18 00:10:38
>>709
配列作って pl[n]
それから、「new Player;」 「n >= m」 は間違ってるから修正しとき
718:デフォルトの名無しさん
07/07/18 00:33:53
>>716
1.6 のAPIリファレンスでは
>ストリームを最初にフラッシュして、閉じます。
って書いてある。
たぶん、あまりにも当然すぎて書かれなかっただけなんじゃないかと。
> 初めに出力されなかった問題点はもっと別のところにあるのかな?
output_file_buf.close() を呼ぶ前に
output_file.close() を呼んでいた、に一票。
719:デフォルトの名無しさん
07/07/18 02:42:29
>>715
そう。EE5.0にあるxmlライブラリをSEに持ってきた時に依存関係を解決するついでにくっついて来た感じ。
標準ライブラリに昇格しただけでJAXB自体は前からあった。
720:デフォルトの名無しさん
07/07/18 03:53:12
SwingとかWebStartとかXMLとか流行りそうで流行らんなー。
721:デフォルトの名無しさん
07/07/18 03:58:29
720プロデュースで大々的にキャンペーンでもうってみてはどうだろう
722:デフォルトの名無しさん
07/07/18 05:19:42
Swingとxmlは流行るとかそういうものじゃないと思うが。
723:デフォルトの名無しさん
07/07/18 09:59:11
質問させてください。
以下のような処理を行いたいと思ってるのですが、行き詰まっています。
1. JScrollPaneのscrollble clientに、GridBagLayoutのJPanelを貼り付けて、ボタンの
テーブルを作成。
2. JScrollPaneのcolumn headerに、JTableのcolumnNamesのような項目名をテーブルの
各要素の幅に同期するように作成。
上記の、2.の処理を上手くやる方法はないでしょうか?
最初は、JTableのセルにパネルを貼り付けられないかと考えていたのですが、探した限り
やり方がみつからなかったので、この方法をとろうとしています。
良いお知恵をお持ちの方、ご教示願います。
724:デフォルトの名無しさん
07/07/18 10:28:34
>最初は、JTableのセルにパネルを貼り付けられないかと考えていたのですが、探した限り
>やり方がみつからなかったので、この方法をとろうとしています。
TableCellRenderer
725:デフォルトの名無しさん
07/07/18 10:46:52
チュートリアルに無いか?
726:デフォルトの名無しさん
07/07/18 12:06:38
いや、JDKのデモに付いてた気がする。
727:712
07/07/18 15:25:28
>>718
言われてみて、はっと気がついてソースコード見直したら
/* バッファーの内容を全て吐き出す */
buf_output_file.flush();
/* ファイルクローズ */
output_file.close();
ってなってました・・・
すみませんでした〜〜〜(>_<)
Javaで本格的に書き始めたのが、今回エラーの出たソースコードで、最近第2作目に突入していて頭の中がごっちゃになってました。^^;
728:デフォルトの名無しさん
07/07/18 18:08:40
char型の変数 c があるとして、 int n = (int)c; でUnicodeでの文字コードが取得できるらしいんですが、
これをShift-JISでの文字コードを取得するにはどうしたらいいですか?
729:デフォルトの名無しさん
07/07/18 18:54:30
> int n = (int)c; でUnicodeでの文字コードが取得できる
出来ません。
CharacterやStringクラスにコードポイントを返すメソッドがあるのでそれを使いましょう。
今のunicodeは21bitなんだな
730:デフォルトの名無しさん
07/07/18 19:03:00
>>728
char型の変数cに収まる範囲の文字コードについてはいい加減にこういうふうに
char c = 'あ';
short s = java.nio.charset.Charset.forName("Shift_JIS").encode(String.valueOf(c)).getShort();
System.out.printf("%04x%n", (int)c);
System.out.printf("%04x%n", s);
731:デフォルトの名無しさん
07/07/18 19:15:44
>>730
Charsetまで呼ばなくても、それならこれでいいんじゃね?
for (byte b : String.valueOf(c).getBytes("Shift_JIS")) System.out.printf("%02x", b);
732:デフォルトの名無しさん
07/07/18 21:44:44
>>717
急いで書いたらしょうもないミスしてますね、すいません。
配列で出来るんですか…う、う…ん…。
何か根本的にやり方がおかしいようですね…。
勉強しなおしてきます。
733:デフォルトの名無しさん
07/07/18 22:47:44
JTable にスクロール機能を持たせる場合、通常 JScrollPane を使用しますが、
大量データがある場合はパフォーマンスとリソースの観点から実用的では無い
ので、JScrollBar を使用した手動スクロールを作成したいのですが、
作成方法を教えて頂けませんでしょうか?
サンプルなどがあるHPでも結構ですので、ご教授頂けると幸いです。
734:デフォルトの名無しさん
07/07/18 22:57:28
688
735:デフォルトの名無しさん
07/07/18 23:01:21
Frame上でJSplitPaneとか、Jの付くコンポーネント使って何か問題ありますか?
736:デフォルトの名無しさん
07/07/18 23:10:52
>>733
> 大量データがある場合はパフォーマンスとリソースの観点から実用的では無い
JScrollPane使ってたら、描画が必要な部分しか描画しないはずだが。
737:デフォルトの名無しさん
07/07/18 23:12:34
軽量が先、重量が後に描画に起因する事象。問題あるかどうかはやり方次第。
738:デフォルトの名無しさん
07/07/18 23:19:24
>>736
Swingの使い方間違えてんだろう・・・Swingで著しくパフォーマンス悪いのと描画に問題あるのは昔からマが使い方間違えてるだけだし。
JTreeを初期化時に全部ツリー作るとかさ。
そういうことだ>>733ソース晒すなりしないと。
今のマシンスペックじゃあブラウザでFlash自慰サイト読み込んで
メモリ1Gくらい食ってガンガン動かしても余裕だからjavaなんて論外。
739:デフォルトの名無しさん
07/07/18 23:46:53
public void run() {
try {
while (true) {
Socket acceptedSocket = serverSocket.accept();
hogehoge(acceptedSocket);
}
} catch (InterruptedException e) {
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
他のスレッドからThread#interrupt()で止められるサーバーってこう書くのかと思ったら
例外 java.lang.InterruptedException は対応する try 文の本体ではスローされません。
正しくはどう書くものなんでしょうか。
740:デフォルトの名無しさん
07/07/18 23:47:08
>javaなんて論外
Flexっていう便利なものがあるんだからJavaでGUI書くなんて
論外って意味なのか、Javaで書くと重いと文句を言うなんて
(使い方を間違えてるだけから)論外って話なのか、どっちだろう
741:デフォルトの名無しさん
07/07/19 00:36:26
>>739
Thread#isInterrupted()、Thread#interrupted() 使って
自前で割り込みされたかチェック。
何したいのか良く分からんけど、
interrupt で止められるサーバって考え方自体が正しくないような気もするが。
742:デフォルトの名無しさん
07/07/19 00:47:41
>>739
ここでその手の話にまったく詳しくない俺が本で読んだだけの知識で答えるぜ
1.ServerSocket#accept()はInterruptExceptionを投げない→タイムアウトを使うしかないはず(nioあたりで止められるのはあった気がする)
2.Thread#interrupt()を実行したら勝手にInterruptExceptionが発行されるわけではない→Thread.currentThread().isInterrupted()でインタラプト状態を確認し手動で投げる
3.hogehogeがやたら時間のかかる処理でInterruptExceptionを使う場合hogehoge内で2の動作をすることでキャンセル可
743:739
07/07/19 01:12:45
参考になりました。
・・・が、方針の段階で間違っているんですかね・・・。
サーバーって普通どう止めるものなんでしょう?
744:デフォルトの名無しさん
07/07/19 01:40:36
そこでThreadPoolExecutorの出番ですよ
745:デフォルトの名無しさん
07/07/19 10:31:20
javaの配列の宣言で
class Fuck
{
String str[] = new String[5];
public static void main(String[] args)
{
}
}
ってやると配列の宣言でエラーがでるんですが何故でしょうか?
配列の宣言文をメインの中でやるとエラーはでないんですが
746:デフォルトの名無しさん
07/07/19 10:35:46
static
747:745
07/07/19 10:46:32
すみませんソース間違えました;
class fuckArr
{
static String str[] = new String[5];
str[0] = "myGOD";
public static void main(String[] args)
{
System.out.println(str[0]);
}
}
で
fuckArr.java:4: ']' がありません。
str[0] = "myGOD";
^
fuckArr.java:4: <identifier> がありません。
str[0] = "myGOD";
ってエラーがでるんですが何故でしょうか?
mainでstr[0] = "myGOD";ってやると通るのですが
748:デフォルトの名無しさん
07/07/19 10:46:41
>>745
配列の宣言(String str[] = new String[5];ってやってるところ)では エラーでないでしょ。
staticメソッドからは static でないメンバにアクセスできないけど。
749:デフォルトの名無しさん
07/07/19 10:51:08
>>747
そこには式文かけないから当たり前。
フィールド宣言時に初期化子つかってやるか、静的初期化子使え。
static String[] str = { "myGOD", null, null, null, null };
static String[] str = new String[]{ "myGOD", null, null, null, null };
static String[] str = new String[5];
static { str[0] = "myGOD"; }
750:デフォルトの名無しさん
07/07/19 10:52:11
ぬるぽ
751:デフォルトの名無しさん
07/07/19 10:52:42
class fuckArr
{
static String str[] = new String[5];
str[0] = new String("myGOD");
public static void main(String[] args)
{
System.out.println(str[0]);
}
}
752:デフォルトの名無しさん
07/07/19 10:54:30
>>747
str[0] = "myGOD";がある場所はコンストラクタやフィールド、メソッド、内部クラスの定義しか書けない場所。
753:745
07/07/19 11:08:51
>749-752
レスthx
単純に式文がかけない場所なんですね
754:デフォルトの名無しさん
07/07/19 13:54:28
Java sound apiを利用してWebアプリケーションを構築したいと考えているのですが
例えばページ上でボタンを押したら録音が始まり10秒間録音してユーザーのローカルにファイルとして保存するようなJSPは
構築可能でしょうか?
頭でなかなかイメージできないので、可能か不可能かも分かりません
具体的な解説を付け加えてもらえれば、なお助かります
755:デフォルトの名無しさん
07/07/19 14:05:41
ファイルの内容を一行消したい場合は何を使えば良いのでしょうか?
756:デフォルトの名無しさん
07/07/19 14:20:30
>>754
無理というかJSPにする意味が分からんというか。
そういうのはJWSにした方が良いよ。
757:デフォルトの名無しさん
07/07/19 14:37:26
>>756
JWSとJSPはサーバサイドかクライアントサイドかの差だけだと思っていたので、
サーバ側の自分が負担できればと思っていたのですが・・・
またもしJSPであれば、クライアント側はJRE等が必要なくて済むかと・・・
つまり先述の例であれば、JWSの方が良い理由があるということでしょうか?
758:デフォルトの名無しさん
07/07/19 14:53:09
サーバサイドのプログラムでクライアントの音声デバイスにはアクセスできない。
サーバにくっついてるマイクの音だけしか拾えない。
759:デフォルトの名無しさん
07/07/19 14:55:58
Javaを理解するためにはアルゴリズムを勉強したほうがいいでしょうか?
760:デフォルトの名無しさん
07/07/19 15:06:23
>>757
サーバー側で動くもの作ったことある?
というかどういう風に動いてるか知ってる?
根本的なところから勉強した方が良い気がする。
761:デフォルトの名無しさん
07/07/19 15:07:03
>>759
Javaに限らずそれはしたほうがいい
762:デフォルトの名無しさん
07/07/19 15:37:59
RMIでできるべ
763:デフォルトの名無しさん
07/07/19 15:39:19
サーバ側のミキサーにアクセスするだけの話
だからそれほど難しい話ではない
764:デフォルトの名無しさん
07/07/19 15:44:09
>>761
ありがとうございます。
ちなみにビギナー向けでいい本ご存知ですか?
765:デフォルトの名無しさん
07/07/19 15:55:10
>>764
アルゴリズムの勉強は言語(Javaでもいい)の基礎が出来ていて多少書けることが前提
「アルゴリズム」とか「データ構造」でぐぐればネットでも勉強できる
これはC言語だけどアルゴリズムの考え方自体は同じだから参考になると思う
URLリンク(www.geocities.jp)
Javaで説明されてる本も出版されてるみたいだけど読んだことは無い
766:デフォルトの名無しさん
07/07/19 16:08:57
>>765
そうですか。自分はJavaの勉強に行き詰っている状態なのでちょっと厳しいかもしれません
ネットでも勉強出来るんですね?ありがとうございました
767:デフォルトの名無しさん
07/07/19 16:22:07
基本的なアルゴリズムが身につくと応用力が付く
ネットで見たりするソースに隠れたものを理解できるようになる
そうなるとどんどん力が付くよ。
最初はやはり本で少し学んだ方がいいかもしれない
それほど高く無い値段で出回ってる。
768:デフォルトの名無しさん
07/07/19 16:35:37
本日の部下との会話
俺:newってどういう意味?
部下:
____
/ \ /\ キリッ
. / (ー) (ー)\
/ ⌒(__人__)⌒ \ あたらしく作るということです
| |r┬-| |
\ `ー'´ /
ノ \
/´ ヽ
| l \
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、.
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
俺:newって単語の意味だけで想像して言っただろ?
部下:はい(´Д`;)ヾ
769:デフォルトの名無しさん
07/07/19 17:00:11
苦労してるな
770:デフォルトの名無しさん
07/07/19 17:03:28
>>765
フヒヒ 横からいいHPハケーン!
771:デフォルトの名無しさん
07/07/19 17:50:23
>>763
クライアント側のミキサーにアクセスしようとしてるんだと思うが?
772:デフォルトの名無しさん
07/07/19 17:58:17
だったらそれでもいいだろ
難しく考えすぎ
773:デフォルトの名無しさん
07/07/19 18:16:19
盗聴のような真似ができるから今問題になってるね
774:755
07/07/19 19:00:25
どなたか(´;ω;`)
775:デフォルトの名無しさん
07/07/19 19:03:44
読み込んだあと該当箇所のエスケープシーケンスを消す
そのあと保存
776:デフォルトの名無しさん
07/07/19 19:04:45
1行ずつよみこんで新たなファイルに書き込む。該当行はスキップ。
777:デフォルトの名無しさん
07/07/19 20:23:58
特定の文字列に対して正規表現がマッチしている、みたいなのはできたのですが、
正規表現を指定してそれにマッチする文字列をランダムで作成する、みたいなことってできないでしょうか。
仕事なんでできないとだめなんですが、ご意見いただけないでしょうか。
778:デフォルトの名無しさん
07/07/19 21:10:16
>>777
ランダムで文字列を作成して、正規表現にマッチしていればループを抜ける
779:デフォルトの名無しさん
07/07/19 21:17:15
正規表現を逆解析して、適切なテストデータを流すDBからデータとってくるとかかな
むかーし、そんな感じのテストツール作ろうかと考えたこともあった。
780:デフォルトの名無しさん
07/07/19 21:30:12
正規表現の逆なんて正規表現でのマッチングよりも難しいんじゃないか?
適当に使用する文字を絞り込んでから778の言うようにランダムに作成してマッチングかけるのが手っ取り早そうだ
仕事なんで出来ないとダメってのは何かおかしいと思うぞ
出来ないものは出来ないと言うべきだ
781:デフォルトの名無しさん
07/07/19 21:38:22
>>778
最初それで考えたんだが、文字数だとかが絡んだりするとそう簡単にはいかんことに気付き断念
>>780
普通はそうなんだろうが、そうもいかない会社はいくらでもあるのよ。
とりあえず対応できそうな構文のみでいってみるか・・・
782:デフォルトの名無しさん
07/07/19 21:43:34
>>781
だいたい何の用途で使うんだ?
正規表現って言ってもどこまで対応するかによってとんでもなく面倒だぜ
783:754・757
07/07/19 21:51:25
>>758
なるほど、これでだいぶ理解できました
ありがとうございます
>>760
全くの初心者です
今日、早速本を買ってきました
これから勉強していこうと思います
ありがとうございました。
784:デフォルトの名無しさん
07/07/19 22:27:57
>>774
特にAPIは無いんじゃないの?
785:デフォルトの名無しさん
07/07/19 22:32:00
>>781
1.
ある表現から固定の決まったシーケンスを出すようにする
[a-z]* なら aaa
[0-9]* なら 000
2.
あるシーケンスの正規表現マッチングを崩さないような変更を行うメソッドを
いろいろ(対応する正規表現分だけ)用意する
例:
[a-z]* の aaa を aab にするとか、 aaにするとか。
3.
1.に対して2.を適当な回数適用する
どう?
まぁできあがる表現に偏りはできると思うがね。
ランダムの定義が曖昧だしこれでいいよな?
1.のシードをある程度余分に作っておけばそれなりにばらけるかもしれないし。
786:デフォルトの名無しさん
07/07/19 22:57:47
こういうときこそSnobolですよ、奥さん。
自然言語マッチ用言語の本領発揮!
787:デフォルトの名無しさん
07/07/19 23:07:05
>>781
まずは対応できる正規表現のパターンを絞り込む事が重要だな
絞り込んじまえばたいしたことはないと思うが、全てに対応しろといったら1プロジェクトだろう
788:デフォルトの名無しさん
07/07/19 23:52:46
1.4のプログラムを1.5のGenericsを使った記述に変更してますが、
よく分かりません。
例えば、配列の偶数要素をキー、奇数要素を値とするMapを生成するメソッド
public static Map arr2map(Object[] arr)
のMapをGenericsを使った記述にする場合、
(1)public static Map<Object,Object> arr2map(Object[] arr)
(2)public static Map<?, ?> arr2map(Object[] arr)
(3)public static <K, V> Map<K, V> arr2map(Object[] arr)
などが考えられますが、どれがいいものでしょうか。
なにか、ガイドラインとなる書籍、URL等ありましたら教えてください。
789:デフォルトの名無しさん
07/07/20 00:00:27
>>788
言っている意味も考えられる選択肢もワカラネ
そもそもObject[]の時点で終わってるのでGenericsに対応しない方がいいんじゃね?
キーの型がKey、値の型がValueであるならば
public static Map<Key, Vaue> arr2map(Object[] arr)
が正しい。
キーも値も決まってないならば、
public static Map<Object, Object> arr2map(Object[] arr)
となるけど、それならば
public static Map arr2map(Object[] arr)
のままでいいんじゃね?ww
790:デフォルトの名無しさん
07/07/20 00:03:01
総称型使ってClassCastExceptionを起こすのはナンセンス
791:デフォルトの名無しさん
07/07/20 00:14:43
>>788
Map<? extend foo, ? extend bar>かMap<K, V>だろうねぇ。
けど、>配列の偶数要素をキー、奇数要素を値とする
なんて非OOなレコードの持ち方が変。
keyとvalueのペアを持つエントリクラス作ってそれを持っておくだろ。
static Map arr2map(Object[])なんて変換関数用意するんじゃなくて初めからmapやsetで持ってkeyだけ・valueだけ詰めた配列返すメソッド用意する。
とか、こういう設計の方が自然。
792:デフォルトの名無しさん
07/07/20 00:18:16
>>789みたいな非OOな考え方ができない奴も居るし、ループ回す時複雑だし・・・
793:788
07/07/20 00:37:15
>>789-792
引数のObject[]が非非OOな持ち方なので、無理に総称型
使う必要は無い(ClassCastExceptionに起こしかねない)と
いうことですね。
設計考え直してみます。
ありがとう。
794:デフォルトの名無しさん
07/07/20 00:45:13
>非非OOな持ち方なので、無理に総称型
使う必要は無い(ClassCastExceptionに起こしかねない)
いや、違う自分の良いように考えすぎ。
アプローチ間違ってますよってだけ。
キャストで例外出すってのはまた別の話。
795:デフォルトの名無しさん
07/07/20 00:58:01
>>788
俺だったら、こんな感じかなぁ
/** 今後はこっち使ってください */
public static <K, V> Map<K,V> arr2map(Object[] arr, Class<K> keyType, Class<V> valueType) {
Map<K,V> map = new HashMap<K,V>();
for(int i = 0; i < arr.length - 1; i+=2){
map.put(keyType.cast(arr[i]), valueType(arr[i+1]));
}
return map;
}
/** 互換性のため */
@Deprecated
public static Map<?, ?> arr2map(Object arr) {
return arr2map(arr, Object.class, Object.class);
}
796:デフォルトの名無しさん
07/07/20 00:59:06
× map.put(keyType.cast(arr[i]), valueType(arr[i+1]));
○ map.put(keyType.cast(arr[i]), valueType.cast(arr[i+1]));
× public static Map<?, ?> arr2map(Object arr) {
○ public static Map<?, ?> arr2map(Object[] arr) {
797:デフォルトの名無しさん
07/07/20 01:21:25
String.format("%02X", byte) の逆をやるにはどうするのが普通なんですかね。
つまり文字列"00"からは0x00、"79"からは0x79、"80"からは-0x80、
"81"からは-0x79、"FF"からは-0x01のbyte値を生成したいんです。
798:デフォルトの名無しさん
07/07/20 01:25:58
int val = (byte)Integer.parseInt(str, 16);
799:797
07/07/20 01:43:51
>>798
なるほど! ありがとうございます。
800:デフォルトの名無しさん
07/07/20 06:16:29
>>739
遅レスだが、ソケットを閉じる
801:755
07/07/20 10:32:14
レスくれた方どうも有難う御座います。
ググっても適当なメソッドや関数が見つからないと思ったら本当に無いんですか・・・
凄く冗長な気がしますが大人しくファイル二つの間でコピーし合う事にします
802:デフォルトの名無しさん
07/07/20 10:41:05
for( int i = 0; i < 10; i++ ) {
int j = i;
}
こんな風にループ内で変数の宣言していると、回るたびに変数分のメモリを消費していく?
int型の4バイト(?)づつ浪費することになる?
803:デフォルトの名無しさん
07/07/20 10:42:22
>>802
intはオブジェクトじゃないからならない。
804:デフォルトの名無しさん
07/07/20 10:54:28
>>803
オブジェクトだとどんどん消費するってことですか?
class Hoge {
public static void main( String[] args ) {
while( 1 ) {
xxx();
}
}
public void xxx() {
// ここでオブジェクトの宣言
}
上のようにやればxxx()が終了した時点でオブジェクトのメモリは解放?されると思ってるんですが合ってますか?
805:デフォルトの名無しさん
07/07/20 10:58:38
オブジェクトは xxx が終了した時点で
ガベージコレクタによってメモリを開放される条件を満たすようになるが、
実際にメモリが開放されるのはそれ以降でガベージコレクタが実際に走った時。
806:デフォルトの名無しさん
07/07/20 10:58:56
xxx() が終わった時点で参照が外れてGCの対象にはなるが、
その後いつメモリが開放されるかどうかはGCまかせ。
807:デフォルトの名無しさん
07/07/20 11:20:42
レスありがとうございます。
ループ内でオブジェクトを宣言する場合は>>804のやり方で大丈夫でしょうか?
メモリ周りを気にしています。
一番いいのはループ内でオブジェクトは宣言しないことですよね・・・
軽くGCを調べたら「GCはマルチスレッドで動く」ってあったので期待したい。
808:デフォルトの名無しさん
07/07/20 12:14:44
>>807
変数宣言は、できるだけスコープを小さくした方がいい。
この場合なら、ループ内で変数宣言した方がいい。
変数のスコープが小さいときは、
最適化されて変数がレジスタのみ使用し、スタックメモリを消費しなくなる。
オブジェクトの生成はそういうわけにはいかず、
newの度にヒープを消費することになる。
809:デフォルトの名無しさん
07/07/20 12:47:38
いまどきはエスケープ解析されて、スタックに詰まれる。
810:デフォルトの名無しさん
07/07/20 13:46:12
メモり周りをシビアに使いたいなら Java じゃない方がいいんじゃないかなあ
811:デフォルトの名無しさん
07/07/20 14:10:46
でも管理は楽
812:デフォルトの名無しさん
07/07/20 15:19:29
レジスタにのっけるかどうかのアルゴリズムって5.0のままだっけ?6で変わらなかった?
813:デフォルトの名無しさん
07/07/20 15:20:37
>>812
レジスタにのっけるかどうかのアルゴリズム自体が 6.0 で追加されたんじゃなかったか?
814:デフォルトの名無しさん
07/07/20 16:08:12
JDBCリクエストをラップして、
DB の多重化を簡易的に行えるライブラリはありませんでしょうか。
例えば、アプリケーション層のノードが二つ(A,Bとします)
DBノードも二つ(X,Y とします)あるとすれば、
A,B ともラッパー経由で更新していれば X,Y に格納されており、
もし JDBC リクエストで X が落ちたら、Y のみに要求する、と言う形です。
この例であれば X への更新をプールして、X が復活したのを検出したら
流していってくれると最高ですが、この部分は X を復帰させる手続きと
して手動でやれということでも構いません。
815:814
07/07/20 16:15:52
C-JDBC, Sequoia あたりはそうなんですかね…
いまいち、一般的に使われているかどうかが分かりません。
816:デフォルトの名無しさん
07/07/20 16:43:41
フォントの実際の大きさを求めるにはどうすればいいのでしょうか。
JFrameにJTextAreaを乗せてデータを表示していましたが、一部の文字の色を
変える為に、JTextAreaからJTextPaneへ変更しました。しかし、JTextPaneでは
JTextAreaのように行数と列数を指定できません。それはJTextPaneのフォント
サイズが可変な為だと思います。けれでも私のプログラムのフォントは等幅で
大きさは全て等しく、色が一意でないだけなので、一文字の実際の高さと幅が分
かれば列数、行数ともに算出可能なはずです。そうすれば
setPreferredSize(Dimension d)を使って出来上がりです。
そこで調べてみたところ、FontMetricsクラスを使えば期待する動作が行えそう
です。FontMetricsは抽象クラスなので、Graphics.getFontMetrics(Font f)を使
ってインスタンスを生成しなければいけませんが、そのGraphicsクラスを使う方
法が分かりません。Canvs.paint(Graphics g)を使えばできますが、それだけの為
にCanvasクラスを使うのは違う気がしました。
817:デフォルトの名無しさん
07/07/20 17:12:03
>>816
使用するフォントを実際に指定できているわけだから
そのフォントを表すFontクラスのインスタンスは得ることができるよね?
そしたらあとはJComponent#getFontMetrics(Font)でFontMetricsのインスタンスを得ればいいじゃない
818:デフォルトの名無しさん
07/07/20 20:51:39
質問です。
OutputStream out = new OutputStream();
DataOutputStream dout = new DataOutputStream(out);
という風にDataOutputStreamを作って、
dout.close(); を行うと、
out.close()も勝手にやってくれるのでしょうか?
819:デフォルトの名無しさん
07/07/20 20:57:47
JavaDocを見なさいって。基本中の基本。
見るのはFilterOutputStreamの方だというヒントは教えとく。
820:デフォルトの名無しさん
07/07/20 20:59:40
>>818
> dout.close(); を行うと、
> out.close()も勝手にやってくれるのでしょうか?
一応やってくれるけど、
例外食らった場合は out.close() してない可能性もある。
821:デフォルトの名無しさん
07/07/20 21:10:51
javaってどんなところに使われてるの?
822:818
07/07/20 21:10:58
>>819
>>820
ありがとうございます。
823:デフォルトの名無しさん
07/07/20 21:13:54
>>821
国防
824:デフォルトの名無しさん
07/07/21 00:42:06
>>821
火星
825:デフォルトの名無しさん
07/07/21 01:01:23
参考書とりあえずやったんですけど、どうすればいいですか?
後はAPIっていうのを見ながらやるんですか?
826:デフォルトの名無しさん
07/07/21 01:04:09
>>126は具体的にどのように実装するのか教えていただけませんか。
827:デフォルトの名無しさん
07/07/21 01:43:16
>>825
何か作りたいから Java 勉強したんじゃないの?
828:デフォルトの名無しさん
07/07/21 03:09:46
>>825
やったのは単なる入門書で文法を学んだだけじゃないの?
参考書ってのは何かを作るときに参照するものだよ
特に作りたいものがないならばゲームでも作ってみるのがいいんじゃね
GUI関連は業務じゃ使う機会少ないけど、デザインパターンとか設計力を鍛えるには一番だとばっちゃんが言ってたよ
829:デフォルトの名無しさん
07/07/21 03:53:11
>>825
この辺りで宿題解いてみるのもいいと思うよ。
★★ Java の宿題ここで答えます Part 62 ★★
スレリンク(tech板:1-100番)
830:825
07/07/21 12:52:27
>>828
>>829
ありがとうございます。参考になりました。
831:788
07/07/21 14:44:46
>>795-796
レス遅くなりましたが、
これ使わせてもらいます。
ありがとう。
832:デフォルトの名無しさん
07/07/21 15:22:58
サーブレットを覚えたてです、家でも勉強しようと思って、tomcatをインストールしたのですが
どうしてもindexに繋がりません、過去に習ってた時の学校では自分でインストールできたのに
スタートさせてもアイコンはミドリの▲になるのに、右クリックをするとストップStopではなくStartが押せる状態になっています
Tomcatは5.5、Javaは1.5
OSは2000XPでも2000Proでもどちらも同じ現象でダメでした
XPのファイアーウォールを無効にしても無理でした
環境設定のPathは教室でインストールした時に、テキストファイルで貰っていたのをコピペしなおしても無理でした
これ以上どう足掻いていいのか分かりません
833:デフォルトの名無しさん
07/07/21 15:29:56
//A
class Hoge{
static void piyo(){}
public static void main(String[] arg){
piyo();
}
//B
class Hoge{
Hoge(){
piyo();
}
void piyo(){}
public static void main(String[] arg){
new Hoge();
}
Aのように書かずBのように書けば、piyoメソッドにstatic修飾子をつけなくてもよくなりますよね
こう書くことになにか問題はありますか?
834:デフォルトの名無しさん
07/07/21 15:57:32
>>833
修飾子についての理解が不十分
staticをつけたメソッドはインスタンス化しないでも使えるが、
Bのpiyoメソッドはインスタンス化しないと使えない。
835:デフォルトの名無しさん
07/07/21 17:36:23
>>832
Eclipse上?
今のTomcatなんてインストーラーに従ってインストールするだけだろ?
836:デフォルトの名無しさん
07/07/21 17:37:18
ちなみに環境変数のPathだのCLASS_PATHは下手にいじるなよ
837:デフォルトの名無しさん
07/07/21 18:05:10
>>834
うまく言えんけど、おそらく833は
「mainメソッドで呼ぶ」という理由だけでstatic修飾子をつけるのはおかしいのでは?
と考えた結果思いついたんじゃないか?
833への答えは持ってないけど、834の答えが的外れな気がしたんで口出し
834のであってたらすまん
838:デフォルトの名無しさん
07/07/21 18:20:47
>>833
たしかにAもBもpiyo()が実行されるという一点では同じなんだけど、
piyo()は本当にコンストラクタ内で処理すべき機能なのか考えるべき。
AとBではpiyo()やHogeクラスの意味合いが異なってくる。
piyo()が単にstaticメソッドから呼ばれるだけの下請け的存在ならAで十分だし、
Hogeをインスタンス化する必要がありかつpiyo()がインスタンス生成段階で必要な処理ならB。
class Hoge{
void piyo(){}
public static void main(String[] arg){
Hoge h = new Hoge();
h.piyo();
}
}
こう書くのが適切な場合だってある。
何を実現するためにどうクラス設計をするかを考えてpiyo()の立ち位置を決めておくれ。
839:デフォルトの名無しさん
07/07/21 18:24:31
優等生的回答
class Hoge{
public static void main(String[] arg){
Hoge hoge = new Hoge();
hoge.piyo();
}
void piyo(){}
}
840:デフォルトの名無しさん
07/07/21 18:42:46
newってのが何者かを勉強するといいと思う
単純にfor文とif文を駆使したプログラム入門ならば、全部staticでnewは配列作るときくらいしか使わないでOK
クラスとか勉強する段階でnewを覚えるべきだが
841:デフォルトの名無しさん
07/07/21 19:07:22
>>832
URLリンク(localhost:8080)
でだめだったのかい?
URLリンク(localhost:8080)
ではどうだい?
842:デフォルトの名無しさん
07/07/21 19:13:53
>>835
私もそう思ってたのでびっくりです
>>836
CLASSPATHを作ってservlet-api.jar;.の位置を入れました
↑は自分で打ったけど、パソコンに入れたのは成功した教室のPCからのコピペなんで間違いはないと思います
>>841
そこ自体がダメです
タスクのアイコンがスタート状態になってても、ストップできずスタートがあるということは、スタートできてないんだと思う
843:デフォルトの名無しさん
07/07/21 19:21:23
>>842
CLASS_PATHを消せ
次にコマンドプロンプトからjava -version を打ってversionを確認せよ
その上で再インストールして来い
スタートできないならばログも嫁
844:デフォルトの名無しさん
07/07/21 19:29:52
>>843
おかげで使えるようになりました
ありがとうございました
前に入れたバージョンが残っててそっちを設定してたっぽい
ゴメンナサイ
私は、恥かしい間抜けです
845:デフォルトの名無しさん
07/07/21 21:23:30
,===,====、
_.||___|_____||_
.. / /||___|^ l
.. 答えろ ぶち殺すぞ!> (・ω・`)//|| |口| ||ω・` )
. ./(^(^ .//||...|| |口| |⊂ )
. / // ||...|| |口| ||し 新スレです
. あ?てめぇどこ中だよ>( )//.... ||...|| |口| || 楽しく使ってね
/(^(^ // .... .||...|| |口| || 仲良く使ってね
"" :::'' |/ |/ '' " ::: ⌒ :: ⌒⌒⌒ :: "" `
:: ,, ::::: ,, ; ̄ ̄ ̄ "、 :::: " ,,
846:デフォルトの名無しさん
07/07/21 22:10:34
サーブレット書いてるんだけど、
doGetとdoPostあるじゃん。
どちらか一方に処理全部書いて、もう一方にはdoPost()かdoGet書けば
いいだけなんだろうけど。
これでいいのか?
てゆうか、分けて書くことってあるの?
847:デフォルトの名無しさん
07/07/21 22:18:16
>これでいいのか?
いい。
>てゆうか、分けて書くことってあるの?
使い方による。
848:デフォルトの名無しさん
07/07/21 22:41:17
例えばリクエストにGetを許可しないケース
849:デフォルトの名無しさん
07/07/21 23:00:41
初心者です。javaのGUIアプリケーションってデザイン的によくないイメージがあるのですが、
見た目にこった実装ってできるのでしょうか?
例えば、ウィンドウを3D間隔で操作できるとか、swingコンポーネント等でも
デザインが柔軟に変更できるとか。OS依存でも構わないです。(できればWindows)
その他なんでもよいのですが、おもしろいデザインにするための技術情報など教えていただきたいです。
850:デフォルトの名無しさん
07/07/21 23:04:51
LookAndFeel(ようはスキン)を自作することはできる。
Swing synthでぐぐってみたら?
851:デフォルトの名無しさん
07/07/21 23:06:04
>>849
やろうと思えば3Dだろうとなんだろうと可能だが、簡単に出来るわけじゃない
単純に派手なUIが欲しいってのならば方向性は違うだろうね
Eclipseで使われているSWTなんかを使えば簡単にWindows風のUIも可能
Swingだって6.0で大幅にパフォーマンスも向上しているから捨てたもんじゃない
ただし、作るにはそれなりのセンスと時間が必要
852:デフォルトの名無しさん
07/07/21 23:26:17
>>850
htmlとcssみたいな関係なのでしょうか?調べてみますm(__)m
>>851
javaを勉強し始めてから早一年経ちましたが、人の作ったライブラリを呼び出すだけの人になってますorz
ちなみに最近netbeansを使ってGUIの作成ってやってみたのですが、VBチックで楽だなぁと思ったのですが
同じようなものなのかな? SWTなるもの調べてみますm(__)m
853:デフォルトの名無しさん
07/07/21 23:54:31
>>852
SwingなりSWTはツールを使わずに習得した方がいい
自然とOOPでの設計力が付くぞ
854:デフォルトの名無しさん
07/07/21 23:54:58
programming base .javaとか言うのを学校で使って
家でもちょっとやりたいと思ってるのですが、
家では開けず、あぁーなんかダウソしないといかんのかぁー。となっとります。
ほんとに初歩の初歩の質問で申し訳ないのですがどなたか教えて頂けるとありがたいです。
えー、ちなみに void on Idle とか使ってた奴です。(何だこの説明。。。
855:デフォルトの名無しさん
07/07/21 23:57:39
JRE Version 6 Update 2 のインストーラーで質問。
URLリンク(www.java.com)
↑ここから辿ってダウンロードできる jre-6u2-windows-i586-p-s.exe と
URLリンク(java.sun.com)
↑ここの「Java Runtime Environment (JRE) 6u2」のダウンロードから辿って
ダウンロードできる jre-6u2-windows-i586-p.exe の違いが分かる人いますか?
両方ダウンロードするとどちらも 14,566,808 バイトだけど、バイナリ比較すると一致しない…
856:デフォルトの名無しさん
07/07/22 00:15:19
>>853
ですね。。正直今の段階だと自動生成されたソースが何をやっているのか分からない状態です。
GUI開発が熟練してからツール使うことにします^^;
857:デフォルトの名無しさん
07/07/22 01:12:13
>>854が釣りかエスパーか判断できないので誰か支援頼むw
>>856
まあ、netbeansの吐くコードは汚いね。
いまさらSWT使う利点なんてないよ。
5.0/6のVMは早いし、SwingのSystemLnFもネイティブコードの呼び出し増えて見栄えもかなり近いし。
普通に使う分にはVMのメモリを多めに取ればSwingもSWTもたいして速度変わらん。
それに今時Swingで十分な速度でない環境だとjavaそのものが遅いし。
ここら辺のおかげでnetbeansがかなり使えるようになった。
SWTはjava風じゃないところがあるからまずはjavaを覚えた方が良い。
858:デフォルトの名無しさん
07/07/22 01:49:52
これを応えられるほどの凄腕エスパーは世界に3人といないだろう
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5055日前に更新/271 KB
担当:undef