【好調】Java の宿題ここで答えます【三巡目】

このエントリーをはてなブックマークに追加
734デフォルトの名無しさん:05/01/24 19:57:17
>>728
BからDなら重みは何ぼだ
735デフォルトの名無しさん:05/01/24 20:15:18
アプレットからサーブレットにして、オブジェクトを出きる限り少なくする
ためには、JAVAの規約に則って、try〜catchしてほしい。
736>>729データベース その1:05/01/24 22:09:06
import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.lang.reflect.*;
public class Statement {
List column;
String[][] keyword, tablekeyword;
List rowList = new ArrayList();
Map updateMap = new LinkedHashMap();
String tablename, ordername, updatekeyname;
boolean outputFlag, deleteFlag, updateFlag, alldelFlag;
Matcher mat;
String token;
Iterator insertIt;
737>>729データベース その2:05/01/24 22:09:40
ResultSet executeQuery(String query) throws Exception {
mat = Pattern.compile("'([^'\\n\\r]*)'|[\\S&&[^\\(\\),;]]+|[\\(\\),;]{1}").matcher(query);
String[][] mykeyword = {
{ "select", "select" }, { "insert", "insert" },
{ "update", "update" }, { "delete", "delete" }, { "create", "create" }
};
keyword = mykeyword;
loop: while(mat.find()) {
token = mat.group();
if (token.equals(";"))
break;
if (mat.group(1) != null)
token = mat.group(1);
for (int i = 0; i < keyword.length; i++) {
if (token.matches(keyword[i][0])) {
getClass().getDeclaredMethod(keyword[i][1], new Class[0])
.invoke(this, new Object[0]);
continue loop;
}
}
throw new Exception();
}
if (outputFlag) {
outputDatabase();
return null;
} else {
return new ResultSet(rowList);
}
}
738>>729データベース その3:05/01/24 22:10:14
void outputDatabase() throws Exception {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < column.size(); i++)
sb.append(column.get(i) + ",");
sb.replace(sb.length() - 1, sb.length(), "\r\n");
if (alldelFlag)
rowList.clear();
for (int i = 0; i < rowList.size(); i++) {
Map map = (Map) rowList.get(i);
for (int k = 0; k < column.size(); k++)
sb.append(map.get(column.get(k)) + ",");
sb.replace(sb.length() - 1, sb.length(), "\r\n");
}
FileWriter w = new FileWriter(tablename);
w.write(sb.toString());
w.close();
}
739>>729データベース その4:05/01/24 22:10:54
void create() {
outputFlag = true;
keyword = new String[][] { { "table", "tablekw" } };
}
void tablekw() {
keyword = new String[][] { { ".+", "maketable" } };
}
void maketable() {
tablename = token;
keyword = new String[][] { { "\\(", "makebeginP" } };
}
void makebeginP() {
column = new ArrayList();
keyword = new String[][] { { ".*", "makeparam" } };
}
void makeparam() {
column.add(token);
keyword = new String[][] { { ",", "makeconma" }, { "\\)", "makeendP" } };
}
void makeconma() {
keyword = new String[][] { { ".*", "makeparam" }, { "\\)", "makeendP" } };
}
void makeendP() {
keyword = new String[0][];
}
740>>729データベース その5:05/01/24 22:11:31
void select() {
keyword = new String[][] { { "\\*", "asta" } };
}
void asta() {
keyword = new String[][] { { "from", "from" } };
}
void from() {
tablekeyword = new String[][] { { "where", "where" }, { "order", "order" } };
keyword = new String[][] { { ".+", "table" } };
}
void insert() {
outputFlag = true;
keyword = new String[][] { { "into", "into" } };;
}
void into() {
tablekeyword = new String[][] { { "values", "values" } };
keyword = new String[][] { { ".+", "table" } };
}
void values() {
Map map = new LinkedHashMap();
for (int i = 0; i < column.size(); i++)
map.put(column.get(i), "");
rowList.add(map);
insertIt = map.entrySet().iterator();
keyword = new String[][] { { "\\(", "beginP" } };
}
void beginP() {
keyword = new String[][] { { ".*", "param" } };
}
741>>729データベース その6:05/01/24 22:12:17
void param() {
Map.Entry ent = (Map.Entry) insertIt.next();
ent.setValue(token);
keyword = new String[][] { { ",", "conma1" }, { "\\)", "endP" } };
}
void conma1() {
keyword = new String[][] { { ".*", "param" }, { "\\)", "endP" } };
}
void endP() {
keyword = new String[0][];
}
void delete() {
outputFlag = true;
deleteFlag = true;
alldelFlag = true;
keyword = new String[][] { { "from", "delfrom" } };
}
void delfrom() {
tablekeyword = new String[][] { { "where", "where" } };
keyword = new String[][] { { ".+", "table" } };
}
void update() {
tablekeyword = new String[][] { { "set", "set" } };
outputFlag = true;
updateFlag = true;
keyword = new String[][] { { ".+", "table" } };
}
742>>729データベース その7:05/01/24 22:13:08
void set() {
keyword = new String[][] { { ".+", "key" } };
}
void key() {
updateMap.put(token, "");
updatekeyname = token;
keyword = new String[][] { { "=", "assign" } };
}
void assign() {
keyword = new String[][] { { ".*", "value" } };
}
void value() {
updateMap.put(updatekeyname, token);
keyword = new String[][] { { "where", "where" }, { ",", "conma2" } };
}
void conma2() {
keyword = new String[][] { { "where", "where" }, { ".+", "key" } };
}
743>>729データベース その8:05/01/24 22:13:44
void table() throws Exception {
keyword = tablekeyword;
tablename = token;
BufferedReader r = new BufferedReader(new InputStreamReader(
new FileInputStream(token)));
String line;
line = r.readLine();
if (line == null)
throw new Exception();
column = new ArrayList(Arrays.asList(line.split(",")));
StringBuffer sb = new StringBuffer();
while ((line = r.readLine()) != null)
sb.append(line + ",");
if (sb.length() == 0)
return;
String[] data = sb.toString().split(",");
for (int i = 0; i + column.size() <= data.length;) {
Map map = new LinkedHashMap();
for (int k = 0; k < column.size() && i < data.length; k++, i++)
map.put(column.get(k), data[i].trim());
rowList.add(map);
}
}
744>>729データベース その9:05/01/24 22:16:22
void where() throws Exception {
boolean endByOrder = false; alldelFlag = false;
ExpressionParser ep = new ExpressionParser(mat);
endByOrder = ep.parse();
Expression ex = ep.getExpression();
for (int i = 0; i < rowList.size(); ) {
boolean flag = ex.toBoolean((Map) rowList.get(i));
flag ^= deleteFlag;
if (!updateFlag) {
if (!flag) rowList.remove(i);
else ++i;
} else {
if (flag) {
Iterator it = updateMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry ent = (Map.Entry) it.next(); Map map = (Map) rowList.get(i);
if (map.containsKey(ent.getKey())) map.put(ent.getKey(), ent.getValue());
}
}
++i;
}
}
if (endByOrder) {
order(); keyword = new String[][] { { "by", "by" } };
} else {
keyword = new String[][] { { "order", "order" } };
}
}
745>>729データベース その10:05/01/24 22:18:03
void order() {
keyword = new String[][] { { "by", "by" } };
}
void by() {
keyword = new String[][] { { ".+", "orderclm" } };
}
void orderclm() {
ordername = token;
Collections.sort(rowList, new Comparator() {
public int compare(Object arg0,Object arg1) {
return compareColumn((String) ((Map) arg0).get(ordername), (String) ((Map) arg1).get(ordername));
}
});
keyword = new String[][] { { "desc", "desc" } };
}
void desc() {
Collections.sort(rowList, new Comparator() {
public int compare(Object arg0,Object arg1) {
return -compareColumn((String) ((Map) arg0).get(ordername), (String) ((Map) arg1).get(ordername));
}
});
keyword = new String[0][];
}
int compareColumn(String s1, String s2) {
try {
return Integer.valueOf(s1).compareTo(Integer.valueOf(s2));
} catch (Exception e) {
return s1.compareTo(s2);
}
}
}
746>>729データベース その11:05/01/24 22:18:44
class ResultSet {
List rowList;
int index = -1;
ResultSet(List rowList) {
this.rowList = rowList;
}
String get(String name) {
Map map = (Map) rowList.get(index);
return (String) map.get(name);
}
int getInt(String name) {
Map map = (Map) rowList.get(index);
return Integer.parseInt((String) map.get(name));
}
boolean next() {
if (rowList.isEmpty())
return false;
if (index < rowList.size() - 1) {
++index;
return true;
} else {
return false;
}
}
747>>729データベース その12:05/01/24 22:19:41
boolean previous() {
if (rowList.isEmpty())
return false;
if (index > 0) {
--index;
return true;
} else {
return false;
}
}
boolean first() {
if (!rowList.isEmpty()) {
index = 0;
return true;
} else {
return false;
}
}
boolean last() {
if (!rowList.isEmpty()) {
index = rowList.size() - 1;
return true;
} else {
return false;
}
}
}
748>>729データベース その13:05/01/24 22:20:48
class ExpressionParser {
Matcher mat;
LinkedList valueStack = new LinkedList(), exprStack = new LinkedList();
Expression expression;
ExpressionParser(Matcher mat) {
this.mat = mat;
}
boolean parse() throws Exception {
boolean endByOrder = false;
while (mat.find()) {
String token = mat.group();
if (mat.group(1) != null)
token = mat.group(1);
if (token.matches("=|<>|>=|<=|>|<")) {
exprStack.addLast(token);
} else if (token.matches("and|or")) {
ValueExpression expr = new ValueExpression((String) valueStack.removeLast(),
(String) valueStack.removeLast(), (String) exprStack.removeLast());
valueStack.addLast(expr);
exprStack.addLast(token);
} else if (token.matches("order|;")){
endByOrder = true;
break;
} else {
valueStack.addLast(token);
}
}
749>>729データベース その14:05/01/24 22:22:00
while (!exprStack.isEmpty()) {
String token = (String) exprStack.removeLast();
if (token.matches("=|<>|>=|<=|>|<")) {
ValueExpression expr = new ValueExpression((String) valueStack.removeLast(),
(String) valueStack.removeLast(), token);
valueStack.addLast(expr);
} else {
LogicExpression expr = new LogicExpression((Expression) valueStack.removeLast(),
(Expression) valueStack.removeLast(), token);
valueStack.addLast(expr);
}
}
if (!exprStack.isEmpty() || valueStack.size() != 1)
throw new Exception();
expression = (Expression) valueStack.removeLast();
return endByOrder;
}
Expression getExpression() {
return expression;
}
}
750>>729データベース その15:05/01/24 22:22:38
interface Expression {
boolean toBoolean(Map row) throws Exception ;
}
class LogicExpression implements Expression {
Expression val1, val2;
String expr;
LogicExpression(Expression val2, Expression val1, String expr) {
this.val1 = val1;
this.val2 = val2;
this.expr = expr;
}
public boolean toBoolean(Map row) throws Exception {
if (expr.equals("and"))
return val1.toBoolean(row) && val2.toBoolean(row);
else
return val1.toBoolean(row) || val2.toBoolean(row);
}
}
751>>729データベース その16:05/01/24 22:23:39
class ValueExpression implements Expression {
String val1, val2, expr;
ValueExpression(String val2, String val1, String expr) {
this.val1 = val1; this.val2 = val2; this.expr = expr;
}
public boolean toBoolean(Map row) throws Exception {
if (expr.equals("=")) {
int ans = ((String) row.get(val1)).compareTo(val2);
return ans == 0;
} else if (expr.equals("<>")) {
int ans = ((String) row.get(val1)).compareTo(val2);
return ans != 0;
} else if (expr.equals("<")) {
int ans = Integer.valueOf((String) row.get(val1)).compareTo(
Integer.valueOf(val2));
return ans == -1;
} else if (expr.equals(">")) {
int ans = Integer.valueOf((String) row.get(val1)).compareTo(
Integer.valueOf(val2));
return ans == 1;
} else if (expr.equals("<=")) {
int ans = Integer.valueOf((String) row.get(val1)).compareTo(
Integer.valueOf(val2));
return ans == 0 || ans == -1;
} else if (expr.equals(">=")) {
int ans = Integer.valueOf((String) row.get(val1)).compareTo(
Integer.valueOf(val2));
return ans == 0 || ans == 1;
}
throw new Exception();
}
}
752デフォルトの名無しさん:05/01/24 22:57:43
753>>729データベース使用法 その1:05/01/24 23:20:28
上の、16のコードを一字一句逃さずに全部コピペしてコンパイルしてください。

