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

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
00011NGNG
JAVA初心者の方はこちらのスレで質問をしましょう。そして誰か教えてあげてください。

なお、ソースを貼るときには、半角空白が消える仕様のため、タブ1つを全角空白2つに
置換してから投稿しましょう。雑誌や宿題などの疑問を質問するときは出展を明記した
ほうが解決が早いです。

関連情報は >>2-10 あたりにあります。 (一部 dat落ちやHTML化待ち)


JavaScriptの質問はWeb製作板へどうぞ。
web制作管理
http://pc.2ch.net/hp/

パソコンの基本操作に関しては、PC初心者板や、各OS板などで質問しましょう。
パソコン初心者@2ch掲示板
http://pc.2ch.net/pcqa/

上級者の方で教える技術が無い方は下記スレでダベりましょう。
初心者無視! Java相談室 その9
http://pc.2ch.net/test/read.cgi/tech/1021555964/


基本的にsage進行でおねがいします。
0856Rina ◆tI333vNE NGNG
>>855
落ち着けw 何エラーとかそういう問題じゃない.
mainメソッドの中にxの宣言が無いだけじゃないかw

>>853
質問の意図がよく掴めないんだが, moveメソッドの中の
変数xを参照しようとしているのかな?

public class sample {
public void move(String[] args) {
// ここでxを定義している?
}
}

public class hoge {
public static void main(String[] args) {
sample w = new sample(args);
w.move(args);
System.out.println(x);
}
}

もしこんな感じならxは表示できないよ. 対処法はケースバイケースだけど
xをsampleクラスのフィールドにするといいんじゃないだろうか. 例えば
こんな感じ.

public class sample {
// TYPEはdoubleなりintなりクラスなりお好きなものを.
public TYPE x;
public void move(String[] args) {
// ここで x をゴニョゴニョする.
}
}

public class hoge {
public static void main(String[] args) {
sample w = new sample();
w.move(args);
System.out.println(w.x);
}
}

これならうまくいくと思う. 詳しく, あるいは正しく理解したいのなら,
変数のスコープについて本やサイトで勉強するといいと思う. 頑張ってね.
0857デフォルトの名無しさんNGNG
>>856
お前、この質問にちゃんと答えて偉いな。俺は「moveメソッド内で
できた変数x」の表現から x を return で返してるかと思ったが。
0858Rina ◆tI333vNE NGNG
>>857
褒めていただいて光栄です :) <って喜んでいいのだろうか?
確かにreturnしてる場合もあるんだよね. どっちなんだろう….
0859デフォルトの名無しさんNGNG
サブクラスがスーパークラスの引数有りのコンストラクタを呼び出すとき、
super ( ... );
と書きますが、このコンストラクタが例外を持っているので、
try {
super ( ... );
} catch ( ... ) {
...
}
としたいのですが、super(コンストラクタ)の呼び出しは、
先頭文でなければいけませんと言われてしまいます。
こういう場合、スーパークラスのコンストラクタの例外は、
とれないのでしょうか。なにかいい方法はないんでしょうか。
0860デフォルトの名無しさんNGNG
>>859
サブクラスのコンストラクタも例外投げる宣言するのでは。どうしても
というなら、(ぜんぜんきれいじゃないけど) サブクラスかつラッパーな
クラスにするとか。

public class A{
  public A() throws Exception{…}
  public int hoge(){…}
}

public class B extends A{
  private A a = null;
  public B(){
    try{
      a = new A();
    } catch(Exception ex){…}
  }
  public int hoge(){return a.hoge();}
}
0861デフォルトの名無しさんNGNG
public class Derived extends Base {
 public static void main(String[] args) throws Exception {
  new Derived();
 }
 public Derived() throws Exception {
  super();
 }
}
class Base {
 public Base() throws Exception {
  throw new Exception("例外発生!");
 }
}
ではどう?
コンストラクタで例外が発生したということは、そのインスタンスのすべての
メンバは不定値になるから、派生側でも同じ例外を投げるのが正しい。
catchしたところで意味のある処理をすることは不可能。
0862861NGNG
かぶった。
>サブクラスかつラッパーなクラスにするとか。
意味ないような・・・
0863Rina ◆tI333vNE NGNG
そういう場合は素直にthrowした方がいいと思う.

/** 実現したいであろうコンストラクタ */
public HogeClass(FugaClass arg) {
try {
super(arg);
} catch (XXXException e) {
// 例外処理
}
}

