★★Java質問・相談スレッド159★★at TECH
★★Java質問・相談スレッド159★★ - 暇つぶし2ch1:デフォルトの名無しさん
13/01/23 15:05:35.48
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    URLリンク(pc11.2ch.net)
Webプログラミング URLリンク(pc11.2ch.net)
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 (p)URLリンク(www.wikiroom.com)
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
★★Java質問・相談スレッド158★★
スレリンク(tech板)

2:デフォルトの名無しさん
13/01/23 15:08:30.86
糞スレ

3:デフォルトの名無しさん
13/01/23 19:33:11.55
>>1
相談。
誰か前スレの単芝のキチ○イを抽出して、カキコミ時間をグラフにして欲しい。

単芝レスを判定するのって意外と難しいきがする。
何かいい方法ないかな。

4:デフォルトの名無しさん
13/01/23 19:38:02.93
日本語でおk

5:デフォルトの名無しさん
13/01/23 19:53:06.93
>>3
いつものようにママに頼めよ

6:デフォルトの名無しさん
13/01/23 21:27:02.83
そういやこの正月実家に帰れなかったな。ママンのがソリティアやマインスイーパのアルゴリズムは詳しそうだ

7:デフォルトの名無しさん
13/01/23 22:15:29.88
助けてください!
eclipseのコンソールで
package hoge.hoge.com;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Sample3 {
/**
* @param args
*/
public static void main(String[] args)throws IOException {
// TODO 自動生成されたメソッド・スタブ
System.out.println("文字列を入力してください。");
BufferedReader br=
new BufferedReader(new InputStreamReader(System.in));
String str=br.readLine();
System.out.println(str + "が入力されました。");
}
}
上記のコードで実行し、コンソールに「文字列を入力してください。」と、出るまではよいのですが、
「名前」と入力し、エンターを押すと
名前名前が入力されました。
となってしまいます。
検索して色々試してみましたが直りませんでした。
どうしたら直りますか?

8:デフォルトの名無しさん
13/01/23 22:16:43.62
昇天

9:デフォルトの名無しさん
13/01/23 22:48:50.90
貧乏過ぎて専門学校にも通えないというなら安心安全のグーグル先生に聞いてください

10:デフォルトの名無しさん
13/01/23 22:58:58.02
鍵括弧

11:デフォルトの名無しさん
13/01/24 02:07:02.25
こうすればいいです
public static void main(String[] args)throws IOException {
System.out.println("文字列を入力してください。");
BufferedReader br=
new BufferedReader(new InputStreamReader(System.in));
String str=br.readLine();
System.out.println("が入力されました。");
}

12:デフォルトの名無しさん
13/01/24 09:14:58.51
>>11
なぜ2つ表示されるかを教えてやれよ
場当たり的な対処はバグメーカーを造るだけ

13:デフォルトの名無しさん
13/01/24 09:18:09.96
改行はさめばいいじゃん

14:デフォルトの名無しさん
13/01/24 10:00:14.03
JDKの新しいバージョンが出るたびにリビルドしたほうがいいの?

15:デフォルトの名無しさん
13/01/24 11:46:06.13
<item>
<title>助けてください</title>
<content:encoded>この部分を抜き出したい</content:encoded>
</item>

のxml内容をStAXでパースしたいのですが、
tag.equals("content:encoded")で取り出せなくて・・・
どなたかご教授お願いします

16:デフォルトの名無しさん
13/01/24 12:22:58.65
その場限りのやっつけ対応でいいのなら
XMLInputFactoryの名前空間機能を殺してみては?

17:デフォルトの名無しさん
13/01/24 13:15:55.41
>tag.equals("content:encoded")で取り出せなくて・・・

なんですかこれ?

18:デフォルトの名無しさん
13/01/24 13:39:46.84
Streaming API for XML - Wikipedia
URLリンク(ja.wikipedia.org)

これか

19:デフォルトの名無しさん
13/01/24 14:40:11.27
ReourceBundleでロケールを指定して呼び出したとき、そのロケールのリソースが
存在すればそれが返ってきて、ない場合は例外が発生すると思いますが、
リソースが存在するロケールの一覧を得る方法はあるでしょうか。

