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

【初心者】Java質問・相談スレッド94【大歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/21(火) 06:11:54
過去ログ、関連スレッド、よくある質問とその回答、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/

これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

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

前スレッド
【初心者】Java質問・相談スレッド93【大歓迎】
http://pc8.2ch.net/test/read.cgi/tech/1149349035/

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。

JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc5.2ch.net/hp/

次スレは>>980あたりで。
0357デフォルトの名無しさん2006/11/30(木) 18:13:00
Exception inthread"main"java.lang.Error:
Do not use javax.swing.JFrame.setLatout() use
javax.swing.JFrame.getContentPane().setLayout() instead
at javax.swing.JFrame.createRootPaneException(JFrame.java:465)
at javax.swing.JFrame.setLayout(JFrame.java:531)
at s13.main(s13.java:17)
というエラーがでてしまいます。ソースコードを下に書くので
どうかご指導お願いします。
0358デフォルトの名無しさん2006/11/30(木) 18:14:28
import javax.swing.*;
import java.awt.*;

public class s13 {

public static void main(String[] args) {

// JFrameクラスのインスタンスを作成
JFrame frame = new JFrame(
"いろいろのせたアプリケーション");

// レイアウトマネージャ(FlowLayout)のインスタンスを作成
FlowLayout f_layout =
new FlowLayout(FlowLayout.CENTER, 5, 5);

// コンテナ(フレーム)にレイアウトをセット
frame.setLayout(f_layout);

// JButtonクラスのインスタンスを作成。
JButton button = new JButton("ボタンです。");
0359続き2006/11/30(木) 18:15:14
// JLabelクラスのインスタンスを作成。
JLabel label = new JLabel("ラベルです");

// JTextFieldクラスのインスタンスを作成
JTextField text =
new JTextField("テキストフィールドです。", 15);

// フレームにコンポーネントを追加
frame.getContentPane().add(button);
frame.getContentPane().add(label);
frame.getContentPane().add(text);

// フレーム(ウィンドウ)が閉じる際の処理を定義
frame.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);

// フレームのサイズを設定して表示
frame.setSize(250,100);
frame.setVisible(true);
}
}
0360デフォルトの名無しさん2006/11/30(木) 18:46:40
>>357
さっき別スレで質問してたやつだな。 俺がその回答者ですよ。
さっきの getContentPane() にはちゃんと意味がある。
JFrameにはいくつものレイヤがあり、そのどこに配置するか? を指定しなきゃいけない。
コンポーネントをContentPaneに配置するのだから、レイアウトもContentPaneに設定する必要がある。
frame.setLayout(f_layout);
を
frame.getContentPane().setLayout(f_layout);
だな。 詳細は↓
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/javax/swing/JFrame.html
http://www.javadrive.jp/tutorial/jframe/index5.html

ちなみにこれはJDK1.4まで。
1.5からは、frame.add() 等はデフォルトでContentPaneを指定するように変更された。
サンプルは1.5用で、おまいが使っているのは1.4系だから起きる例外。
0361デフォルトの名無しさん2006/11/30(木) 18:47:06
>>357-359
> Do not use javax.swing.JFrame.setLatout() use
> javax.swing.JFrame.getContentPane().setLayout() instead

このエラーメッセージの通りだぜ。
0362名無し2006/11/30(木) 18:53:14
スロットを作ってるんですけど画像がそろったときにどうすれば文字(アラート)がでるのか教えてください
多分あとfunction judgeのif文の関数の入れ方だけだと思うんですけど。。
var n=0;var image=new Array(4);function Setimage0(){for(i=0 ; i<4 ; i++){image[i]=new Image(200,150);image[i].src="image"+i+".jpg";}}
var m=0;var image=new Array(4);function Setimage1(){for(i=0 ; i<4 ; i++){image[i]=new Image(200,150);image[i].src="image"+i+".jpg";}}
var l=0;var image=new Array(4);function Setimage2(){for(i=0 ; i<4 ; i++){image[i]=new Image(200,150);image[i].src="image"+i+".jpg";}}
function Scroll0(){time0=setTimeout("Scroll0()",500);document.photo0.src=image[n].src;n++;if(n>=4)n=0;}
function Scroll1(){time1=setTimeout("Scroll1()",500);document.photo1.src=image[m].src;m++;if(m>=4)m=0;}
function Scroll2(){time2=setTimeout("Scroll2()",500);document.photo2.src=image[l].src;l++;if(l>=4)l=0;}
function Stop0(){clearTimeout(time0);}
function Stop1(){clearTimeout(time1);}
function Stop2(){clearTimeout(time2);}
function Judge()
{if(( == ) && ( == )){alert("当たり!");}}
03633522006/11/30(木) 18:53:59
URLに泣く泣く;JSESSIONID=をつけて動作させることにしました。
お騒がせして申し訳ありませんでした。