/** こんな風に書いたら? */
public HogeClass(FugaClass arg)
throws XXXException {
super(arg);
}

子クラス(この例だとHogeClassね)を使用する側でXXXExceptionに
ついての例外処理を行わないといけないけど, こっちの方がいいと思う.

どうしてもっていうんなら, 親クラスにしたいクラスのインスタンスを
子クラスに持たせて, 子クラスにラッパーを実装するって手があるが
あんましお勧めできない.
0864Rina ◆tI333vNE NGNG
かぶった…すまそ.
0865デフォルトの名無しさんNGNG
>>860>>861
返答ありがとうございます。

>>860
確かにそれなら例外とれますねー。
ただ、あんまりやりたくない方法ですね。

>>861
それだと、Derived ()は使う人に、
例外を通達できませんよねー。
0866860NGNG
だめだ、よく考えたら暗黙的にスーパークラスのコンストラクタが呼び
出されるので例外宣言しなきゃコンパイルできないんだ。布団の中に
入って気がついた。

>>865
例外の通達が目的なら素直に throw してください。
0867Rina ◆tI333vNE NGNG
>>862
意味あるんでない?
型が重要な場合とか.
0868デフォルトの名無しさんNGNG
>>863
いや、スーパークラスの引数有りのコンストラクタは、
例外が発生した場合、例外を使い手にスローしますが、
サブクラスでも同じように、使い手に例外をスローしたいのです。

もしかして、
public HogeClass(FugaClass arg) throws XXXException {
  super(arg);
}
だけで、例外を使い手にスローしてくれますか?
0869Rina ◆tI333vNE NGNG
>>866
ん?素直にthrowしてるじゃん. 私,何か勘違いしてる?
0870861NGNG
>それだと、Derived ()は使う人に、
>例外を通達できませんよねー。

ん?普通にできるけど。
例にExceptionを使ったのがまずかったか?
要するに基底クラスと同じ例外を投げる。Stream/Writer系のクラスは全部こうなってるはず。
0871デフォルトの名無しさんNGNG
>>869>>870
ちと、テストファイル作って実験してみます。

0872861NGNG
>public HogeClass(FugaClass arg) throws XXXException {
>  super(arg);
>}
>だけで、例外を使い手にスローしてくれますか?

861のコードはそのままコンパイル・実行できるから確かめてみるといい。
super(arg);
で例外が発生→catchされなかったら呼び出し元に例外が投げられる。
ごく普通の動作。
0873860NGNG
>>862
あまりにも糞な作りのクラス (他チーム製) をチーム全員に使わせる
ときやる方法だよ。API の仕様上は A でなければいけない、しかし
A クラスを素で使わせるとトラブル続出な予感、な時にチーム先発実装
部隊が後続部隊のためにやる方法。
0874Rina ◆tI333vNE NGNG
>>860さん, いない?
なんか自分が大きな勘違いをしてるような気がして不安なんだけど…(;_;).
0875860NGNG
ひそかに 860, 861, Rina ◆tI333vNE と質問者の 4 人で盛り上がってる罠
0876861NGNG
こんな時間になにやってんだか
0877Rina ◆tI333vNE NGNG
正直, 明日は休日だから徹夜の勢いな罠.
0878860NGNG
>>874
「素直に throw〜」は質問者に言ったんだが…
0879Rina ◆tI333vNE NGNG
>>860
ならいい. 何かものすごい勘違いしたままJavaをやり続けてたのかと思ったよ(´Д`)ノ
0880860NGNG
俺はもう寝る。
0881Rina ◆tI333vNE NGNG
>>860
お疲れさん
0882861NGNG
オヤスミ(´ー`)y-~~
0883shigeNGNG
Javaはこんなところにも使われてたっす。
http://feeds.directsex.com/res/kinky/res/liveindex1.asp
0884デフォルトの名無しさんNGNG
激厨房な質問で誠に申し訳ないが……

「System.out.printlnの出力結果って、どこに表示されるの?」

