トップページ⇒tech
1001コメント298KB

★★Java質問・相談スレッド153★★

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/04/15(日) 06:27:39.32
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。

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

前スレッド
★★Java質問・相談スレッド152★★
http://toro.2ch.net/test/read.cgi/tech/1329715551/
0153デフォルトの名無しさん2012/04/24(火) 14:11:30.22
クラスファイル1個ぐらいの小規模アプリだったらデフォルトパッケージに置いとく。
0154デフォルトの名無しさん2012/04/24(火) 14:15:42.24
>>152
あ、なんか書き方おかしかったですが、パッケージをそのアプリケーション専用の作るか、作らないかって質問でした。

>>153
ありがとうございます。
よく考えたら、全部が全部パッケージに分類しなくてもいいのか。
0155デフォルトの名無しさん2012/04/24(火) 16:57:24.35
誰か助けて・・・
0156デフォルトの名無しさん2012/04/24(火) 17:04:02.20
知らんがな
0157デフォルトの名無しさん2012/04/24(火) 18:53:41.48
漏れは自分のドメイン名は恥ずかしいので付けてない
0158デフォルトの名無しさん2012/04/24(火) 20:53:26.36
JarファイルA、B、Cが有ったとして、
AはX-1.0でないと動かない。
BはX-2.0で無いと動かない。
X-1.0とX-2.0の仕様は部分的に非互換で部分的に互換。
つまり似ている部分は有るが共存はできない。
こういう場合はどうすれば…
0159デフォルトの名無しさん2012/04/24(火) 20:54:00.95
○ JarファイルA、B、Xがが有ったとして、
0160デフォルトの名無しさん2012/04/24(火) 21:21:32.44
ggrks
0161デフォルトの名無しさん2012/04/24(火) 22:17:17.07
複数のXでAとBの開発・テストを平行して行いたいのならMaven覚えればいい

A,B両方を使うDがどっちのXを参照すべきかは他人に判断できない問題
0162デフォルトの名無しさん2012/04/24(火) 22:48:16.33
よくFactoryでもなければ、ClassでもないのにstaticでnewInstance();を定義しているクラスがありますが、
あれは何の意義があるんでしょうか?new Type();と比べ何のメリットがあるんでしょう?
0163デフォルトの名無しさん2012/04/24(火) 22:51:36.32
1 今後変えていくかもしれんのでnewでインスタンスつくんなおという願い
2 やってみたかっただけ
3 知能に問題がある人が書いた
0164デフォルトの名無しさん2012/04/25(水) 06:08:05.14
>>163
> 1 今後変えていくかもしれんのでnewでインスタンスつくんなおという願い
なら、コンストラクタ不可視にすんだろ。

> 2 やってみたかっただけ
> 3 知能に問題がある人が書いた
これはあるある

4 内部でうまいことキャッシュしてやるからnewInstance使え。キャッシュとか
   別にいらねーなら勝手にnewしろ。そのかわり自分で面倒見ろよ

大抵は3か4だろう。2は殴れ。3は殴るな後が怖い。
0165デフォルトの名無しさん2012/04/25(水) 06:52:14.81
死ねよ雑魚が
0166デフォルトの名無しさん2012/04/25(水) 08:52:47.69
自殺宣言?
0167デフォルトの名無しさん2012/04/25(水) 11:52:19.93
「自分は頭が良くて詳しいです」的な自己満足レスの典型だぞ。
相手は超初心者なんだからもう少し優しく教えてあげないと。
さもなくばスルーでOK
0168デフォルトの名無しさん2012/04/25(水) 12:08:04.14
>>162
staticファクトリーメソッドで調べてごらん
0169デフォルトの名無しさん2012/04/25(水) 12:50:03.47
断る
0170デフォルトの名無しさん2012/04/25(水) 14:15:45.83
あ゛?なめてんのか?
0171デフォルトの名無しさん2012/04/25(水) 14:58:43.99
>>162
シングルトン
インスタンスの数を常に1つにしたい場合に使う
0172デフォルトの名無しさん2012/04/25(水) 15:00:37.73
Java6u31の総称型の質問です。