注文と幾つかのバグを修正しました。
Statementの仕様を幾つか変えました。ResultSetも少し変えました。

使用法はこんな感じです。
String query = "select * from data.txt;";
Statement st = new Statement();
ResultSet rs = st.executeQuery(query);
while (rs.next()) {
  int id = rs.getInt("id");
  String name = rs.get("name");
  String tel = rs.get("tel");
}
754>>729データベース使用法 その2:05/01/24 23:22:30
上記のString変数・queryに代入する擬似SQL文について

*create文によるテーブルの作成
  create table data.txt ( id, name, kana, adr, tel, mailadr ); 
  で、data.txtの名のcsvファイルが作成され、それがテーブルになります。
  指定されたカラムを持ちます。カラムの型は全部String型です。
  しかし一部の構文で、それをint数値として扱う事もできます。詳細は後で述べます。
*create、select、insert、update、delete の5つの文が使えます。
*空の値を代入する時は '' としてください。(例:update data.txt set name = '';)
*where句の式で、< > >= <= の大小比較式を使う時は、そのカラムデータが数字だけで構成 
  されてないとエラーになります。 id >= 5 はOKだが、name >= '田中' はエラーになる。
*select の次には * だけを指定してください。カラム名指定はできません。
*予約語は小文字だけで書いてください。大文字だと認識されません。
*テーブルの指定はCSVファイル名そのままにしてください。
*SQL文に構文エラーがあると、例外が発生します。
*Statement#executeQuery() でselect文を引数にするとResultSetインスタンスが
  返ってきますが、それ以外の更新文では常にnullが返ってきます。

SQL文の例
create table data.txt ( id, name, kana, adr, tel, mailadr );
insert into data.txt values ( 5, '田中', 'タナカ', '横浜', '333-444', 'aaa@yahoo' );
insert into data.txt values ( 6, '鈴木', 'タナカ', '', '666-777', 'bbb@yahoo' );
select * from data.txt where id >= 3 and id <= 5 order by id;
select * from data.txt where id = 1 or id = 2;
select * from data.txt order by id desc;
update data.txt set name = '佐藤', mailadr = '' where id = 5;
delete from data.txt where id <> 3;
delete from data.txt;
755>>729データベース使用法 その3:05/01/24 23:23:22
esultSetについて

*Statement#executeQuery()から返ってくるResultSetインスタンスは、初めはどこの行も
  指してません(変更しました)。必ず初めにnext()かfirst()をしてからget()してください。
*get(String name)、getInt(String name)、next()、previous()、first()、last()
  が使えます。
*next() previous() first() last() は、その行が存在するとtrue、存在しないとfalseが
  返ってきます。行が存在しない状態でget()を使うと例外が発生します。
*get()ではStringが、getInt()ではint数値が得られます。ただ数字だけで構成されてない
  カラムに対してgetInt()を使うと例外が発生します。
756デフォルトの名無しさん:05/01/24 23:26:32
>752
Wikiの使い方が分からないんです・・・ (;_;)
どのページをクリックすればいいのかさっぱり・・・(>_<)
757デフォルトの名無しさん:05/01/24 23:27:43
>>752
すいません。
Wikiの使い方が分からないんです・・・ (;_;)
どのページをクリックすればいいのかさっぱり・・・(>_<)
758デフォルトの名無しさん:05/01/24 23:41:42
>>756
簡単に。
1. 画面下「新規」ボタンクリック。
2. 「ページ新規作成:」に適当な名前を入れて「編集」ボタンクリック。
3. 「-- 雛形とするページ --」は「ソース貼り付け」を選択して「読込」ボタンクリック。
4. 画面下テキストエリアに載せたい作ったソースを書く(雛形を参考に)。
5. 「プレビュー」ボタンクリック。
6. イケてないと思ったら修正して「再度プレビュー」。
  イケてると思ったら「ページの更新」。
ちなみに俺>>526。Wiki初めて使ったけど出来た。
あなたに出来ないはずがない。
759ベニテス:05/01/25 02:03:29
四則演算の計算機アプレットを教えてください。
760デフォルトの名無しさん:05/01/25 02:06:04
それは宿題なのか?
761デフォルトの名無しさん:05/01/25 02:35:30
お願いします。
カウントダウンタイマーのJavaウィンドウアプリケーションを作る
数字の表示には画像ファイルを利用
カウントダウンは最低100msec単位で表示
スレッド、JFrameを用いる
762729:05/01/25 09:09:14
729(681)です。

>>736さん
データベースの改善ありがとうございました。
バッチリ動作しました。ほんとに助かりました。
これからソースが理解できるように頑張ります。

ちなみに
  *where句の式で、< > >= <= の大小比較式を使う時は、そのカラムデータが数字だけで構成 
    されてないとエラーになります。 id >= 5 はOKだが、name >= '田中' はエラーになる。
にしたのは特別な理由があるのですか?
特に問題はなかったのですが気になったもので...
763お願いします:05/01/25 09:46:39
この問題お願いします。
画像を線形変換、三角波変換、区分変換するための
式をjavaで書くとどうなりますか?
今日の午前11時までにお願いします。m(__)m
764デフォルトの名無しさん:05/01/25 11:06:01
>>763
java.image.*
パッケージなどを使ってみては?
765デフォルトの名無しさん:05/01/25 11:22:07
もう11時過ぎてしまったのですが・・・
一応、あと30分猶予がありますので(つまり正午まで)
30分以内に上記の回答プログラムをここに掲載してください。
お早めにお願いします。
766デフォルトの名無しさん:05/01/25 14:32:26
>>765
あ〜あかわいそうに。ってかなんだその態度は
767デフォルトの名無しさん:05/01/25 17:31:31
夕方になっても式の回答が来てないなんて、なんだこのスレわ
768デフォルトの名無しさん:05/01/25 18:27:04
明日が期限なのですがまったくわかりません。
丸投げで申し訳ないのですが、どなたか教えていただけませんでしょうか。

課題
 HTTPクライアントとサーバをjavaで作る。
 URLクラスは使ってはならない
 マルチスレッドにする
 http://www.lab7.kuis.kyoto-u.ac.jp/~nuka/le2/H16/index.html#BROWSE
 上の仕様に従ってクラスをつくる。

 詳しくはこちらの総合デモのところをご覧ください
 http://www.lab7.kuis.kyoto-u.ac.jp/~nuka/le2/H16/index.html

あとc言語のクライアントとサーバは既に作ってあります。
769M.B.:05/01/25 20:07:09
>>762
SQL のスレへ逝け
770デフォルトの名無しさん:05/01/25 21:22:07
>>768
CでつくれるくらいならJavaなら余裕では?
>>769
(JLispに期待。)
771デフォルトの名無しさん:05/01/25 22:14:28
>>768
何だかゴテゴテ書いてあって、仕様が分からないからムリ。
せめて、ここにまとめて書いてくれ。
772デフォルトの名無しさん:05/01/25 22:21:23
>>770
何分Javaは初めてなもんで、どこから手をつけていいかわからないんです。
773sasa:05/01/25 22:24:34
Jビルダーを使っているのですが、JPanelに画像を張るやり方が
わかりません。これができたら宿題は終わります。
ちなみに画像ファイルはJPGです。お願いします。
774デフォルトの名無しさん:05/01/25 22:42:06
>>768
ていうかお主は京大生なのな、いいな。うらやましいな。
775768:05/01/25 22:51:14
では自分なりにまとめて書きます。

課題 JavaによるHTTPクライアントとサーバ

仕様

クライアントの動作

起動後、標準入力からURLを入力し、サーバにコンテンツの転送要求をする。
そして結果を画面に表示する。
結果を出力した後、以下のように選択肢を表示し、そのURL内のリンクをたどれるようにする。
1 http;//www....
2 http://www....
3 http;//www....

1を入力すれば1のURLのhtmlを表示し、また選択肢を表示し、ていう具合です。

サーバの動作

起動後、クライアントからのコネクション待ちにはいる。
クライアントのコネクション確立後、クライアントからのコンテンツ転送要求に応じてコンテンツを転送する。
コネクション待ちの状態に戻る。

マルチスレッドを用いて複数クライアントに対応する。

クライアント、サーバともURLクラスを使わないよう指定されています。
基本的にhtmlだけ表示できればいいです。(cgiとかには対応する必要はありません)
776771:05/01/25 23:02:09
>>775
数時間待っててくださいませ。
777デフォルトの名無しさん:05/01/25 23:49:41
>>773
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(new JLabel(new ImageIcon(StringのファイルパスまたはURLまたはImageなど)), BorderLayout.CENTER);

引数の例
"image.jpg"
new URL("http://www.google.co.jp/intl/ja_jp/images/logo.gif")

