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

★★ Java の宿題ここで答えます Part 53 ★★

■ このスレッドは過去ログ倉庫に格納されています
0001ザイン帝國軍帥・伯魔壬旭(小島露観)2005/08/10(水) 11:04:35

【Java宿題スレッド基本ルール・五箇条の御誓文】
1:問題文は自己省略せずに、直接全部貼り付けてください。
2:課題の「丸投げ」が最も好ましい提示法です。なるべく丸投げしてください。
3:数学問題は「○×法でせよ」だけでなく、その数式、前提条件も説明してください。
4:課題&宿題関連の質問はOKですが、それ以外の一般的な質問は禁止です。
5:もし回答プログラムがアップされたら、その返答と動作報告をお願いします。

【課題提示用テンプレ】
【 課題 】与えられた課題文をそのまま書きます 《必須》
【 用語 】数学用語、専門用語の意味、説明を書きます 《あれば必須》
【 期限 】提出期限、又は解答希望日を書きます
【 Ver  】希望するJavaバージョンがあれば書きます(1.5 とか 1.4以前とか)
【 補足 】課題について自分なりに補足する事、何か思う事があれば書きます。
       丸投げでない場合は、途中までのソースとその経過報告、
       質問点、疑問点を書きます(なるべく丸投げにしてください)

【回答プログラムの掲載場所】
Java質問スレWiki  http://www.wikiroom.com/java/
ソースポストネット http://sourcepost.sytes.net/
01531142005/09/19(月) 02:05:50
レスありがとうございますw
>>151
ImageIOについて、これから良く調べてみますw
>>152
初心者ですいませんm(._ _*)m
今分かるところ、OSはwindows。
ApacheなどのWebサーバはインストール済み。
JavaアプリケーションサーバはTomcat。
PCは研究室内のものを3台使用し、全てWebサーバはインストール済み。
同Tomcatを使用。同OS。
データベースはただの集まりで動くのかはまだわかりません。
後は今確認できないので、確認後報告致しますwすいませんw
01541142005/09/19(月) 02:07:57
>>151
スマソ。。
間違いです。
0155デフォルトの名無しさん2005/09/19(月) 07:37:50
>149
> データベースに接続する方法が分かりません。一応フォーム、データベースは
> もうできているので、後は他のパソコンから接続してデータを反映する事で
> 問題は解決できると思います。

これを読む限りでは同一PC内でAPL<->DBは接続できているように書いてあるけど
質問内容からすると出来ていない気がするなぁ
同一PC内で接続確認済->Javaの問題では無いだろうしね
0156デフォルトの名無しさん2005/09/19(月) 13:37:18
>145
http://www.wikiroom.com/java/index.php?%A5%BD%A1%BC%A5%B9%C5%BD%A4%EA%C9%D5%A4%B12#u63f7829
画像処理なんて初めてやったので、かなりアヤシイ。
wikiにも書いたけど、jpgに変換するロジックは相当強引なので、処理が遅いです。

神を待った方がいいかも。
0157デフォルトの名無しさん2005/09/19(月) 17:29:45
>>156
随分と複雑なものをかいたものだのう
わざわざこんなことするなんて
double[] mtrx = { rate, 0, 0, rate };
return new AffineTransformOp( new AffineTransform(mtrx), AffineTransformOp.TYPE_NEAREST_NEIGHBOR);