class Foo<T extends Hoge> {
public int insert(List<T> entitylist) { /* ... */ }
public int insert(List<Long> primaryKeyList) { /* ... */ }
}

とあるとき、java.lang.LongはHogeのサブクラスではないのに同じメソッドイレイジャだとコンパイルエラーになります。
総称型のextendsによる限定は考慮されない仕様なのでしょうか。
0173デフォルトの名無しさん2012/04/25(水) 15:16:58.70
過去と互換性のあるレイヤではパラメタ型全部消えるのでerasure。
0174デフォルトの名無しさん2012/04/25(水) 16:18:00.39
コンパイルの過程で総称型の情報が消えてしまい、
List<Foo>もList<Baa>もただのListとなるから同じとみなされるわけですね。

erasureの動きが少し理解できました。
ありがとうございました。
0175デフォルトの名無しさん2012/04/25(水) 18:46:45.00
java6 update16ください
0176デフォルトの名無しさん2012/04/25(水) 19:27:17.23
>>171
シングルトンはnewInstance()なんて名前普通つかわんだろ
0177ora!2012/04/25(水) 19:52:13.02
>>175
[Java の旧バージョンと関連文書の入手先]
http://www.java.com/ja/download/faq/other_jreversions.xml
0178デフォルトの名無しさん2012/04/25(水) 20:07:39.23
>>167
死ねよ
0179デフォルトの名無しさん2012/04/26(木) 00:27:03.13
シングルトンはgetInstance()だな
>>162がよく見るソースコード見てみたいものだ
0180デフォルトの名無しさん2012/04/26(木) 00:37:19.91
5 今後プリミティブ型廃止の流れがきた際にnew演算子を使っていた不幸な人たちを少しでも減らしたい願いの表れ
0181デフォルトの名無しさん2012/04/26(木) 01:10:26.08
>>172
Javaの型パラメータは、コンパイル時に除去されてObject型になってしまうのだよ。
この性質のことをイレイジャという。
そんなわけで、おまえさんが例示した2つのメソッドは同じシグネチャになってしまいコンパイルエラーになるわけだ。
0182デフォルトの名無しさん2012/04/26(木) 02:14:23.87
抽象戦隊!イレイジャー!

よし覚えた。
0183デフォルトの名無しさん2012/04/26(木) 03:54:24.16
私的用プログラムを高速化したいので、javaからsse1,sse2(amd64)にアクセスしたいんですが、JNI,JNAを使ってCでブリッジを書かないとやっぱり無理でしょうか。
0184デフォルトの名無しさん2012/04/26(木) 12:32:33.55
わからない
俺にきくなよ
0185デフォルトの名無しさん2012/04/26(木) 13:07:39.15
知らないならレスしないでください
うざいだけです
0186デフォルトの名無しさん2012/04/26(木) 18:33:31.14
JNI,JNAを使ってCでブリッジを書けばsse1,sse2(amd64)にアクセスできますよ

0187デフォルトの名無しさん2012/04/26(木) 21:43:41.28
sseの高速化メリットよりメソッド呼び出すコストの方が高そうだな
0188デフォルトの名無しさん2012/04/26(木) 21:45:54.50
>>168
調べましたけど何でstaticなんでしょうね。
インスタンスメソッドにしたって大したコストにならないでしょうに。
0189デフォルトの名無しさん2012/04/26(木) 22:10:27.71
>>187
アーキテクチャにもよるけど、JNI1回で10-50msぐらいかかる。
SSE使うだけのジョークアプリになるね。
0190デフォルトの名無しさん2012/04/26(木) 22:27:00.05
だなw
0191デフォルトの名無しさん2012/04/26(木) 22:43:23.68
今のJVMって最適化オプションでSSE使ってくれるだろ
あくまで俺が使ったときの一例の話だけどgccの自動ベクトル化より速かった
0192デフォルトの名無しさん2012/04/27(金) 00:07:33.40
Romeを利用してRSSを配信したいのですが、enclosureタグが出力できません。