>>357
1.5系使えばとりあえずは動きますが
0364デフォルトの名無しさん2006/11/30(木) 19:09:41
整数の演算でオーバフローを起こすことって
できないんでしょうか?
とても不便です。
0365デフォルトの名無しさん2006/11/30(木) 19:19:05
Integer.MAX_VALUE + 1 すればオーバーフローが起きるけど、

そーゆー事じゃなくて?
03663642006/11/30(木) 19:27:17
>>365
オーバフローで例外が発生してほしいのです。
0367デフォルトの名無しさん2006/11/30(木) 19:38:37
無理。普通は BigInteger なり BigDecimal なりを使ってオーバーフローしないようにする。

ってか、オーバーフローで例外って何のために必要なんだろ?
0368デフォルトの名無しさん2006/11/30(木) 21:01:25
JAVAでテキストファイルを読み込んでラインソートを行いたいのですが、よいコマンドありましたら教えてください。

ソートキーは、頭から8桁と40桁目から10桁です。

イメージはこんな感じなんですが。。
sort dt(substring(0,8),substring(40,50));
0369デフォルトの名無しさん2006/11/30(木) 21:52:08
>>368
行単位でStringにして、配列に放り込んで、Arrays#sort(T[] a, Comparator<? super T> c)、
もしくは、Listに放り込んで、Collections#sort(List<T> list, Comparator<? super T> c)、
この場合、TはString、
で、コンパレータcを、頭から8桁と40桁目から10桁をどちらが第1キーでどちらが第2キーか知らないが、
自分の思うような順序付けを返すように実装する。
0370デフォルトの名無しさん2006/11/30(木) 22:08:15
>>369
ありがとうございます。
やってみます。
0371デフォルトの名無しさん2006/11/30(木) 22:22:34
>>356は一体何を意味するのだろう
0372デフォルトの名無しさん2006/11/30(木) 22:22:34
import java.util.*;
import java.io.*;
public class LineSort4 {
public static void main(String[] args) throws IOException {
ArrayList<String> list = new ArrayList<String>();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\target.txt"), "utf-8"));
try {
for (String line; (line = br.readLine()) != null; list.add(line));
} finally {
br.close();
}
Collections.sort(list, new LineComparator());
for (String s : list) System.out.println(s);
}
}
class LineComparator implements Comparator<String> {
public int compare(String s1, String s2) {
int r = s1.substring(0, 4).compareTo(s2.substring(0, 4));
return r != 0 ? r : s1.substring(10, 14).compareTo(s2.substring(10, 14));
}
}
作ってみた
0373デフォルトの名無しさん2006/11/30(木) 22:23:11
おならか?
0374デフォルトの名無しさん2006/11/30(木) 22:23:30
誤爆
0375デフォルトの名無しさん2006/11/30(木) 22:23:44
import java.util.*;
import java.io.*;
public class LineSort3 {
public static void main(String[] args) throws IOException {
ArrayList<Line> list = new ArrayList<Line>();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\target.txt"), "utf-8"));
try {
for (String line; (line = br.readLine()) != null; ) list.add(new Line(line));
} finally {
br.close();
}
Collections.sort(list, new LineComparator());
for (Line line : list) System.out.println(line.line);
}
}
class LineComparator implements Comparator<Line> {
public int compare(Line t1, Line t2) {
int r = t1.key1.compareTo(t2.key1);
return r != 0 ? r : t1.key2.compareTo(t2.key2);
}
}
class Line {
public String line;
public String key1;
public String key2;
public Line(String line) {
this.line = line;
this.key1 = line.substring(0, 4);
this.key2 = line.substring(10, 14);
}
}
0376・w・2006/11/30(木) 22:42:36
何方かjava言語の初級から中級あたりを学べる無料のサイトって知っている方いますか?
一様gooで検索してみたんですがどれだかわからなかったので情報ください;w;
03773532006/11/30(木) 22:43:58
>>354
>>355
どもっす。作表や印刷まで一体になってるのは使いやすそうですね。
縦横の棒グラフや折れ線グラフをパパっと出すには便利そう。
曲線やレーダーチャートが出来るかな……?
ちょっと調べてみますね。
0378デフォルトの名無しさん2006/11/30(木) 22:53:33
宿題丸投げスレからきました。