……いやぁ、デバッグ用にラベルを表示させたいだけなんですけどね(^^;
それとも、Exceptionが出るとSystem.out.printへの出力は消えちまうのだろうか?

もちろん環境により千差万別なのは判っているので、「まずはこの設定を見れ!」
という所から教えていただけると非常に助かります。何卒お助けを(拝)
0885デフォルトの名無しさんNGNG
>>884
java.lang.SystemのAPIドキュメント

やろうとしてることは多分
java.lang.System#setOut(PrintStream out)
0886デフォルトの名無しさんNGNG
Javaやりずれー!!
Cのがよっぽどマシ!
だれかJavaの本質をレビューしてくれ!
Cのがいいだろ?!
0887デフォルトの名無しさんNGNG
double[][]array = new double [2][3]
に入れた値を
11 12 13
21 22 23
という風に行列表示したいです。
コマンドプロンプトでは縦に一列に並んでしまいます。
どうすればいいでしょうか?
0888デフォルトの名無しさんNGNG
>>887
お前は多分
System.out.println()したんだろ?そうじゃなくて
System.out.print(array[i][j])しれ。
0889デフォルトの名無しさんNGNG
>>883
あほくさ〜
0890デフォルトの名無しさんNGNG
>>886
>>5
0891デフォルトの名無しさんNGNG
>>888 ありがとうございます。

class Hello {
public static void main(String args[])
{
double [][] array = new double [2][3];

for(int i=0;i<2;i++){
for(int j=0; j<3;j++){
array[i][j]=Math.random();
}
}

System.out.println(array[i][j]);
}
}

を試してみました。
System.out.println(array[i][j]);
iやjを解釈処理できませんとでました。どうしたらいいのでしょうか?
0892デフォルトの名無しさんNGNG
よくかんがえたら、出力のとこにもループがいりますね。
と思って、ループ書いてみたのですが、うまくいきません。
これはどこがおかしいのでしょうか?

class Hello {
public static void main(String args[])
{
double [][] array = new double [2][3];

for(int i=0;i<2;i++){
for(int j=0; j<3;j++){
array[i][j]=Math.random();
}
}
for(int i=0; i<2;i++){
for(int j=0; j<3; j++){
System.out.println(array);
}
}
}
}
0893デフォルトの名無しさんNGNG
>>892
System.out.println(array);
0894デフォルトの名無しさんNGNG
また間違えていました。さいごのところに[i][j]いれました。
でもやっぱり縦一列にでます。どうすればいいのでしょうか?

class Hello {
public static void main(String args[])
{
double [][] array = new double [2][3];

for(int i=0;i<2;i++){
for(int j=0; j<3;j++){
array[i][j]=Math.random();
}
}
for(int i=0; i<2;i++){
for(int j=0; j<3; j++){
System.out.println(array[i][j]);
}
}
}
}
0895デフォルトの名無しさんNGNG
>>893
ありがとうございます。もうひとつヒントください。
0896デフォルトの名無しさんNGNG
println
0897デフォルトの名無しさんNGNG
>>896
ふむ、なるほど、ありがとうございます。lnが余分でした。
やってみますた、今度は横一列に並びました。
縦2行横3列が希望なのですが、もう少しだけお願いします。
0898デフォルトの名無しさんNGNG
System.out.print(array[i][j]);
}
System.out.println();
}
}
}
0899デフォルトの名無しさんNGNG
for(i){
for(j){
print(array[i][j]);
}
println("");
}
0900デフォルトの名無しさんNGNG
いろいろやってみましたが、ちょっと面倒なようです。
見やすくするのはあきらめました。printlnprintの違い覚えました。どうもありがとう。

これを一回実行するごとに2×3の行列が得られるので、その結果を
一回ずつ、テキストファイルにしたいのですが、どうすればいいでしょうか?
class Hello {
public static void main(String args[])
{
double [][] array = new double [2][3];

for(int i=0;i<2;i++){
for(int j=0; j<3;j++){
array[i][j]=Math.random();
}
}
for(int i=0; i<2;i++){
for(int j=0; j<3; j++){
System.out.println(array[i][j]);
}
}
}
}

0901デフォルトの名無しさんNGNG
>>898 >>899 へたれな初心者を助けていただき、ありがとうございます!
早速試してみます。
0902デフォルトの名無しさんNGNG
うまく2行3列に表示できるようになりました!!
こうやって改行すればいいんですね。勉強になりますた。