20:デフォルトの名無しさん
13/01/24 18:52:18.52
ここであってるかわからないのですが
マシンをA、Bを用意してAからBのプログラムを実行する方法ってありますか
あれば教えて欲しいのですが

21:デフォルトの名無しさん
13/01/24 18:54:45.44
>>20
SSH

22:デフォルトの名無しさん
13/01/24 19:06:48.64
SSHコマンドを使えってことですねありがとうございました

23:デフォルトの名無しさん
13/01/24 19:19:38.92
>>15
equalsで比較してやるのが定石なのか?なら不便すぎるんだが。(StAXを知らないから的外れならスルーしてくれ)
dom使わない理由があるならスマンが一応俺のやりかた

DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = documentBuilder.parse(fileなりurlなり);
Element rootElement = document.getDocumentElement();
ArrayList<String> array = new ArrayList<String>();
NodeList itemList = rootElement.getElementsByTagName("item");
for(int i=0; i<itemList.getLength(); i++) {
Element element = (Element) itemList.item(i);
NodeList content = element.getElementsByTagName("content:encoded");
array.add(content.item(0).getFirstChild().getNodeValue());
}

これで一応<content:encoded>の内容はarrayにぶち込めるんじゃないの?(そんな気がするだけ)
何がしたいのかいまいちわからないから>>16のような回答になるんじゃないかな

24:デフォルトの名無しさん
13/01/24 20:07:06.71
あいかわらずアホしかいないw

25:デフォルトの名無しさん
13/01/24 21:14:34.22
単芝やろうってこいつか・・・

26:デフォルトの名無しさん
13/01/24 21:28:15.73
>>20
RMI、CORBA。

27:デフォルトの名無しさん
13/01/24 22:27:44.90
今メインで作ってるものないんだが、何かお題をくれ

28:デフォルトの名無しさん
13/01/24 22:31:37.27
プログラミングのお題スレ
スレリンク(tech板)

29:デフォルトの名無しさん
13/01/24 22:56:08.71
あ、もういいです

30:デフォルトの名無しさん
13/01/25 00:05:00.06
>>27
ignoreCaseなMap<String, V>を作ってけれ。

31:デフォルトの名無しさん
13/01/25 02:17:34.95
>>30
勉強のために自分で作ってみるならいいけど、仕事か何かですぐ使いたいならもうあるぞ。
URLリンク(commons.apache.org)

32:デフォルトの名無しさん
13/01/25 03:58:24.73
世の中にはOSSでいっぱいあるだろうけど、
遊びで自作してみるのは面白いと思って。

仕事なら、toUpperCase()して突っ込んで済ませるわ。

ただ、ロカールの違いでignoreCaseの動作が変わるらしいから、
真面目にやろうとすると、結構面倒臭そうだ…。

33:デフォルトの名無しさん
13/01/25 05:46:05.81
毎度毎度toUpperCase呼ぶのがあほジャバー流

34:デフォルトの名無しさん
13/01/25 13:21:21.15
File dir = "./"
while (true) {
for (File f : dir.listFiles()) {
あーだこーだ処理
}
Thread.sleep(1000L);
}
これをスレッドで複数動かそうとしてる
これの処理中にlistFiles()でできた配列ってちゃんとgcされますかね?
ずーっと動かしっぱにするつもりなんだけど。。

>>20
telnet,rsh,rpc
てかよくこのスレにしようと思ったねw

35:デフォルトの名無しさん
13/01/25 14:48:01.47
あーだこーだ処理の内容次第

36:デフォルトの名無しさん
13/01/25 15:52:23.32
String[] array = {"Java","C","VB","Perl","Ruby","PHP", ・・・};
for (String elem : array) {
 ファイル名がitemのファイルを処理;
 ファイル名がitem.*にマッチするファイル(*はワイルドカード)を削除;
}
ってのをやりたいんだけど
forループ内でitem.*にマッチするファイルを探すのに毎回ディレクトリ内の全ファイルを
走査することはしたくない。
何かいい方法ある?