【 課題 】
マウスをドラッグ中に名前を1文字ずつ適当な間隔を置いてアプレットに表示する。
そしてボタンを用いて表示する文字を変更できるようにせよ。
名前の色変更x4、フォント変更x2、文字サイズ変更x2、表示スピード変更x2、計10個のボタンを作れ。
さらにキーボードからの入力を配列に格納し、キーボードからの文字入力があった際には
名前でなく入力文字を表示していくようpaint等を設定せよ。
なおenterキーの入力は無効、↑↓→←が押下された際には
マウスと同じように表示位置を変更させる仕様とする。

【 補足 】
完成させてコンパイラも通ったのですが、名前を1文字ずつ表示していく部分しか稼動しません。
ボタンもきちんと設定したつもりが反応せず…どこが悪いのでしょうか?

http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28822
0379デフォルトの名無しさん2006/11/30(木) 22:58:06
AメソッドはBメソッドを呼び出した後じゃないと呼び出してはいけない時
BメソッドをAメソッドを呼び出す前に呼び出したとします。

こういう状況を例外クラスを投げたいんですが,
既存クラスにこういう状況の時に投げる例外クラスってありますかね?
0380デフォルトの名無しさん2006/11/30(木) 23:01:49
>>379
java.lang.IllegalStateException とか。
0381デフォルトの名無しさん2006/11/30(木) 23:03:41
>>379
java.lang.IllegalStateExceptionとかいいんじゃね?
RuntimeExceptionのサブクラスだし、try catch書かなくていい。
0382デフォルトの名無しさん2006/11/30(木) 23:32:26
379です

IllegalStateExceptionに2票入りましたね。いただきです
どーもでした
0383ぴゅあ2006/12/01(金) 00:24:09
>>348
恐らくネットワーク(ドメイン)に参加させて使っていたものなんでしょう
WinMeは殆ど使わなかったし殆ど覚えてないけど"管理者権限"とかなったかどうかは・・・
(調べてる時間はないし…)

パスワードファイルの削除,ネットワーク設定の確認とかすればいいだろうと思うけど
聞くならそれはまずWin関係の方で聞いた方がいいと思います

そのまま何とかして使うよりは>>350も言ってるOSの再インストールの方がいいと思いますけど
0384tom2006/12/01(金) 00:27:29
サーブレットの勉強しようと思い、tomcatインストールしたんだが、よく分かりません。
まず、環境変数、pathの設定はしてlocalhost:8080を指定したらとりあえず、tomocatの
画面はでたんだが、そこから一体なにをすればいいのか・・・。
0385ぴゅあ2006/12/01(金) 00:29:36
>>349
ごめん
その更に先まで読んでなかった。。。
0386ぴゅあ2006/12/01(金) 00:44:55
>>384
>そこから一体なにをすればいいのか・・・。
とかいうことを勉強するためにインストールしたんじゃ…?
0387デフォルトの名無しさん2006/12/01(金) 00:45:30
数値計算の途中で、HashMapの入力をしたいのですが、Errorが出てしまいます。

import java.util.HashMap;
public class Test{
public static void main(String args[]){
HashMap<String, Double> hashmap = new HashMap<String, Double>();
double d;
d = ((Double)hashmap.put(String.valueOf("hoge"), Double.valueOf(1.0D))).doubleValue();
}
}

上のコードでコンパイルは出来るのですが、
実行中に以下のエラーメッセージが出てきます。

Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:6)

実際のプログラムは、HashMap.put()の前後にもっと式が続くのですが、
上のコードの何が悪いのか良く分かりません。
良ければ、何かご助言お願いしますm(__)m
Javaのversionは、1.5.0_09-b1です。
0388デフォルトの名無しさん2006/12/01(金) 00:54:25
>>387
原因はputの戻り値がnullだからだろう。
だがそのソースでputの戻り値をdに入れている意味がわからない。
なんかやりたいことと違ってないか。

参考。javadocより。
> 戻り値:
> 指定されたキーに関連した値。または、キーのマッピングがなかった場合は null。
> 戻り値 null は、HashMap が以前に null と指定されたキーを関連付けていたことを
> 示す場合もある
0389デフォルトの名無しさん2006/12/01(金) 01:22:52
>>387
hashmapに入れたものをすぐに取り出そうとしているのだろうが、
そのコードではそれは実現しない。

