【初心者】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あたりで。
0232デフォルトの名無しさん
2006/11/26(日) 14:39:330233デフォルトの名無しさん
2006/11/26(日) 14:44:14ついでに内部クラスHogeを使う方法はこれまずいね。
こうすべきか。
public void test() {
int j = 0;
class Hoge implements Runnable {
private int k;
Hoge(int k) { this.k = k; }
public void run() { jProgressBar.setValue(k); }
}
for (int i = 0; i <= 10000000; i++) {
j++;
if (j % 100000 == 0)
javax.swing.SwingUtilities.invokeLater(new Hoge(j));
}
}
>>232
SwingWorker?
0234ぴゅあ
2006/11/26(日) 15:49:18最近のチュートリアルにはSwingWorkerが出てきているみたいですけど
最新はまだ触ってないので代わったわけとか見れてないけど
触るならEventQueue#invokeLaterとかなのかなとも思えたりもするけど
深く追えてはないし(ついさっき例が出てきて触ってみてるだけだし)
今のところはまだ微妙な気もしていたりするけど…
0235ぴゅあ
2006/11/26(日) 16:01:42(5.0のソースコードで)その先のfirePropertyChangeメソッドで
イベントキューに溜めて処理してるんじゃないかと思ってて
JProgressBar#setValue自身がスレッドセーフかというのは
別途JProgressBar#setValueを扱う側で考えるのかな…
(SwingUtilities#invokeLaterを使うとかいうのではなく)
とか思ってたりしてますけど。。。
0236220
2006/11/26(日) 21:58:41>>222
>>223
レス有難うございます。
まず223の回答から
>> > javaランタイム入ってないのに
>> はどうやって確信を得たんだ?
プログラムの追加と削除からIBM-Java Runtime 32bit〜削除。
そしてOSはXP_SP2の為、Microsoft VMも無いこと確認。
222の回答
>>・実はJavaアプレットではなくflashだった。
Javaアプレットでした。
となると221の
アプレット起動時、javaのロゴが表示されて、
何かダウンロード中みたいだったのがJREのインストールだったのかな?
>> ・アプレット起動時にJREがインストールされたが、それに気づかなかった。
が正解な感じがします。
>>221
>>222
>>223
ありがとうございました。
0237202
2006/11/27(月) 00:11:33イベントディスパッチスレッドはシングルスレッドだから固まるんですね。
(知ったように書いていますが実はまだ危ういです)
それだから actionPerformed(ActionEvent); でスレッドを作って test() をよびだすんだと
今やっと分かりました。(スレッド越しと言うのは、一つのスレッド実行中に新しい別の
スレッドを作ることを指すのでしょうか?)
SwingUtilities.invokeLater(...); が必要か、な議論はルールだから守らなきゃくらいしか
自分には分かりませんでしたが、Runnable を実装したクラスをイベントディスパッチ
スレッドに渡して(安全に?)スレッドを起こしてもらうためのものなんですかね?
でも、とりあえず使い方は分かりました。無事動きましたしほんとに助かりました。
また、余計な話ですが、内部クラスからローカル変数を参照するのに final が必要でも、
イスタンスフィールドならそのまま参照できるのを知って自分の素人さも痛感しました。
なぜそうなるのか、また自分で調べてみます。そして書き方もいろいろあるのが面白くて
楽しかった。深い人に教えてもらえて嬉しかったです。余裕ができたら SwingWorker も
知りたいですが、208さんが言った Swing 本も近々探して早く勉強したいです。
ありがとうございました。
0238デフォルトの名無しさん
2006/11/27(月) 00:19:56つ SwingWorker
0239デフォルトの名無しさん
2006/11/27(月) 02:12:40スレが殺伐としてまいりました・・・!!!タタタタ・・
0240デフォルトの名無しさん
2006/11/27(月) 11:25:04同じファイル内のクラスにアクセスするのと同じでしょうか?
sample1とsample2があってこの中でクラスを共有したいのですが、
参照しようとすると
Exception in thread "AWT-EventQueue-0
このようなエラーが出てきます。
0241デフォルトの名無しさん
2006/11/27(月) 11:28:570242デフォルトの名無しさん
2006/11/27(月) 12:05:500243デフォルトの名無しさん
2006/11/27(月) 12:48:10packageの概念についてもっと勉強した方が良い
0244デフォルトの名無しさん
2006/11/27(月) 18:29:29public static void main(String[] args){
double a0=3;
double d=4;
int number=100;
double a;
for(int i=0;i<number;i=i+1){
a=a0+d*i;
System.out.println(a);
}
System.out.println("END");
}
}
すみません。前にも似た感じの質問したんですけれど、
今度はこの等差数列の初めと終わりの解を3個づつ表示
したいんですが、配列を使ってどうしたらいいか教えて
くださいです。
ちなみに配列として扱ったものならば>>205で答えていただきましたが
ここに書き足すものが何か分からないです・・
0245デフォルトの名無しさん
2006/11/27(月) 19:34:14LinkedHashMap<Integer,LinkedHashMap<Integer,String>> table;
今、こんなのを作って使っているのですが・・・
0246デフォルトの名無しさん
2006/11/27(月) 20:21:35二次元テーブルならArrayList<ArrayList<String>> table;でいいんでないかい?
スパースなのならメモリ効率悪いが
0247デフォルトの名無しさん
2006/11/27(月) 21:33:20独自クラス書いた方がよくないか?
縦で抽出したり、横で抽出したりするだろうから
>>246のArrayList入れ子を縦横と横縦で持つような。
0248デフォルトの名無しさん
2006/11/27(月) 22:18:12Person[] p = new Person[2];
p[0]=new Person("UDO","SUZUKI");
p[1]=new Person("TAKAAKI","ISHIBASHI");
/*略*/
}
class Person{
String first;
String second;
Person(String first,String second){
this.first = firtst;
this.second = second;
}
}
としたら
Temp.java:3: ']' がありません。
p[0]=new Person("UDO","SUZUKI");
^
Temp.java:3: <identifier> がありません。
p[0]=new Person("UDO","SUZUKI");
^
Temp.java:4: ']' がありません。
p[1]=new Person("TAKAAKI","ISHIBASHI");
^
Temp.java:4: <identifier> がありません。
p[1]=new Person("TAKAAKI","ISHIBASHI");
^
エラー 4 個
とエラーが出てしまうのですが何が原因か分からないです。。。
0249デフォルトの名無しさん
2006/11/27(月) 22:23:17FullnameクラスをTemp.javaファイルに保存しているのが敗因その1。
クラス名とファイル名は一致させること。
0250デフォルトの名無しさん
2006/11/27(月) 22:26:31すいません、直したやってみましたが駄目です。。
0251デフォルトの名無しさん
2006/11/27(月) 22:47:18p[1]=new Person("TAKAAKI","ISHIBASHI");
ここはメソッドの中じゃないとまずいんじゃないか
0252デフォルトの名無しさん
2006/11/27(月) 22:56:41解決しました!メソッドの中じゃないと駄目なんすですか。。知らなかったです。ありがとうございました!
0253デフォルトの名無しさん
2006/11/27(月) 22:59:43リナックスアカデミーは開講日が合わず断念。
(次は二月〜らしい)
一応初心者レベルは脱したつもりだからちょいとレベル高めの講座とかあるといいんだが。
0254デフォルトの名無しさん
2006/11/27(月) 23:21:51高いレベルを目指すならプログラム書いて独学でしょ。
今時、Javaの情報なんてググればいくらでもでてくるし。
というか、スクールでプログラム言語を勉強するという感覚が未だに分からんです。はい。
学術的にということであれば、大学の講座を受講するという手もあるかも。
Javaって言語に特化した授業なんてあるかしらんけど。
0255デフォルトの名無しさん
2006/11/27(月) 23:33:27http://suned.sun.co.jp/JPN/catalog/java.html
0256デフォルトの名無しさん
2006/11/27(月) 23:39:25クラスの中にstatic{}という構文があったんだけど
これって何ですか?
いつ実行されるんですかね?
static{
〜
〜
}
staticでググッてもstatic修飾子の話しかでてこないっす
0257デフォルトの名無しさん
2006/11/27(月) 23:44:49static イニシャライザ、ですね。
クラスのロード時に実行されます。
0258デフォルトの名無しさん
2006/11/27(月) 23:50:28うす。どうもっす。
0259デフォルトの名無しさん
2006/11/28(火) 00:00:54J2SDK1.4.13、JRE1.4.13 のlib およびjre\libの中には入っていませんでした。
知ってる方教えてください。
0260デフォルトの名無しさん
2006/11/28(火) 00:16:0811334567→1133あ4567
0261デフォルトの名無しさん
2006/11/28(火) 00:17:050262デフォルトの名無しさん
2006/11/28(火) 00:32:560263デフォルトの名無しさん
2006/11/28(火) 01:02:570264デフォルトの名無しさん
2006/11/28(火) 01:05:51new StringBuilder("11334567").insert(4,"あ").toString()
0265260
2006/11/28(火) 01:10:150266前スレ897
2006/11/28(火) 01:53:401週間、課題の方をやってみましたがどうも掴めません。
質問があるのですが、アウトプット部分の
I: i=0
R2: a[0]=20
R1: min=20 a[0]=20
R: min=20
が、省略されるような形で組みなおせば良いのでしょうか?
0267デフォルトの名無しさん
2006/11/28(火) 05:12:590268デフォルトの名無しさん
2006/11/28(火) 05:19:420269デフォルトの名無しさん
2006/11/28(火) 05:38:590270デフォルトの名無しさん
2006/11/28(火) 05:43:33Math.random()/1000+0.002
0271デフォルトの名無しさん
2006/11/28(火) 05:46:30まずやってみてから、その動作が理解できない場合に、動作の詳細を添えて質問することを勧める。
0272ぴゅあ
2006/11/28(火) 07:33:28mainメソッド内のarrayMin()メソッドの呼び出しのところから
iの値と流れ(if(i>0)による分岐,arrayMin()の再帰呼び出し,return)に注目して
流れを書き出してみれば判ると思いますよ
(ロジックを目で追ってみる)
答えは"if(i>0)"をどうするかにあるんですけどね
適当にやったら"やったらできた"のようになりかねないので
ちゃんと目でロジックを追ってみるのがいいと思います
>組みなおせば良いのでしょうか?
組みなおす必要はないです
iの値とif文(iの値に対して)でどう分岐させるかだけ
答えが出れば、「それだけのことか」みたいなものかも知れませんけど
0273ぴゅあ
2006/11/28(火) 08:12:14あとarrayMin()メソッドの冒頭で
int n = i - 1;
とかして
>int min = arrayMin(a, i - 1);
はそのままでいいけど
"a[i - 1])"やif文の中のiはnに置き換えて考えてみるのもいいかも
単純なことに思えるかも知れないけど
iとnとは持つ意味が違うので
0274デフォルトの名無しさん
2006/11/28(火) 12:29:09そういやブロードキャストアドレスてどうすんだろう・・・
IPは、
for(Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces();e.hasMoreElements();){
NetworkInterface inf = e.nextElement();
System.out.println("Interface:"+inf.getDisplayName());
for(Enumeration<InetAddress> ips=inf.getInetAddresses();ips.hasMoreElements();){
InetAddress ads =ips.nextElement();
System.out.println("IP:"+ads.getHostAddress());
}
}
で取れそうだけど・・・・
0275デフォルトの名無しさん
2006/11/28(火) 19:03:53Mustangだといろいろ便利になってるんだが。
InterfaceAddress#getBroadcast()とか。
とりあえずブロードキャスト投げたかったら255.255.255.255を使うんじゃだめ?
0276276
2006/11/28(火) 20:12:55Javaだけの話じゃなくなってしまうかもしれませんが、現在以下のようなコードを書いています。
void getdata() {
byte data[] = new byte[16]
data[0] = (byte)0x00;
data[1] = (byte)0xFF;
data[2] = (byte)0xE2;
data[3] = (byte)(AUDIO_VOL[apu.volume1] & 0x3F);
data[4] = (byte)0x00;
data[5] = (byte)0xFF;
data[6] = (byte)0xE2;
data[7] = (byte)(0x40 | AUDIO_VOL[apu.volume2] & 0x3F);
data[8] = (byte)0x00;
data[9] = (byte)0xFF;
data[10] = (byte)0xE2;
data[11] = (byte)(0x80 | AUDIO_VOL[apu.volume3] & 0x3F);
data[12] = (byte)0x00;
data[13] = (byte)0xFF;
data[14] = (byte)0xE2;
data[15] = (byte)(0xC0 | AUDIO_VOL[apu.volume4] & 0x3F);
return data;
}
↓続き
0277276
2006/11/28(火) 20:13:464バイトで1項目なのですが、以下のように場合によって
if(apu.volume1_enable) {
data[0] = (byte)0x00;
data[1] = (byte)0xFF;
data[2] = (byte)0xE2;
data[3] = (byte)(AUDIO_VOL[apu.volume1] & 0x3F);
}
返し値に書き込むかどうかを決定させたいのです。
その場合、data[]は可変長になるのですが、
これを上手く書く事ができません。
ByteArrayOutputStream.toByteArrayでやってみたり、
書き込んだサイズをカウントしておいて、
カウントしたサイズの配列にコピーしたりやってみたのですが、
速度が遅くなってしまいました。どなたか上手い書き方を教えていただけないでしょうか。
0278デフォルトの名無しさん
2006/11/28(火) 20:26:37まず、条件判定を全部して何バイト長になるか決定しておくというのは?
そして、書き込みのときは、
インデックスを変数にして i++ とかにしておく。
必要のない4バイトは飛ばされる。
もっとセンスのいい方法ありそうだけど。
0279276
2006/11/28(火) 20:37:42int index = 0;
if(apu.volume1_enable) datasize += 4;
if(apu.volume2_enable) datasize += 4;
if(apu.volume3_enable) datasize += 4;
if(apu.volume4_enable) datasize += 4;
data[] = new byte[datasize];
if(apu.volume1_enable) {
data[index] = (byte)0x00;
data[index+1] = (byte)0xFF;
data[index+2] = (byte)0xE2;
data[index+3] = (byte)(AUDIO_VOL[apu.volume1] & 0x3F);
index += 4;
}
if(apu.volume2_enable) {
data[index] = (byte)0x00;
.
.
.
という風にも書いてみたのですが、
わざわざサイズのインデックスを用意するのと、
その値の操作がスマートに書けなかったのです・・・。
これ位しか方法がないのならこう書くしかないのでしょうが・・・。
0280デフォルトの名無しさん
2006/11/28(火) 21:07:04private int idx;
public AutoIndexer(int c){
idx=c;
}
public int moveIndex(){
return idx++;
}
}
みたいなのを使っている。
英語は苦手。
0281278
2006/11/28(火) 22:30:11if(apu.volume1_enable) {
data[index++] = (byte)0x00;
data[index++] = (byte)0xFF;
data[index++] = (byte)0xE2;
data[index++] = (byte)(AUDIO_VOL[apu.volume1] & 0x3F);
}
だと思った。
スピード追求してるみたいだからベタな書き方だけど。
サイズの計算なくすなら、まずは最大幅幅確保してからという手もありだ。
変数indexが最後には、サイズと一致しているハズだから
最後に
byte[] result = new byte[index];
System.arraycopy(data,0,result,0,index);
でいいんじゃない?
最大幅分のbyte配列のメモリは余計に使うけど。
0282デフォルトの名無しさん
2006/11/28(火) 23:52:39stop()を使っているのですが、時々ThreadDeathが発生して困っています。
0283デフォルトの名無しさん
2006/11/28(火) 23:54:15InterruptedExceptionを無視するスレッドだったら安全に止める術はない。
0284276
2006/11/29(水) 00:09:49ターゲットが携帯電話(iアプリ)なもので、クラスを使わずにやってみたいのです・・・。
>>281
有難うございます。
事前に容量計算+これでいくことにします。
随分恥ずかしいコードを書いてしまいました。
プログラミング自体初心者なのがバレバレですね。
>サイズの計算なくすなら、まずは最大幅幅確保してからという手もありだ。
>byte[] result = new byte[index];
>System.arraycopy(data,0,result,0,index);
試しにこれもやってみたのですが、
arraycopyで遅くなってしまうようです。
0285282
2006/11/29(水) 00:14:24・・・
TM tm = new TM();
tm.start();
・・・
if(x == 1){
//tm.stop();
tm.interrpt();
}
}
class TM extends Thread{
public void run(){
try{
Thread.sleep(100000);
a();
}catch(InterruptedException e){}
}
これで条件成立の場合、破棄されてa()が実行されることはないのでしょうか?
0286ぴゅあ
2006/11/29(水) 01:01:30まずThread#stop()はDeprecatedですよね
>sleep中のスレッドを
と条件を限定して言っているので問題ないでしょう
0287ぴゅあ
2006/11/29(水) 01:04:25(トレースするためのコードもちゃんと書いて)
0288デフォルトの名無しさん
2006/11/29(水) 21:17:46たとえば0x04 0x03 0x02 0x01というデータを32bitの0x01020304というint型変数にしたいのですが。
DataInputStreamとreadByte()使うのはわかるんですが・・・
0289デフォルトの名無しさん
2006/11/29(水) 21:19:08自分なりに考えた結果、sum=(a[0]+a[1]+a[2]+a[3]+a[4]); としたのですが、
このステートメントが明らかにおかしいと思われます。合計値を求めるには、どうすればいいのでしょうか?
import java.util.Scanner;
class CalcArray{
public static void main(String args[]){
float a[]=new float[5];
Scanner sc = new Scanner(System.in);
for(int i=0;i<5;i++){
System.out.print((i+1) + "つ目の入力値:");
a[i]=sc.nextFloat();
}
float max,min,sum,average;
max = a[0];
for(int i = 0;i<5;i++){
if(max<a[i]){
max = max + a[i];a[i] = max - a[i];max = max - a[i];
}
}
min = a[0];
for(int i = 0;i<5;i++){
if(min>a[i]){
min = min + a[i];a[i] = min - a[i];min = min - a[i];
}
}
sum=(a[0]+a[1]+a[2]+a[3]+a[4]);
average=(a[0]+a[1]+a[2]+a[3]+a[4])/5;
System.out.println("5つの入力値の最大値は"+max+"です。");
System.out.println("5つの入力値の最小値は"+min+"です。");
System.out.println("5つの入力値の合計は"+sum+"です。");
System.out.println("5つの入力値の平均は"+average+"です。");
}}
0290デフォルトの名無しさん
2006/11/29(水) 21:33:39max = max + a[i];a[i] = max - a[i];max = max - a[i];
と
min = min + a[i];a[i] = min - a[i];min = min - a[i];
でa[i]の値を変えているから
最大値最小値の求め方が異常だ
0291デフォルトの名無しさん
2006/11/29(水) 21:38:23この方法だと合計値は求められないんでしょうか?
0292デフォルトの名無しさん
2006/11/29(水) 21:47:13Integer.reverseBytes(int i)
0293デフォルトの名無しさん
2006/11/29(水) 21:50:10最大値最小値を求める部分をとっぱらっちゃえば求まる
sum=(a[0]+a[1]+a[2]+a[3]+a[4]);は明らかにおかしくない
最大値最小値の求め方について再考することを勧める
そんな複雑なことをする必要はないif(){...}の...に書く文はひとつでいいはず
0294デフォルトの名無しさん
2006/11/29(水) 21:54:35すいません。ほぼ独学で学んでいるもので、
他の最大値最小値の求め方を教えていただけないでしょうか?
0295デフォルトの名無しさん
2006/11/29(水) 21:57:22関数使え
0296デフォルトの名無しさん
2006/11/29(水) 21:57:57if(max<a[i]){
max = a[i];
}
if(min>a[i]){
min = a[i];
}
わざわざa[i]に代入して入力データを壊す意義が分からない
0297デフォルトの名無しさん
2006/11/29(水) 21:59:29更にこの先の計算に必要な配列の内容を書き換えるから
事故が起きる
0298デフォルトの名無しさん
2006/11/29(水) 22:00:12ありがとうございます。
今から書き直してみます。
0299デフォルトの名無しさん
2006/11/29(水) 22:01:04ありがとうございます。できました。
byte[]に読み込んでByteBuffer使う方法考えてたんですがこんなに簡単にできるんですね。
0300デフォルトの名無しさん
2006/11/29(水) 22:29:58StrutsでWebアプリケーションを作成しているのですが、
多重ログインをさせたくない場合はどのように処理をさせればいいのでしょうか?
ログアウト時必ずDBのフラグを倒すと言う処理をしたいのですが。
セッション解放時+タイムアウト時の処理方法を教えてください。
XMLにsession-timeout設定+HttpSessionListenerを実装するクラスの作成
までは何とかわかりましたが、その他のXMLの設定やstruts-configの設定、
アクションクラスと別にHttpSessionListenerを実装するクラスを作らないと
ダメでしょうか?
HttpSessionListenerを実装するクラスの呼び出し方法が判りません。
わかる方詳しく教えてください。また、参考になるサイトはありませんか?
宜しくお願い致します。
0301デフォルトの名無しさん
2006/11/29(水) 22:32:39111000
110011
っていう二次元配列があったら1の数にあわせて
2 1
3
2 2
っていうのを1次元配列に格納するプログラムを作りたいのですがどうすればいいのでしょう?
0302デフォルトの名無しさん
2006/11/29(水) 22:40:080303デフォルトの名無しさん
2006/11/29(水) 22:43:38これだけ見ると確かにそんな感じに見えますね(・ω・;)
どなたかわかる方ヨロです
0304デフォルトの名無しさん
2006/11/29(水) 22:47:14この中に入っている文字列の1文字目から8文字目や
18文字目から26文字目を抽出する関数を教えてください。
0305デフォルトの名無しさん
2006/11/29(水) 22:49:47サブストリング
0306デフォルトの名無しさん
2006/11/29(水) 22:52:21そう思って以下のコーディングを行ったのですが、
シンボルを解決できないといわれます。
シンボル: メソッド substr (int,int)
場所 : java.lang.String の クラス
line2 = line.substr(1,8);
-----------------
String line;
String line2;
//読み込みデータがなくなるまで読み込み
while ((line = br.readLine()) != null) {
//書き込むデータがなくなるまで書き込み
line2 = line.substr(1,8);
bw.write(line2);
bw.newLine();
0307デフォルトの名無しさん
2006/11/29(水) 22:55:160308デフォルトの名無しさん
2006/11/29(水) 22:56:12省略形は不可でしたか。すみません、ありがとうございます。
0309デフォルトの名無しさん
2006/11/29(水) 23:05:00フォームとかいちいち作るの面倒くさいんですけど
0310デフォルトの名無しさん
2006/11/29(水) 23:09:14C+何だそれは?C++のパクリ言語か?
0311デフォルトの名無しさん
2006/11/29(水) 23:10:36HttpSessionListenerは、web.xmlに登録して、サーブレットコンテナに呼んでもらうもの。
ただ、多重ログイン防止用途だとHttpSessionListenerは使えなかった。
まえやったときは、HttpSessionListener#sessionDestroyed()でログアウト処理をさせようとしたら、
既にセッションが無効になっていて、セッション内のユーザ識別子が取得できなかった。
ただ、Servlet APIには
> Notification that a session is about to be invalidated.
とあるので、コンテナのバグかもしれない(Tomcat 4.1.31)。俺の解釈違いか?
代わりに採った方法は、ユーザ識別子を持たせたオブジェクトに、HttpSessionBindingListenerを実装させるというもの。
このインタフェースを実装したオブジェクトは、セッションへの登録と破棄時にAPI規定のメソッドが呼ばれる。
セッション自体の破棄の時も呼ばれるので、その時にログアウト処理を行うようにした。
0312デフォルトの名無しさん
2006/11/29(水) 23:20:45改善策お願いします。
import java.util.Scanner;
class CalcArray1{
public static void main(String args[]){
float a[]=new float[5];
Scanner sc = new Scanner(System.in);
float max = 0,min = 0,sum,average;
for(int i=0;i<5;i++){
System.out.print((i+1) + "つ目の入力値:");
a[i]=sc.nextFloat();
if(max<a[i]){
max = a[i];
}
if(min>a[i]){
min = a[i];
}
}
sum=(a[0]+a[1]+a[2]+a[3]+a[4]);
average=(a[0]+a[1]+a[2]+a[3]+a[4])/5;
System.out.println("5つの入力値の最大値は"+max+"です。");
System.out.println("5つの入力値の最小値は"+min+"です。");
System.out.println("5つの入力値の合計は"+sum+"です。");
System.out.println("5つの入力値の平均は"+average+"です。");
}
}
0313デフォルトの名無しさん
2006/11/29(水) 23:25:44改行おかしいのは行数制限のせいだから気にするな
static int[][] num1(int[][] x){
int[][] ret=new int[x.length][(x[0].length+1)/2]; int[] num=new int[x.length]; int n=0;
for(int i=0;i<x.length;i++){ for(int j=0;j<x[0].length;j++){
if(x[i][j]==1) n++;
else if(n!=0){
ret[i][num[i]]=n;
num[i]++;
n=0; } }
if(n!=0){ ret[i][num[i]]=n; num[i]++; n=0; }
int[] a=new int[num[i]];
for(int j=0;j<num[i];j++) a[j]=ret[i][j];
ret[i]=a; }
return ret; }
0314デフォルトの名無しさん
2006/11/29(水) 23:29:05maxとminにa[0]を入れるのが一番楽
0315デフォルトの名無しさん
2006/11/29(水) 23:30:41�d おかげさまで宿題できました
0316デフォルトの名無しさん
2006/11/29(水) 23:59:50Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
ex out of range: -39
at java.lang.String.substring(Unknown Source)
at DeleteCheck.main(DeleteCheck.java:29)
--------------------
String line;
String line2;
//読み込みデータがなくなるまで読み込み
while ((line = br.readLine()) != null) {
//書き込むデータがなくなるまで書き込み
int len = line.length();
System.out.println("文字列sの長さは " + len + " です。");
System.out.println(line);
if ( len > 49){
line2 = (line.substring(1,8)+line.substring(40,1));
bw.write(line2);
bw.newLine();
}
0317デフォルトの名無しさん
2006/11/29(水) 23:59:54あー、初期化のとこまで見てなかったよ
float max = Float.MIN_VALUE,min = Float.MAX_VALUE,sum,average;
Scannerで配列にデータを読み込む前にmin,maxを初期化するのならこうかな
0318デフォルトの名無しさん
2006/11/30(木) 00:02:10test1,test2
と、途中でnullとした場合にエラー処理したいのですが、どうにも上手くできません。
while(check == 0){
InputStreamReader isrAdd = new InputStreamReader(System.in);//キーボードから追加内容読み込み用インスタンス
BufferedReader kbwordAdd = new BufferedReader(isrAdd);//キーボードから追加内容読み込み用インスタンス
String Addword = kbwordAdd.readLine();//キーボードから1行読み込み
File file = new File(filename); // CSVデータファイル
if(Addword.equals(null)){
System.out.println("正しく入力して下さい。");
check = 0;
}
else {
BufferedWriter Addwrite = new BufferedWriter(new FileWriter(filename, true)); // 追記モード
Addwrite.write(Addword);//キーボードからの内容を新たな行に追加書き込み
Addwrite.newLine();//新しい行に書き込み
Addwrite.close();
System.out.println("書き込みました。");
check = 1;
}
わかる方はお願いします。
0319デフォルトの名無しさん
2006/11/30(木) 00:02:581文字目のインデックス番号は0
配列と一緒で1から始まるのではない
0320デフォルトの名無しさん
2006/11/30(木) 00:05:59↓このようなことでしょうか?
これでも同じくエラーになります。
line2 = (line.substring(0,8)+line.substring(40,1));
すみません。教えてください。
0321317
2006/11/30(木) 00:06:41すまん。>>317は間違い
float max = -Float.MAX_VALUE,min = Float.MAX_VALUE,sum,average;
もしくは、 >>314のいうように、Scannerで読んだあとで
max = min = a[0];
0322デフォルトの名無しさん
2006/11/30(木) 00:06:42<table><tbody><tr><td>
<div style="background:#999;margin:10px 0px 0px 10px">
<div style="border:1px solid #000;background:#fff;position:relative;top:-7px;left:-7px;width:480px">
<table cellspacing="0" cellpadding="0"><tbody><tr><td>
<div style="padding:7px">
<a href="リンク先URL" target="_top"><img src="バナーのURL"
border="0" width="幅(ピクセル)" height="高さ(ピクセル)"></a></div>
</td><td style="border-left:1px solid #000;padding:7px;font-size:13px;color:#000;width:100%"
onclick="window.open('リンク先URL')" onmouseover="this.style.backgroundColor='#ffbbbb'"
onmouseout="this.style.backgroundColor='#fff'" align="center">
*ここにサイト名*
<table><tbody><tr><td style="font-size:13px;color:#000">
*ここに紹介*
</td></tr></tbody></table>
</td></tr></tbody></table></div></div>
</td></tr></tbody></table>
<!--* おわり *-->
このソースで右側のテーブルでマウスオーバーで色を変えるだけで
リンクはジャンプしないようにするにはどうしたらいいのでしょうか。
0323デフォルトの名無しさん
2006/11/30(木) 00:08:29これでエラーがなくなりました。
引数2が引数1からの桁数だと思っていたことが原因のようです。
line2 = (line.substring(0,8)+line.substring(40,41));
0324デフォルトの名無しさん
2006/11/30(木) 00:10:51substringの第2引数は長さではなく終了インデックス
注意点は、終了インデックスは取り出したい最後の文字ではなく、その次の文字のインデックス
0325デフォルトの名無しさん
2006/11/30(木) 00:12:50ありがとうございます。
0326デフォルトの名無しさん
2006/11/30(木) 00:13:19ありがとうございました。おかげ様でできました。
0327デフォルトの名無しさん
2006/11/30(木) 00:16:33javascript関係は板違いなので、こちらへどうぞ
http://pc8.2ch.net/hp/
0328デフォルトの名無しさん
2006/11/30(木) 00:17:28一応317さんのお陰でできましたが、
その方法でもやってみようと思います。
0331デフォルトの名無しさん
2006/11/30(木) 00:22:44気づいてると思うけど>>317でなく>>321の方ね
>>317の方はmaxを0で初期化するのとほとんど同じ結果になってしまう
■ このスレッドは過去ログ倉庫に格納されています