37:デフォルトの名無しさん
13/01/25 16:04:38.97
高速化の意味で聞いてるなら、検索専用の索引ファイルを用意したら?
確か最近のOSってそういう仕組みで検索できるようにしてるよね

38:デフォルトの名無しさん
13/01/25 16:43:55.81
あ、馬鹿は黙っててください^^

39:デフォルトの名無しさん
13/01/25 17:09:47.66
>>35
File.listFiles()で出てきたFile[]をそれぞれファイル名見たりして
削除したりProccessBuilderにかけて別の事させたり。
要はFile[]がループの度に生成されるが大丈夫かな?
ループ内で処理の終了時に明示的にnullしてやった方がいいとか??

40:デフォルトの名無しさん
13/01/25 17:15:07.41
>>36
よく分からないんだけど「ファイル名が item」ってのは item.java とか item.c があるってこと?ループ内の1行目と2行目の条件に該当するファイル違いがよくわからないんだけど、二重ループにするんじゃダメなの?
for (File f : dir.listFiles()) {
for (String elem : array) {
  ファイル名がitemのファイルを処理;
  ファイル名がitem.*にマッチするファイル(*はワイルドカード)を削除;
}
}

41:デフォルトの名無しさん
13/01/25 17:27:18.60
よく分からないなら触らないでスルーしろ

42:デフォルトの名無しさん
13/01/25 17:30:05.76
>>19みたいなことが必要になって何か実装した人はいませんかー?
今現在どういう言語がサポートされてる、みたいな一覧をリソースから作りたい
のですが...

43:36
13/01/25 18:20:01.68
>>37
索引ファイルはやりたいことと比べると大げさな気がするので避けたいです。

>>40
>>36では言葉足らずだったので補足します。
まず、処理対象ファイルのリストarrayが与えられます。
処理対象ファイルのリストは、指定されたディレクトリを再帰的に走査して
ファイル名、タイムスタンプなどの条件に合うファイルを集めたもので、
上限数1000個になったら走査は打ち切られます。

例えば、arrayの要素を/hoge/piyo, /hoge/foo/bar, /hoge/baka/aho とします。
forループの中で/hoge/piyoを処理したら、/hoge/piyo.java, /hoge/piyo.cなど
拡張子つきのファイルも存在すれば削除したいのです。
拡張子の種類は様々で直接指定することはできません。

44:デフォルトの名無しさん
13/01/25 19:47:01.45
doubleやint等の数値をファイルに書き込む時、みなさんどうやってます?
文字にして書き込む・obj以外で実現出来ますか?

45:デフォルトの名無しさん
13/01/25 19:56:01.43
よく分からないんだけど他にも色々ありますよ!

46:デフォルトの名無しさん
13/01/25 19:57:58.02
>>44
バイナリ

47:デフォルトの名無しさん
13/01/25 20:07:16.31
>>46
できないでしょ double は

48:40
13/01/25 20:08:41.37
>>43
大事な所を誤魔化してるからわかりづらいじゃんか。説明変わってるし。

/var/log/
/usr/local/apache/log/

みたいなのがあって、その下の
log.err
log.out
log.2013-01-25

を処理して削除するようなイメージかな?

最初の説明だとあるディレクトリがあって、elem が "Java" の時に listFiles() を一回、
"C" の時に listFiles() を一回... となるけど、後の説明だと /hoge/piyo, /hoge/foo/bar,
/hoge/baka/aho に対して一回ずつ listFiles すれば、「毎回ディレクトリ内の全ファイルを走査」
しなくていいだろ。

結局 listFiles() 使ってそのディレクトリのファイル一覧持ってきて、
各ファイルに対して名前をチェックして削除するようにすればいいんじゃないか?
FilenameFilter を引数にして listFiles() を呼び出してもいいし。

49:デフォルトの名無しさん
13/01/25 20:09:27.01
文字にして書き込むのが簡単です

50:40
13/01/25 20:10:08.36
つづき - 例えば..