HashMap<String, Double> hashmap = new HashMap<String, Double>();
double d;
hashmap.put(String.valueOf("hoge"), Double.valueOf(1.0D));
d = hashmap.put(String.valueOf("hoge"), Double.valueOf(2.0D)).doubleValue();
System.out.println(d);

これで本当に2が表示されるかどうか確かめてみれば分かる。
0390デフォルトの名無しさん2006/12/01(金) 01:34:26
JavaでPictBridge扱えるAPIって無いですか?
自作しようにも、個人で規格書取り寄せようとすると5万円かかるらしくて。
0391デフォルトの名無しさん2006/12/01(金) 02:03:41
JDK 5.0 Update 9 with Java EE をダウンロードして、インストールしようとしたんですが、

「Java_ee_sdk-5-windowsが原因でMSVCRT.DLLにエラーが発生しました。
Java_ee_sdk-5-windowsは終了します。問題が解決しない場合はコンピュータを再起動してください。」

っていうメッセージが出てきて、インストールできませんでした・・・

MSVCRT.DLLっていうダイナミックリンクライブラリが何なのか分からなかったので、ググって見たんですが、
どうやら、Visual C で書かれたプログラムを実行するのに必要な、ランタイムライブラリらしいですね

WinMeでは、インストールできないんでしょうか?
0392デフォルトの名無しさん2006/12/01(金) 06:47:42
Javaでプログラムの2重起動をチェックする方法はあるのでしょうか?
あれば教えてください。
宜しくお願いします。
03933922006/12/01(金) 07:21:32
申し訳ありません。
ロックファイルを作成するということで解決することにしました。
0394デフォルトの名無しさん2006/12/01(金) 07:27:49
>WinMeでは、インストールできないんでしょうか?

その可能性は高い
03953872006/12/01(金) 10:40:43
>>388, >>389
HashMap.put()の戻り値は、代入前の値になるのですね。
プログラムは書き換えて動くようになりました。
有難うございます。
0396デフォルトの名無しさん2006/12/01(金) 11:27:37
すいません。質問です。

ファイルをコンパイルし、実行しようとすると

Exception in thread "main" java.lang NoSuchMethodError: main

と出るのですが、どういう意味でしょうか??
どなたか回答お願い致します。
0397デフォルトの名無しさん2006/12/01(金) 11:35:59
>>396
「そんなメソッドはないよ」と怒られてる
0398デフォルトの名無しさん2006/12/01(金) 12:07:04
http://www.wikiroom.com/java/?path,classpath

Q. javac Hello.javaでコンパイルはできたのですが、 java Helloを実行しようとすると
『Exception in thread "main" java.lang.NoSuchMethodError: main』と表示されて実行できません。

A. もし上記のようなエラーがでたときは、mainメソッドが正しく記述されていない可能性があります。
このエラーは、あなたが実行させようとした Hello クラス内に、
publicであり、かつstaticであり、かつ戻り値の型が voidであり、
かつ引数を1つだけとり、かつその唯一の引数の型がStringの配列であり、
かつ、名前が小文字4文字のmainであるようなメソッドが Java 実行環境によって発見できなかった場合に起ります。
以下に、正しい main メソッドを書くためのチェックリストを示します。
mainメソッドに、ちゃんとpublicはついていますか?
mainメソッドに、ちゃんとstaticはついていますか?
mainメソッドの戻り値の型は、ちゃんとvoidに、なっていますか?
mainメソッドの引数は、ちゃんとStringの配列になっていますか?
mainメソッドの名前は、ちゃんと小文字4文字のmainになっていますか?
正しいmainメソッドの例は以下の通りです。
 public static void main(String[] args) {
 }
正しいmainメソッドのもう一つの例。
 public static void main(String[] iAmVeryHappyToday) {
 }
03993962006/12/01(金) 14:18:22
>>397 >>398さん

わざわざお答え頂ありがとうございます。
これを参考にがんばります。
0400デフォルトの名無しさん2006/12/01(金) 23:03:19
二進数で
00100111011
11110101001
という数字がある場合ある範囲だけを選択して入れ替える又はNOTをしたいです。
00|100111|011→00|1101010|11
11|110101|001→11|1001110|01
としたい場合はどういう考え方をしたらいいですか?

用途としては2つの数を2点交叉や突然変異を起こす為に使いたいのです。

自分で思いついたのでは数字1個につき配列を与えて0か1を代入させる
byte[] b1 = {0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1};
byte[] b2 = {1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1};
for(int i=2; i<8; i++) {
temp = b1[i];
b1[i] = b2[i];
b2[i] = temp;
}