BorderLayout.CENTERは省略可能。
778デフォルトの名無しさん:05/01/25 23:53:03
>>776
これから書くのか。
密かに応援するよ。
779>>775クライアント その1:05/01/26 02:07:24
import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.nio.channels.*;
import javax.swing.text.html.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class HW69 {
static JFrame frm = new JFrame();
static JTextField tfd = new JTextField();
static JComboBox cbx = new JComboBox();
static JTextArea tpane = new JTextArea();
static JButton btn = new JButton("移動");
static String baseurl, content;
static java.util.List links;
public static void main(String[] args) {
JFrame frm = new JFrame();
JScrollPane scr = new JScrollPane(tpane);
Box box = Box.createHorizontalBox();
box.add(tfd);
box.add(btn);
JPanel pal = new JPanel(new BorderLayout());
pal.add(cbx, BorderLayout.NORTH);
pal.add(scr);
cbx.setBackground(new Color(255,245,255));
cbx.setFont(new Font("Dialog", 0, 13));
tpane.setBackground(new Color(245, 245, 255));
780:>>775クライアント その2:05/01/26 02:08:08
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
requestURL(tfd.getText());
parseContent();
} catch (Exception e1) {
tpane.setText(e1.getMessage()); return;
}
tpane.setText(content);
DefaultComboBoxModel model = new DefaultComboBoxModel(links.toArray());
cbx.setModel(model);
}
});
cbx.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String url = (String) cbx.getSelectedItem();
if (url.length() == 0)
return;
try {
requestURL(url);
parseContent();
} catch (Exception e1) {
tpane.setText(e1.getMessage()); return;
}
tpane.setText(content);
DefaultComboBoxModel model = new DefaultComboBoxModel(links.toArray());
cbx.setModel(model);
tfd.setText(url);
}
});
781>>775クライアント その3:05/01/26 02:08:47
frm.getContentPane().add(pal);
frm.getContentPane().add(box, BorderLayout.NORTH);
frm.setSize(800, 600);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
static void requestURL(String requrl) throws Exception {
String pat = "(http://([^/:]+):?(\\d*))(/.*)";
Matcher mat = Pattern.compile(pat).matcher(requrl);
if (!mat.find())
throw new Exception("URLが不正です");
baseurl = mat.group(1);

SocketChannel ch;
try {
int port = 80;
if (mat.group(3).length() > 0)
port = Integer.parseInt(mat.group(3));
ch = SocketChannel.open(new java.net.InetSocketAddress(
mat.group(2), port));
782:>>775クライアント その4:05/01/26 02:09:50
StringBuffer sb = new StringBuffer();
sb.append("GET " + mat.group(4) + " HTTP/1.1\r\n");
sb.append("HOST: " + mat.group(2) + "\r\n");
sb.append("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)\r\n");
sb.append("Accept: */*\r\n");
sb.append("Accept-Language: ja\r\n\r\n");
ch.write(java.nio.ByteBuffer.wrap(sb.toString().getBytes("ISO-8859-1")));
} catch (Exception e1) {
throw new Exception("接続でエラー発生");
}
String ctype = "";
int length = -1;
DataInputStream in;
try {
in = new DataInputStream(Channels.newInputStream(ch));
String line = in.readLine();
while ((line = in.readLine()).length() > 0) {
String type = line.split(":")[0].trim();
if (type.equalsIgnoreCase("content-type"))
ctype = line.split("[:;]")[1].trim();
else if (type.equalsIgnoreCase("content-length"))
length = Integer.parseInt(line.split(":")[1].trim());
}
} catch (IOException e) {
throw new Exception("ヘッダ読み込みでエラー発生");
}
783>>775クライアント その5:05/01/26 02:10:25
if (!ctype.equalsIgnoreCase("text/html")) {
content = new String("htmlファイルではないので表示不可");
} else {
try {
ByteArrayOutputStream btout = new ByteArrayOutputStream();
int size;
byte[] buf = new byte[8000];
while ((size = in.read(buf)) != -1) {
btout.write(buf, 0, size);
if (length != -1) {
length -= size;
if (length <= 0)
break;
}
}
content = new String(btout.toByteArray(), "Shift_JIS");
} catch (Exception e2) {
throw new Exception("コンテンツ読み込みでエラー発生");
}
}
ch.close();
}
784:>>775クライアント その6:05/01/26 02:11:07
static void parseContent() throws Exception {
HTMLEditorKit kit = new HTMLEditorKit();
HTMLDocument doc = new HTMLDocument();
try {
kit.read(new StringReader(content), doc, 0);
} catch (Exception e) {
throw new Exception("HTMLファイル解析エラー");
}
HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.BASE);
it.next();
if (it.isValid())
baseurl = (String) it.getAttributes().getAttribute("href");
links = new ArrayList();
it = doc.getIterator(HTML.Tag.A);
it.next();
while (it.isValid()) {
Enumeration em = it.getAttributes().getAttributeNames();
while (em.hasMoreElements()) {
Object key = em.nextElement();
if (key.toString().equalsIgnoreCase("href")) {
String url = (String) it.getAttributes().getAttribute(key);
try {
links.add(new java.net.URL(new java.net.URL(baseurl), url)
.toString());
} catch (Exception e1) { }
}
}
it.next();
}
}
}
785デフォルトの名無しさん:05/01/26 02:16:12
>>775
遅れてスイマセン。
全部コピペしてコンパイルしてください。
一番上のテキストフィールドにURLを書いて(ctrl+c でコピペできる)
移動ボタンを押すと、そこのHTMLファイルをそのまま表示します。
リンク先はその下のコンボボックスに表示されます。(ページ内に存在した場合)
どれかをクリックするとそのリンク先に飛びます。
786デフォルトの名無しさん:05/01/26 02:31:33
>>775
一箇所、URLクラスを使ってますが、それは接続の為でなく
HTML文書内のリンク先が相対URLで書かれてる事がよくあるので
ベースURLと相対URLを合成して絶対URLを求める為だけに
使いました。
接続と送受信、はHttpプロトコルに従ったソケットで行ってます。
787デフォルトの名無しさん:05/01/26 02:37:34
神キタ━━━━━━(゚∀゚)━━━━━━!!
いつも見てるけどすごいですね。
788デフォルトの名無しさん:05/01/26 03:19:57
>>775
あと
>>784その6の

if (it.isValid())
baseurl = (String) it.getAttributes().getAttribute("href");

この2行を削除してください。
789>>775サーバー その1:05/01/26 03:21:04
import java.net.*;
import java.io.*;
public class HW70 {
static StringBuffer content = new StringBuffer();
static boolean endFlag;
public static void main(String[] args) {
try {
BufferedReader file = new BufferedReader(
new InputStreamReader(new FileInputStream(args[0])));
String line;
while ((line = file.readLine()) != null)
content.append(line + "\r\n");
file.close();
} catch (Exception e2) {
System.out.println("コンテンツファイルが指定されてないか不正です");
System.exit(0);
}
ServerSocket ss = null;
try {
ss = new ServerSocket(80);
} catch (Exception e1) {
System.out.println("エラー終了");
System.exit(0);
}
790>>775サーバー その2:05/01/26 03:21:42
while (!endFlag) {
try {
Socket sc = ss.accept();
new HttpIO(sc).start();
} catch (IOException e) {
}
}
try {
ss.close();
} catch (IOException e) {
}
System.out.println("終了");
}
static class HttpIO extends Thread {
Socket sc;
HttpIO(Socket sc) {
this.sc = sc;
}
public void run() {
try {
io();
} catch (Exception e) {
} finally {
try {
sc.close();
} catch (IOException e1) {
}
}
}
791>>775サーバー その3:05/01/26 03:22:43
void io() throws Exception {
DataInputStream in = new DataInputStream(sc.getInputStream());
String line = in.readLine();
if (!line.split(" ")[0].equalsIgnoreCase("GET"))
return;
if (line.split(" ")[1].equalsIgnoreCase("/end")) {
while (in.readLine().length() > 0);
OutputStream out = sc.getOutputStream();
StringBuffer sb = new StringBuffer();
sb.append("HTTP/1.1 200 OK\r\n");
sb.append("Content-Type: text/html\r\n\r\n");
sb.append("サーバーを終了しました");
out.write(sb.toString().getBytes());
in.close();
out.close();
endFlag = true;
return;
}
while (in.readLine().length() > 0);
OutputStream out = sc.getOutputStream();
StringBuffer sb = new StringBuffer();
sb.append("HTTP/1.1 200 OK\r\n");
sb.append("Content-Type: text/html\r\n\r\n");
sb.append(content);
out.write(sb.toString().getBytes());
in.close();
out.close();
}
}
}
792デフォルトの名無しさん:05/01/26 03:27:47
>>775
そのサーバーがコンテンツとする任意のHTMLファイル名を引数にして実行ください。
(無いとエラーになる)
ポート80にバインドされます。
ブラウザで、http://localhost:80 と移動すると先のコンテンツが表示されます。
パスに/endを指定すると(例:http://localhost:80/end
サーバーが終了します。
793デフォルトの名無しさん:05/01/26 03:59:58
丸投げですいませんがよろしくお願いします
四則演算のボタンがあり入力フィールドが2つと出力フィールドがあり入力フィールドにはそれぞれ起動時に「ここに数字を入力します」と表示させる
電卓アプレットをお願いします
以下のソースを参考に作れと言われたのですが、よくわかりませんでした・・・
明日までにどうかお願いします・・・
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
  public class dentaku extends Applet {
       Button btnCulc;
TextField txtA, txtB, txtAnswer;
Label lblPlus;
public void init() {
btnCulc = new Button("=");
btnCulc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
int intAnswer = Integer.parseInt(txtA.getText()) + Integer.parseInt(txtB.getText());
txtAnswer.setText(Integer.toString(intAnswer));
}});
              txtA = new TextField("0", 3);
txtB = new TextField("0", 3);
lblPlus = new Label(" + ");
txtAnswer = new TextField("0", 5);
              add(txtA);
add(lblPlus);
add(txtB);
add(btnCulc);
add(txtAnswer);}}
794793:05/01/26 04:47:25
やはりなんとか自分でやてみます
板汚しすいませんでした(_ _)
795デフォルトの名無しさん:05/01/26 05:55:38
>>771
これぐらいやる気のある人とプロジェクトくみたい
796デフォルトの名無しさん:05/01/26 09:29:12
//↓javaファイル
import java.applet.Applet;
import java.awt.Graphics;

public class ap1 extends Applet
{
public void paint(Graphics g)
       {
g.drawString("ようこそjavaアプレットへ!",10,10);
}
}
//↓HTMLファイル。
<HTML>
<BODY>
<APPLET CODE = "ap1.class" WIDTH = 200 height = 100>
</APPLET>
</BODY>
</HTML>

javaの入門書にあったコードなのですが、アプレットではきちんと表示されるのですが、
ブラウザで開くと灰色の背景だけで文字が表示されません。
ブラウザのせいでしょうか?IE6使用。
797768:05/01/26 09:40:55
771さん、ありがとうございました。
失礼だけどコンパイルした?
799デフォルトの名無しさん:05/01/26 19:57:51
800デフォルトの名無しさん:05/01/26 20:34:31
丸投げですみませんが3つほどお願いします。
課題1
 次の仕様に従って,任意の数値列を読み込み,その平均値,最頻値,中央値,分散,標準偏差,ヒストグラムを表示するプログラムを作成せよ.提出にあたっては,提出用データを用い,階級の幅(ヒストグラムを作成する際の,棒の幅)を10とすること.

・入力
ユーザはプログラムに対し,数値列の入った「データファイル名」と「階級の幅(ヒストグラムを作成する際の,棒の幅)」を入力するものとする.
入力は,起動時のコマンドライン入力,プログラム内でのユーザ入力,のどちらでもよいものとする.

・出力
最頻値,中央値は整数で,平均値,分散,標準偏差は,小数点第3位を四捨五入したものを表示するものとする.
ヒストグラムは,区間と階級を軸に表示するものとする(テキスト,グラフィックのどちらで表示してもよい).

・数値列データおよびデータファイル
数値を,スペースまたはリターンで区切ったテキストファイルとする.
数値は0以上100以内の整数で,個数は100個以内とする.

・提出用データ 20 22 84 56 32 65 96 2 4 100
5 68 55 89 23 45 45 23 32 75
23 65 98 12 45 3 8 50 78 25
33 64 73 46 82 16 34 91 97 41
801デフォルトの名無しさん:05/01/26 20:36:51
課題2
 次の仕様に従って,任意の数値列を読み込み,その数値列の,(1)95%信頼区間(最小値と最大値),
