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

サイザー専用JAVA演習場

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2006/12/08(金) 18:50:35
サイザーにJAVAをやさしく教えてあげるスレです。
0809サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 18:03:45
>>808 それも言いたいことが全然分かりませんorz俺を置いてどんどん話を
進めないでください。
0810ネカマ由紀恵2007/01/04(木) 18:12:26
勝手に進まないアルよ。
サイザータソがどの辺りで
どの方向を向いているのか
ちょっと掴めなかったもので…。
0811デフォルトの名無しさん2007/01/04(木) 18:47:07
>importするとそのクラスのメソッドが使えるようになる。
おい、昨日↑は間違いって教えたろ。

>import 他人を短い名前で呼べる。「山田太郎」→「太郎」
この人いい例だしてくれてんじゃん、スルーすんなよ。
0812サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 18:53:10
>>811 スマソ。自分が疑問に思うまで聞いても実にならないΣ(´∀`;)
他人を短い名前で呼べる。「山田太郎」→「太郎」
この人いい例だしてくれてんじゃん
は単に分からんかった。どうもすみませんでした。_(。_。)_
0813デフォルトの名無しさん2007/01/04(木) 18:59:15
でもまあ、めげないで毎日やってるところは偉いと思うよ。
0814サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 19:17:11
プログラミング楽しいから、続くのよ
0815デフォルトの名無しさん2007/01/04(木) 19:20:27
extendsの話は難しいから、しばらく考えないでおいたら?
0816サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 19:24:15
疑問に思ったら解決するまで粘るくらい粘着質だから、
ってかextendsの疑問は解決した。もっと深い部分が有るかもだけど。
0817デフォルトの名無しさん2007/01/04(木) 19:35:08
どう理解したのかおしえてよ。
0818サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 19:38:07
適切なパックケージimportしないとクラスライブラリのクラスをextendsしても
コンパイルエラーになる。
0819サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 19:40:32
ちょい表現間違えたかも。適切なパッケージ.クラスに訂正
0820デフォルトの名無しさん2007/01/04(木) 19:45:49
まて、importとextendsの間には何の関係もないぞ。
import無しでもextendsは可能だし。
0821C++専2007/01/04(木) 19:45:54
じゃおまいのその>818の解答にツッコミいれとこうか

importしないでもextendsはできるんだぜ?
さあそれをどう説明するんだ?
0822サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 19:48:45
ちょいググっても分からないんだけど、
サブインタフェースはスーパーインターフェースのメソッドを引き継ぐ
有ったんだけどサブインタフェースにもスーパーインタフェースのメソッド
書かんといかんの?
0823サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 19:50:07
>>821 それは自分の作ったファイルをextendsしてるから
0824デフォルトの名無しさん2007/01/04(木) 19:51:04
>>822
いや、書かんでも勝手に引き継ぐ。
0825C++専2007/01/04(木) 19:52:23
>>823
自分の作ったファイルをextendsってなんだ?
お前の言ってること意味わかんねーよw
0826サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 19:53:08
書かないといけないのはimplementsしたクラスだけって事ね、なるほどー
0827サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 19:55:29
>>825 自分でCarクラスを作ったとしよう後日そのCarクラスが必要になって
extendsするの
0828デフォルトの名無しさん2007/01/04(木) 19:56:43
おまいがいつも言う、クラスライブラリってのは
普通はJavaの標準クラスライブラリと呼ぶ。

で、標準クラスライブラリだろうが自作のクラスだろうが
サードパーティ製のクラスライブラリだろうが、Javaは別に扱いを変えるわけではない。
0829C++専2007/01/04(木) 19:57:41
>>827
不正解。
既存の標準クラスもimportなしでいけます。
残念。

余計混乱するかもしれないが、
import自体はC++のnamespaceに近いかもしれんな。
0830サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 19:59:15
一応importでそのパッケージを参照しとこうかって意味じゃないの?
その後extendsするからシンボルエラーが出ない。
0831デフォルトの名無しさん2007/01/04(木) 20:02:25
>>830
ならばimportなしでそのパッケージに含まれてるクラスを呼び出すにはどうしたらいいんだろうね?
考えて解答よろ。
0832デフォルトの名無しさん2007/01/04(木) 20:02:53
>>826
インタフェースの話な。そう、それで大体あってる。

まあ細かいことを言うと、クラスがabstractで宣言されてる場合は
implementsしてるインタフェースを必ず実装するというわけでもないのだが。
0833サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:02:54
入力したりするのをextends無しでできるのは頻繁に使うから潜在的にそのクラスを
import.java.io.*;するだけで使えるって覚えてた。
0834サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:04:48
>>831 簡単、パッケージ.メソッドって呼び出すの
0835サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:06:40
パッケージ.クラスだっけか?忘れた。Σ(´∀`;)
0836サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:09:02
>>832 インターフェースはインスタンス作れないし、微妙な所ですよね。
0837サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:10:54
>>836 の発言無しΣ(´∀`;)
0838デフォルトの名無しさん2007/01/04(木) 20:21:19
>>834
じゃそんな感じでextendしたらどうなるんだろうか?

考えて解答よろ。
0839サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:23:04
コンパイルがエラーになると予想。か、考えたぞ
0840デフォルトの名無しさん2007/01/04(木) 20:24:37
じゃ、同じようにやって実際コンパイルしてみろ。

エラーがでるかどうか。
0841サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:28:38
パッケージは存在しませんエラーでた。合ってるか分からんけど。
0842デフォルトの名無しさん2007/01/04(木) 20:30:06
え?スタックトレース貼ってみてよ。
0843デフォルトの名無しさん2007/01/04(木) 20:30:08
今実行したコードをさらしてくれ。
コードを組んで実行したときはそういう癖をもういい加減つけてくれ。
0844サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:31:46
パッケージ io は存在しません。
io.BufferedReader br = new BufferedReader(new InputStreamReade
0845サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:32:50
ioはクラス名だっけΣ(´∀`;)
0846サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:34:55
すまそパッケージはjavaだったでもシンボルエラーだった。
0847サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:40:42
java.ioまでやるのね。つまりパッケージ.クラス.メソッドだ。
0848C++専2007/01/04(木) 20:40:50
>>846
俺の見てるBufferReaderクラスの説明の限り
java.ioがパッケージに見えるが違うのかね?
0849サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:42:17
パッケージの仕組みまだはっきりと分かって無いのよ;後回しでΣ(´∀`;)
0850デフォルトの名無しさん2007/01/04(木) 20:42:53
java.ioまで1セットでパッケージっつーわけだ。

つか、お前は何をやっているんだ?
パッケージ.クラスでやってみろっていってるのはextends対象のクラス、
つまりソースコード上ではextendsの直後に来るクラスのことなんじゃないのか?

ちなみに、パッケージ.クラス形式のクラス表記のことを「完全修飾名」とか「FQCN」とか
呼ぶんだぜ。
0851C++専2007/01/04(木) 20:43:45
後回しできねえんだよksg
そこがimport、extendsにかかわってくるんだよ。

オマエ自身がそのあたりが気になる粘着体質っていったんだろ。
自分の書き込みに責任持てよ。
0852デフォルトの名無しさん2007/01/04(木) 20:44:40
Javaのクラス名の先頭は(よっぽどのことが無い限り)大文字だ。
よって、ioがクラス名っていうのは(基本的には)ありえない。
0853デフォルトの名無しさん2007/01/04(木) 20:45:48
>>849
importとパッケージは切っても切れねー関係。
よってテキストでもimportの説明の前にパッケージの話出てきてるはずだが違うか?
0854サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:47:28
んじゃあioは小文字でおkなのは何故なんだぜ。特に大きい疑問ではないが・・・
0855デフォルトの名無しさん2007/01/04(木) 20:48:23
ioはクラスじゃねー、パッケージだと何度いったら。
0856サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:49:12
でもこれのお陰で1つ学べた。ty
0857サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:51:46
ああ。javaってディレクトリーの中のioってパッケージいう意味でしたか。
0858デフォルトの名無しさん2007/01/04(木) 20:55:55
ちがうちがう。
「java.io」っていう、ひとつのパッケージ名。
0859サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 20:59:28
なるほどー今まで扱ってきたクラスライブラリー殆どjava.----ってついてた気がする
0860デフォルトの名無しさん2007/01/04(木) 21:19:02
ではextendsの話に戻ってくれ。

コンパイルできたか?
0861サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 21:55:00
もち、っていうかソース書いて試してないから分かんないΣ(´∀`;)
0862サイザー 光太郎 ◆rbhHqF51rI 2007/01/04(木) 21:56:07
一応書いてみて確信えたんだったw
0863デフォルトの名無しさん2007/01/04(木) 23:38:04
何を書いて何を確信したんだろうか。。
0864サイザー 光太郎 ◆rbhHqF51rI 2007/01/05(金) 08:12:57
すまん、嘘ついてた。試しに
import java.applet.*;
import java.awt.*;
public class Ex3 extends Applet
{
public void paint(Graphics g)
{
g.drawLine(10,10,100,100);
}
}
でやってみたんだが extends無しでもコンパイル通った。なんでやろ?
謎Σ(´∀`;)
0865サイザー 光太郎 ◆rbhHqF51rI 2007/01/05(金) 08:55:19
同じクラス名が沢山有るからimportでパッケージを参照しといて、
クラスextendsするものとばかり思っていたのだが・・・orz
0866サイザー 光太郎 ◆rbhHqF51rI 2007/01/05(金) 11:01:29
やっぱり合ってるじゃん。でもjava.langパッケージで宣言されてるクラスは
import無しでも使えるのね
0867C++専2007/01/05(金) 11:13:09
>>866
おい、それはimportのところに記述があったはずだろ。
java.langパッケは自動参照されるって。

よく読み返せ。あと本よりネットのが情報がいいことが殆どだからな。

import java 入門でぐぐってこい。
0868サイザー 光太郎 ◆rbhHqF51rI 2007/01/05(金) 12:09:30
なるほどーimportなしでextendsするには、
extends パッケージ.クラスってしなきゃいけないのかー
でもいちいちパッケ名書くのめんどいからimport パッケ名.*;でいいや
0869JAVA使ってるSEPG ◆jG/Re6aTC. 2007/01/05(金) 13:05:59
ちなみに、
 パッケージ名.クラス名
って言う指定方法は、「完全修飾クラス名」とか、略して「FQCN」とかって呼ぶ。

実務でいろんなライブラリを使うことになると思うが、
ライブラリ用の設定ファイルなんかは完全修飾でクラス指定することが多い。

ほかにも、java.util.Dateとjava.sql.Dateを同じjavaファイル内で同時に使いたいとき、
クラス名が同じだからimportじゃコンパイルできない。
ゆえに完全修飾したりすることもある。

すぐに意識する内容じゃないと思うが、この際だから頭の片隅に入れとくと良いよ。


正月も頑張ってたんだな。えらいぞ。
0870C++専2007/01/05(金) 13:08:51
うむ、自分で調べるとちゃんとわかるだろ?
importしなくてもくパッケージにあるクラスのextendsは可能である。

ここにいきつくのに1日かかったが、ゆっくりガンガレ!
ただし、自分で調べる癖はまじで徐々につけていけよ。

言われて調べるのではなく、言われる前に調べることを心がけるべし
0871デフォルトの名無しさん2007/01/05(金) 19:09:33
JAVAの専門学校行ったら?

ハローワークで斡旋してくれるよ!
0872デフォルトの名無しさん2007/01/06(土) 00:44:10
奥行きがあると気持ち悪い
0873サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 10:44:44
class Sum implements Runnable
{
int num;
int sum;
public Sum()
{
num = 0;
sum = 0;
}
public synchronized void addMoney(int n)
{
num = n;

sum += num;
System.out.println(sum+"円");
}
public void run()
{
for(int i=0; i<3; i++)
{


addMoney(-100);
}
}
}

}

0874サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 10:45:14
class Gas extends Sum implements Runnable
{
public Gas()
{

}
public void run()
{
Sum num = new Sum();
for(int i=0; i<7; i++)
{
num.addMoney(2000);
}
}
0875サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 10:46:17
public class Ex7 extends Thread
{
public static void main(String args[])
{
Gas gas = new Gas();
Thread th = new Thread(gas);
th.start();
Sum sum = new Sum();
Thread tf = new Thread(sum);
tf.start();
}
}
0876サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 10:50:12
これ実行すると
C:\pg>java Ex7
2000円
4000円
6000円
8000円
10000円
12000円
14000円
-100円
-200円
-300円
って表示されるのです。
ちゃんと
2000・・・14000・・・13700って表示するんはどう直せば良いでしょうか?
アドバイス下さい。ちなみに3時間くらい悩んでます。
0877サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 10:55:33
複数のスレッドを起動させてsynchronizedの効果実感するために作ったのですが
思わぬ問題を発見したΣ(´∀`;)
0878サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 11:04:57
と、いうかちゃんとThread理解してるか思って作ってみたんですけどね。
0879デフォルトの名無しさん2007/01/06(土) 11:15:08
というかインスタンスとか一から勉強しなお・・・せ
0880サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 11:37:27
class Gas extends Sum implements Runnable
{
public Gas()
{

}
public void run()
{
Sum num = new Sum();
Thread th= new Thread(num);
for(int i=0; i<7; i++)
{
num.addMoney(2000);
}
th.start();
}

}
失礼、思いつきで2つ目のクラスこう直おしたら、思い通りの結果得られました。
0881デフォルトの名無しさん2007/01/06(土) 11:42:54
(゚д゚)            (゚д゚)
 (゚д゚)          (゚д゚)
  (゚д゚)        (゚д゚)
   (゚д゚)      (゚д゚)
    (゚д゚)    (゚д゚)
     (゚д゚)  (゚д゚)
      (゚д゚)(゚д゚)
       ( ゚д゚)