元の数を2進にするには上から1024,512,256...と引けたら1を入れる、引けないなら0。
2進→10進も逆でやるつもりです。
もしくはInteger.toBinaryString(int i);が使えるようなら有効に使いたいです。

これでは余りにもスマートとは言えない考え方です。
もっとスマートにできるやり方をご存知でしたらご教授いただきたいです。
よろしくお願いします。
04014002006/12/01(金) 23:20:34
実際には
for(int i=2; i<8; i++) {
temp = b1[i];
b1[i] = b2[i];
b2[i] = temp;
}
の2も8もランダム(Random.nextInt(int i)でもいい)で生成する予定です。
具体的には

int num1 = (int)(Math.random()*2048);
int num2 = (int)(Math.random()*2048);
do {
int min = (int)(Math.random()*9+1);
int max = (int)(Math.random()*9+1);
} while(min>max);
byte[] b1 = new byte[11];

if(num1-1024>0) {
byte[0]=1;
num1-=1024;
}
else byte[0] = 0;
(中略)
for(int i=min; i<max; i++) {
temp = b1[i];
b1[i] = b2[i];
b2[i] = temp;
}

のような感じです。
よろしくお願いします。
0402デフォルトの名無しさん2006/12/01(金) 23:25:33
>>394
MeでJAVAの開発環境っていいものありませんか?
JDKがインストールできないとなると・・・困った;
0403デフォルトの名無しさん2006/12/01(金) 23:30:44
>>400
範囲を選択してNOT がしたいなら
反転したい範囲に 1 が立ってる数との XOR をとればいい。
0404デフォルトの名無しさん2006/12/01(金) 23:33:51
java.util.BitSet使えるかも。

途中だけ入れ替えるには、
入れ替えたい桁を0、残したい桁を1にしたmask1
入れ替えたい桁を1、残したい桁を0にしたmask2
を用意。

例
b1 = 00|100111|011
b2 = 11|110101|001
mask1 = 11|000000|111
mask2 = 00|111111|000

でもって
c1 = (b1 & mask1) | (b2 & mask2)
c2 = (b2 & mask1) | (b1 & mask2)
かな。

BitSetのandNotとかorとか使ってもできるだろうし、
64(32)ビット以下ならlongやintを直接ビット演算してもいい。
0405デフォルトの名無しさん2006/12/01(金) 23:38:33
ツリーでノード名を取得するのはどうすればいいのでしょうか?
04064042006/12/01(金) 23:41:44
すいません。解決しました。
Objectクラスを継承しているのを忘れていました。
04074002006/12/01(金) 23:42:02
>>403
凄く参考になりますありがとうございます。
まだ良くわからないのでじっくり考えてみますね。

>>404
まだやっとJava構文がわかり始めたくらいなのでBitSetなんてクラス知りませんでした。
凄く参考になります。
BitSetの使用がどうなっているのか良くわかりませんが自分のやりたいことの場合だと
mask1、mask2の範囲を0<2047にしてやればランダムで入れ替える場所を
セットすることもできそうですね。
少しAPIとにらめっこしてきます。

二人とも本当にありがとうございました。
04084062006/12/01(金) 23:43:09
誤爆。。。
上のは405です。
0409デフォルトの名無しさん2006/12/01(金) 23:47:47
プログラムの一部なので宿題スレでなくここでお願いしたいと思います。
6行目でクラスSuperのインスタンスsuper[100]を作っているのですが、
identifierがないと言われコンパイルエラーが出てしまいます。
どのように改善したら良いのでしょうか?

http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28831
0410デフォルトの名無しさん2006/12/01(金) 23:50:20
superは予約語じゃん。じゃん。
0411デフォルトの名無しさん2006/12/01(金) 23:54:20
>>410
うは…全く知りませんでした^^;
新たに大量のエラーが出てきてしまいましたがとりあえずそこの関連部分のエラーは解消されました。
ありがとうございました。
0412デフォルトの名無しさん2006/12/01(金) 23:58:40
>>391
ホントにJava EE要るの?Java SEじゃなくて?
もしその違いが分からないなら、多分あなたにはJava EEは要らない。
それなら、「JDK 5.0 Update 10」ってのをダウンロードするといいよ。
リリースノート見ると、Java SE SDKならWindows Meに対応してる様子。
0413デフォルトの名無しさん2006/12/02(土) 00:00:14
てかJ2EEって参照実装でしょ?
JBoss使ってるときSunからEE落とした記憶が無い
0414デフォルトの名無しさん2006/12/02(土) 00:17:42
J2EEって言葉は標準仕様を指す言葉でしかない。