そこに含まれるデータ個数,含まれるデータの一覧.(2)99%信頼区間(最小値と最大値),そこに含ま
れるデータ個数,含まれるデータの一覧,これら両方を表示するプログラムを作成せよ.提出にあたっては,
提出用データを用いること.
・入力
ユーザはプログラムに対し,数値列の入った「データファイル名」を入力するものとする.
入力は,起動時のコマンドライン入力,プログラム内でのユーザ入力,のどちらでもよいものとする.
・出力
信頼区間の最小値と最大値は,小数点第1位を四捨五入した整数で表示するものとする.
・数値列データおよびデータファイル
数値を,スペースまたはリターンで区切ったテキストファイルとする.
数値は0以上100以内の整数で,個数は100個以内とする.
数値列は,正規分布に従っていると仮定するものとする.
・提出用データ 20 61 68 54 79 90
43 70 56 71 35 58
77 34 88 63 72 49
92 75 61 69 85 82
70 67 82 59 71 66
802デフォルトの名無しさん:05/01/26 20:37:28
課題3
 次の仕様に従って,2種類の数値系列を読込み,それぞれの平均点,標準偏差と2種類の系列間の相関積和,相関係数を計算するプログラムを作成せよ.提出にあたっては,提出用データを用いること.

・入力
ユーザはプログラムに対し,それぞれの数値列の入った「データファイル名」を2つ入力するものとする.
入力は,起動時のコマンドライン入力,プログラム内でのユーザ入力,のどちらでもよいものとする.

・出力
それぞれの平均点,標準偏差と2種類の系列間の相関積和,相関係数は,小数点第3位を四捨五入したものを表示するものとする.

・数値列データおよびデータファイル
数値を,スペースまたはリターンで区切ったテキストファイルとする.
数値は0以上100以内の整数で,個数は100個以内とする.