String absolutePath = "/hoge/piyo"
File directory = new FIle(absolutePath);
String baseName = // 正規表現か何かで /hoge/piyo を piyo だけに直す。
File[] files = directory.listFiles();
for (File file : files) {
if (file.getName.startsWith(baseName)) {
file.delete();
}
}

これでダメなら自分で途中まで書いたコードを ideone にでも貼り付けて。
あと /hoge/baka/aho とか書かないほうがいいな。実社会でもアドバイス仰ぐときにそんなふざけないだろ。

51:デフォルトの名無しさん
13/01/25 20:13:09.10
>文字にして書き込む・obj以外で実現出来ますか?
ってようするにバイナリデータに変換したいってことだろ

byte b[] = new byte[4]
ByteBuffer.putInt(1)
ByteBuffer.get(b);

bを書き込む

52: ◆hXdaSRcZuYwp
13/01/25 20:27:26.57
オーバーロードについて教えてください。
このように書いたときvoid Method(Kobun kobun)が呼ばれることは保証されますか?
教えてくださいお願いします。

interface Oyabun {
}

class Kobun implements Oyabun {
}

void Method(Oyabun oyabun) {
}

void Method(Kobun kobun) {
}

Oyabun oyabun = new Kobun();
Method((Kobun)oyabun);

53:デフォルトの名無しさん
13/01/25 20:30:53.67
はい

54: ◆hXdaSRcZuYwp
13/01/25 20:38:36.86
>>53
そうですか安心しましたそして解決しました。ありがとうございました。

55:36
13/01/25 21:05:51.83
>>50
arrayは処理対象ファイルのリストです。
arrayの要素/hoge/piyo等はファイルです。
/hoge/の下にpiyo, piyo.java, piyo.c, piyo.txt, boo, pee, /hoge/foo/等多くのファイル・ディレクトリがあります。

56:デフォルトの名無しさん
13/01/25 21:43:52.32
>>46
>>49
>>51
ありがとうございました
実数のバイナリ書込みは手間がかかりそうですね

57:デフォルトの名無しさん
13/01/25 21:50:36.39
>>56
static longdoubleToRawLongBits(double value)
IEEE 754 浮動小数点の「ダブルフォーマット (double format)」ビットレイアウトに従って、非数 (NaN) 値を保持する、指定された浮動小数点値の表現を返します。
使うといいよ

58:デフォルトの名無しさん
13/01/26 00:52:32.81
Javaでdoubleを保存するのにバイナリ形式を
使う奴は100%ジジイ。

59:デフォルトの名無しさん
13/01/26 00:57:22.07
爺じゃないけど知識不足でそうしてる人がここにいますが。

60:デフォルトの名無しさん
13/01/26 01:01:46.73
>>58-59
荒らすな雑魚ども

61:デフォルトの名無しさん
13/01/26 01:53:11.09
と、zakoインターフェースをインプルメンツした子が申しております。

62:デフォルトの名無しさん
13/01/26 02:56:09.30
自己解決しませんでした

63:デフォルトの名無しさん
13/01/26 06:10:06.19
>>57
ありがとうございます 参考にさせて頂きます

64:デフォルトの名無しさん
13/01/26 09:29:54.50
あなたとJAVA
→なんで大文字?

65:デフォルトの名無しさん
13/01/26 12:58:06.80
画像の表示が出来ません。(abc.jpg)

使用ソフトは「NetBeans」です。
もちろん画像ファイルは同じフォルダに入れてます。

内容は次に書き込みます。

「行が長すぎます」の警告が出たので、
後半部分(閉じる部分 Closingなど)は削ってます。

66:65の内容
13/01/26 12:59:28.43
import java.awt.*;
import java.awt.event.*;

