- PR -

javaプログラムの長さに制限はあるか

投稿者投稿内容
ゴールデン
常連さん
会議室デビュー日: 2004/08/22
投稿数: 46
投稿日時: 2006-12-17 12:16
今までで一番長いプログラムを作りました。(印刷時17ページ)
コンパイルもできて、実行時エラーも出ないですが、表示されないので、どこかでおかしい部分があるだろうと探し回りました。
つきつめていったら、プログラムの長さ(前に書いてあるメソッドは動き、後ろにあるメソッドは動かないので、メソッドの順序を変えたら、やはり前にあるメソッドは動き、後ろのは動かなくなる。変数でも同じ)以外に考えられないところまできました。どなたか教えていただけないでしょうか。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-12-17 12:22
「表示されない」「動かない」とは具体的にどういった症状でしょうか?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-12-17 12:29
プログラムの長さに起因するものであれば、コンパイルエラーなり実行時エラーが出る
はずです。正直言ってそれだけ長いプログラム(というのは何が単位でしょう? メソッド?
クラス?)をコーディングする根性には敬服しますが、まずはわかりやすくするために
プログラムを分割してみてはいかがでしょうか。
ゴールデン
常連さん
会議室デビュー日: 2004/08/22
投稿数: 46
投稿日時: 2006-12-17 12:30
変数での場合を書きます。
フィールド
Image a
Image b
……
public void paint(Graphics g){
g.drawImage(b,0,0,this);
}
は、bの画像が表示されないのに、

フィールド
Image b
Image a
……
public void paint(Graphics g){
g.drawImage(b,0,0,this);
}
は、bの画像が表示される。
というものです。よろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-12-17 12:59
UK さんが仰るとおり、VM に問題がない限り、コンパイルできたコードは正常に動作するはずです。
たとえば try-catch ブロック内のバイトコードが 32k を超えた場合とかコンパイルエラーが出た気がします(ちょっとあやふや)。

変数は基本的に上から下という順序で初期化されますので、定義する順序によっては動作が変わる可能性はありますね。
提示されている例では宣言時に初期化している様子はないので動作にかわりはないはずです。
セミコロンがなくそのままではコンパイルできないコードなので、初期化部分など省略してあるんですよね?
省略されているどこかに原因があるものと考えられます。

まず、プログラムの長さの問題なのか、変数の定義順序の問題なのか切り分けてはいかがでしょうか。
問題が発生する一番シンプルなコードを作ってみるのが良いと思います。

また、一つのクラスに膨大な量のコードが書かれている場合、VM 側に問題がなくても、人間側の理解力の制限に引っかかってしまう可能性があります。
人間側の理解力の制限は実装によって異なりますが、多くの処理系では一クラス500〜1000行を超えた当たりから動作が不安定になります。

[ メッセージ編集済み 編集者: インギ 編集日時 2006-12-17 13:02 ]
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-12-17 13:09
引用:

ゴールデンさんの書き込み (2006-12-17 12:30) より:
変数での場合を書きます。
フィールド
Image a
Image b
……
public void paint(Graphics g){
g.drawImage(b,0,0,this);
}
は、bの画像が表示されないのに、


実行時に例外が発生しているかどうかは、ちゃんと確認されているでしょうか?
たぶん、実行時に b に関連する個所で OutOfMemoryError や NullPointerException が出ているのではないかと推測します。

引用:

インギさんの書き込み (2006-12-17 12:59) より:
人間側の理解力の制限は実装によって異なりますが、多くの処理系では一クラス500〜1000行を超えた当たりから動作が不安定になります。




--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
ゴールデン
常連さん
会議室デビュー日: 2004/08/22
投稿数: 46
投稿日時: 2006-12-17 13:31
ご返答ありがとうございます。
セミコロンは勿論ついています。実行時エラーは全く発生していません。
なので、本当に不思議で、今までこのようなことはなく、うまく実行されない時は必ずコードにミスがありました。
ですが今回は全く不思議なのです。
次の手段として、別クラスを作成し、実行プログラムを短くしてみようと思います。
またアドバイスをいただけたら有難いです。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-12-17 17:06
クラスのフィールドの初期化がコードの定義順だったと思いますので
フィールドになんらかの初期値を入れているようなケースでは
フィールドの宣言順によって挙動が変わることがあったと思いますが…。

違うネタのような気もしますね。
コンパイラは何を使っていますか?

スキルアップ/キャリアアップ(JOB@IT)