次の表はある学生の試験の点数一覧である.
提出用データはこの国語と英語の点数を用いよ.
学生番号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
国語 72 48 55 82 70 32 45 100 76 44 66 84 70 30 91
英語 67 52 68 95 63 58 34 88 67 51 77 66 70 43 88
803デフォルトの名無しさん:05/01/26 21:51:29
期末だから難しい課題が多いな。
804デフォルトの名無しさん:05/01/26 23:50:31
プログラムの問題とはなんか違う気がする
805>>799 その1:05/01/27 10:03:13
ib.jsp その1
<%@page contentType="text/html; charset=Shift_JIS" pageEncoding="Shift_JIS" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<c:if test="${applicationScope.datasrc == null}">
<sql:setDataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test"
user="${initParam.username}" password="${initParam.password}" var="datasrc" scope="application" />
</c:if>
<c:set var="tableFlag" value="false" />
<sql:query dataSource="${datasrc}" var="tables" sql="show tables;" />
<c:forEach var="row" items="${tables.rows}">
<c:if test="${row.Tables_in_test == 'image'}">
<c:set var="tableFlag" value="true" />
</c:if>
</c:forEach>
<c:if test="${tableFlag != true}">
<sql:update dataSource="${datasrc}">
create table image (image varchar(255) primary key, thumb varchar(255),
name blob, title blob, comment blob, time timestamp);
</sql:update>
</c:if>
<c:if test="${param.post == true}">
<jsp:useBean id="formParser" class="ib.FormParser">
<jsp:setProperty name="formParser" property="in" value="${pageContext.request.inputStream}" />
<jsp:setProperty name="formParser" property="bound" value="<%= request.getHeader("Content-Type") %>" />
<jsp:setProperty name="formParser" property="context" value="${pageContext.servletContext}" />
<c:set var="formData" value="${formParser.formData}" />
<c:if test="${formData.error != null}">
<c:redirect url="/?error=${formData.error}" />
</c:if>
806>>799 その2:05/01/27 10:04:18
ib.jsp その2
<sql:update dataSource="${datasrc}">
insert into image values (?, ?, ?, ?, ?, ?);
<sql:param value="${formData.image}" /> <sql:param value="${formData.thumb}" />
<sql:param value="${formData.name}" /> <sql:param value="${formData.title}" />
<sql:param value="${formData.comment}" /> <sql:param value="${formData.time}" />
</sql:update>
</jsp:useBean>
<c:redirect url="/" />
</c:if>
<sql:query var="rowList" dataSource="${datasrc}" sql="select count(*) as cnt from image;" />
<c:set var="imageCount" value="${rowList.rows[0].cnt}" />
<c:set var="pageno" value="${0}" />
<c:if test="${param.page != null}">
<c:set var="pageno" value="${param.page}" />
</c:if>
<sql:query var="rowList" dataSource="${datasrc}">
select * from image order by time desc limit ${pageno * 5},${pageno * 5 + 5};
</sql:query>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=Shift_JIS">
<meta http-equiv="content-style-type" content="text/css">
<meta http-equiv="pragma" content="no-cache">
807>>799 その3:05/01/27 10:05:41
ib.jsp その3
<style type="text/css"><!--
.caption { font: bold medium fantasy; background-color: rgb(180,180,240); text-align: center;
position: relative; left: 20%; width: 60%; padding: 16px 0px; filter: alpha(style=2); white-space: nowrap; }
.form { border: dashed rgb(180,240,180) 2px; background-color: rgb(245,255,245); }
.imgframe { border: dashed rgb(180,180,240) 2px; width: 600px; }
td { font: 12px monospace; white-space: nowrap; }
.image { vertical-align: top; float: left; }
.label { width: 33%; color: rgb(0,0,120); background-color: rgb(245,245,255); }
.bg { height: 160px; vertical-align: center; }
.error { font: medium monospace; color: red; }
--></style>
</head>
<body>
<div class="caption"> 画像掲示板 </div><br>
<form action="/ib/ib.jsp?post=true" method="POST" enctype="multipart/form-data">
<table align="center" class="form">
<tr><td colspan="2" style="text-align: center;"> 画像投稿フォーム </td></tr>
<tr><td> 送信画像 </td> <td> <input type="file" name="file" size="70"> </td></tr>
<tr><td> 名前 </td> <td> <input type="text" name="name" size="80" maxlength="20"> </td></tr>
<tr><td> タイトル </td> <td> <input type="text" name="title" size="80" maxlength="20"> </td></tr>
<tr><td> コメント </td> <td> <textarea name="comment" rows="6" cols="55"> </textarea> </td></tr>
<tr><td colspan="2" style="text-align: right;"> *画像ファイル以外は省略可
<input type="submit" value="送信する"> </td></tr>
</table>
<div align="center" class="error"> <c:out value="${param.error}" /> </div>
</form>
808>>799 その4:05/01/27 10:06:38
ib.jsp その4
<div align="center">
<c:choose>
<c:when test="${pageno <= 0}"> 前のページ   </c:when>
<c:otherwise> <a href="/ib?page=${pageno - 1}"> 前のページ </a>   </c:otherwise>
</c:choose>
<c:choose>
<c:when test="${imageCount - (pageno + 1) * 5 <= 0}"> 次のページ   </c:when>
<c:otherwise> <a href="/ib?page=${pageno + 1}"> 次のページ </a>   </c:otherwise>
</c:choose>
</div><br>
<c:forEach var="row" items="${rowList.rows}">
<table align="center" class="imgframe">
<tr>
<td class="label"> タイトル  
<%= new String((byte[]) ((java.util.Map) pageContext.getAttribute("row")).get("title"), "Shift_JIS") %>
</td>
<td class="label"> 投稿者  
<%= new String((byte[]) ((java.util.Map) pageContext.getAttribute("row")).get("name"), "Shift_JIS") %>
</td>
<td class="label"> 投稿日時   ${row.time} </td>
</tr>
<tr><td colspan="2" class="bg">
<a href="/ib/${row.image}" target="_blank"> <img src="/ib/${row.thumb}" class="image"> </a>
コメント <br><br>
<%= new String((byte[]) ((java.util.Map) pageContext.getAttribute("row")).get("comment"), "Shift_JIS") %>
</td></tr>
</table><br>
</c:forEach>
</body>
</html>
809>>799 その5:05/01/27 10:08:22
ib.FormParser その1
package ib;
import javax.servlet.*; import java.io.*;
import java.util.*; import java.util.regex.*;
import java.nio.*; import java.awt.image.*; import javax.imageio.*;
public class FormParser {
private ServletInputStream in;
private String bound;
private Map formData = new TreeMap();
private ServletContext context;
synchronized private long issueID() {
try {
Thread.sleep(1);
} catch (InterruptedException e) { }
return System.currentTimeMillis();
}
public void setContext(ServletContext context) {
this.context = context;
}
public void setIn(ServletInputStream in) {
this.in = in;
}
public void setBound(String bound) {
Matcher mat = Pattern.compile("boundary=(.+)").matcher(bound);
if (mat.find())
this.bound = mat.group(1);
}
810>>799 その6:05/01/27 10:09:30
ib.FormParser その2
public Map getFormData() {
boolean more = true;
try {
while (more)
more = extract();
} catch (Exception e) {
formData.put("error", e.getMessage());
return formData;
}
return formData;
}
private boolean extract() throws Exception {
boolean more;
byte[] buffer = new byte[8000];
byte[] bHead = (byte[]) ("--" + bound + "\r\n").getBytes("ISO-8859-1");
byte[] bTail = (byte[]) ("--" + bound + "--\r\n").getBytes("ISO-8859-1");
int size = 0;
StringBuffer sb = new StringBuffer();
while (true) {
size = in.readLine(buffer, 0, buffer.length);
if (size == -1)
throw new Exception("Data stream error");
if (ByteBuffer.wrap(buffer, 0, size).equals(ByteBuffer.wrap(bHead)))
continue;
if (ByteBuffer.wrap(buffer, 0, size).equals(ByteBuffer.wrap(bTail)))
return false;
String line = new String(buffer, 0, size, "Shift_JIS");
sb.append(line);
if (line.equals("\r\n"))
break;
}
811>>799 その7:05/01/27 10:10:39
ib.FormParser その3
Map map = new TreeMap();
Scanner sc = new Scanner(sb.toString());
Pattern pat1 = Pattern.compile("([\\w\\-]+):([^;,\r\n]+)(;|,|\r\n)");
Pattern pat2 = Pattern.compile("([\\w\\-]+)= *\"(.*?)\" *(;|,|\r\n)");
Matcher mat = pat1.matcher(sb.toString());
boolean flag = false;
int idx = 0;
while (true) {
if (!flag)
mat.usePattern(pat1);
else
mat.usePattern(pat2);
if (!mat.find(idx))
break;
map.put(mat.group(1).trim(), mat.group(2).trim());
if (mat.group(3).equals("\r\n"))
flag = false;
else
flag = true;
idx = mat.end();
}
int offset = 0;
ByteArrayOutputStream btOut = new ByteArrayOutputStream();
812>>799 その8:05/01/27 10:11:38
ib.FormParser その4
while (true) {
size = in.readLine(buffer, offset, buffer.length - offset);
if (size == -1)
throw new Exception("Data stream error");
if (offset + size == buffer.length) {
if (buffer[buffer.length - 2] != 0x0d || buffer[buffer.length - 1] != 0x0a) {
btOut.write(buffer, offset, size);
System.arraycopy(buffer, buffer.length - bTail.length, buffer, 0, bTail.length);
offset = bTail.length;
continue;
}
}
if (size >= bTail.length) {
ByteBuffer view = ByteBuffer.wrap(buffer, size - bTail.length, bTail.length);
if (view.equals(ByteBuffer.wrap(bTail))) {
btOut.write(buffer, 0, size - bTail.length);
more = false;
break;
}
}
if (size >= bHead.length) {
ByteBuffer view = ByteBuffer.wrap(buffer, size - bHead.length, bHead.length);
if (view.equals(ByteBuffer.wrap(bHead))) {
btOut.write(buffer, 0, size - bHead.length);
more = true;
break;
}
}
btOut.write(buffer, offset, size);
offset = 0;
}
813>>799 その9:05/01/27 10:12:39
ib.FormParser その5
ByteArrayOutputStream newb = new ByteArrayOutputStream();
newb.write(btOut.toByteArray(), 0, btOut.size() - 2);
btOut.reset();
if (!map.get("name").equals("file")) {
formData.put(map.get("name"), newb.toByteArray());
return more;
}
if (newb.size() == 0)
throw new Exception("No image error, You must choose image file");
BufferedImage img = null;
try {
img = ImageIO.read(new ByteArrayInputStream(newb.toByteArray()));
} catch (IOException e) {
throw new Exception("File format error, ImageFile is invalid");
}
long id = issueID();
formData.put("time", new java.sql.Timestamp(id));
String ids = String.valueOf(id);
String ext = "";
mat = Pattern.compile("\\..+$").matcher((String) map.get("filename"));
if (mat.find())
ext = mat.group();
File filename = new File(context.getRealPath(ids + ext));
BufferedOutputStream file = new BufferedOutputStream(new FileOutputStream(filename));
file.write(newb.toByteArray());
file.close();
formData.put("image", filename.getName());
814>>799 その10:05/01/27 10:13:56
ib.FormParser その6
filename = new File(context.getRealPath(ids + "_s" + ext));
file = new BufferedOutputStream(new FileOutputStream(filename));
int iw = img.getWidth();
int ih = img.getHeight();
if(iw > 160 || ih > 160) {
BufferedImage img2=null;
double num = (double) Math.min(iw, ih) / Math.max(iw, ih);
double w = (iw >= ih) ? (double) 160 / iw : (double) 160 * num / iw;
double h = (ih >= iw) ? (double) 160 / ih : (double) 160 * num / ih;
AffineTransformOp affine=new AffineTransformOp(
java.awt.geom.AffineTransform.getScaleInstance(w,h),
AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
img2 = affine.filter(img, null);
ImageIO.write(img2, "jpeg", file);
} else {
ImageIO.write(img, "jpeg", file);
}
file.close();
formData.put("thumb", filename.getName());
return more;
}
}
815>>799 その11:05/01/27 10:16:29
web.xml その1

<?xml version="1.0" encoding="Shift_JIS" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2e"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4" >
<context-param>
<param-name> username </param-name>
<param-value> root </param-value>
</context-param>
<context-param>
<param-name> password </param-name>
<param-value> root </param-value>
</context-param>
<welcome-file-list>
<welcome-file> /ib.jsp </welcome-file>
</welcome-file-list>
</web-app>
816デフォルトの名無しさん:05/01/27 11:48:32
ツールバーについての質問です。

ツールバーをコンテナに追加したいのですが、
その際、BorderLayoutで配置させる必要があると調べました。
しかし、コンテナのsetLayoutをnullにしてあるので、
BorderLayoutでの配置ができません。
この場合、どうしたらよいのでしょうか?
817デフォルトの名無しさん:05/01/27 13:15:11
>>816
BorderLayoutのCENTERの部分のレイアウトをNULLにする
818デフォルトの名無しさん:05/01/27 13:44:36
>>817

ご回答ありがとうございます。
もう少し詳しく教えていただけないでしょうか?
819デフォルトの名無しさん:05/01/27 13:50:53
>>818
こっちは宿題を答えるスレなのでJava質問・相談スレッドの方に行ってくれ
820デフォルトの名無しさん:05/01/27 14:04:09
>>819
すいません。そうします。
821デフォルトの名無しさん:05/01/27 19:11:03
>>800-802
を何とぞお願い致します・・・・M(_ _)m
822デフォルトの名無しさん:05/01/27 22:19:01
JavaとJavaScriptの違いについて簡単に述べなさい

お願いorz
823おながいします。:05/01/27 22:54:45
引数であるディレクトリの絶対パスを渡し、その中からA.txtというファイルを取得する。
A.txtがない場合、引数のディレクトリの下位ディレクトリから探す。
A.txtを取得したら、その中の"aaa"という文字列を"bbb"に書き換える。

よろしくおながいします。漏れには無理です……。
824デフォルトの名無しさん:05/01/27 23:57:51
>>823
public static void main(String[] args) throws Exception {
String fileName = searchFile(args[0], "A.txt");
if (fileName == null) {
System.out.println("見つかりません");
System.exit(1);
}
BufferedReader br = new BufferedReader(new FileReader(
new File(fileName)));
String str = "";
while (br.ready()) {
str += br.readLine() + "\n";
}
br.close();
str = str.replaceAll("aaa", "bbb");

FileOutputStream fos = new FileOutputStream(new File(fileName));
OutputStreamWriter osw = new OutputStreamWriter(fos);
BufferedWriter out = new BufferedWriter(osw);

out.write(str);
out.flush();

fos.close();
osw.close();
out.close();
System.out.println("変えました。");
}
825デフォルトの名無しさん:05/01/27 23:58:43
private static String searchFile(String path, String fileName) {
File file = new File(path);
File[] listFiles = file.listFiles();
for (int i = 0; i < listFiles.length; i++) {
if (listFiles[i].isDirectory()) {
String goal = searchFile(listFiles[i].getAbsolutePath(),
fileName);
if (goal != null) {
return goal;
}
} else {
if (listFiles[i].getName().equals(fileName)) {
return listFiles[i].getAbsolutePath();
}
}
}
return null;
}
826tatata:05/01/28 15:38:54
ネット上での オセロ大会を 開こうと思っています。
今考えているのは 64人のトーナメント制です。
つきましては 魅力的なオセロゲームのプログラムと、スムーズに
進行できるような インターフェースを考えてくれませんか?
827デフォルトの名無しさん:05/01/28 17:45:51
感動的な丸投げだ。
初心者です。よろしくお願いいたします。

現在学校で取り組んでるプロジェクトの中で出てくるプログラム「
虚数クラス」で、配列を利用して虚数を表現(a + bi の型)するのですが、
toString関数 http://java.sun.com/j2se/1.3/docs/api/
この虚数をStringで返すtoString関数の使い方がいまいちわかりません。
API読みましたが、シンタックスのレベルでの使い方がいまいちです。

よろしくお願いします。
829デフォルトの名無しさん:05/01/28 22:08:53
>>828
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Object.html#toString()

toString()はそのクラスオブジェクトの文字列表現を返すメソッドです。
虚数クラスだったらa+biの形の文字列を帰せばいいのでは?
830デフォルトの名無しさん:05/01/28 23:02:53
さっそくのご返答ありがとうございます。APIにもありました、

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

はどういう意味なのでしょうか?
831デフォルトの名無しさん:05/01/28 23:22:49
>>830
getClass().getName() + '@' + Integer.toHexString(hashCode())
このオブジェクトのクラスを取得し名前をStringで取得。
charの@を付加。
このオブジェクトのハッシュコードの16進表現Stringを付加。

虚数をint[2]の配列で表現しているのなら
public String toString(){
return Integer.toString(i[0])+"+"+i[1]+"i";
}
みたいな感じでいいんでないでしょか。
832デフォルトの名無しさん:05/01/28 23:41:15
素早いご返事ありがとうございます。ダイレクトな説明、感動しました。

すると、getClass().getName() + '@' + Integer.toHexString(hashCode()) の
Integer.toHexString(hashCode()) の部分が return される部分ということですね。
ハッシュコードの16進表現String、というのはこの場合、数値(double)の、表示上
は数値のString化という理解の仕方でよろしいのでしょうか?
833デフォルトの名無しさん:05/01/28 23:49:34
>>832
全体がreturnされます。
また、ハッシュコードはintの整数値であり、
この場合、これを16進表現したStringが連結されます。
834デフォルトの名無しさん:05/01/29 00:05:45
ご返答ありがとうございます。なるほど、わかりました。
また調べて何かわからないことがあったら質問させてください。

どうも有り難うございました。
835デフォルトの名無しさん:05/01/29 01:28:01
836デフォルトの名無しさん:05/01/29 20:00:08
(1)学籍番号、国語、数学、英語の各教科の点数を標準入力で入力し、生徒ごとの全科目の総得点
と科目ごとおよび総得点の平均点を出力するプログラム。

1234567 83 78 82
1234568 79 82 73
1234569 76 80 71
:
:
1234590 72 78 80

<結果の表示例>
学籍番号 国語 数学 英語 合計
--------------------------------
1234567   83   78 82 243
1234568 79 82 73 234
1234569 76 80 71 237
:
:
1234590 72 78 80 230
-------------------------------
平均 73.2 75.4 77.8 225.4

read_student:学籍番号、得点を格納
print_student:氏名と得点を出力
calc_total_of_student:生徒一人について総得点を計算
add_student_to_sum:生徒一人分の得点を合計点に積算
(2)(1)に継承を用いて、成績を国語、数学、英語の3教科から理科、社会を加えた5教科に拡
張せよ。
(3)(1)(2)それぞれファイル入力にし、生徒ごとの全科目の総得点と科目ごとおよび総得
点の平均点を追加したファイルを出力するプログラム。
837デフォルトの名無しさん:05/01/29 22:38:44
>>836
できた。今から貼ります。
838837:05/01/29 23:04:28
839デフォルトの名無しさん:05/01/30 00:07:32
ナップザック問題がNPに属すること、即ちそのnodeterministicなアルゴリズムを記述せよ

・ナップザック問題:それぞれ異なる大きさと価格が割り当てられているn個の荷物と、制限された容量を持つナップザックが与えられた時、
価格の和が最大となるようにナップザックに詰めこめる荷物を選べ。

教えていただけませんか、よろしくお願いします
840デフォルトの名無しさん:05/01/30 01:08:16
>>826
一つ聞きたいのだが、それは本気で依頼をしてるのですか?
返答次第では作成してもいいのだが・・・
841デフォルトの名無しさん:05/01/30 08:55:27
>>838ありがとうございました。
実行できる環境にいないので実行して問題があれば
またお願いします
842デフォルトの名無しさん:05/01/30 15:23:05
>>838のソースに詳しいコメント付けてください。。。
お願いします。
843837:05/01/30 15:57:39
>>842は質問者ですか?
もしそうならやるけど、違ってたら無駄足だしなー。。
844デフォルトの名無しさん:05/01/30 16:01:46
>>838じゃないけど、
これ以上詳しくしたら一行ごとにコメント書くことになりそうな予感。
845837:05/01/30 16:09:21
>>844
かもね。。
まーでもリファクタリングしたいところもあるし
ちょっとやってみますわー。
846デフォルトの名無しさん:05/01/30 16:19:54
>>843質問者です
847tatata:05/01/30 17:42:09
はい。もちろん本気です。返事が遅れてすいません。
学校が休みに入り なにか楽しい事がやりたいと思い 考えましたが
なにぶん 知識を 技術もほとんど無く、困っていた時にここを知りました。
どうにか お願いできないでしょうか。
848デフォルトの名無しさん:05/01/30 18:08:30
>>847
既にあるからリサーチから始めなさい
849tatata:05/01/30 18:17:22
ネット上や 何かの本に 似たようなのが あるという事ですか?
ありがとう ございました。 探してみます。
850837:05/01/30 18:19:29
>>836
コメント書いた。これ以上詳しく書けと言われたらたぶんキレます。
http://www.wikiroom.com/java/?%A5%BD%A1%BC%A5%B9%C5%BD%A4%EA%C9%D5%A4%B13
851kkk:05/01/30 18:24:18
JAVA script で表示されている画像をどうにかして保存することはできないものでしょうか…
852デフォルトの名無しさん:05/01/30 18:24:32
>>850ありがとうございました。
(1)は実行できたのですが(2)はエラーがでて
実行できませんでした。どこがだめなんでしょう?
853837:05/01/30 18:29:18
>>852
5教科入れてないんじゃないの?
854デフォルトの名無しさん:05/01/30 18:29:30
といってエラーメッセージすら書かない奴が多いのはいい加減何とかならんのか。
855デフォルトの名無しさん:05/01/30 18:35:04
"30 1 180\n"
"23 0 165\n"


こういうデータがそれぞれ1行の配列として与えられたとき、
int Age[50000];
int Sex[50000];
int Height[50000];
この3つの変数に順に代入していくにはどういう文を書けばいいんですか?

てか Java には scanf みたいな機能って付いてないんですか?
856デフォルトの名無しさん:05/01/30 18:37:06
>>855
質問スレに池
857デフォルトの名無しさん:05/01/30 18:37:44
【Java宿題スレッド基本ルール 五箇条のご誓文】

@ 問題文は自己省略せずに、直接全部貼り付けてください。
   宿題&課題をそのまま丸投げするのが、一番好ましい提示法です。

A 数学問題は何々法でせよだけでなく、その解を出す為の数式を
   具体的に詳細に説明してください。
  ただ、数学問題の回答率は低いです・・・。

B 宿題&課題とその回答プログラムに対する質問はOKですが、
   それ以外の質問はここではしないでください。

C JavaScriptなど、他言語の課題はやめてください。

D もし自分の提示課題への回答プログラムが返って来たら、
  動いた動かなかった位の返レスをお願いします。

E コードをwikiに張ることは禁止です。
858デフォルトの名無しさん:05/01/30 18:39:40
>>857
六箇条じゃん
859デフォルトの名無しさん:05/01/30 18:40:04
>>854継承やったことないんで。。。
ScoreEx.java:76 'class'または'interface'がありません
import java.io.BufferedReader;
^
ScoreEx.java:77 'class'または'interface'がありません
import java.io.IOException;
^
ScoreEx.java:78 'class'または'interface'がありません
import java.io.InputStreamReader;
^
ScoreEx.java:79 'class'または'interface'がありません
import java.util.ArrayList;
^
ScoreEx.java:80 'class'または'interface'がありません
import java.util.Iterator;
^
ScoreEx.java:81 'class'または'interface'がありません
import java.util.StringTokenizer;
^
860837:05/01/30 18:41:27
837です。
>>859のフォロー頼む。。
もう疲れた。。
861デフォルトの名無しさん:05/01/30 19:30:47
>>847
Javaを実行できる環境を持っているのなら、簡単なサーバープログラムを
作りますが・・・
862デフォルトの名無しさん:05/01/30 19:33:41
>>847
Javaを実行&コンパイルできる環境を持っているのなら、
簡単なサーバープログラムを 作りますが・・・

863デフォルトの名無しさん:05/01/30 19:46:25
任意のURLにアクセスして、HTMLのソースを拾ってくるプログラムを作りたいのですが
URLConnectionとgetHeaderFieldをつかってヘッダ情報を取得するまでは出来ました。
そこから先、ドキュメント部分の情報を取得したいのですが、どうすればいいかわかりません。
864デフォルトの名無しさん:05/01/30 19:54:10
getOutputStream()を使いませう。
865デフォルトの名無しさん:05/01/30 19:56:53
>>864
URLConnectionとgetOutputStreamでgoogleったらそれらしきページが見つかりました
ありがとうございますm(  )m
866デフォルトの名無しさん:05/01/30 19:57:54
情報を入力してファイルに出力する処理を作成する。
レイアウトは下記の通りとし、情報の登録が1つ終わった
時点でプログラム終了させる。

入力画面:

情報を入力してください。

番号:

名前:

情報を登録しました。

出力ファイルレイアウト:
――――――――――――
番号:1
名前:aaa

番号:2
名前:bbb

番号:3
名前:ccc
――――――――――――

という課題です。どうかよろしくおねがいします。
867デフォルトの名無しさん:05/01/30 20:24:44
>>859お願いします
868デフォルトの名無しさん:05/01/30 21:14:22
>>867
ScoreEx.javaの76行より前には何が書いてあるの?
コピペミスじゃないの?
ScoreEx.javaというファイルを作ってWikiからそのままコピペすれば
そんなことにはならない。
869デフォルトの名無しさん:05/01/30 21:16:50
>>866
import java.io.*;
public class Q866 {
private static final File FILE = new File("file866.txt");
private static final String LINE_STRING = "――――――――――――";
StringBuffer buf = new StringBuffer();
String id;
String name;
public static void main(String[] args) {
Q866 self = new Q866();
try {
self.open(FILE);
self.start();
self.write(FILE);
} catch( IOException ioe ) {
ioe.printStackTrace();
}
}
private void open(File file) throws IOException {
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while( (line=br.readLine())!=null ) {
if( !line.equals(LINE_STRING) ) buf.append(line + "\n");
}
} catch( FileNotFoundException fnfe ) {
System.out.println( FILE.getName() + "がないので作成します。" );
if(file.createNewFile()) open(file);
}
}
870デフォルトの名無しさん:05/01/30 21:17:32
>>866
つづき
private void start() throws IOException {
System.out.println("情報を入力してください。");
System.out.print("番号:");
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
id = br1.readLine();
System.out.print("名前:");
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
name = br2.readLine();
}
private void write(File file) throws IOException {
buf.append("番号:" + id + "\n");
buf.append("名前:" + name + "\n\n");
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(file));
bw.write(LINE_STRING + "\n");
bw.write(buf.toString());
// bw.write("\b" + LINE_STRING + "\n");
bw.write(LINE_STRING + "\n");
} catch( IOException ioe ) {
ioe.printStackTrace();
} finally {
if( bw != null ) bw.close();
}
}
}