おれはこうしている
public static void generate(final File input, final File output,
final double magnification) {
  BufferedImage bufferedImage = null;
  try {
   bufferedImage = ImageIO.read(input);
   Graphics2D graphics2d = bufferedImage.createGraphics();
   AffineTransform scale = AffineTransform.getScaleInstance(magnification,
    magnification);
   graphics2d.drawImage(bufferedImage, scale, null);
   BufferedImage resultImage = bufferedImage.getSubimage(0, 0,
     (int) (bufferedImage.getWidth() * magnification),
     (int) (bufferedImage.getHeight() * magnification));
   ImageIO.write(resultImage, "jpeg", output);
  } catch (IOException e) {
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
01581142005/09/20(火) 01:36:28
調べた情報です。
[使用OS、ソフトなど]
OS: Windows XP Server (SP3)
JDK: Java 2 SDK Standard Edition v1.4.1_01 (インストール済み)
JSPコンテナ: Tomcat4.1.18 (インストール済み)
Webサーバ: Apache1.3.27  (インストール済み)
データベース: MySQL3.23.54 (インストール済み)
ブラウザ: Internet Explorer 6.0

[学内PCのネットワーク環境など]
ipアドレスはパソコンによって違う。 サブネットマスク、デフォルトゲートウェイは全て同じ。優先DNSサーバ、代替DNSサーバも同じ。
ローカルエリア接続。LANにプロキシサーバーを使用。ポート:8080。 ローカルアドレスにはプロキシサーバーを使用しないのチェックボックスに
チェックあり。
01591142005/09/20(火) 01:37:50
・・・・つづき
[注文フォームのソースコードの一部]
//データベース設定
String sv = "localhost"; //サーバ名
String db = "projecta"; //データベース名
String user = ""; //ユーザ名
String pass = ""; //パスワード
String encode = "Shift_JIS"; //文字コード
//データベースに接続する
Class.forName("org.gjt.mm.mysql.Driver");
String url = "jdbc:mysql://" + sv + "/" + db
+ "?user=" + user
+ "&password=" + pass
+ "&useUnicode=true&characterEncoding=" + encode;

Connection conn = DriverManager.getConnection(url);

この受注入力画面を次のURLをブラウザで表示
http://localhost:8080/examples/jsp/jutyunyuryoku.jsp

こんな感じです。
0160ザイン帝國軍帥・伯魔壬旭(小島露観)2005/09/20(火) 18:48:38
>>159
ここに、二つのクラスを貼っておきました。
http://www.wikiroom.com/java/index.php?%A5%BD%A1%BC%A5%B9%C5%BD%C9%D5%A4%B1

【使用法】
まずコンパイルしたら、hw111パッケージ(=フォルダ)のあるフォルダをカレントフォルダにして
rmic -classpath . hw111.HW111Impl でスタブクラスファイルを作成してください。
hw111パッケージのクラスファイルを、サーバーマシンとクライアントマシンの双方に置いてください。

※サーバー側のプログラム
>>159 の Connectionインスタンス conn を、引数にして、
HW111Impl server = new HW111Impl(conn);
としてください。これでデータベースサーバーの窓口が開かれます。
プログラムを終了する時は、server.close(); としてください。

※クライアント側のプログラム
サーバーマシンのローカルIPアドレスを引数にして、(ここでは「195.160.333.3」とする)
HW111 client = HW111Impl.getDatabaseInterface("195.160.333.3");
とすると、サーバーマシンのデータベースを操作できるオブジェクトが取得できます。

データベースの読み込み(Select文)をする時はList readDatabase(String sql) メソッドを使ってください。
引数sqlには、普通にselect文を記述してください("select * from datatable" など)。
返値の Listオブジェクトには、行を示すMapオブジェクトが取得された行の数だけ入ってます。
各Mapは一つの行を示します。map.get("列の名前")で、その列の値が取得できます。
TINYINT、SMALLINT、INTEGER、BIGINTの値は、Integerオブジェクトで入ってます。
CHAR、VARCHARの値は、Stringオブジェクトで入ってます。
DATEはDate、TIMEはTime、TIMESTAMPはTimestampオブジェクトで入ってます。

データベースへの書き込み(Insert、Update、Delete文)をする時は、引数sqlにその命令文を記述して
writeDatabase(String sql) メソッドを使ってください。
0161デフォルトの名無しさん2005/09/20(火) 20:35:42
>159
[注文フォームのソースコードの一部]
//データベース設定
String sv = "localhost"; //サーバ名
String db = "projecta"; //データベース名
String user = ""; //ユーザ名
String pass = ""; //パスワード
String encode = "Shift_JIS"; //文字コード
//データベースに接続する
Class.forName("org.gjt.mm.mysql.Driver");
String url = "jdbc:mysql://" + sv + "/" + db

↑でマシンが違うことで変わるところは1箇所しかないと思うのだが
同一マシンでも接続できていない?DNSが解決できない?IPアドレスを毎回自動で取得している?
0162デフォルトの名無しさん2005/09/20(火) 22:20:02
【期限】明日9/21 9:00
【課題】以下のDBアクセスプログラムをそれぞれDBopen, DBquery, DBcloseの
3つのメソッドに分けて記述しなさい。
public DBaccess {
Connection con; Statement stmt; ResultSet res;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("JDBCドライバOK");
con = DriverManager.getConnection("jdbc:oracle:thin:@sesvr101:1521:HOGE", "user", "pass");
System.out.println("DB接続OK");
stmt = con.createStatement();
System.out.println("StatementインタフェースOK");
res = stmt.executeQuery("SELECT * FROM 社員");
System.out.println("SQL文発行OK");
}
res.close();
stmt.close();
con.close();
System.out.println("正常終了");
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (SQLException e) {
e.printStackTrace();
}
}
お願いします m(_ _)m
01631142005/09/21(水) 00:37:52
>161
↑でマシンが違うことで変わるところは1箇所しかないと思うのだが
同一マシンでも接続できていない?

同一マシンでは接続できます。他のマシンからは接続できません。
他マシンを「localhost」から、このマシンのIPアドレスに変えればいいわけですよね??
IPアドレスは自動で取得していません。IPアドレスは分かります。
01641142005/09/21(水) 00:57:54
>>160
ここに、二つのクラスを貼っておきました。
http://www.wikiroom.com/java/index.php?%A5%BD%A1%BC%A5%B9%C5%BD%C9%D5%A4%B1

すみません。なぜか見れません。私のブラウザに問題があるからでしょうか?
0165デフォルトの名無しさん2005/09/21(水) 04:27:20
【 課題 】NTPサーバから時刻を取得する処理
【 用語 】数学用語、専門用語の意味、説明を書きます 《あれば必須》
【 期限 】1週間くらい
【 Ver  】1.4.2以前
【 補足 】PG暦TOTALで2年くらい
       だが・・・最近まともにプログラムらしきモノに触り始めました
0166デフォルトの名無しさん2005/09/21(水) 14:53:11
このプログラムはテキストファイルをJFilechooserを使い選択し、
さらにBufferReaderで1行づつ読み込むプログラムの1部です。
このプログラムはwhile文によって文字が存在するか、しないかを確認し
存在する場合に1行づつ文字列の読み込みを繰り返しているのですが、
ここでlineの中味は1行ずつ読み込む度に変更されています。
読み込んだ文字列を後で処理したいと思っているのでlineが変更される
前に文字配列の中にa[0]は1行目、a[1]は2行目のように順番に格納できませんか?
お願いします。

  int returnVal = fc.showOpenDialog(Fileso.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
    File file = fc.getSelectedFile();//選択したファイルを取得
String line = new String();
    try {//ファイルの読み込み
BufferedReader br = new BufferedReader (new FileReader(file));
line = br.readLine();
area.setText(line + '\n');
while(line != null){
line = br.readLine();

if (line == null) break;
area.append(line + '\n');
}

br.close();
0167デフォルトの名無しさん2005/09/21(水) 20:58:26
>163
でどうだった?
あとはport等ネットワークの問題だろうから
各種設定、導通テスト(こんな言葉であってるか?)等
やってみた結果も併せて書いてくれれば解るかも
(既にJAVAの域を越えてる気がするけど・・)

0168デフォルトの名無しさん2005/09/22(木) 03:08:29
public DBaccess {
Connection con; Statement stmt; ResultSet res;

public void DBopen() throws ClassNotFoundException,SQLException{
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("JDBCドライバOK");
con = DriverManager.getConnection("jdbc:oracle:thin:@sesvr101:1521:HOGE", "user", "pass");
System.out.println("DB接続OK");
stmt = con.createStatement();
System.out.println("StatementインタフェースOK");
}

public ResultSet DBquery()throws SQLException{
stmt = con.createStatement();
System.out.println("StatementインタフェースOK");
res = stmt.executeQuery("SELECT * FROM 社員");
System.out.println("SQL文発行OK");
res.close();
stmt.close();
return res;
}

}
public void DBclose() throws SQLException{
res.close();
stmt.close();
con.close();
System.out.println("正常終了");
}
}
といいかげんに答えてみるテスト。
0169デフォルトの名無しさん2005/09/22(木) 03:38:12
クラス宣言は?
0170デフォルトの名無しさん2005/09/22(木) 17:53:54
>>167
ムリでした
0171デフォルトの名無しさん2005/09/23(金) 19:55:27
今、次のようなクラスが定義されているとする。
package exercise;
public class Point{
  private int x,y;
  int getX(){ return x; }
  public int getY(){ return y;}
  public Point(int x0,int y0){
    x = x0;
    y = y0;
  }
}
【 課題1 】下のmoveXメソッドの定義はアクセス制限に違反しているか否か理由もつけて答えよ。
package exercise;
class Point3D extends Point{
  private int z;
  int getZ(){ return z;}
  void moveX(int dx){ x += dx;}
  Point3D(int x0,int y0){
    super(x0,y0);
  }
}
01721712005/09/23(金) 19:56:05
【 課題2 】下のクラス定義のなかでアクセス制限に違反しているメソッドの定義を答えよ。理由は?
package question;
import exercise.Point;
public class ColorPoint extends Point{
  private String color;
  public String getColor(){ return color; }
  public int xpos(){ return getX(); }
  public int ypos(){ return getY(); }
  public ColorPoint(int x0,int y0,String c){
    super(x0,y0);
    color = c;
  }
}
【 期限 】 9月25日まで
よろしくお願いします。
0173デフォルトの名無しさん2005/09/23(金) 21:29:02
>171
Ans. 違反している。
変数xがPoint内でprivateの可視性で定義されているから、
クラスが異なるPoint3Dからは見えない。
>172
Ans. xpos()
メソッドgetX()がPoint内でデフォルトの可視性で定義されているから、
パッケージが異なるColorPointからは見えない。

コンパイルすれば分かるものを。。
0174sage2005/09/26(月) 14:39:57
【 課題 】画像の読み込み及び標本化、量子化のプログラム
【 期限 】9月28日くらいまで
【 Ver  】できれば1.4でお願いします
まったくわからないのでよろしくお願いします
0175デフォルトの名無しさん2005/09/26(月) 15:59:01
量子化、標本化の用語を説明してくだされ
0176デフォルトの名無しさん2005/09/26(月) 18:05:17
コンピュータ上で扱う画像って普通は標本化されて、RGBそれぞれ量子化されてないか?
01771742005/09/26(月) 18:30:36
すみません、いい方がおかしかったもしれません。なんらかの画像を読み込んでその解像度を8bitにしたりといった、変換をしたいのですが・・・
0178デフォルトの名無しさん2005/09/26(月) 18:40:03
量子化レベルの変更をしたいのね
それは色?それとも表示領域?
01791742005/09/26(月) 20:24:15
すみませんが両方ともができるものでお願いします
0180デフォルトの名無しさん2005/09/27(火) 15:23:57
1:課題
public class Hanoi
{
public static void main(String args[])throws IOException
{
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
int disks=Integer.parseInt(input.readLine());
solveHanoi('A','B','C',disks);
System.out.println("/n/nEXECUTION TERMINATED");
}

public static void solveHanoi(char s, char t, char d, int n)
{
if(n!=0)
{
solveHanoi(s,d,t,n-1);
System.out.println("Move Disk" + n + " From Peg" + s + " to Peg " + d);
solveHanoi(t,s,d,n-1);
}
}
}
2:課題
↑のリカージョンが使われているハノイのタワー解決法のプログラムを、
ITERATIONを使ってより短くしなさい。
3:期限
10時間以内。。もしくはいつでもオッケー☆
4:ヴァージョン
特に無し
5:意見
。。。多分、PARAMETERが減ると思うのですが。。。
今自分でも解決しようとしてます。 他の場所にレスしてすみませんでした。
0181デフォルトの名無しさん2005/09/27(火) 22:58:06
【 課題 】外部データファイルから読み込んだ数値の個数と平均値を表示する。
【 期日 】本日(9/27) 23:59まで。
【 補足 】java歴一週間です。丸投げですがよろしくお願いします。
0182Mb2005/09/27(火) 23:15:03
>>181
import java.io.*;
public class mean {
  public static void main( String [] args) {
    int n = 0;
    double sum = 0.0;
    if (args.length == 0) System.exit(0);
    File file = new File(args[0]);
    try {
      BufferedReader bufRdr = new BufferedReader(new FileReader(file));
      String line;
      while ((line = bufRdr.readLine()) != null) {
        n += 1;
        sum += Double.parseDouble(line);
      }
      bufRdr.close();
    } catch (Exception e) {
      System.err.println(e.toString());
    }
    System.out.println("個数:" + n);
    System.out.println("平均値:" + (sum / n));
  }
}
0183デフォルトの名無しさん2005/09/27(火) 23:20:51
>>162
いま、そういうやり方なんだ
0184デフォルトの名無しさん2005/09/27(火) 23:32:01
祝 ウィルコムJAVA搭載
そこで宿題
MP3再生プレーヤーを作りなさい。
0185デフォルトの名無しさん2005/09/27(火) 23:44:40
え?マジで?
0186デフォルトの名無しさん2005/09/27(火) 23:50:00
test version

<html>
<HEAD><TITLE>>1-MP3</TITLE></HEAD>
<body>
<a href=">>1.mp3">ここをクリックすると再生します。</a>
</body>
0187デフォルトの名無しさん2005/09/27(火) 23:53:21
つーかウィルコムのJavaって勝ってサイトで配布できるの?
01881812005/09/28(水) 00:10:21
>>182
どうやらちゃんとできました。どうもありがとうございます。
0189デフォルトの名無しさん2005/09/28(水) 05:32:00
180に付けたしなんですが、
ハノイのタワーは三台あって、A,B,Cにわかれています。
タワーAには下の方から大きい数字の順番に置物があって、
その置物をすべてタワーCに移動させたいんです。 ただ少し問題をややこしく
するのは、移動をしている最中に一つ以上の置物を一度に運べないことと、
タワーAからタワーBとタワーCに置物が移動している際に小さい数字の
置物は、決してその数字より大きい数字の置物の下には置けないという事です。
後から付けたししてすみませんでした。
でも、みなさんハノイのタワーは過去に習われたのではないであろうかと
思いましたので、あえて詳しい解説はつけなかったのですが。。。
0190デフォルトの名無しさん2005/09/28(水) 10:51:21
数字文字列をInteger型に変換する為のコードで

Integer i = Integer.decode("02");
これはエラーにならないのに、

Integer i = Integer.decode("09");
はNumberFormatException例外が発生するのは何故でしょうか?

当方JAVA初心者です。
0191デフォルトの名無しさん2005/09/28(水) 12:37:39
>>190
ヒント:09 って何進数表記だ?
0192デフォルトの名無しさん2005/09/28(水) 12:41:36
10進数  ・・かな?
0193デフォルトの名無しさん2005/09/28(水) 13:06:42
>>190=192 かな?

つhttp://www.y-adagio.com/public/standards/tr_javalang/3.doc.htm#48282

10進数ではないよ。
01941902005/09/28(水) 13:11:17
>>191
お返事ありがとうございます
つまりDecodeは2進数、8進数、16進数を数値に変換するメソッド
ってことなんですかね?

因みに>>192違います^^;
0195デフォルトの名無しさん2005/09/28(水) 16:37:37
0x[0-9A-F][0-9A-F]*
0[0-7]*
[1-9][0-9]*
0196デフォルトの名無しさん2005/09/29(木) 01:38:53
結局16進数って事でおk?
0197デフォルトの名無しさん2005/09/29(木) 01:56:02
8進数だよ解らんのか
0198デフォルトの名無しさん2005/09/29(木) 02:15:46
わからん。もっと勉強する
0199デフォルトの名無しさん2005/09/29(木) 03:49:22
【 課題 】JAVAで年と月を入力したら、その月を表示するカレンダーを作る
【 用語 】JAVA、コマンドプロンプト上
【 期限 】9月29日 13:00分提出
【 Ver  】JAVA1,5
【 補足 】ツェラーの公式というのを使うらしいのですが、どうにもならずorz
      丸投げになります、がよろしくお願いします
02002002005/09/29(木) 08:09:14
>>199
http://www.wikiroom.com/java/index.php?ソース貼付け
http://www.wikiroom.com/java/index.php?%A5%BD%A1%BC%A5%B9%C5%BD%C9%D5%A4%B1 (同じ)
入力値エラーチェックは一切無しだ。どうなっても知らん。
0201Mb2005/09/29(木) 08:36:03
public class Zellar {
  public static void main( String[] args ) {
    if (args.length != 2) System.exit(0);
    int year = Integer.parseInt(args[0]);
    int month = Integer.parseInt(args[1]);
    boolean is_閏 =
        (((year % 4) == 0 ) && !((year % 100) == 0)) ||
         ((year % 400) == 0);
    int days;
    if ((month == 2)) {
      days = is_閏 ? 29 : 28;
    } else {
       if ((month == 4) || (month == 6) ||
         (month == 9) || (month == 11)) {
         days = 30;
       } else {
         days = 31;
       }
    }
    System.out.println(year + " 年 " + month + "月");
    for (int day = 1;day <= days;day += 1) {
      int 星期 =
          ( year + (year / 4) - (year / 100) + (year / 400) +
           ((13 * month + 8) / 5) + day ) % 7;
      if (星期 == 0) {
        System.out.println(day + "日(星期天)");
      } else {
        System.out.println(day + "日(星期" + 星期 + ")");
      }
    }
  }
}
02021992005/09/29(木) 10:20:32
ありがとうございましたorz
これでどうにかなりそうです
0203デフォルトの名無しさん2005/09/29(木) 13:24:16
>>198
"09"を8進数として処理しようとするけど、8進数の数字じゃないので例外が出る
ちなみにC/C++/Javaで"0"は8進数の"0"であって10進数の"0"ではない
0204デフォルトの名無しさん2005/09/29(木) 13:45:16
【 課題 】javaを使って画像処理技術の視覚化しなさい
 
【 用語 】なし
【 期限 】2005/9/30 午前10時
【 Ver  】指定なし
【 補足 】http://www.image.esys.tsukuba.ac.jp/javaimage/
      にあるようなものをつくりたいです.
      ここまで高度でなくてもいいので任意に画像を標本化して
      2値画像などにできるようにしたいです.
      丸投げになりますがおねがいします
0205デフォルトの名無しさん2005/09/29(木) 13:54:38
【 課題 】Javaを使って画像処理技術の視覚化をする(例:濃度変換,フィルタ処理等)
【 用語 】Java コマンドプロンプト上
【 期限 】9/30 15:00
【 Ver  】指定なし
【 補足 】アプレットのようなものを作ればいいと思ってるのですが・・・

0206短いからここにはるよ2005/09/29(木) 15:02:14
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.*;
import java.io.*;

import javax.imageio.ImageIO;
import javax.swing.*;

public class ImageFilterPane extends JPanel implements ActionListener {
public static void main(String[] args) throws IOException { //args[0] : FileName
//読み込む (ImageIO 使ってるので 1.4以降 でないと動きまへん)
FileInputStream in = new FileInputStream(args[0]);
BufferedImage img = ImageIO.read(in);
in.close();

//フレーム表示
JFrame f = new JFrame();
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane().add(new ImageFilterPane(img), BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
0207短いからここにはるよ2005/09/29(木) 15:02:23
private JComboBox choice;
private BufferedImage src;
private JLabel dest;

public ImageFilterPane(BufferedImage src) {
this.src = src;

choice = new JComboBox();
choice.addItem(new CurveFilter());
choice.addItem(new BWFilter());
choice.addItem(new XFilter()); //その他、新たに作って足せばよろしい
choice.addActionListener(this);

JPanel filters = new JPanel(new FlowLayout());
filters.add(choice);

dest = new JLabel(new ImageIcon(src));

setLayout(new BorderLayout());
add(new JLabel(new ImageIcon(src)), BorderLayout.NORTH);
add(filters, BorderLayout.CENTER);
add(dest, BorderLayout.SOUTH);
}

public void actionPerformed(ActionEvent ev) { //JComboBox の選択動作で呼ばれる
RGBImageFilter filter = (RGBImageFilter)choice.getSelectedItem();
Image img = createImage(new FilteredImageSource(src.getSource(), filter));
dest.setIcon(new ImageIcon(img));
}
0208短いからここにはるよ2005/09/29(木) 15:02:51
private class CurveFilter extends RGBImageFilter {
public String toString() {
return "コントラスト明瞭化"; //JComboBox が表示する
}

public int filterRGB(int x, int y, int rgb) {
//彩度のみをいじるため、RGB -> HSB 変換
int r = (rgb >> 16) & 0xff;
int g = (rgb >> 8) & 0xff;
int b = rgb & 0xff;
float[] hsb = Color.RGBtoHSB(r, g, b, null);
float s = hsb[1];

//3次式なトーンカーブを通す
if (s < 0.5) {
s = (float)Math.pow(s*2, 3)/2;
} else {
s = 1-(float)Math.pow((1-s)*2, 3)/2;
}

//RGB に戻す
return 0xff000000 | Color.HSBtoRGB(hsb[0], s, hsb[2]);
}
}
0209短いからここにはるよ2005/09/29(木) 15:03:31
private class BWFilter extends RGBImageFilter {
public String toString() {
return "2値化"; //JComboBox が表示する
}

public int filterRGB(int x, int y, int rgb) {
//rgb -> gray
int r = (rgb >> 16) & 0xff;
int g = (rgb >> 8) & 0xff;
int b = rgb & 0xff;
int gray = (int)( 0.298912 * r + 0.586611 * g + 0.114478 * b );
//閾値は 50% グレー
return (gray < 0x80 ? 0xff000000 : 0xffffffff);
}
}
0210短いからここにはるよ2005/09/29(木) 15:05:03
private class XFilter extends RGBImageFilter {
public String toString() { return "ぼかし"; }

public int filterRGB(int x, int y, int rgb) {
int c = 0, r = 0, g = 0, b = 0;
//他店を src から拾ってきて 5x5 の正方配列の平均
for (int dx=Math.max(0, x-4); dx<=Math.min(src.getWidth()-1, x+4); dx++) {
for (int dy=Math.max(0, y-4); dy<=Math.min(src.getHeight()-1, y+4); dy++) {
rgb = src.getRGB(dx, dy);
r += (rgb >> 16) & 0xff;
g += (rgb >> 8) & 0xff;
b += rgb & 0xff;
c++;
}
}
r /= c;
g /= c;
b /= c;
return 0xff000000 | (r << 16) | (g << 8) | b;
}
}

//その他 filterRGB メソッドを書けばいろいろできる
}

1.4 (つまりImageIO)が使ってまずいとすれば、
ぼかしをするには別の方法が必要だけどどないやろ? Ver 指定無しだから大丈夫かな?
0211デフォルトの名無しさん2005/09/29(木) 15:15:00
5x5 じゃないね
あといろいろ誤字とかあるけど動くは動くから気にしないでね
もっと一般的なフィルタアルゴリズムがあったら誰か適当に足してちょ
0212デフォルトの名無しさん2005/09/29(木) 15:34:20
>>211
ひとまずコンパイルはできましたがエラーがでて実行できません
実行の仕方を詳しくお願いします
あとVer1.4でした
0213デフォルトの名無しさん2005/09/29(木) 15:48:42
何てエラーが出たかコピペしてよ ○○Exception つー断片でもいいから

実行は
> java ImageFilterPane hoge.jpg
とか。カレントディレクトリに hoge.jpg があればいけるはず。
D:\hoge.jpg とかのフルパスでもいいよ
0214デフォルトの名無しさん2005/09/29(木) 16:02:46
>>211
実行できました
ありがとうございます
お手数おかけしました
0215デフォルトの名無しさん2005/09/29(木) 16:15:24
>>213
2つ目の2値化の部分なんですが、今の状態で2階調のような気がしますが
それをもう少し32階調16階調などにするためにはどこをどういう風にいじればいいのでしょうか?
0216デフォルトの名無しさん2005/09/29(木) 17:15:32
private class GrayFilter extends RGBImageFilter {
private int step;
public GrayFilter(int step) { this.step = step; }
public String toString() { return step + "階調グレースケール"; }
public int filterRGB(int x, int y, int rgb) {
//rgb -> gray
int r = (rgb >> 16) & 0xff;
int g = (rgb >> 8) & 0xff;
int b = rgb & 0xff;
int gray = (int)( 0.298912 * r + 0.586611 * g + 0.114478 * b );
//階調化
int w = 256/(step - 1);
gray = Math.min(0xff, ((gray + w/2)/w)*w);
return 0xff000000 | (gray * 0x010101); //rgb 値それぞれに設定
}
}

choice.addItem(new GrayFilter(32)); とかして足す。
BWFilter の代わりに new GrayFilter(2) にしてもいい。

あと、CurveFilter はコントラストじゃなくて彩度の明瞭化だねこれ。
コントラストは
s = hsb[2];
... | Color.HSBtoRGB(hsb[0], hsb[1], s);
とかしてくらはい。
0217デフォルトの名無しさん2005/09/29(木) 17:42:47
これ見てるとJavaって便利になったよな
0218デフォルトの名無しさん2005/09/29(木) 18:16:55
コマンドライン引数
応用問題1
コマンドラインから数字と演算子を入力し計算結果を出力するプログラム
を作成せよ
(+とーのみにする)ただし、引数が不足している場合はエラーメッセージ
を出力して処理を終了させる

実行例 java cale 10+2

これのソースわかる人いる?
0219デフォルトの名無しさん2005/09/29(木) 22:46:39
【問題】
次にテキストファイルの指示に従って問題を答えなさい。
http://ce.fake.ne.jp/whats.txt

改行多くて書けなかった
0220デフォルトの名無しさん2005/09/29(木) 22:58:31
>218
http://pc8.2ch.net/test/read.cgi/tech/1110180044/526n
0221デフォルトの名無しさん2005/09/29(木) 23:13:43
>>219
それ本当に宿題か?
0222デフォルトの名無しさん2005/09/29(木) 23:21:09
>>219
音楽再生が再突入した場合に対応できないAudioPresenterクラスの設計が拙い

よって該当ソースを修正する必要はない
0223デフォルトの名無しさん2005/09/30(金) 12:26:37
>>204
サンプルがあるならjodeとかJadclipseで逆コンパイルしてみたら。
0224デフォルトの名無しさん2005/09/30(金) 12:57:38
【課題提示用テンプレ】
【 課題 】javaをつかってAD変換の様子が分かるようにしなさい.
【 用語 】
【 期限 】2005年10月2日
【 Ver  】バージョン1.4
【 補足 】ttp://laputa.cs.shinshu-u.ac.jp/~yizawa/InfSys1/basic/chap1/index.htm
      ここにあるディジタル処理というアプレットのようなものができれば
      いいと思うのですが.丸投げですいませんが分かる方お願いします.
      このjavaはアプレットですが,コマンドプロンプトで動作させること
      ができればコマンドプロンプトでおねがいします.
0225デフォルトの名無しさん2005/09/30(金) 14:58:06
>>203
亀ですまんけど、嘘教えるなよー。

少なくとも Java において 0 は常に 10 進数だよ。
0226デフォルトの名無しさん2005/09/30(金) 15:05:18
>225
>203は言葉足らずなだけじゃないか?
数字の最初に 0 がある場合は8進数をあらわしてるわけで、
この場合は普通の数字としての 0 じゃない。
つまり、10進数の 0 じゃなくって、
8進数をあらわす 0 ってことがいいたかっただけジャマイカ?
02272272005/09/30(金) 15:20:23
import java.io.*;
import java.net.*;
interface Constant {
int port=49152;
String msg="Naoshi has received your message.";
}
class Greeting implements Constant {
public static void main(String arg[])
throws UnknownHostException,SocketException,IOException{
Inet6Address toaddr = Inet6Address.getByName(arg[0]);
Server s=new Server();
s.start();
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String line;
DatagramPacket pack;
DatagramSocket dgram = new DatagramSocket();
while((line=br.readLine())!=null){
byte data[]=line.getBytes();
pack = new DatagramPacket
(data, data.length, toaddr, port);
dgram.send(pack);
}
dgram.close();
s.halt();
}
}


02282272005/09/30(金) 15:22:07
【 課題 】IPv6でも動作するように改良しなさい
【 用語 】
【 期限 】2005年10月2日
【 補足 】InetAddressのところに6を入れた状態で掲載しましたが、
      それでもIPv6では動作しませんでした
0229デフォルトの名無しさん2005/10/02(日) 05:20:15
【課題】時計作成
    ・GUIで作成(Windows上で動作するように作成すればウィジットは問わない)
    ・デジタル/アナログは問わない。
    ・表示誤差は極力無くなるようにすること。
【用語】 なし
【期限】10/3のAM7:00まで
【Ver 】JDK1.4.2
【補足】丸投げです。自分では無理でしたorz
     どうか宜しくお願いします。
0230デフォルトの名無しさん2005/10/02(日) 07:41:08
>>229 Q229.java
import java.awt.*; import java.awt.event.*; import java.util.Date; import javax.swing.*;
public class Q229 {
public static void main(String[] args) {
final JFrame frame = new JFrame("ClockPanel");
JClockPanel panel = new JClockPanel();
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.repaint();
}
});
Container cp = frame.getContentPane();
cp.setLayout(new BorderLayout());
cp.add(panel, "Center");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.setSize(200, 100);
frame.setVisible(true);
timer.start();
}
}
class JClockPanel extends JPanel {
protected void paintComponent(Graphics g) {
Date date = new Date();
int x = 0;
int y = g.getFontMetrics().getHeight();
g.drawString(date.toString(), x, y);
}
}
0231デフォルトの名無しさん2005/10/02(日) 09:15:14
>230
5.0だと確かに動くけど、1.4だとrepaint()してなくない?
// Clock.java
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Clock extends JFrame implements Runnable {
JLabel label;
public Clock() {
label = new JLabel( "00:00:00" );
getContentPane().add( label );
}
public static void main(String[] args) {
Clock self = new Clock();
new Thread( self ).start();
self.setTitle( "Clock" );
self.setSize( 100, 50 );
self.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
self.setVisible(true);
}
public void run() {
SimpleDateFormat formatter = new SimpleDateFormat( "HH:mm:ss" );
while( true ) {
try {
label.setText( formatter.format( new GregorianCalendar().getTime() ) );
Thread.sleep(1000);
} catch( InterruptedException ie ) {
}
}
}
}
0232デフォルトの名無しさん2005/10/02(日) 11:18:09
【 課題 】
「英語の文を解析し、その文に含まれる単語の長さと平均を求めるプログラムを作成せよ。」
1、概要
  �@適当な文字列変数に英語の文を代入する。
  例:String sentence = new Stirng("This is a pen.”)
  �Aプログラムを実行すると、その文における各単語の長さと平均を表示する。
2、プログラムの条件
  英語の文章は、「.」 「!」 「?」で終わっているものとする。また、単語の区切りは
  1文字分の空白に限定してよい。
3、プログラムの動作例
  次の1文を入力する:Do you love me? その出力結果は次のとおり。

  単語数 :4
  平均語長:2.75
  語長   単語数
   1     0
   2     2
   3     1
   4     1   
   5     0

【 期限 】10月3日午前0時
【 Ver  】1.5
【 補足 】英文はキーボード入力です。
       丸投げですがよろしくお願いします。
0233デフォルトの名無しさん2005/10/02(日) 14:37:33
>>232
public class Q232 {
private static final String sentence = "Do you love me?";

public static void main(String[] args) {
if (!sentence.matches(".*[\\.\\?!]")) {
System.err.println("英語の文章は、「.」 「!」 「?」で終わっているものとする");
System.exit(0);
}
String[] list = sentence.split("[\\.\\?!]")[0].split(" ");
int max = 0, totalLength = 0;
for (String str : list)
if (str.length() > max) max = str.length();
int[] wordLengthList = new int[max];
for (String str : list) {
totalLength += str.length();
wordLengthList[str.length() - 1]++;
}
System.out.printf("単語数: %d\n平均語長: %.2f\n語長\t単語数\n", list.length, (double) totalLength / list.length);
for (int i = 0; i < wordLengthList.length; i++)
System.out.printf("%d\t%d\n", i + 1, wordLengthList[i]);
}
}

実行結果
単語数: 4
平均語長: 2.75
語長単語数
10
22
31
41
02342332005/10/02(日) 14:39:21
>>233
実行結果のTABが消えとるw

単語数: 4
平均語長: 2.75
語長    単語数
1       0
2       2
3       1
4       1
0235デフォルトの名無しさん2005/10/02(日) 14:39:43
>>233
英文はキーボード入力なんじゃないの?
0236デフォルトの名無しさん2005/10/02(日) 14:54:35
>>235
1、概要
  (1)適当な文字列変数に英語の文を代入する。
  例:String sentence = new Stirng("This is a pen.”)
  (2)プログラムを実行すると、その文における各単語の長さと平均を表示する。
とあるんだけど…

とりあえずコンソールからの入力の場合

import java.io.*;
public class Q232 {
public static void main(String[] args) throws IOException {
String sentence = new BufferedReader(new InputStreamReader(System.in)).readLine();
if (!sentence.matches(".*[\\.\\?!]")) {
// 以下略

これは動作確認してませんが
02372292005/10/02(日) 17:48:49
>>231さんので動きました。
230さん231さん考えてくれてた方
本気で有難う御座いました。
本気で助かりました。
02382322005/10/02(日) 18:03:36
>>233さん
レスありがとうございます。
233,236の両方とも無事動きました。
ちょっと課題が分かりにくかったようですいません。
本当にありがとうございました。助かりました。

0239デフォルトの名無しさん2005/10/05(水) 02:08:38
【 課題 】JSPで掲示板を作るときにデータベースの処理を担う部分
【 用語 】なし
【 期限 】10月7日まで
【 Ver  】指定なし
【 補足 】サンプルプログラムですが、なにも改造しないままエラーが4つもでるという悲惨な状況です。
      問題点というかなぜエラーがでるのかがわかりません。
      コンパイルできるようにしたいです。
02402392005/10/05(水) 02:10:08
以下は BBSModel.java の内容です。

package jspbean;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;
import java.util.Hashtable;

public class BBSModel {

private int mCurrentArticleIndex;
private Article mCurrentArticle;
private Vector mArticles;

DBSimpleInterface mDB;

public BBSModel() {
mDB = new DBSimpleInterface();
}

private void dbConnect() {
mDB.connect(
"org.gjt.mm.mysql.Driver",
"jdbc:mysql://localhost:3306/bbs?useUnicode=true&characterEncoding=Shift_JIS",
"root",
""
);
}
02412392005/10/05(水) 02:11:00
public boolean nextArticle() {
if (setCurrentArticle(mCurrentArticleIndex)) {
mCurrentArticleIndex++;
return true;
}
return false;
}

public boolean setCurrentArticle(int index) {
if (mArticles == null || mArticles.size() <= index) {
return false;
}
Hashtable article = (Hashtable)mArticles.get(index);
int id = ((Integer)article.get("id")).intValue();
String title = (String)article.get("title");
String name = (String)article.get("name");
String mail = (String)article.get("mail");
String date = new SimpleDateFormat().format((Date)article.get("date"));
String body = (String)article.get("body");
mCurrentArticle = new Article(id, title, name, mail, date, body);
mCurrentArticleIndex = index;
return true;
}
}

よろしくお願いします。
0242デフォルトの名無しさん2005/10/05(水) 02:33:20
>>239
Interfaceでないなら、xxxxInterfaceなんて付けるな
もし、ほんとにInterfaceならnewできないぞ

DBSimpleInterface mDB;

public BBSModel() {
mDB = new DBSimpleInterface();
}
0243デフォルトの名無しさん2005/10/07(金) 10:00:05
【 課題 】クラスがStudent(public) インスタンス変数がname
      インスタンスメソッドがprintName

      クラスがSeminar
      ゼミのメンバーを2人作る(名前を入れる・初期化する)
      プリントアウトする

【 期限 】今日の午後2時まで

【 補足 】丸投げでお願いします あとゼミの宿題です
       これが詳しく書ける限界ですみません
02442432005/10/07(金) 10:01:10
あと急すぎて本当にごめんなさい
0245デフォルトの名無しさん2005/10/07(金) 11:00:13
>>243
適当だがこーいうことか?

// Student.java

public class Student
{
private String name ;
public Student( String name ) {
this.name = name ;
}

public void printName() {
System.out.println(name) ;
}
}

// Seminar.java

public Seminar
{
public static void main( String[] args ) {
Student member1 = new Student("名前1") ;
Student member2 = new Student("名前2") ;
member1.printName() ;
member2.printName() ;
}
}
02462432005/10/07(金) 12:45:35
>>245
そうです、ありがとうございます!
あとコンパイルしようとしたらclass interfaceがありませんと言われたのですが・・・・・・
0247デフォルトの名無しさん2005/10/08(土) 20:13:05
>>246
public Seminar{
という行の public と Seminar の間に
「 class 」を入れる。
0248デフォルトの名無しさん2005/10/09(日) 22:53:34
>>247
ありがとうございます
02492432005/10/09(日) 22:54:14
>>248はわたしです
0250デフォルトの名無しさん2005/10/09(日) 23:13:06
>>250はわたしです
0251デフォルトの名無しさん2005/10/09(日) 23:33:59
>>252はたわしです
0252たわし2005/10/09(日) 23:39:53

  ..,,,,.,.,,
 ミ・д・ミ
  "''''''"
■ このスレッドは過去ログ倉庫に格納されています