List<SyndEnclosure> enclist = new ArrayList<SyndEnclosure>();
SyndEnclosure enc = new SyndEnclosureImpl();

enc.setUrl(image_path.toString());
enc.setType("image/jpeg");
enc.setLength(image_file.length());
enclist.add(enc);
entry.setEnclosures(enclist);

どこか問題ありますでしょうか・・・
0193デフォルトの名無しさん2012/04/27(金) 00:08:54.32
sse(mmx),amd64は、java8で実装される予定のラムダとbulk dataを利用して使おうと考えてます。
java8からはmulticoreの活用はもちろん基本的に内部イテレータ仕様がメインになるようなので、java5 generics typeの時と同じく次回の改訂はjava languagesのパラダイムシフトになるかなと思います。
0194デフォルトの名無しさん2012/04/27(金) 00:39:51.99
意味がわからん
ラムダ使った並列化はMIMDだろ
0195デフォルトの名無しさん2012/04/27(金) 01:06:27.15
起動したクラスって取得できますか?
public class SuperClass{
public static void main(String[] args){
}
}

public class SubClass extends SuperClass{
}

こんな感じで、SubClassで起動した場合に
mainの中で起動したクラス(SubClass)を取得したいのです。
0196デフォルトの名無しさん2012/04/27(金) 06:51:13.43
>>193
        > 9年ぶりに言語仕様を改訂予定
http://ja.wikipedia.org/wiki/Java#Java_SE_8
0197デフォルトの名無しさん2012/04/27(金) 08:57:14.77
↓の状態で実行すると数字の重複をしてしまいます。
乱数の重複を防ぎたいのですがどうすれば良いですか?
ネットでいろいろな方法を調べたのですが、どれも上手くいきませんでした。

import lib.Input;

public class Sample1{
public static void main(String[] args){
int a = Input.getInt("何人に配りますか?(2〜5)");
for (int i=1;i<=a;i++){
System.out.println(i+"人目の手札は以下のとおりです.");
System.out.println(cards()+""+cards()+""+cards()+""+cards()+""+cards());
}
}
public static String cards(){
String[] a = {"ハート","クラブ","ダイヤ","スペード"};
int b= (int)((Math.random()*13)+1);
int c= (int)(Math.random()*4);
int c_b = (int)(Math.random()*53);
String d = a[c] + "の" + b +" ";
if(c_b==0){
d="ジョーカー";
}



return d;
}
}
0198デフォルトの名無しさん2012/04/27(金) 08:59:40.72
>>197
あらかじめ使えるカードの一覧を作っておいて使用済みのチェックを入れる。
0199デフォルトの名無しさん2012/04/27(金) 09:54:25.99
>>196
間違いだから削除した
0200デフォルトの名無しさん2012/04/27(金) 11:08:27.44
>>197
配列に52枚のカードを入れて、それをランダムにシャッフルして、先頭から順にめくっていく
0201デフォルトの名無しさん2012/04/27(金) 11:21:05.05
>>197
重複しない膨大な整数系列を高速省メモリで吐いてくれるアルゴリズムの
疑似乱数クラスは、探せばある。

トランプにはオーバースペックか。
0202デフォルトの名無しさん2012/04/27(金) 11:21:12.39
>>197
http://sasuke.main.jp/java.htmlに「トランプのシャッフル」ってのがある
0203デフォルトの名無しさん2012/04/27(金) 12:36:20.05
Javaを勉強し始めたばかりで用語について混乱しているので教えて下さい。

クラスをコントラクトすること=インスタンス化(クラス名 変数名=new クラス名();)
インスタンス化された変数をインスタンス
メソッドや変数をまとめて1つのクラスとして独立させることをカプセル化

このような解釈であってますでしょうか。。。
初歩的な質問で申し訳ないのですがサイトなどでの説明がわかりにくかったもので、
誤った理解をしていればご指摘頂ければ幸いです。
0204デフォルトの名無しさん2012/04/27(金) 14:36:48.75
>>203