Java EE SDK は、参照実装でもあり、Sunの製品でもある、
Project Glassfishで作られたOSSライセンスのソフトウェア。
今はServlet2.5に対応しているコンテナが事実上Glassfishしか無いから、
Java EE5の機能をフルに使いたい場合は
SunのJava EE SDK(Glassfish)しか選択肢がないことになる。
Tomcat6やそれを含むJBossはまだベータ版だしね。

あ、OracleやSAPがJava EEフル対応の製品だしてたっけ?
0415デフォルトの名無しさん2006/12/02(土) 00:47:36
>>412
>Java SE SDKならWindows Meに対応してる

最初、JAVA SE をDLしたんですが、ダメだったんですよ
それで、EEならUpdate9なんで、Meに対応しているかもって、他のスレで言われたので
DLしたんです・・・でも、インストールできなくて
04164002006/12/02(土) 01:10:25
度々すみません。
BitSetの使い方がいまいちわかりません…。
BitSet bit = new BitSet(int nbits);←のnbits-1がインデックスの数とは
配列の数と考えたら言いのでしょうか?
初期値がfalseという事なので適当な値を入れてbit.set(int bitIndex);をしてtrueにしたつもりが
System.out.println(bit);しただけじゃ{}としか表示されませんでした。
表示のさせ方が間違ってるのかな?

あと違う話ですけど結局扱うのは0か1なのでbooleanでの配列の方がメモリは節約できますか?
もちろん軽く動作するって意味です。
それとも考えすぎかな?
0417tom2006/12/02(土) 01:16:45
tomcatをインストールしました。localhost:8080をブラウザから指定すると、tomcatの画面
にはなりました。次に、webappsディレクトリの下にentryというディレクトリを自分なりに
つくり、その下にWEB-INFディレクトリを作りました。そして、ブラウザから、localhost:8080/entry/
とやると、HTTPステータス404のエラー画面になってしまいます。どうしてでしょうか?

環境変数はCATALINA_HOMEでPATHは;%CATALINA_HOME%binとしました。
コンソールでもset pahコマンドでpathの確認もしました。

なにか間違ってるのですかね?
0418デフォルトの名無しさん2006/12/02(土) 01:21:42
一応boolean[]の高機能版と思えば間違いないよ。
BitSetの強力な使い方の一例に「フラグの立って(または降りている)インデックスを
イテレートする」というものがある。boolean[]と比べればわかるがかなり速度が違う。

メモリ云々についてはビット演算がどういう類のものか考えればわかるでしょ。
0419デフォルトの名無しさん2006/12/02(土) 01:22:50
>>417
ディレクトリ名と同じxmlを用意して、中にContextタグを書けば動くんじゃね。
0420デフォルトの名無しさん2006/12/02(土) 01:34:45
コンストラクタの引数は、最初にビットを何桁用意するかの指定です。
new BitSet(1024)なら、0〜1023(1024-1)桁は最初から使えます。
ただし、必要に応じて自動的に大きさは変わるのであまり気にしなくてよいです。
初期に指定しておけば、その範囲で使う限りは拡張処理の必要がないので、
性能的に得になるというだけです。

BitSetのtoString()は、{ 立ってる, ビットの, 桁, ... } という表記になります。
0桁めと2桁めが立っている4桁のBitSetなら { 0, 2 }
setしたならなんか出るはずですけど、出ませんか。
二進数のように表示するには、端から見ていって立ってれば1、立ってなければ
0を書き出すみたいに書く必要があると思います。
桁数はたぶん右から数えると思うので、逆順に出力しないといけないかも。

BitSetは内部的には、必要なビット数 ÷ 64の要素を持ったlong配列を持ってて
その該当ビットを立てたり下ろしたりしてるので、メモリ効率はbooleanと大差
ないと思います。
0421デフォルトの名無しさん2006/12/02(土) 01:35:23
>>419
コンテキストパスがディレクトリ名と同じ場合はコンテキスト設定ファイルは要らないはず。