public class test extends Frame {
Image i = getToolkit().getImage("abc.jpg");

public static void main(String[] args) {

Frame f = new Frame();
f.setSize(300,200);
f.setVisible(true);
f.addWindowListener(new Ada());}

public void paint(Graphics g){
g.drawImage(i,50,35,this);}

67:デフォルトの名無しさん
13/01/26 14:42:57.74
>>66
Frame f = new Frame(); じゃなくて new Test(); だろ。
そうしないと Image への参照を持たせて paint() をオーバーライドした意味ない。

68:デフォルトの名無しさん
13/01/26 14:54:47.43
ソース読むとき
頭の中でどうやって整理して理解してるん?

69:デフォルトの名無しさん
13/01/26 14:58:51.08
ツリー型で。

70:デフォルトの名無しさん
13/01/26 15:07:58.91
馬鹿には無理

71:デフォルトの名無しさん
13/01/26 15:26:27.72
>>67
>Frame f = new Frame(); じゃなくて new Test(); だろ。

new Frame();をnew Test()に変更しても失敗します。
全体をnew Test();に変更したら、下記の「f.」部分がエラーになります。



また書き直しました。
「さすけのプログラミング入門 JAVA 画像表示」
のサイトを丸移しです。

フレームは起動しますが画像は出ません。

72:71
13/01/26 15:29:44.45
上記サイトの「AWTを使用しての画像を表示」を引用してます。
import java.awt.*;
import java.awt.event.*;

public class Frametest extends Frame{

Image pi=getToolkit().getImage("abc.jpg");

public static void main(String[] args) {
Frametest f = new Frametest();
f.setSize(200, 100);
f.setVisible(true);
f.addWindowListener(new Ada());}
public void paint(Graphics g)

{g.drawImage(pi,50,35,this);
以下略

73:67
13/01/26 15:58:55.89
自分の環境だとそのまま動いたよ。
画像ファイルの置き場所が違うかもよ。
src 以下じゃなくて、プロジェクトディレクトリの直下だよ。
URLリンク(imgur.com)

74:71
13/01/26 16:21:41.69
>>73
ありがとうございました。プロジェクト直下で無事表示されました。
今までは「Frametest.java」と同フォルダに入れてました。

75:デフォルトの名無しさん
13/01/26 19:00:15.60
URL resUrl = クラス名.class.getResource("res/");
Image image = getToolKit().getImage(resUrl.getPth()+"image.jpg");

みたいにしたほうがいいんじゃないの?
フォルダにまとめないならgetResource("")で。

76:デフォルトの名無しさん
13/01/27 00:09:22.09
お聞きしたいのですが
class A{
int n;
A(int x){
n=x;
}
int getN(){
return n;
}
}
class B extends A{
int k;
B(int x){
k=x;
}
int getK(){
return k;
}
}
以下メインクラスメインメソッド
A abc=new B(5);
int tmp=abc.getK();

77:デフォルトの名無しさん
13/01/27 00:13:09.69
上の続きです
Aクラスを継承したBクラスのインスタンスをAクラス型に代入して
abc.getK()でBクラスのgetK()メソッドを実行したいのですが、可能なのでしょうか?
また上と同じような書き方でabc.getN()とすればAクラスのgetN()メソッドを実行できるのでしょうか?
javaが複雑で頭がいたいです。どうか教えていただけますでしょうか。

78:デフォルトの名無しさん
13/01/27 00:16:47.71
あなたには無理なので諦めましょう

79:デフォルトの名無しさん
13/01/27 00:23:36.60
実行して確認すれば済むだろ

80:デフォルトの名無しさん
13/01/27 09:19:01.09
Javaが複雑って、Javaのせいにするなよ・・・
どう考えても君の思考回路とソースの書き方のせいだと思うぞ。割とマジで。

81:デフォルトの名無しさん
13/01/27 11:16:12.86
>>77
Aクラスには引数をとるコンストラクタしかないから
BクラスのコンストラクタでAクラスのコンストラクタを呼ぶ必要がある。

B(int x){
  super(x);
  k=x;
}

>Aクラスを継承したBクラスのインスタンスをAクラス型に代入して
>abc.getK()でBクラスのgetK()メソッドを実行したいのですが、可能なのでしょうか?

キャストすればできるよ。
tmp = ((B)abc).getK()

>また上と同じような書き方でabc.getN()とすればAクラスのgetN()メソッドを実行できるのでしょうか?

できるよ。

82:デフォルトの名無しさん
13/01/27 12:14:33.30
Javaやると必要なプログラムは自分で作るんじゃなくてどっかから探してくるっていう姿勢がついてよくないと思うわ

83:デフォルトの名無しさん
13/01/27 13:09:47.12
馬鹿になるプログラミング言語

84:デフォルトの名無しさん
13/01/27 13:19:13.75
>>77
Aクラスに存在しないメソッドをAクラスの変数に代入した
インスタンスから実行することは不可能です。

85:デフォルトの名無しさん
13/01/27 13:19:41.79
初めての言語はjavaなら馬鹿にはならないが、C++から移行すると馬鹿化してC++には戻り難くなる

86:デフォルトの名無しさん
13/01/27 13:42:33.97
>>82
プログラミング自体が目的と化しているよくない傾向がみえる

87:デフォルトの名無しさん
13/01/27 14:51:23.84
>>82
車輪の再発明イクナイ

88:デフォルトの名無しさん
13/01/27 15:36:15.63
できることが制限されるだけ
再発明ヨクナイとか言ってツクールでクソゲー作ってろよ

89:デフォルトの名無しさん
13/01/27 16:09:06.59
>>88
こういう雑魚は相手にするなよ

90:デフォルトの名無しさん
13/01/27 18:02:15.85
お前が一番初めに相手にしてる件

91:デフォルトの名無しさん
13/01/27 23:10:11.36
お前だろ

92:デフォルトの名無しさん
13/01/27 23:19:16.17
JavaでGUI作るならAWT Swing SWT どれがいい?

93:デフォルトの名無しさん
13/01/27 23:19:48.77
JavaならHTMLが唯一の選択肢だよ
どれも間違い

94:デフォルトの名無しさん
13/01/27 23:30:10.45
SWTとawt。
Swing使うときはすぐに実装したいとか小規模のときにしか使ってないな
資料少ないが、javascriptが弄れるんでSWTはかなーり使われてるよん

95:デフォルトの名無しさん
13/01/27 23:59:12.09
SWTってマルチプラットフォーム対応?

96:デフォルトの名無しさん
13/01/28 00:03:35.63
はい

97:デフォルトの名無しさん
13/01/28 01:40:11.61
じゃあSWT覚えます

98:デフォルトの名無しさん
13/01/28 01:46:36.72
SWTってもしかしてプラットフォームごとにコンパイルしないといけないの?

99:デフォルトの名無しさん
13/01/28 02:26:32.26
クロスプラットフォームだから当然。
でもここまで何だかんだ使われてるのは「Javaなのに」っていう用途以外でもJavaが使われてる証拠だな

100:デフォルトの名無しさん
13/01/28 10:45:34.05
そういう意味ならC++だってクロスプラットフォームになっちゃうだろ
真のJava信者なら1バイナリでどこでも動くというJavaの崇高な理念に反するものは使用してはならない

101:デフォルトの名無しさん
13/01/28 10:57:00.28
そうですか、頑張ってくださいね

102:デフォルトの名無しさん
13/01/28 11:14:20.86
>>100
Androidは?

103:デフォルトの名無しさん
13/01/28 11:20:29.20
>>102
Javaじゃないよあれ
OracleはJavaの互換性を壊すクソ海賊版だと言ってるし
GoogleもJavaじゃなくてJava言語だと言ってるし

104:デフォルトの名無しさん
13/01/28 11:32:51.09
>>103
おら来る 所詮インタプリタでえらそーにねぇ
ポインタ位使えるようにしろよ

105:デフォルトの名無しさん
13/01/28 11:36:11.64
公式JVMはAndroidのDalvikより遥かに性能いいよ

106:デフォルトの名無しさん
13/01/28 11:42:19.13
ふーん...
マルチプラットホームっていうけど、鯖以外で、
業務用アプリのターゲットとしてwin 以外に何があるの?
クソまっくなんか企業は使わないでしょ?
linaxは...さらに

ま、流れはデスクトップ、ノートからタブレットに移行するから、
気がついたらほとんど全部Androidって事になっちゃうんじゃないのかなぁ

107:デフォルトの名無しさん
13/01/28 12:14:37.99
もともと鯖専用なんだから0から0になるだけだよ


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