\bのバックスペースがうまくきかない。。
871デフォルトの名無しさん:05/01/30 21:49:47
>869
ありがとうございました。
やっと寝れそうです・・・
872デフォルトの名無しさん:05/01/30 21:57:16
>>868(2)だけコピペすればいいんですか?
873デフォルトの名無しさん:05/01/30 21:57:43
>>859
わざわざWikiに、(1)(2)(3)とファイルごとに項目を分けて書いてくれて、
各ファイルの名前までコメントに書いてくれた親切な回答を受け取っておきながら、
なんですべて一つのファイルにまとめるんだよ。

ScoreEx.javaは72行しかないのにどうやって76行目でエラー出すんだよ。魔法か?
念力か?

(1)(2)(3)それぞれ別ファイルに分けろや。
874デフォルトの名無しさん:05/01/30 22:17:31
>>873(2)だけ貼り付けてコンパイルすると
C:\java>javac ScoreEx.java
ScoreEx.java:4: シンボルを解決できません。
シンボル: クラス Score
場所 : ScoreEx の クラス
public class ScoreEx extends Score {
^
ScoreEx.java:16: シンボルを解決できません。
シンボル: メソッド getClass ()
場所 : ScoreEx の クラス
System.out.println( self.getClass().getName() );
^
ScoreEx.java:18: シンボルを解決できません。
シンボル: メソッド read_student ()
場所 : ScoreEx の クラス
self.read_student();
^
ScoreEx.java:32: シンボルを解決できません。
シンボル: 変数 super
場所 : ScoreEx の クラス
super.print_student_loop();
^
ScoreEx.java:34: シンボルを解決できません。
シンボル: メソッド getAllList ()
場所 : ScoreEx の クラス
int count = getAllList().size();
システムリソースが不足しています。
詳細は次のスタックトレースで調査してください。
java.lang.OutOfMemoryError
875デフォルトの名無しさん:05/01/30 22:25:10
おいおい、継承の問題なんだろうが。ちゃんと授業聞いているのか?

ScoreExはScoreを継承しているのだから、コンパイルするにも実行するにも
Score.classがクラスパスに必要。

クラスパスって何?とか言うつもりなら、とりあえずScore.javaもScoreEx.javaも
同じフォルダに置いて、先にScore.javaをコンパイルしてから、ScoreEx.javaを
コンパイルしろ。
876デフォルトの名無しさん:05/01/30 22:28:37
文字列を全てコピーするのってどうやるの?
String OTZ = 何か入ってる , orz = 何か入ってる;
OTZ = orz;
じゃだめでつか?
877デフォルトの名無しさん:05/01/30 22:31:11
>>875
C:\java>javac Score.java

C:\java>javac ScoreEx.java
ScoreEx.java:4: シンボルを解決できません。
シンボル: クラス Score
場所 : ScoreEx の クラス
public class ScoreEx extends Score {
^
ScoreEx.java:16: シンボルを解決できません。
シンボル: メソッド getClass ()
場所 : ScoreEx の クラス
System.out.println( self.getClass().getName() );
^
ScoreEx.java:18: シンボルを解決できません。
シンボル: メソッド read_student ()
場所 : ScoreEx の クラス
self.read_student();
878デフォルトの名無しさん:05/01/30 22:35:31
>>877
コマンドブロンプトで
set classpath
と打った結果を表示してくれ
879デフォルトの名無しさん:05/01/30 22:36:27
>>878
CLASSPATH=C:\Program Files\pcdNavi\bin\pcdnavi.zip;
880デフォルトの名無しさん:05/01/30 22:37:27
>>876
質問スレ行って。
881デフォルトの名無しさん:05/01/30 22:39:05
>>879
set classpath=%classpath%;.
と入力してからやってくれ
882881:05/01/30 22:39:45
あ〜
最後のドットを見落とさないように
883デフォルトの名無しさん:05/01/30 22:43:21
>>882できました。ありがとうございました。
つきやる時(コマンドプロンプトを終了した時、PCの電源切ったとき)は
またset classpath=%classpath%;.と入力しなくちゃいけないんですか?
884デフォルトの名無しさん:05/01/30 22:47:15
クラスパス良くわかってないみたいなのに、なんでクラスパスしてるんだろう?
885デフォルトの名無しさん:05/01/30 22:55:39
>>883
OSによって違ってくるんで環境変数なりautoexec.batなりでぐぐれ
886デフォルトの名無しさん:05/01/30 23:10:17
すいません>>866なんですが
せっかくやってもらったんですが
出力ファイルレイアウト:
――――――――――――
番号:1
名前:aaa

番号:2
名前:bbb

番号:3
名前:ccc
――――――――――――

の部分の上下のラインが邪魔といわれてしまって
自分で書き換えてみたのですが、実行するごとに
ファイルが上書きされてしまってうまくいかないんです。
どうにかならないでしょうかorz

887885:05/01/30 23:11:08
すいません>>883はアンカーミスです
888デフォルトの名無しさん:05/01/30 23:15:49
【質問です】
winXPで、tomcatを動かそうとしたんです。
JAVA_HOMEが設定されていないので、tomcat起動できないんですよ。

でautoexec.batを捜したら、ないんですよ。。。



みなさんは、どこに設定してますか?
889デフォルトの名無しさん:05/01/30 23:17:01
>>888
システムプロパティ→環境変数
890デフォルトの名無しさん:05/01/30 23:17:22
config.sysはありましたか?
891デフォルトの名無しさん:05/01/30 23:21:06
>>889, >>890
おお、configもない!!
ま、configはすでに実質的に書き換えることなく7,8年過ごしていたから、
違和感はなかったです、はい。

やっぱ環境変数なのですね、ありがとうございます。
少し、システマティックな人間にverUpしてみます。
892869:05/01/30 23:24:59
>>886
フィールド宣言の
private static final String LINE_STRING = "――――――――――――";
を削除。

open()メソッドの
if( !line.equals(LINE_STRING) )
を削除。

write()メソッドの
bw.write(LINE_STRING + "\n");
を削除(2箇所あります)。


でどーでしょ。

つーか出題者が悪いよコレは。。。
893885:05/01/30 23:33:23
>>892
おおおおおお、できました。
余計な部分まで削除してしまったみたいです。
たびたびの質問に回答くださって
ほんとにありがとうございました。

894デフォルトの名無しさん:05/01/31 00:33:22
どうかお願いします...

国語、数学、英語各200人分(学籍番号1〜200)の成績データファイル
(score.dat)をプログラムに読み込み、以下の条件を満たす、
また処理を行うことが可能な成績処理プログラムを作成しなさい。
1.個人の3教科の平均点(小数点第2位を四捨五入)の算出と表示
2.各教科の平均点の算出(小数点第2位を四捨五入)
3.各教科の最高点、最低点の検出
4.3教科の合計点数の良い順に並べ替え、学籍番号、各教科得点、
  合計点数と並べて表示させる
5.メニュー画面を設ける
6.各処理においてメソッドを分割し、オブジェクト指向を確立したプログラムとする

読み込むデータファイルscore.datは
Japanese
72
99
Math
88
48
English
13
77
こんな縦一列のデータです。数字は省略しましたが各200ずつ計600で、
データ数はJapanese・Math・Englishの行含め全部で603です。
上から順に出席番号1番2番・・・200番となります。

外部から読み込んだファイルデータ、しかも数値と文字の混じったデータの
数値だけ抜き出しての配列変換の仕方がまずわかりません。
ご教授下さい。
895894:05/01/31 00:35:50
896デフォルトの名無しさん:05/01/31 01:00:11
>オブジェクト指向を確立したプログラム
歴史に名を刻むのか。
897デフォルトの名無しさん:05/01/31 01:36:48
各処理においてメソッドを分割し、オブジェクト指向を確立するって
それはむしろ構造化プログラミングの範囲内だと思うのだが・・・
898デフォルトの名無しさん:05/01/31 12:34:45
クライアント二人が接続してゲーム対戦させるサーバーを作れ。
ゲームの種類は自由にするとの課題が出ました。
お願いします
899894:05/01/31 21:17:09
一応、外部ファイルの教科項目をIFで除いて
成績だけ読み込んで配列に割り当てたんですが、
文字列型のデータを数値に変換する方法がわかりません。

import java.io.*;

public class java05 {

public static void main(String args[]) throws IOException{
String ss;
int i=0, j=0, k=0, m=0, n=0, x=0;
int data[] =new int[200];
String a[][] =new String[4][201];

BufferedReader fin = new BufferedReader(
new FileReader("score.dat"));

for(i=1; i<=3; i++){
for(j=0; j<=200; j++){
ss=fin.readLine();
if(j!=0){
a[i][j]=ss;
System.out.println("("+i+","+j+")="+a[i][j]);
}
}
}
fin.close();
}
}

どうか、よろしくお願いします…
900デフォルトの名無しさん:05/01/31 22:00:47
>>899
Integer.parseInt()
などを使ってみてはいかがか。
901デフォルトの名無しさん:05/01/31 22:21:24
>>894
>5.メニュー画面を設ける
正直この一行でやる気が一気になくなる。
902894:05/01/31 22:33:13
>>900
ありがとうございます。この2行追加したらちゃんと
数値に変換できました。
int data[][] =new int[4][201];
data[i][j]=Integer.parseInt(ss);

>>901
申し訳ありません…
各処理ごとのメソッドだけでもお助けくださると
嬉しいです
903901:05/01/31 22:46:35
>>902
途中までやったんで後は神を待って。4と5がまだ。
import java.io.*; import java.util.*;
public class Q894 {
private static final File FILE = new File("score.dat");
private static final String JAPANESE = "Japanese";
private static final String MATH = "Math";
private static final String ENGLISH = "English";
private static final int HEAD_COUNT = 200;
ArrayList japaneseList = new ArrayList(HEAD_COUNT);
ArrayList mathList = new ArrayList(HEAD_COUNT);
ArrayList englishList = new ArrayList(HEAD_COUNT);
public static void main(String[] args) {
Q894 self = new Q894();
try {
self.read(FILE);
for( int i=0; i<HEAD_COUNT; i++ ) {
System.out.println( (i+1) + "さんの平均点:" + Math.round(self.calculatePersonScore(i)*10.0/3)/10.0 );
}
System.out.println( "国語平均点:" + self.calculateScoreAverage(self.japaneseList) );
System.out.println( "数学平均点:" + self.calculateScoreAverage(self.mathList) );
System.out.println( "英語平均点:" + self.calculateScoreAverage(self.englishList) );
System.out.println( "国語最高点:" + self.getMax(self.japaneseList) );
System.out.println( "国語最低点:" + self.getMin(self.japaneseList) );
System.out.println( "数学最高点:" + self.getMax(self.mathList) );
System.out.println( "数学最低点:" + self.getMin(self.mathList) );
System.out.println( "英語最高点:" + self.getMax(self.englishList) );
System.out.println( "英語最低点:" + self.getMin(self.englishList) );
} catch( IOException ioe ) {
ioe.printStackTrace();
}
}
904901:05/01/31 22:47:11
つづき
private void read(final File file) throws IOException {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
String line;
int i=0; int j=0; int k=0;
// 国語読み込み
if(!br.readLine().equals(JAPANESE)) System.exit(1);
while( !(line=br.readLine()).equals(Q894.MATH) ) {
japaneseList.add( new Integer(line) );
i++;
}
if( i!=HEAD_COUNT ) throw new IllegalArgumentException("国語の受験者数が変です");
// 数学読み込み
while( !(line=br.readLine()).equals(Q894.ENGLISH) ) {
mathList.add( new Integer(line) );
j++;
}
if( j!=HEAD_COUNT ) throw new IllegalArgumentException("数学の受験者数が変です");
// 英語読み込み
while( (line=br.readLine()) != null ) {
englishList.add( new Integer(line) );
k++;
}
if( k!=HEAD_COUNT ) throw new IllegalArgumentException("英語の受験者数が変です");
} catch( FileNotFoundException fnfe ) {
fnfe.printStackTrace();
} catch( IOException ioe ) {
ioe.printStackTrace();
} catch( NumberFormatException nfe ) {
nfe.printStackTrace();
905901:05/01/31 22:48:09
つづき
} catch( IllegalArgumentException iae ) {
iae.printStackTrace();
} finally {
if( br!=null ) br.close();
}
}
private int calculatePersonScore(int pos) {
int japaneseScore = ((Integer)japaneseList.get(pos)).intValue();
int mathScore = ((Integer)mathList.get(pos)).intValue();
int englishScore = ((Integer)englishList.get(pos)).intValue();
return japaneseScore+mathScore+englishScore;
}
private double calculateScoreAverage(ArrayList scoreList) {
Iterator iterator = scoreList.iterator();
int sum = 0;
while(iterator.hasNext()) {
sum += ((Integer)iterator.next()).intValue();
}
return Math.round( sum*10.0 / scoreList.size() )/10.0;
}
private int getMax(ArrayList scoreList) {
Integer[] scores = (Integer[])scoreList.toArray(new Integer[0]);
Arrays.sort(scores);
return scores[HEAD_COUNT-1].intValue();
}
private int getMin(ArrayList scoreList) {
Integer[] scores = (Integer[])scoreList.toArray(new Integer[0]);
Arrays.sort(scores);
return scores[0].intValue();
}
}
906デフォルトの名無しさん:05/02/01 00:13:56
丸投げですがお願いいたします

問題1
コマンドライン引数として受け取った四則演算を行い
その結果を表示するプログラムCalc.javaを作成せよ
※掛け算は実行できなくて良い
※引数は、3つ固定(数値、記号、数値)
※Swich文を使う

実行例1
>java Calc 1 + 2
3

実行例2
>java Calc 5 + 2
2.5

実行例3
>java Calc 1.2 - 0.3
0.9

---------------------------------------------------
問題2
コマンドライン引数として整数を1つ(文字列として)受け取り
その文字列尾整数に変換し5倍した値を表示するプログラム
Parse5.javaを作成せよ
※Integer.parseIntメソッドなどを利用してはいけない(手動で)
※整数以外が与えられた場合のことは考えなくても良い

実行例
>java Parse5 123
612
907894:05/02/01 00:20:05
>>901
どうもありがとうございます!
平均点、最高点、最低点がきっちり出ました!

しかし本当に、、申し訳ないのですが、
内容が私には少し高度すぎてわかりません…
フローチャートを描かなくてはならないので、内容をそれなりに
把握できないとだめなんです。
ArrayListもselfもわかりません。まだ入門レベルの本が終わった位です。
もう少し…易しくしてください…
908デフォルトの名無しさん:05/02/01 10:50:49
ハァハァ
大丈夫。おじさんはやさしいよ
909デフォルトの名無しさん:05/02/01 11:10:06
課題1

次の処理を行うプログラムを作成しなさい。なお、ソースファイル名はTest1.javaにしてください。
@背景色が灰色のアプレットのほぼ中央に、「ネットワークプログラミング」という文字列を黄色で描き、
その文字列の周囲を白色の線で囲みます。
以上です。よろしくおねがいします。
910>>909:05/02/01 15:18:37
//<applet code="Test1.class" width="300" height="300"></applet>
import java.applet.Applet;
import java.awt.*;
public class Test1 extends Applet{
private Image img;
public void init(){
Dimension d = getSize();
int width = d.width, height = d.height;
img = createImage(width, height);
int centerX = width/2;
int centerY = height/2;
Graphics g = img.getGraphics();
g.setColor(Color.GRAY);
g.fillRect(0, 0, width, height);
g.setColor(Color.YELLOW);
g.drawString("ネットワークプログラミング", centerX-75, centerY+4);
g.setColor(Color.WHITE);
int sx = 100, sy = 15;
g.drawRect(centerX-sx, centerY-sy, sx*2, sy*2);
}
public void paint(Graphics g){
g.drawImage(img, 0, 0, this);
}
public void update(Graphics g){
paint(g);
}
}
911GPS:05/02/01 16:47:36
今、EZアプリでGPSを使って現在地の経度・緯度を求めるプログラムと
携帯の画面に現在地を表示させるプログラム(経度・緯度はプログラムに書いて)を
作ったんですけど、誰かこの2つを1つのプログラムにしてくれませんか?
GPSを使って現在地の経度・緯度を求めるプログラム(GPSReader.java)
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import com.kddi.system.*;
public class GPSReader extends MIDlet implements CommandListener{
GPSCanvas gpsCanvas;
Command exitCommand, gpsCommand;
Display display;
public GPSReader(){
display = Display.getDisplay(this);
exitCommand = new Command("Exit",Command.EXIT,1);
gpsCommand = new Command("GPS",Command.SCREEN,1);

gpsCanvas = new GPSCanvas(); gpsCanvas.setCommandListener(this);
gpsCanvas.addCommand(exitCommand); gpsCanvas.addCommand(gpsCommand);
display.setCurrent(gpsCanvas);}
public void startApp(){ } public void pauseApp(){ } public void destroyApp(boolean unconditional){ }
public void commandAction(Command command,Displayable screen){
if(command==exitCommand){
destroyApp(false); notifyDestroyed();
}if(command==gpsCommand){
gpsCanvas.showLocation();
}}
912GPS:05/02/01 16:49:53
(GPSReader.java)の続きです。
public class GPSCanvas extends Canvas
{
Location location;
String latitude = "", longitude = "";
Font font;
int width, height;
public GPSCanvas(){
font = Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN,Font.SIZE_SMALL);
width = getWidth(); height = getHeight();}
public void showLocation(){
location = GpsLocation.getLocation();
latitude = location.getLat(); longitude = location.getLon(); repaint();
}public void paint(Graphics g) {
g.setColor(255,255,200); g.fillRect(0,0,width,height);
g.setColor(0,0,0); g.setFont(font);
g.drawString("位置情報取得結果",width/2,30,Graphics.HCENTER | Graphics.VCENTER );
g.drawString("緯度",width/2,50,Graphics.HCENTER | Graphics.VCENTER );
g.drawString(latitude,width/2,60,Graphics.HCENTER | Graphics.VCENTER );
g.drawString("経度",width/2,80,Graphics.HCENTER | Graphics.VCENTER );
g.drawString(longitude,width/2,90,Graphics.HCENTER | Graphics.VCENTER );
}}}
913GPS:05/02/01 16:54:09
これがもう1つのプロです。
携帯の画面に現在地を表示させるプログラム(GraphicsCanvas.java)
import javax.microedition.lcdui.*;
final class GraphicsCanvas extends Canvas {
private Image image; private int sx = 0;
private int sy = 0; private int sc = 10;
public GraphicsCanvas() {
try {image=Image.createImage("/Img2.png");
} catch (Exception e) {}}
public void paint(Graphics g) {
g.setColor(21,67,55);
g.fillRect(0,0,getWidth(),getHeight());
g.drawImage(image,getWidth()/2,getHeight()/2,g.VCENTER|g.HCENTER);
g.setColor(21,67,55);
g.fillArc(sx+((131*60*60*100+36*60*100+4431)-(131*60*60*100+36*60*100+4141))*130/510,sy+((33*60*60*100+10*60*100+1710)-(33*60*60*100+10*60*100+1427))*140/462,5,5,0,360);
} //*****スクロール処理*****
protected void keyPressed(int code){
int pushedkey = getGameAction(code);
switch(pushedkey){
case UP: if(sy>-100) sy-=sc; break; case DOWN: if(sy<100) sy+=sc; break;
case LEFT: if(sx>-100) sx-=sc; break; case RIGHT: if(sx<100) sx+=sc; break;
default: return;} repaint();}}
##座標を求める計算の説明##
(131*60*60*100+36*60*100+4431)-(131*60*60*100+36*60*100+4141))*130/510
(現在地の経度-画面の左上の経度)*画面の横のドット数/画面の横の経度の差
sy+((33*60*60*100+10*60*100+1710)-(33*60*60*100+10*60*100+1427))*140/462
(画面の左上の緯度-現在地の緯度)*画面の縦のドット数/画面の縦の緯度の差
ほんと、誰かお願いします!!
914デフォルトの名無しさん:05/02/01 19:44:42
910さんありがとうございます。
学校でしかjavaできないので学校で試したいと思います。
javaについていけなくて苦戦しています。もっと勉強します。
どうもありがとうございました。
915デフォルトの名無しさん:05/02/01 20:32:54
>>906
// Calc.java
import java.math.BigDecimal;
public class Calc {
public static void main(String[] args) {
if( args.length!=3 ) System.exit(1);
BigDecimal v1=null, v2=null;
char ope = 0;
v1 = new BigDecimal(args[0]);
if( args[1].length()!=1 ) System.exit(1);
ope = args[1].charAt(0);
v2 = new BigDecimal(args[2]);
switch(ope) {
case '+': System.out.println( v1.add(v2).toString() ); break;
case '-': System.out.println( v1.subtract(v2).toString() ); break;
case '/': System.out.println( v1.divide(v2).toString() ); break;
}
}
}
916915:05/02/01 20:34:58
>>906
// Parse5.java
public class Parse5 {
public static void main(String[] args) {
int result = 0;
boolean negative = false;
int i = 0, max = args[0].length();
int limit;
int multmin;
int digit;
if (args[0].charAt(0) == '-') {
negative = true;
limit = Integer.MIN_VALUE;
i++;
} else limit = -Integer.MAX_VALUE;
multmin = limit / 10;
if (i < max) {
digit = Character.digit(args[0].charAt(i++), 10);
result = -digit;
}
while (i < max) {
digit = Character.digit(args[0].charAt(i++), 10);
result *= 10;
result -= digit;
}
if (negative) System.out.println(result * 5);
else System.out.println(-result * 5);
}
}
ちなみにInteger.parseInt()メソッドのほぼコピペ。例外処理は取り除いた。
ワケわからん出題者へのアンチテーゼとして。
品質が確保されているコードを使ったらアカンという意味が分からん。
917906:05/02/01 22:29:21
>>915-916
どうもありがとうございました
しかし、915のソースが