class Hello {
public static void main(String args[])
{
double [][] array = new double [2][3];

for(int i=0;i<2;i++){
for(int j=0; j<3;j++){
array[i][j]=Math.random();
}
}
for(int i=0; i<2;i++){
for(int j=0; j<3; j++){
System.out.print(array[i][j]);
}
System.out.println();
}
}
}
0903Rina ◆tI333vNE NGNG
>>902
2とか3とか決めうちせずにarray.lengthを使うといい.
for(int i = 0 ; i < array.length ; i++) {
for(int j = 0 ; j < array[i].length ; j++) {
System.out.print(array[i][j]);
}
System.out.println();
}
あとでサイズが変わってもいいようにね.
0904デフォルトの名無しさんNGNG
>>903
どうもありがとうございます。すぐそうしたいと思います。
自分でもSystem.out.print(array[i][j]+",");
をいれて、さらに見やすくしました。コマンドプロンプト上でしか
結果を見れないのですが、やはりこの結果を一回ずつ>>902でした
質問のようにテキストファイルにしていくというのは難しいのでしょうか?
0905853NGNG
>>856
ありがとうございました
おかげでうまくいきました
分かりにくい質問に丁寧に答えてくれてありがとうございました
0906デフォルトの名無しさんNGNG
調子に乗って書き換えていたら、2行2列になってしまいました・・・。
なぜでしょうか?どなたか教えてください。