【インスタンス化】
● クラスからオブジェクトを作ること。
● コンストラクタの呼び出しによって、メモリ上に、新たに生成される
    オブジェクト用のメモリの領域を確保すること。
【カプセル化】
● クラスの外部からはフィールドを直接操作できないようにして、必ずメソッドを
    経由してフィールドを間接的に操作するようにすること。
0205デフォルトの名無しさん2012/04/27(金) 16:13:09.20
Java7u4 Java6u32 リリース
0206デフォルトの名無しさん2012/04/27(金) 17:48:04.46
>>204
ありがとうございます、
0207デフォルトの名無しさん2012/04/27(金) 18:13:03.93
>>195
public class SuperClass {
static Class subclass=SuperClass.class;
public static void main(String[] args) {
System.out.println(subclass.getName());
}
}

public class SubClass extends SuperClass{
static {
subclass = SubClass.class;
}
}

もしくは
public class SuperClass {
public static void main(String[] args) {
todo(SuperClass.class);
}
public static void todo(Class subclass){
System.out.println(subclass.getName());
}
}

public class SubClass extends SuperClass {
public static void main(String[] args) {
todo(SubClass.class);
}
}
0208デフォルトの名無しさん2012/04/27(金) 18:46:54.53
>>206
いえいえ
0209デフォルトの名無しさん2012/04/27(金) 19:14:47.21
>>198
>>200
理論的には分かりやすい説明ですが、ググったりしたのですが具体的なやり方がぜんぜんわかりません。

0210デフォルトの名無しさん2012/04/27(金) 19:42:56.25
1.カードの枚数分の配列を作る。
2.乱数を2つ発生させて、2つの数字の指し示す配列の中身を入れ替える。
3.気が済むまで2を繰り返す。

とかなら簡単じゃないかな
0211デフォルトの名無しさん2012/04/27(金) 19:47:39.74
>>209
出来合いのなら→>>202のやつ
http://sasuke.main.jp/toranpu.html
0212デフォルトの名無しさん2012/04/27(金) 20:13:07.35
ArrayListに突っ込んでCollections#shuffle()を使えばいいんじゃね
0213デフォルトの名無しさん2012/04/27(金) 20:49:12.14
馬鹿には無理
0214デフォルトの名無しさん2012/04/27(金) 22:35:00.08
馬鹿にも限度があります><
0215デフォルトの名無しさん2012/04/28(土) 00:21:40.44
トランプの性質上、ジョーカーは例外として
同じものがないのだよ
java.utilで使えそうなインタフェースがSet

こんな感じで、作るものの本質を知ることからはじめるのがプログラミング
制御したい物をどのように組み立てるのか、よく考えるところからはじめよう

これは言語云々の話じゃないけど、心の片隅にでもとりあえず置いてほしい