0882デフォルトの名無しさん2007/01/06(土) 11:43:47
正直ここまで有能な人工無能は初めて見た

驚いたよ
0883サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 11:51:36
>>822 皮肉ですね。ひどす;馬鹿だけど。
0884サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 11:56:20
アンカーミス>>882
0885デフォルトの名無しさん2007/01/06(土) 13:47:05
今回のはちょっと大変そうだな。。

>>876
そもそもやりたかったのは、↓こういう風に出力することか?
(これだとThread使う意味がないが。)
2000円
4000円
6000円
8000円
10000円
12000円
14000円
13900円
13800円
13700円

それとも、↓こんな感じか?
2000円
4000円
6000円
5900円 ←割り込み
7900円
9900円
9800円 ←割り込み
11800円
11700円 ←割り込み
13700円
0886サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 14:03:02
-500円
500円
gasクラスからATM利用されました。0
0円
1000円
gasクラスからATM利用されました。1
500円
1500円
gasクラスからATM利用されました。2
1000円
2000円
gasクラスからATM利用されました。3
1500円
2500円
gasクラスからATM利用されました。4
2000円
3000円
gasクラスからATM利用されました。5
2500円
3500円
gasクラスからATM利用されました。6
5500円
5400円
sumクラスからATM利用されました0
7400円
7300円
こういう感じでthreadの動きも見たかったのよ。
0887サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 14:03:47
用は前者
0888デフォルトの名無しさん2007/01/06(土) 14:51:14
要は前者はスレッドを使うと余計混乱する
0889サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 15:04:21
まぁ、自分の作ったソースでスレッド扱ってみたかっただけだから、
その扱ってる事象がスレッドに適してようが無かろうが、どっちでも良いのよ。
0890デフォルトの名無しさん2007/01/06(土) 15:09:55
>>889
混乱した頭で言われても
というより、言ってることとやってることの差が激しすぎてワロ
0891デフォルトの名無しさん2007/01/06(土) 15:38:15
class M{
  public void main(String s[]) throws Exception{
    Account acc=new Account();
    Client c1=new Client(acc,"Alice",2000);Client c2=new Client(acc,"Bob",-1000);
    c1.start();c2.start();
    c1.join();c2.join();
  }
}
class Account{
  private int m;
  public synchronized void add(int n){m+=n;}
  public synchronized int read(){return m;}
  public synchronized boolean isInbound(){return 0<=m && m<10000;}
}
class Client extends Thread{
  private Account b_;
  private String n_;
  private int a_;
  public Client(Account bank, String name, int add){b_=bank;n_=name;a_=add;}
  public void run(){
    try{
      for(;;){
        b_.add(a_);
        System.out.println(n_+":"+b_.read());
        if(!b_.isInbound()) break;
        Thread.sleep((a_>0?(a_):(-a_))/2);
      }
    }catch(Exception e){ e.printStackTrace(); }
    System.out.println(n_+":End");
  }
}
0892サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 15:53:46
>>891 結城 浩みたいなソース書くな!訳分からん;
0893デフォルトの名無しさん2007/01/06(土) 16:12:00
結城 浩みたいな、ってどういうの?
0894サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 16:26:49
java言語プログラミングレッスン上下巻の筆者、難解な例文ソースで初心者を
突き落とそうとするorz。入門参考書じゃねぇw
0895デフォルトの名無しさん2007/01/06(土) 16:31:36
>>892
普通に読みやすいよ。
ヒモとスポンサーの関係をプログラムで表している。
0896サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 16:36:21
for(;;)とかがわかんね。まあ良いや、聞いても分かんないだろうし。
0897サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 16:40:35
今の俺では知らない事が多すぎる。
0898デフォルトの名無しさん2007/01/06(土) 16:40:38
for(;;)は永久ループを表す。
for()の構文を覚えてるか?