java.lang.Error: コンパイル問題が未解決です。
型 BigDecimal のメソッド divide(BigDecimal, int) は引き数 (BigDecimal) に適用できません。

というエラーでコンパイル通りませんでした
出来ればまた力添えお願いできませんでしょうか
918915:05/02/01 23:20:45
>>917
BigDecimal#divide(BigDecimal)は1.5からのメソッドなんだそうです。
俺が今の>>915に手を加えると
divide(BigDecimal)の中を実装して性格の悪いソースになるから、
1.5をインストールするか他の人に頼んでください。
919デフォルトの名無しさん:05/02/02 00:37:34
サイズが495KBだから次スレ立てよう。

>>21-23によるとテンプレ間違ってるらしいから修正できるひと降臨キボン
920デフォルトの名無しさん:05/02/02 03:34:51
java
921w:05/02/02 03:45:11
class Calc{
static double average(double num[],int n){
double average = 0;
for(int i=0;i<n;i++){
average += num[i];
}
return average/n;
}
static double varience(double num[],int n){
double varience = 0;
for(int i=0;i<n;i++){
varience += Math.pow(num[i]-average(num,n),2);
}
return varience/n;
}
static double standard_deviation(double num[],int n){
return Math.sqrt(varience(num,n));
}
}
922w:05/02/02 03:48:45
921のプログラムについてテストで問われるそうですが、どんなことを抑えておけばよいでしょうか?
他にも4つプログラムがあるんで、よろしければアドバイスいただきたく思います。明後日テストなのでヤバいです...
923デフォルトの名無しさん:05/02/02 05:06:36
>>921-922
問題
1.何を求めるプログラムか
2.誤差について考察せよ
924無職33歳 ◆9r1KO5EG3I :05/02/02 06:54:20
>>923
average >> num[i] の時、どうなるかだな…
num[i] ≒ average(num,n) の時も、i が小さい(varienceも小さい)時と i が n に近付いた(varienceも大きい)時にもどうなるかだな…