>>417
WEB-INFの下にweb.xmlは置いた?
404は何が見つからないと言ってる?コンテキスト/アプリそのものが見つからない?
それともファイルが見つからないだけ?
Tomcatが正常に起動してるから、環境変数はOKだよ。
0422デフォルトの名無しさん2006/12/02(土) 01:42:55
BitSetは64ビット環境になれば更に性能が向上するんだろうな
0423デフォルトの名無しさん2006/12/02(土) 01:47:18
>>420
凄く丁寧に解説していただきとても感謝しております。
恐らくSystem.out.println(bit);だけで入力していたからだと思います。
bit.toString()としたら表示できるのでしょうね。

本当にありがとうございました。
0424デフォルトの名無しさん2006/12/02(土) 01:50:37
> その該当ビットを立てたり下ろしたりしてるので、メモリ効率はbooleanと大差
> ないと思います。

booleanは一人で4byte使ってる希ガス
0425デフォルトの名無しさん2006/12/02(土) 02:23:03
BitSetはゲームパッドを仮想するのに丁度よい。
0426デフォルトの名無しさん2006/12/02(土) 03:13:06
>>423
あれぇ、PrintStream#println(Object obj)は内部でString.valueOf(obj)を
使う、で、それはobj.toString()の結果を使うので明示的にtoString()を
付けても付けなくても出力は変わらないはずだが。
0427デフォルトの名無しさん2006/12/02(土) 03:48:13
教えてください。
DecimalFormat kingakuFormat new DecimalFormat("###,###,###");
Integer kingaku1,kingaku2;
kingaku1 = 12300;
kingaku2 = 100;
kingakuFormat.format(kingaku1);
kingakuFormat.format(kingaku2);
結果
12,300;
100;
これを、
12,300;
100;
のように桁を右に揃えたいのです。

0428デフォルトの名無しさん2006/12/02(土) 04:10:43
>>427
よくわかんないんだけど、コンソールに出力するときに右揃えなればいいのかな?
printf関数使ったらどうでしょ。
System.out.printf("%12s\n", kingakuFormat.format(kingaku1));
System.out.printf("%12s\n", kingakuFormat.format(kingaku2));
みたいな
0429デフォルトの名無しさん2006/12/02(土) 04:18:19
>>428さん
ありがとう
ございますます。
印刷をしたいので、左がはにスペースを加えて
文字列として取り出したいのです。
0430デフォルトの名無しさん2006/12/02(土) 04:26:24
>>429
ひどい混乱が見受けられる
0431デフォルトの名無しさん2006/12/02(土) 04:30:40
紙に印刷をしたいのです。
0432デフォルトの名無しさん2006/12/02(土) 04:34:30
000,012,300;
000,000,100;
はわかるのですが。
0ではなくスペースにしたいのです。
0433デフォルトの名無しさん2006/12/02(土) 04:35:33
>>432
> 000,012,300;
> 000,000,100;
これは↓になるのか?
   , 12,300;
   ,   ,100;
0434デフォルトの名無しさん2006/12/02(土) 04:45:47
>>433さん
にはなりません。
やりたい事は用紙の指定した位置に
右揃えで3桁ごとにカンマをつけて印刷をしたいのです。
0435デフォルトの名無しさん2006/12/02(土) 04:52:43

>>432
new DecimalFormat("000,000,000");
にしたときはなるよ、
0436デフォルトの名無しさん2006/12/02(土) 04:55:48
>>433
意図をくんでやれ。
0437デフォルトの名無しさん2006/12/02(土) 05:05:40
いやもう既に>>428で出来る
説明要求に正確に応えられないのはもう飽きたス