フィールドとしてSet<Card> cardSet = new 何とかSet<Card>();
cardSetから取り出されたものもさらに別のSetにぶち込む
そのときにコレクション.ソート機能をつかってコンパレートする
イメージは伝わったかな
0216デフォルトの名無しさん2012/04/28(土) 00:27:37.12
ちなみにCardは
int number
enum Type {
スペード("スペードマーク")、ダイヤ("ダイヤ");
final String マーク;
Type (String マーク) {
初期化
}
}
必要があればenumコンストラクタのフィールドをどんどん追加すればいいのかな
enum内にstatic なメソッドも持たせられるのでいろいろ使い道があると思う
0217デフォルトの名無しさん2012/04/28(土) 00:34:03.06
Listを2つ用意(A,Bとする)してAに1〜52を格納,Bは空
0〜51の乱数を発生させ得られた数番目の要素をAから削除しBに追加
乱数の範囲を1減らして↑を繰り返す
0218デフォルトの名無しさん2012/04/28(土) 02:14:40.50
ふーん
0219デフォルトの名無しさん2012/04/28(土) 09:50:03.85
>>197
>>200の方法をとるのは後ろからになってるけどざっと実装してみた。参考にどうぞ。
import java.util.Random;
import java.util.Arrays;
public class RandomSet{
public static void main(String[] args){
//0 〜 LIMIT-1 の重複しないint配列を用意
int LIMIT = 52;
int[] rand = new int[LIMIT];
for(int i=0;i<LIMIT;i++){
rand[i] = i;
}
//配列をシャッフルする
Random r = new Random();
int temp = -1;
for(int i=LIMIT;i>0;i--){
int index = r.nextInt(i);
temp = rand[index];
rand[index] = rand[i-1];
rand[i-1] = temp;
}
//出力
System.out.println("0 〜 "+(LIMIT-1)+" までの重複しない乱数列");
for(int i=1;i<=LIMIT;i++){
System.out.printf("%3d",rand[i-1]);
if(i%10==0){
System.out.println();
}
}
System.out.println();
}
}
0220デフォルトの名無しさん2012/04/28(土) 09:59:28.02
なんだこの役に立たないサンプルは
0221デフォルトの名無しさん2012/04/28(土) 10:58:35.94
配列の添え字が0になるのがそんなに嫌か
0222デフォルトの名無しさん2012/04/28(土) 11:20:25.29
何言ってんだコイツw
0223デフォルトの名無しさん2012/04/28(土) 11:45:58.54
なにこのドヤ顔ww
0224デフォルトの名無しさん2012/04/28(土) 12:17:46.13
重複しない乱数をどうやって実装するかによって性格が分かりそうだなww
0225デフォルトの名無しさん2012/04/28(土) 12:36:48.51
意味不明
0226デフォルトの名無しさん2012/04/28(土) 13:20:59.29
あいかわらずアホなスレですな
0227デフォルトの名無しさん2012/04/28(土) 15:01:48.46
すみません、用語についての質問です。
セッター、ゲッターについては以下のような解釈であってますでしょうか。

セッター:異なるクラスのprivateな変数に対し値をセットするためのメソッド
ゲッター:異なるクラスのprivateな変数の値を取得するためのメソッド
0228デフォルトの名無しさん2012/04/28(土) 15:09:56.20
>>227
ゲッター:主人公側のロボット
セッター:敵のロボット、実は主人公のオヤジが乗ってた
0229デフォルトの名無しさん2012/04/28(土) 15:14:28.47
>>227  そう。

フィールド自身は private 宣言で、
フィールドアクセス用のメソッド は public 宣言だよ。
0230デフォルトの名無しさん2012/04/28(土) 15:19:59.70
>>229
必ずしもそうとは限らんけどな
Set/Getはprotectedかもしれないし、
Set/Getのあるクラス内にフィールドが存在しないかもしれない。
0231デフォルトの名無しさん2012/04/28(土) 15:23:33.56
>>229
ありがとうございます!
0232デフォルトの名無しさん2012/04/28(土) 15:23:33.56
屁理屈乙
0233デフォルトの名無しさん2012/04/28(土) 15:28:20.83
>>230
>Set/Getはprotectedかもしれない
例えば、パッケージが1つの場合などはSet/Getは”privateでなければ良い”いう解釈ができるということでしょうか?

>Set/Getのあるクラス内にフィールドが存在しないかもしれない
これについては良くわからないのですが、フィールドが存在しないクラスにSet/Getを用意する必要性が出てくることもあるということでしょうか>
0234デフォルトの名無しさん2012/04/28(土) 15:30:50.94
常に単純にフィールドの読み書きをするだけだったらpublicフィールドでいい。
わざわざメソッドを通すなんて面倒なことをするのは、
後で実装を変更するため。
直接フィールドを持たないような実装に変更することもありうる。
0235デフォルトの名無しさん2012/04/28(土) 15:35:09.45
例えば日時を管理するクラスに曜日フィールドはなくてもいいが、
日時から曜日を計算して返す曜日ゲッターがあってもいい。
0236デフォルトの名無しさん2012/04/28(土) 15:36:50.64
そうそう