(1 * 10 ** 10) + (1 * 10 ** (-6)) がどうなるか…
925無職33歳 ◆9r1KO5EG3I :05/02/02 06:59:12
>>923
何を求めるかって、そりゃぁσに決まってるだろ!!
無職(日雇い建築現場作業員)の漏れでもそんな事位知ってるぞ!!!
926906:05/02/02 08:53:16
>>918
なるほど、そう言うことですか
では1.5を導入してみたいと思います
ご説明ありがとうございました
927デフォルトの名無しさん:05/02/02 17:13:49
投げに近いですが助力お願いしますorz


課題:キーワードから指定された音楽ファイルをwwwから検索し再生するプログラムを作成せよ。
要求1:ユーザインターフェースはGUIとし、以下を実装せよ。
・キーワード(日本語)入力欄 ・検索開始ボタン ・検索結果のヒット数表示欄
・検索結果のURLを表示する欄 ・音楽ファイル再生ボタン ・停止ボタン 
・次の音楽ファイルのURL表示ボタン(検索結果が多数の場合は1つだけURLを表示し、このボタンを押すことで
次の音楽ファイルのURLを表示)

要求2:検索は、ユーザから与えられたキーワードを既存のロボット型検索エンジンにリダイレクトして行うこと。
但し、ロボット型検索エンジンは本プログラム作成に適したものを選ぶこと(GoogleはJavaプログラムからアクセスできないので注意)

要求3:キーワードでロボット型検索エンジンに検索をかけた場合、音楽ファイルを含まないページなどがヒットすることも考えられる。
そこで、次のヒューリスティックを利用し、絞込みを行い、音楽ファイルを抽出すること
・「<embed src="URL">がページに含まれていてURLの末尾の拡張子が音の拡張子である」かつ
「<title>TEXT</title>のTEXTにキーワードが含まれている」
・「検索エンジンが返してきたページ内に<a href="URL">TEXT</a>が含まれていてURLの末尾の拡張子が音楽ファイルの拡張子」
かつ「TEXTにキーワードが含まれている」
・「検索エンジンが返してきページに<a href="URL"><img src="URL1" [alt="TEXT"]></a>が含まれていてURL
の末尾の拡張子が音楽ファイルの拡張子」かつ「ALT情報があればALT情報にキーワードが含まれている。
省略されている場合は<title>TEXT</title>のTEXTにキーワードが含まれている」
以上のどれかを満たす場合にURLをキーワードに対応する音楽ファイルと認定する。

要求4:複数キーワードには対応しなくてよい。また、非常に多くの検索結果が返ってきた場合は
適当な数に対してのみ絞込み処理を行えばよい


GUI部分とかはできてるんですが肝心の中身がサッパリです…
どうかよろしくお願いします
928デフォルトの名無しさん:05/02/02 18:39:36
M-x
のMってキーボードの何やねん?
929デフォルトの名無しさん:05/02/02 18:42:45
Alt
930デフォルトの名無しさん:05/02/02 19:19:24
メタキー。UNIX系の機種にはあった。
Windows系には無いから止むを得ずAltになった。
>>928 >>930
<ESC>キーを押して放しても同じ動作するね。
MetaキーってSunのキーボードで◆のやつだったっけ?
932デフォルトの名無しさん:05/02/02 20:35:23
string型の配列をchar型の配列に変換するのにtoCharArray()メソッドをつかって
やってみたのですがうまくいきません。このメソッドではできないのでしょうか?
933デフォルトの名無しさん
はい出来ません