class Hello {
public static void main(String args[])
{
int s=2;
int t=3;
double [][] array = new double [s][t];

for(int i=0;i<array.length;i++){
for(int j=0; j<array.length;j++){
array[i][j]=Math.random();
}
}
for(int i=0; i<array.length;i++){
for(int j=0; j<array.length; j++){
System.out.print(array[i][j]+",");
}
System.out.println();
}
}
}
0907デフォルトの名無しさんNGNG
for(int j=0; j<array.length;j++){
0908デフォルトの名無しさんNGNG
>>907
ふみゅ、そうでし・・。array[i].lengthでした。なおりました。
ありがとうございました。
0909デフォルトの名無しさんNGNG
>>908
http://park.ruru.ne.jp/ando/work/who/html/index_p9.html#doc1_IO
0910デフォルトの名無しさんNGNG
>>909
ぐほっこれは難しいですね。ヘッダーにこーゆークラスを読み込んで
つかうのでしか?あまりプログラミングをわかってないので、
できそうにないです。まずDOSプロンプトから一回ごとに自動的に
カットアンドペーストする方法を探してみます。
0911デフォルトの名無しさんNGNG
>>910
なんでカットするの?
0912860NGNG
リダイレクト使えよ。

C:\> java Hello > hoge.txt
0913デフォルトの名無しさんNGNG
数字固定うざ
0914デフォルトの名無しさんNGNG
へんな奴を送り込むな。
http://pc3.2ch.net/test/read.cgi/win/1027492185/267
0915デフォルトの名無しさんNGNG
>DOSプロンプトから一回ごとに自動的に
>カットアンドペーストする方法

DOSプロンプトを作り直す勇者か?
0916デフォルトの名無しさんNGNG
>>912
ファイルを作るなよ わざわざ

>>913
教える気のない上級者は(略
0917デフォルトの名無しさんNGNG
>>910
秀丸使ってごらん
0918デフォルトの名無しさんNGNG
>>911
カットしなくてよかでした。>>912で教えてもらった方法で
乱数が行列でならんでいるテキストファイルを作成できました。
>>912
できました。こういう書き方あるんですね。
>>914 >>915
やっぱりできないですか?さっきの質問さらされるほど変ですか?
あのすみませんけど、>>912さんに教えてもらった方法
C:\> java Hello > hoge.txt
これを毎回するのはちょっとしんどいので1000回いっぺんにやる方法を
教えてもらえませんか?1000通りくらい乱数の行列あると便利なんです。
お願いします。
0919デフォルトの名無しさんNGNG
>>918
Helloを書き直せ
0920デフォルトの名無しさんNGNG
コピペすればあっという間です。

1行をコピペすると2行
2行をコピペすると4行
4行をコピペすると8行
...
512行をコピペすると1024行
0921デフォルトの名無しさんNGNG
>>916
教えてもらった義理があるので、あえて言わせてもらいますが、
僕はファイルを作る方法を質問しました。だから、ファイルを
作れて満足しています!
0922デフォルトの名無しさんNGNG

  フ  ァ  イ  ル  ま  ん  せ  ー  ー  ー  !  !  !
0923デフォルトの名無しさんNGNG
>>921
満足したのなら帰れ。
0924デフォルトの名無しさんNGNG
>>923
いじけるなよ
0925デフォルトの名無しさんNGNG
あの、すいませんが、C:\> java Hello > hoge.txt
を1000回繰り返す方法は茶化しているわけではなく本気で
質問しています。煽ったみたいですいません。
>>919
書き直すポイント教えてください。お願いします。
0926デフォルトの名無しさんNGNG
>>925
>>921
0927デフォルトの名無しさんNGNG
>>925
mainの中身をforで囲めばいいじゃん。
0928Rina ◆tI333vNE NGNG
dosってfor文ないの? bashなら
for i in $(seq 1 1000); do java Hello >> hoge.txt; done
でできるんだけど.
0929Rina ◆tI333vNE NGNG
>>928
自己レス. javaを1000回実行なんて現実的じゃないね. すまそ.
書き終わってから気がついたよ.
0930デフォルトの名無しさんNGNG
DOSのここですいませんでした。板違いなのでほかに行きます。
ありがとうございました。
>>927
ちょっと試してみます。
>>928
cygwin入れているので、試してみます。
0931Rina ◆tI333vNE NGNG
>>930はjavaを1000回実行してるのでしょうか…早とちりとはいえ,
悪いことしちゃったな.
0932デフォルトの名無しさんNGNG
冗長。
ここは保育園ですか?
0933デフォルトの名無しさんNGNG
>>932
そういうのやめてね。
0934デフォルトの名無しさんNGNG
>>931
勉強にはなるんじゃない?
0935RinaNGNG
>>932
セクハラはやめてください!
0936デフォルトの名無しさんNGNG
bash: Hello: command not found
でした。でもよく考えたら自分のにはLinux用のJAVAはいっていません・・・。
やはりDOS窓に関する質問のようです。ありがとうございます。
>>927
これだと、乱数の発生数が1000になってしまう
ことに気づきました、ここでやっと、6000個発生させて6個ずつ組
になるようにtxtを加工しても得られる結果は一緒だと気づきました。
こっちのほうが簡単そうです。ありがとうございました。
0937Rina ◆tI333vNE NGNG
>>935
トリップ付いてないから偽物ね. 誤解を招くといけないのでいちおう.
0938sageNGNG
>>931
C:\>javac Hello.java
C:\>java Hello
でいつも実行しています。

>for i in $(seq 1 1000); do java Hello >> hoge.txt; done

幸運にも?javaを1000回実行しなくてすんだのですが、
Helloを実行するときにjavaと書かなくてもいいのでしょうか?
#ずっとageで書いていてすいません。忘れていました。

0939デフォルトの名無しさんNGNG
すません。sage書くとこ間違えました。アホですね<自分
0940Rina ◆tI333vNE NGNG
>>986
doの後にjavaがあるよ.
>bash: Hello: command not found.
って出たのは, このjavaが抜けてたんでない?
0941デフォルトの名無しさんNGNG
http://js-web.cside.com/index.html
0942デフォルトの名無しさんNGNG
お節介固定はじきにウザくなること必至。
0943Rina ◆tI333vNE NGNG
>>942
すまん,気をつけます.
0944デフォルトの名無しさんNGNG
>>940
そうでし・・JAVA抜けていました。CYGWINはやはり使いこなせないので
あきらめました。
0945デフォルトの名無しさんNGNG
>>943
>>942はいろいろ教えてもらった僕ではありませんので、
たぶんさっきからハエみたいに僕をあおっていたヤシだと
思います。質問厨ですまそ>>>942
いろいろ教えてくれてありがとうございました。RINAさん。
0946デフォルトの名無しさんNGNG
今日はRINAさんで抜かせてください。
0947デフォルトの名無しさんNGNG
ネカマだろ
0948デフォルトの名無しさんNGNG
のんけだろ?
0949デフォルトの名無しさんNGNG

↓こいつ?

http://www7.big.or.jp/~mb2/bbs/up/img-box/img20020731154949.jpg
0950デフォルトの名無しさんNGNG
うpキボンヌ
0951デフォルトの名無しさんNGNG
>>949
ヘルメットで顔がはっきりわからないのだが?
0952デフォルトの名無しさんNGNG
こっちの方がはっきり見えますた。
ttp://www7.big.or.jp/~mb2/bbs/up/img-box/img20020731155051.jpg
0953デフォルトの名無しさんNGNG
>>949
だれか再うpして!!
0954949NGNG
sage進行しないとupしないよ。
0955デフォルトの名無しさんNGNG
半角?
レス数が950を超えています。1000を超えると書き込みができなくなります。