(´д`;)バージョンチガウ?javax.printとか使ってる?
       もう現状を包み隠さず申せ
0438デフォルトの名無しさん2006/12/02(土) 05:21:55
>>437さん
包み隠さず申し上げます。
印刷関係は
Jetbeeというオープンソースのライブラリを使っています。


g.drawString(kingakuFormat.format(kingaku1), 250, 316+ line2*12);

上のここに渡したいのです
kingakuFormat.format(kingaku1)
0439デフォルトの名無しさん2006/12/02(土) 06:38:20
>>438
String.format("%11s",kingakuFormat.format(kingaku1));
これで、だめかな?

0440デフォルトの名無しさん2006/12/02(土) 06:55:45
>>439さん
ありがとうございます。
それも、以前やってみたのですが、
正確に右詰ができなかったのです。
桁によって少し左にずれるみたいでした。
0441デフォルトの名無しさん2006/12/02(土) 06:59:20
つ http://72.5.124.55/j2se/1.3/ja/docs/ja/api/java/awt/FontMetrics.html
0442デフォルトの名無しさん2006/12/02(土) 06:59:46
>>440
そうかカンマと数字でフォントの大きさが違うのかな。
ゴメン。
0443デフォルトの名無しさん2006/12/02(土) 07:06:36
>>441さん
ありがとうございます。
C,VB,Delphiだと右詰めは簡単なのですが.....


0444デフォルトの名無しさん2006/12/02(土) 07:16:51
>>443
ですが、どうした?
適用不可なのかな?
0445デフォルトの名無しさん2006/12/02(土) 07:21:36
>>444さん
自分の勉強不足を痛感したのです。
javaのことですので必ずできると思います。
みなさんありがとうございます。
0446デフォルトの名無しさん2006/12/02(土) 07:44:37
>>445
右詰で表示したい文字列の左端 = 右詰で表示したい文字列の右端 - g.getFontMetrics().getStringBounds(右詰で表示したい文字列, g).getWidth()
でも
右詰で表示したい文字列の左端 = 右詰で表示したい文字列の右端 - g.getFontMetrics().stringWidth(右詰で表示したい文字列)
でもどうぞ
パディングなんて無駄なことはいらない
0447デフォルトの名無しさん2006/12/02(土) 07:50:23
>>446さん
ありがとうございます。
こんなところ迄今の自分ではたどり着ける訳が
ありませんでした。
0448デフォルトの名無しさん2006/12/02(土) 07:56:36
素直に>>438のようにdrawStringで表示するときに文字列の右端の座標で指定したい
って質問すればすぐ回答が得られたと思うよ
0449デフォルトの名無しさん2006/12/02(土) 08:25:38
>>448さん
このg.drawString(kingakuFormat.format(kingaku1), 250, 316+ line2*12);
は、Jetbeeでオーバライドされています。
ですから、同じ長さの文字列を渡したいのです。



g.drawString(kingakuFormat.format(kingaku1), 250, 316+ line2*12);
0450tom2006/12/02(土) 08:28:17
417です。
tomcatをインストールしました。localhost:8080をブラウザから指定すると、tomcatの画面
にはなりました。次に、webappsディレクトリの下にentryというディレクトリを自分なりに
つくり、その下にWEB-INFディレクトリを作りました。そして、ブラウザから、localhost:8080/entry/
とやると、HTTPステータス404のエラー画面になってしまいます。どうしてでしょうか?

環境変数はCATALINA_HOMEでPATHは;%CATALINA_HOME%binとしました。
コンソールでもset pahコマンドでpathの確認もしました。

なにか間違ってるのですかね?

>>421
エラー画面は、
Type: ステータスレポート メッセージ:/entry/ 説明 :The requested resource (/entry/) is not available.
と出てきています。

どうすればいいんですかね?
0451デフォルトの名無しさん2006/12/02(土) 08:34:54
drawStringがオーバーライドされてるの?
なら、オーバーライド後のメソッドの仕様が分からないことには何とも言えんが、
drawString(String,int,int)の第3引数がオーバーライド後も文字列の左端の座標の指定なら
与えるべき座標は計算できるのでは?
0452tom2006/12/02(土) 08:51:51
450です。
ちなみに、コマンドプロンプトから、cdコマンドを使いentryディレクトリ
まではいけます。
助けてください・・・・お願いします。
0453デフォルトの名無しさん2006/12/02(土) 08:59:25
>>451さん
今まで経験した言語では例えば12文字の長さの文字列
を左の印刷開始位置を指定すれば文字列に空白やカンマが
含まれていても正確に右詰されて印刷できたもですから、
javaでも同じかと思いました。
また、同じ12文字を渡すのに毎回座標を計算しなければならないのは、
なんとも腑に落ちないものでしたので、私の理解が足らないと思い込んで
いました。必ず同じ長さで文字列を整形できるクラスのメッソドが
あるのではないかと。


0454デフォルトの名無しさん2006/12/02(土) 09:12:03
>>451
GraphicsのdrawStringは抽象メソッドだからオーバーライドされているのは当然

>>453
単に等幅のフォントしか使ってなかっただけじゃないのか
0455デフォルトの名無しさん2006/12/02(土) 09:27:54
>>454さん
そのようですね。
javaで等幅のフォントを指定する事はできますでしょうか?


0456デフォルトの名無しさん2006/12/02(土) 09:43:33
455です。
javaで等幅のフォントを指定する事はできますでしょうか?
調べました。
Font theFont = new Font("MSP明朝 ", Font.PLAIN, 10)にしてありました。
もう少し調べてみます。
■ このスレッドは過去ログ倉庫に格納されています