>>233    >>230 の後半はカン違いと思われ…
0237デフォルトの名無しさん2012/04/28(土) 15:44:33.90
>>234
Set/Getがメソッドである本質は、物理的なコードの書き換えというより
継承での実行時書き換えのためだろ。

>>233
下についてだが、どこまで素人かしらんけど、
Javaがある程度解るならこんな感じ。
DelivedBはExampleBaseを使える様に
getValue()を用意してるけど、DelivedBとしては
100以外返す必要がないないんで、フィールドをもたない。

interface ExampleBase
{
   int getValue();
}
class DelivedA implements ExampleBase
{
   private int value;
   public int getValue()
   {
      return value;
   }
}
class DelivedB implements ExampleBase
{
   public int getValue()
   {
      return 100;
   }
}
0238デフォルトの名無しさん2012/04/28(土) 15:48:43.47
>>233
>例えば、パッケージが1つの場合などはSet/Getは”privateでなければ良い”いう解釈ができるということでしょうか?
いや、アクセス権限は関係ないというはなし。別にprivateにしたってset〜()/get〜という形でメソッド定義してりゃ
セッター、ゲッターと呼ばれる。アクセッサーと呼ばれるかどうかは知らんけどな。
0239デフォルトの名無しさん2012/04/28(土) 16:07:23.94
皆さんたくさんのご意見ありがとうございます。
私はVC、VBの経験はありますがJAVA(オブジェクト指向)はまだ記述方法等を順に学んでいる段階のため理解が浅く、
ご教授頂いた内容を理解しきれない部分があります。

とりあえず今の段階ではset〜()、get〜()とネーミングされた、値を設定・取得するためのメソッドという理解に留めておこうと思います。
0240デフォルトの名無しさん2012/04/28(土) 16:11:27.67
>>239
蛇足だが、現実でVCの経験があると言うのは控えた方がいい。
VCでC言語をやっていたぐらいにしておかないと
ハイレベルな作業頼まれてトラブる事が有るぞ
0241デフォルトの名無しさん2012/04/28(土) 16:23:26.61
初心者にドヤ顔www
0242デフォルトの名無しさん2012/04/28(土) 16:24:51.27
そんなにマイクロソフトに染まっちゃているならいっそのことドットネットの方をやったらどうですか?
0243デフォルトの名無しさん2012/04/28(土) 16:37:35.10
だよなぁ
普通VCやってたって言ったら日本では最高レベルのプログラマの称号だし。
VCを本当にやってた人間ならJavaなんて学ぶことなく使えるし
0244デフォルトの名無しさん2012/04/28(土) 16:42:33.31
日本で最高に苦労していたプログラマって意味ですよね?
0245デフォルトの名無しさん2012/04/28(土) 16:46:59.66
C++つかってる様な仕事で締切りに追われて苦労してるようなとこあんの?
うちとか約1年ぐらい掛けてゆっくり1つの製品作ってたりするけど。
C++で製品開発はあっても、受注なんてほとんど無くね?
0246デフォルトの名無しさん2012/04/28(土) 16:48:27.94
VC++とC++(gcc)はまったく別物ですよ。
0247デフォルトの名無しさん2012/04/28(土) 16:52:37.34
>VC++とC++(gcc)
そもそも、この書き方がおかしい
Microsoft (R) C/C++ Optimizing Compilerとgccを比較してるのか?
統合開発環境全体とgccというコンパイラ比較してんのか?
0248デフォルトの名無しさん2012/04/28(土) 16:58:32.40
ツマラン
0249デフォルトの名無しさん2012/04/28(土) 16:58:51.29
>>245
C++ のベテランには、C$ は使うが Java は意地でも使わないって人もいるね。
0250デフォルトの名無しさん2012/04/28(土) 17:00:14.50
×  C$
○  C#
0251デフォルトの名無しさん2012/04/28(土) 17:03:22.49
ところでC++のベテランさんは得意のC++で何ができるんですか?
0252デフォルトの名無しさん2012/04/28(土) 17:03:36.69
ハンガーwwww どう見てもブーメランだろwwww
■ このスレッドは過去ログ倉庫に格納されています