for( はじめに一回だけやること ; ループを続ける条件 : ループが1回ごとにやる処理 )
だったよな。
0899デフォルトの名無しさん2007/01/06(土) 16:44:22
>>897
まてよお前がさっき晒したソースからして、>>891で知らないことは
それほど多くないはずだろ。

あと、>>891
× public void main(String s[]) throws Exception{
○ public static void main(String s[]) throws Exception{
な。
0900サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 16:45:02
for(変数の宣言&初期化;ループをやめる条件;ループを1回やるごとにやる処理
だろ。
0901デフォルトの名無しさん2007/01/06(土) 16:46:42
>>900
for(;1;) System.out.println("Loop");
0902デフォルトの名無しさん2007/01/06(土) 16:47:13
thx>899
0903デフォルトの名無しさん2007/01/06(土) 16:50:44
>>901
C++専?
Javaの場合for文のループ条件は厳密にbool値じゃなきゃなんねー。
よって
for(;true;) ;System.out.println("Loop");
0904サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 16:53:54
>>900ループをやめる条件じゃなくて続ける条件って言った方が正しいわ。
スマソ
0905デフォルトの名無しさん2007/01/06(土) 16:57:07
あ、まちがえた。
× for(;true;) ;System.out.println("Loop");
○ for(;true;) System.out.println("Loop");
だった。
0906サイザー 光太郎 ◆rbhHqF51rI 2007/01/06(土) 16:57:28
今月の25日にでるゲームソフトが延期してくれたよ。
javaに集中できて嬉しいような悲しいような・・・
0907デフォルトの名無しさん2007/01/06(土) 17:06:42
じゃあ今度はお前のソース見てやるよ。
まず、public class Ex7 extends Thread
の「extends Thread」
コレいらないだろ。
extendsが理解できてないと見える。
0908デフォルトの名無しさん2007/01/06(土) 17:08:03
>>873-880
付近のソースは不完全なので切り捨てた
どうせならコピペで動くソース貼り付けてくれ
レス数が900を超えています。1000を超えると表示できなくなるよ。