【初心者】Java の宿題ここで答えます 5.0【歓迎】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
05/02/02 22:19:281. 問題文は自己省略せずに、直接全部貼り付けてください。
宿題&課題をそのまま丸投げするのが、一番好ましい提示法です。
2. 数学問題は何々法でせよだけでなく、その解を出す為の数式を
具体的に詳細に説明してください。
3. 宿題&課題とその回答プログラムに対する質問はOKですが、
それ以外の質問はここではしないでください。
4. JavaScriptなど、他言語の課題はやめてください。
5. もし自分の提示課題への回答プログラムが返って来たら、
動いた動かなかった位の返レスをお願いします。
throws
コードはwikiに貼り付けてはいけません。
512kエラーなどなかったことにします。
【前スレ】
【好調】Java の宿題ここで答えます【三巡目】
http://pc5.2ch.net/test/read.cgi/tech/1100565043/
【関連サイト】
2ch Java初心者質問スレ Wiki
0002デフォルトの名無しさん
05/02/02 22:20:352ch Java初心者質問スレ Wiki
http://www.wikiroom.com/java/
..
0003デフォルトの名無しさん
05/02/02 22:26:510004デフォルトの名無しさん
05/02/02 22:30:10Stringをchar[]?
String[]をchar[]?
String[]をchar[][]?
0005デフォルトの名無しさん
05/02/02 22:33:040006デフォルトの名無しさん
05/02/02 22:36:28StringBufferでつなげてからtoCharArray()すれば?
0007デフォルトの名無しさん
05/02/02 22:39:56String str[] = {…};
char array[];
StringBuffer sb = new StringBuffer(1000);
for(int i = 0; i < str.length;i++)
sb.append(str[i]);
array = sb.toString().toCharArray();
0008デフォルトの名無しさん
05/02/02 22:40:590009デフォルトの名無しさん
05/02/02 22:50:050010デフォルトの名無しさん
05/02/02 23:00:30なんで5.0なんだよ…。
0011デフォルトの名無しさん
05/02/02 23:21:060012デフォルトの名無しさん
05/02/02 23:31:45いくつならいいんだー
0013デフォルトの名無しさん
05/02/02 23:43:20カット、コピー、ペーストまではできたのですが、以下が手も足もでませんでした。
「ctrl-a」を「行頭に移動」 に割り当てる。
「ctrl-space」を「マーク設定」 に割り当てる。
マーク設定後はキャレットが移動すると、
その設定したマークから現在のキャレットまでが選択される。
キャレットがらみのアクションをどうかけばよいかサッパリわからないのです。
どなたかお願い致します。。
0014デフォルトの名無しさん
05/02/02 23:47:02お願いだから質問は質問スレでしてよ。
0015デフォルトの名無しさん
05/02/02 23:47:530016デフォルトの名無しさん
05/02/03 00:09:57登場してからまだ半年も経っていないのにJava5の宿題がもう沢山出るほどになったのか?
0017デフォルトの名無しさん
05/02/03 00:14:04質問スレでしたのですが、みんなわからないのかスルーされっぱなしだったので・・
両方みているかぎり、こちらのほうが親切でレベル高い人が多そうに思えたので。
間違いでしたらすみません。
またほかのところで聞いてきます。
0020デフォルトの名無しさん
05/02/03 06:54:06親切に見えるのは問題文が明確になってるから答えやすいだけ。
答える人間はたぶんどっちのスレも見てるからレベルは対して変わらんと思う。
00211/2
05/02/03 10:33:30import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import javax.swing.text.*;
import java.io.*;
public class MyEditor extends JFrame{
Container myContainer;
JTextPane myTextPane;
public static void main(String[] args){
MyEditor myApp = new MyEditor( "( New File )" );
myApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myApp.setVisible(true);
}
00222/2
05/02/03 10:34:51super( title );
setBounds( 10, 10, 800, 500 );
myContainer = this.getContentPane();
myContainer.setLayout(new BorderLayout());
myTextPane = new JTextPane();
InputMap inputMap = myTextPane.getInputMap( JComponent.WHEN_IN_FOCUSED_WINDOW );
ActionMap actionMap = myTextPane.getActionMap();
KeyStroke moveLineStartKey = KeyStroke.getKeyStroke( "ctrl A" );
inputMap.put( cutKey, moveLineStartAction );
actionMap.put( moveLineStartAction, moveLineStartAction );
}
class MoveLineStartAction extends AbstractAction{
MoveLineStartAction( String text ){ super(text); }
public void actionPerformed( ActionEvent e ){
????
}
}
}
002317
05/02/03 10:40:03ソースの最後の方の、????の部分にCaretクラスのmoveDotというメソッドで、
改行にマッチするまでmoveDot(-1)を繰り返すというようにしたいのですが、
myTextPane.moveDot(-1)はダメですよね。
自分は継承とかアクションとかがそもそもあまりよく分かっていないのだと思います。
C言語になれていていつでもどこでも関数使いたいんですが・・。
もしよろしければ作ってみてください。
スレ汚しすいませんでした。
002423
05/02/03 19:19:290025デフォルトの名無しさん
05/02/03 19:42:46上記の十人のテストの成績をwhieを用いず、二通りの方法を考え、それぞれ成績の良いものから順に並び替えて表示させよ。
0026デフォルトの名無しさん
05/02/03 20:45:070027デフォルトの名無しさん
05/02/03 21:31:090028デフォルトの名無しさん
05/02/04 01:34:59public class TestSort {
public static void main(String[] args) {
int[] points = { 62,75,84,42,93,88,69,79,69,72 };
for (int i = 100; i >= 0; i--) {
for (int j = 0; j < points.length; j++) {
if (i == points[j]) {
System.out.println(points[j]);
}
}
}
}
}
002928
05/02/04 01:35:560030デフォルトの名無しさん
05/02/04 02:40:58>>927
(音楽サーチ)
http://www.wikiroom.com/java/?%A5%BD%A1%BC%A5%B9%C5%BD%C9%D5%A4%B1
に回答例を貼っときました。
半角空白、全角空白で区切った複数キーワードに対応してます。
検索&再生できるフォーマットはMIDIだけです・・・
アクセスに時間がかかるサイトなどでは、アクセス中止ボタンを押すと
アクセスを中断できます。
真ん中のテキストエリアの情報をよく見て操作してください。
取り合えず動作例としては、「クラシック音楽の部屋」で検索して
みてください。
0031デフォルトの名無しさん
05/02/04 03:03:33題材として、一行掲示板(ログ付きのチャットと読み替え可)を作成する。
クライアントの認証機能を付ける
サーバは書き込まれた内容を管理する
以上が必須項目です。
これだけしか制限はないのですが流れは、
ログイン(ここで認証?)
書き込みかログの読み込みの選択
・書き込み
・読み込み
ログアウト
のような感じだと思います。
簡単なもので構わないと思うのですが、
Java未経験なので何をしたら良いのか見当がつきません。
どなたか作って頂けませんでしょうか・・・
どうかよろしくお願いします。
003231
05/02/04 03:09:01土曜日の夜までにお願いします
0033デフォルトの名無しさん
05/02/04 07:16:54それホントに宿題なの?Java未経験でそんな宿題なんて・・・
0034デフォルトの名無しさん
05/02/04 07:49:57サーブレットじゃなくてJavaアプリだよね
0035デフォルトの名無しさん
05/02/04 07:58:060036デフォルトの名無しさん
05/02/04 11:36:57003731
05/02/04 16:06:00本当は言語は自由なんですが、途中までJavaでやってみたんです。
サーバとクライアントを繋げるのはネットで見つけたんですけど、
その先がわからなくて・・・
過去ログにあった、チャットを使うことってできますか?
>>34
プロトコルがいまいち分からないんですけど、
レポートにアルゴリズムとかやり取りを書けば良いみたいです。
>>35
出たのは結構前なんです・・・
0038デフォルトの名無しさん
05/02/04 17:59:14>出たのは結構前なんです・・・
便秘ですか?
0039デフォルトの名無しさん
05/02/04 23:53:25難しくて解けません
0040デフォルトの名無しさん
05/02/05 02:34:10http://www.geocities.co.jp/CollegeLife-Labo/4695/java/kadai16/sample.html
0041>>31 その1
05/02/05 03:15:49import java.util.*;
import java.util.regex.*;
import java.net.*;
import java.nio.*;
import java.nio.channels.*;
public class HW76 implements HtmlText {
private static final String HOST = "http://localhost";
private static final String PORT = ":80/";
private static final Map MEMBER = new TreeMap() {
{
put("田中", "tanaka");
put("鈴木", "suzuki");
put("佐藤", "satou");
put("高橋", "takahashi");
put("山田", "yamada");
}
};
private static Map partic = Collections.synchronizedMap(new TreeMap());
private static List chatLog = new ArrayList();
public static void main(String[] args) {
Selector sel;
try {
sel = Selector.open();
ServerSocketChannel sv = ServerSocketChannel.open();
sv.configureBlocking(false);
sv.socket().bind(new InetSocketAddress(80));
sv.register(sel, SelectionKey.OP_ACCEPT);
sv = ServerSocketChannel.open();
sv.configureBlocking(false);
sv.socket().bind(new InetSocketAddress(90));
sv.register(sel, SelectionKey.OP_ACCEPT, new Object());
0042>>31 その2
05/02/05 03:16:31System.out.println("サーバーバインドエラー");
return;
}
loop: while (!sel.keys().isEmpty()) {
try {
if (sel.selectNow() == 0)
continue;
} catch (Exception e1) {
continue;
}
Iterator it = sel.selectedKeys().iterator();
while (it.hasNext()) {
SelectionKey key = (SelectionKey) it.next();
Channel ch = key.channel();
if (ch instanceof ServerSocketChannel) {
if (key.attachment() != null)
break loop;
try {
ServerSocketChannel sc = (ServerSocketChannel) ch;
SocketChannel cc = sc.accept();
cc.configureBlocking(false);
cc.register(sel, SelectionKey.OP_READ);
} catch (Exception e) {
}
} else {
SocketChannel cc = (SocketChannel) ch;
if (key.readyOps() == SelectionKey.OP_READ)
processRead(key, cc);
else
processWrite(key, cc);
}
0043>>31 その3
05/02/05 03:17:42}
}
Iterator it = sel.keys().iterator();
while (it.hasNext()) {
SelectionKey key = (SelectionKey) it.next();
try {
key.channel().close();
} catch (IOException e) { }
}
try {
sel.close();
} catch (IOException e) { }
System.out.println("サーバー終了");
}
private static void processRead(SelectionKey key, SocketChannel cc) {
try {
ByteBuffer bb = (ByteBuffer) key.attachment();
if (bb == null)
bb = ByteBuffer.allocate(1000);
if (cc.read(bb) != -1 && bb.remaining() == 0)
return;
block: {
ByteBuffer value = ByteBuffer.wrap(new byte[] { 0x0d, 0x0a, 0x0d, 0x0a });
byte[] array = bb.array();
for (int i = 0; i + 4 < array.length; i++) {
if (value.equals(ByteBuffer.wrap(array, i, 4)))
break block;
}
return;
}
0044>>31 その4
05/02/05 03:18:22key.attach(buf);
key.interestOps(SelectionKey.OP_WRITE);
} catch (Exception e3) {
}
}
private static void processWrite(SelectionKey key, SocketChannel cc) {
try {
ByteBuffer bb = (ByteBuffer) key.attachment();
try {
cc.write(bb);
} catch (Exception e) {
}
if (bb.remaining() == 0) {
try {
cc.close();
} catch (IOException e3) {
}
key.cancel();
}
} catch (Exception e) {
}
}
private static ByteBuffer controlAccess(ByteBuffer bb) throws Exception {
DataInputStream in = new DataInputStream(new ByteArrayInputStream(bb.array()));
String line = in.readLine();
String[] token = line.split(" ");
String path = token[1];
String id = "", enter = "", leave = "", text = "";
Matcher mat = Pattern.compile("^/(\\w+)").matcher(path);
0045>>31 その5
05/02/05 03:19:04id = mat.group(1);
mat = Pattern.compile("enter=([^\\&]+)").matcher(path);
if (mat.find())
enter = mat.group(1);
mat = Pattern.compile("leave=([^\\&]+)").matcher(path);
if (mat.find())
leave = mat.group(1);
mat = Pattern.compile("text=([^\\&]+)").matcher(path);
if (mat.find())
text = mat.group(1);
boolean flag = false;
String auth = "";
while ((line = in.readLine()).length() > 0) {
token = line.split(":");
if (token[0].trim().equalsIgnoreCase("Authorization"))
auth = token[1].trim();
}
StringBuffer head = new StringBuffer(), body = new StringBuffer();
String host = HOST + PORT, name = "";
if (id.length() > 0 && partic.containsKey(id)) {
name = (String) partic.get(id);
if (text.length() > 0) {
addElementToChatLog(name, text);
head.append("HTTP/1.1 303 See Other\r\n");
head.append("Location: " + host + id + "\r\n\r\n");
} else if (leave.length() > 0){
partic.remove(id);
addElementToChatLog(name + "さんが退席しました");
head.append("HTTP/1.1 303 See Other\r\n");
head.append("Location: " + host + "\r\n\r\n");
} else {
0046>>31 その6
05/02/05 03:19:49head.append("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n");
body.append(TITLE);
body.append(FORM);
generateText(body);
flag = true;
}
} else {
if (enter.length() > 0) {
if (auth.length() > 0 && (name = authorize(auth)) != null
&& !partic.containsValue(name)) {
synchronized (HW76.class) {
id = String.valueOf(System.currentTimeMillis());
}
partic.put(id, name);
addElementToChatLog(name + "さんが入室しました");
head.append("HTTP/1.1 303 See Other\r\n");
head.append("Location: " + host + id + "\r\n\r\n");
} else {
head.append("HTTP/1.1 401 Unauthorized\r\n");
head.append("WWW-Authenticate: Basic realm=\"chat\"\r\n\r\n");
}
} else {
head.append("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n");
body.append(TITLE);
body.append(ENTER);
generateText(body);
flag = true;
}
}
0047>>31 その7
05/02/05 03:20:32if (flag) {
body.append(FOOT);
bodytxt = body.toString().replaceAll("#host#", host).replaceAll("#name#", name);
byte[] bodyB = bodytxt.getBytes("Shift_JIS");
head.append("Content-Length: " + bodyB.length + "\r\n\r\n");
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(head.toString().getBytes("Shift_JIS"));
out.write(bodytxt.getBytes("Shift_JIS"));
return ByteBuffer.wrap(out.toByteArray());
}
private static void generateText(StringBuffer body) {
List view = getChatLogView();
for (int i = view.size() - 1, c = 0; i >= 0 && c < 20; i--, c++) {
String[] dat = (String[]) view.get(i);
String text = TEXT.replaceAll("#name#", dat[0]).replaceAll("#text#", dat[1]);
body.append(text);
}
}
private static String authorize(String auth) {
String base64 = auth.split(" ")[1].trim();
ByteArrayOutputStream bs = new ByteArrayOutputStream();
int pos = 0;
byte buf = 0;
for (int i = 0; i < base64.length(); i++) {
char c = base64.charAt(i);
0048>>31 その8
05/02/05 03:21:38c = (char) (c - 'A' + 0 << 2);
} else if (c >= 'a' && c <= 'z') {
c = (char) (c - 'a' + 26 << 2);
} else if (c >= '0' && c <= '9') {
c = (char) (c - '0' + 52 << 2);
} else if (c == '+') {
c = (char) (c - '+' + 62 << 2);
} else if (c == '-') {
c = (char) (c - '-' + 63 << 2);
} else {
bs.write(buf);
break;
}
buf |= (byte) (c >>> pos);
if (pos + 6 >= 8) {
bs.write(buf);
buf = (byte) (c << (8 - pos));
}
pos = pos + 6 & 0x07;
}
try {
String dec = new String(bs.toByteArray(), "Shift_JIS");
String name = dec.split(":")[0].trim();
String pass = dec.split(":")[1].trim();
if (MEMBER.get(name).equals(pass)) return name;
else return null;
} catch (Exception e) {
return null;
}
}
0049>>31 その9
05/02/05 03:22:19synchronized (chatLog) {
return Collections.unmodifiableList(chatLog);
}
}
private static void addElementToChatLog(String name, String text) {
Matcher mat = Pattern.compile("%([\\dA-F]{2})|\\w+").matcher(text);
StringBuffer sb = new StringBuffer();
ByteArrayOutputStream bt = new ByteArrayOutputStream();
while (mat.find()) {
if (mat.group().matches("\\w+")) {
try {
sb.append(new String(bt.toByteArray(), "Shift_JIS"));
bt.reset();
} catch (UnsupportedEncodingException e) {
}
sb.append(mat.group());
} else {
bt.write(Integer.parseInt(mat.group(1), 16));
}
}
try {
sb.append(new String(bt.toByteArray(), "Shift_JIS"));
} catch (UnsupportedEncodingException e) {
}
synchronized (chatLog) {
chatLog.add(new String[] { name, sb.toString() });
}
}
0050>>31 その10
05/02/05 03:22:54synchronized (chatLog) {
chatLog.add(new String[] { "情報", text });
}
}
}
interface HtmlText {
String HEAD = "<html><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>"
+ "</head><body>";
String TITLE = "<div style=\"text-align: center; font: bold 16px monospace; border: solid 2px rgb(0,0,160);"
+ "background-color: rgb(200,200,255); margin: 0% 5%\">チャットシステム</div>";
String ENTER = "<center><form action=#host# method=GET><input type=submit name=enter value=参加する></form></center>";
String FORM = "<br><form action=#host# method=GET style=\"margin: 0% 5%; border: dotted 2px rgb(160,120,200);"
+ "padding: 8px 0px; text-align: center; white-space: nowrap; background-color: rgb(250,245,255);\">"
+ "<input type=submit name=post value=送信> #name#さま:<input type=text name=text size=100 maxlength=100>"
+ "<input type=submit name=leave value=退席></form><br>";
String TEXT = "<div style=\"text-align: left; font: 16px monospace; border: dashed 1px rgb(200,200,255);"
+ "background-color: rgb(250,250,255); margin: 0% 5%; padding: 4px;\">#name#:#text#</div>";
String FOOT = "</body></html>";
}
0051デフォルトの名無しさん
05/02/05 03:28:39全部コピペしてコンパイル。
実行するとポート80にチャットサーバーがバインドされます。
インターネットエクスプローラなどのブラウザで、http://localhost
にアクセスするとチャット画面がでます。
ポート90にアクセスするとサーバーが終了します。(例:http://localhost:90)
名前&パスは
名前 パスワード
田中 tanaka
鈴木 suzuki
佐藤 satou
高橋 takahashi
山田 yamada
です
0052>>23 その1
05/02/05 03:43:51import javax.swing.text.*;
import java.awt.event.*;
public class HW75 {
public static void main(String[] args) {
final JTextArea ta = new JTextArea();
final InputMap oldmap = ta.getInputMap();
final InputMap newmap = new InputMap() {
public String toString() {
return "myMap";
}
};
newmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0), "selection-forward");
newmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), "selection-backword");
newmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "selection-up");
newmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "selection-down");
newmap.setParent(ta.getInputMap());
oldmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_DOWN_MASK),
"linehead");
oldmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, InputEvent.CTRL_DOWN_MASK),
"mark-switch");
0053>>23 その2
05/02/05 03:44:28amap.put("linehead", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
try {
int pos = ta.getCaretPosition();
int lineno = ta.getLineOfOffset(pos);
ta.setCaretPosition(ta.getLineStartOffset(lineno));
} catch (BadLocationException e1) {
}
}
});
amap.put("mark-switch", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
if (ta.getInputMap().toString().equals("myMap"))
ta.setInputMap(JComponent.WHEN_FOCUSED, oldmap);
else
ta.setInputMap(JComponent.WHEN_FOCUSED, newmap);
}
});
JFrame frame = new JFrame();
JScrollPane scroll = new JScrollPane(ta);
frame.getContentPane().add(scroll);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(640, 480);
frame.setVisible(true);
}
}
005431
05/02/05 04:01:15どうもありがとうございます。
コンパイルしてみたのですが、
HW76.java:121: 警告: java.io.DataInputStream の readLine() は推奨されません。
String line = in.readLine();
^
HW76.java:139: 警告: java.io.DataInputStream の readLine() は推奨されません。
while ((line = in.readLine()).length() > 0) {
とでました。どうしたら良いですか?
あと、これはクライアントのプログラムを作ることはできないんでしょうか?
0055デフォルトの名無しさん
05/02/05 07:52:070056デフォルトの名無しさん
05/02/05 12:08:02警告ですので、実行上は何も問題ありません。そのまま実行できます。
プログラムを簡単に作る為に、あえて非推奨メソッドを用いました。
通信時の文字セットがlatin限定の時は、readLine()は何も問題ありません。
自分のレベルでは、DataInputStream#readLine()はソケット通信の時に
非常に便利ですので、あえて使ってます。
クライアントプログラムはIEなどのブラウザです。IEでアクセス
してください。
0057デフォルトの名無しさん
05/02/05 12:33:59スレ立てどうもです。
005831
05/02/05 16:47:15実行できました。チャットも動きました
どうもありがとうございます。
0059デフォルトの名無しさん
05/02/05 17:24:300060デフォルトの名無しさん
05/02/05 17:27:29006159
05/02/05 17:34:430062デフォルトの名無しさん
05/02/05 17:42:140063デフォルトの名無しさん
05/02/05 18:42:04テストの結果を入力して
70点以上なら「合格」
それ以外なら「不合格」
というのはどのように打ちこめばいいのでしょうか?
よろしくお願いしますm(_ _)m
0064デフォルトの名無しさん
05/02/05 18:47:490065デフォルトの名無しさん
05/02/05 18:50:240066デフォルトの名無しさん
05/02/05 18:53:28006763
05/02/05 20:08:280068デフォルトの名無しさん
05/02/05 20:22:15質問は質問スレへ。
006963
05/02/05 20:48:39ああいう宿題なんです。
途中までやったのここに書こうとしたら串がなんとかでできないし・・・。
いまは携帯からですが自力でやってみます(´・ω・`)
007068
05/02/05 20:52:30そ。んじゃ。
// Seventy.java
import java.io.*;
public class Seventy {
public static void main(String[] args) throws IOException {
System.out.print( "点数を入力してください > " );
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
int score = Integer.parseInt(line);
if( score >= 70 ) System.out.println( "合格" );
else System.out.println( "不合格" );
}
}
007163
05/02/05 21:53:21今からバイトなので帰ってから試してみます!
自分でやってたのと結構ちがってますねorz
0072デフォルトの名無しさん
05/02/06 00:43:48なにか良いアイデアがあったら助かります。
0074デフォルトの名無しさん
05/02/06 07:34:45ってか自分自身のIPアドレス&ホスト名を取得したいと思ってIPアドレスを
取得するのに↓こんな量になっちゃいました。もっと簡単な方法あるでしょうか?
(この質問をすると「127.0.0.1とlocalhost」と表示されちゃうプログラムを答える人が多い…)
//////////////////////
NetworkInterface ni = null;
InetAddress ipa = null;
Enumeration enuIfs = NetworkInterface.getNetworkInterfaces();
while(enuIfs.hasMoreElements()){
ni = (NetworkInterface)enuIfs.nextElement();//NetworkInterfaceに対する処理。
}
Enumeration enuAddrs = ni.getInetAddresses();
while(enuAddrs.hasMoreElements()){
ipa = (InetAddress)enuAddrs.nextElement();//InetAddressに対する処理。
}
String ipad = ipa.toString().substring(1);
///////////////////////
ってことでString型ipadにIPアドレス(127.0.0.1じゃないよ)が格納されています。
これをホスト名に変換したいんですが…
0075デフォルトの名無しさん
05/02/06 07:54:590076デフォルトの名無しさん
05/02/06 15:03:42String host = ipad.getHostName();
としませう
007774
05/02/06 15:19:29あっ、そうするとプロバイダのホスト名じゃなく、
ローカルPC名が表示されちゃうんですよ…
なぜなんでしょうね?
ちなみに@niftyなので〜〜なんたらかんたら〜.ppp.infoweb.ne.jp
みたいに表示されるようにしたいんです。
0078デフォルトの名無しさん
05/02/06 15:26:43String host = ipad.getCanonicalHostName()
としませう
007977
05/02/06 19:56:28それでもやはりPC名が出てします…
0080デフォルトの名無しさん
05/02/06 20:18:500081デフォルトの名無しさん
05/02/06 21:04:02ダジャレ
0082デフォルトの名無しさん
05/02/06 23:54:410083oops
05/02/07 00:45:19さらにVegetableクラスから3つのサブクラス、Carrot,Pumpkin,PotatoをFruitクラスから4つのサブクラスApple,Banana,
Orange,Strawberryを作成し、display()メソッドではその種類を日本語で表示するようにしなさい(例:にんじん、りんごなど)
mainメソッドで、各サブクラスをインスタンス化しFood型に配列に格納しなさい。ループを用いてdisplay()メソッドを呼び出し
なさい。
だれかよろしくおねがいします
0084デフォルトの名無しさん
05/02/07 01:37:37Application Programming Interface
0085デフォルトの名無しさん
05/02/07 01:38:37Application Programming Interface
0086デフォルトの名無しさん
05/02/07 01:40:03abstract class Food{ abstract public void display();}
abstract class Vegetable extends Food{
protected String name;
public void display(){ System.out.println(name); } }
abstract class Fruit extends Food{
protected String name;
public void display(){ System.out.println(name); } }
class Carrot extends Vegetable{public Carrot(){ name = "にんじん"; }}
class Pumpkin extends Vegetable{ public Pumpkin(){ name = "かぼちゃ"; }}
class Potato extends Vegetable{ public Potato(){ name = "じゃがいも"; } }
class Apple extends Fruit{ public Apple(){ name = "りんご"; } }
class Banana extends Fruit{public Banana(){ name = "バナナ"; } }
class Orenge extends Fruit{public Orenge(){ name = "みかん"; } }
class Strawberry extends Fruit{public Strawberry(){ name = "いちご"; } }
public class FoodTest{
public static void main(String[] args){
Food[] foods = new Food[7];
foods[0] = new Carrot();
foods[1] = new Pumpkin();
foods[2] = new Potato();
foods[3] = new Apple();
foods[4] = new Banana();
foods[5] = new Orenge();
foods[6] = new Strawberry();
for(int i=0;i<foods.length;i++) foods[i].display();
}
}
0088デフォルトの名無しさん
05/02/08 16:25:16Write a program to allow a randomly placed remote-controlled robot (in a grid environment) to move to its home.
(The home is also randomly placed, and needs to be shown on the grid.)
The user will specify the robot moves.The robot can move horizontally or vertically but not diagonally to an adjacent cell.
It must pay $1.00 travel fee for every move it makes.
Calculate the total cost to go home.The program should not let the user drop the robot off the planet.
You can use keys such as “i” for up, “j” for left, “l” for right and “m” for down, or the arrow keys, or mouse clicks on a cell.
(The mouse clicks are harder to program.)
Update the world after each move to show the new location of the robot, relative to the home location.
The user can specify the size of the world (in terms of number of cells).
The world is a flat square (that is, it is an nXn matrix.) Using a GUI interface will earn a maximum of 110 points.
There is only one player at this time in this game.
The user can also reset a game or play a new game when the current game is over.
英文で失礼します。以下概略です。
ロボットをキーボードで操作してHOMEに帰すゲームです。
以下がゲームの必要事項です。
スタートボタンを押すとロボットとHOMEをランダムで格子状のステージに配置します。
HOMEはプレイヤーにはわからないようにします。
ロボットはキーボード操作でマスを上下左右に移動できます。(斜めはなし)
上=I, 下=M, 右=L, 左=Jのキー配置です。
ロボットが一マス動くごとに1ドルのコストがかかり、それを計算して最終的にトータルコストを表示します。
ロボットが一マス動くごとにステージをアップデートしてHOMEまでの距離を表示します。
ロボットがHOMEについた時点でゴールです。
ゴール後ウィンドウをポップアップさせてトータルのコストとリプレイするかしないかを表示します。
アプレットとgridLayoutを使って作ります。
以上です。
どなたかお願いいたします。
0089デフォルトの名無しさん
05/02/08 17:14:34交わりはNの1割くらいにする。
Nを変化させる。
ハッシュを用いる方法と最も早い整列(比較を用いる)を用いる方法の2通りを実現して、両者も比較する。
課題本文を丸写ししました。
どなたかプログラムだけでも教えて頂けないでしょうか?
お願いします。
009068
05/02/08 22:16:41// RobotApplet.java
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/*
* <applet code="RobotApplet.class" width="400" height="400"> </applet>
*/
public class RobotApplet extends Applet implements KeyListener {
public static final int SIZE_ROW = 5;
public static final int SIZE_COL = 5;
JPanel northPanel, southPanel;
JTextField messageField;
private int cost = 0;
int HOME_POS = 0;
int robot_pos = 0;
private JLabel[] labels = new JLabel[SIZE_ROW*SIZE_COL];
public void init() {
play();
}
private void play() {
cost = 0;
northPanel = new JPanel();
southPanel = new JPanel();
setLayout(new BorderLayout());
northPanel.setLayout(new GridLayout(SIZE_ROW, SIZE_COL));
for( int i=0; i<SIZE_ROW*SIZE_COL; i++ ) {
labels[i] = new JLabel();
labels[i].setFont(new Font(null, Font.PLAIN, 15));
labels[i].setBorder( BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK) );
northPanel.add(labels[i]);
009168
05/02/08 22:17:23つづき
}
robot_pos = (int)(Math.random()*SIZE_ROW*SIZE_COL);
putRobot( robot_pos );
HOME_POS = robot_pos;
do {
HOME_POS = (int)(Math.random()*SIZE_ROW*SIZE_COL);
putHome( HOME_POS );
} while( robot_pos == HOME_POS );
southPanel.add(messageField = new JTextField(10));
messageField.setEditable(false);
messageField.setText( "距離:" + calculateDistance() );
add(BorderLayout.CENTER, northPanel);
add(BorderLayout.SOUTH, southPanel);
addKeyListener(this);
}
private void putRobot(int i) {
labels[i].setText("p[-_-]q");
}
private void removeRobot(int i) {
labels[i].setText("");
}
private void putHome(int i) {
// labels[i].setText("H");
}
private int[] one2two(int i) {
if( i>SIZE_ROW*SIZE_COL-1 ) System.out.println( "ERROR at one2two()" );
return new int[]{ i/SIZE_COL, i%SIZE_COL, };
}
private int two2one(int[] is) {
int i = is[0]*SIZE_COL + is[1];
009268
05/02/08 22:17:53つづき
if( i>SIZE_ROW*SIZE_COL-1 ) System.out.println( "ERROR at two2one()" );
return i;
}
private int calculateDistance() {
int[] robot_pos__ = one2two(robot_pos);
int[] home_pos__ = one2two(HOME_POS);
return Math.abs(robot_pos__[0]-home_pos__[0]) + Math.abs(robot_pos__[1]-home_pos__[1]);
}
public void keyTyped(KeyEvent ke) {
removeRobot(robot_pos);
// 上
if(ke.getKeyChar() == 'i' || ke.getKeyChar() == 'I') {
robot_pos = (robot_pos - SIZE_COL < 0 ? robot_pos : robot_pos - SIZE_COL);
cost++;
// 下
} else if(ke.getKeyChar() == 'm' || ke.getKeyChar() == 'M') {
robot_pos = (robot_pos + SIZE_COL > SIZE_ROW*SIZE_COL-1 ? robot_pos : robot_pos + SIZE_COL);
cost++;
// 右
} else if(ke.getKeyChar() == 'l' || ke.getKeyChar() == 'L') {
robot_pos = ( one2two(robot_pos)[1]+1 > SIZE_COL-1 ? robot_pos : robot_pos+1 );
cost++;
// 左
} else if(ke.getKeyChar() == 'j' || ke.getKeyChar() == 'J') {
robot_pos = ( one2two(robot_pos)[1]-1 < 0 ? robot_pos : robot_pos-1 );
cost++;
}
putRobot(robot_pos);
int distance = calculateDistance();
messageField.setText( "距離:" + distance );
009368
05/02/08 22:19:08つづき
if( distance == 0 ) {
removeKeyListener(this);
final JDialog dialog = new JDialog( new JFrame(), "おめ", true );
dialog.setSize( 200, 100 );
dialog.setLayout(new BorderLayout());
JLabel messageLabel = new JLabel();
messageLabel.setText( "コスト:" + cost);
JButton continueButton = new JButton("続ける");
JButton cancelButton = new JButton("やめる");
continueButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
dialog.dispose();
play();
repaint();
}
});
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
dialog.dispose();
}
});
dialog.add(BorderLayout.CENTER, messageLabel);
JPanel p = new JPanel();
p.add(continueButton);
p.add(cancelButton);
dialog.add(BorderLayout.SOUTH, p);
dialog.setVisible(true);
}
}public void keyPressed(KeyEvent ke) {}public void keyReleased(KeyEvent ke) {}
}
009468
05/02/08 22:20:00009568
05/02/08 22:30:57あうあうあー。ちょいバグありました。
(1)
play()直後の
cost = 0;
は取ってください。
(2)
do...while内の
putHome(HOME_POS);
はwhile文の直後にしてください。
---
do {
HOME_POS = (int) (Math.random() * SIZE_ROW * SIZE_COL);
} while (robot_pos == HOME_POS);
putHome(HOME_POS);
---
つー感じで。
他にもバグあるだろーな。。。
0096デフォルトの名無しさん
05/02/09 00:09:38その問題文はどうも分かりません・・・・
009788
05/02/09 12:24:01遅くなりましたが、どうもありがとうございました。
これから確認してまた返事したいと思います。
009888
05/02/09 16:07:36NetBeans 3.6を使って書いたのですが、実行すると「アプレットが初期化されていません」
というメッセージが出てプレイできません。
010088
05/02/09 22:55:39申し訳ないです。
java.lang.NoClassDefFoundError: program1/robotApplet (wrong name: robotApplet)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:162)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:118)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at sun.applet.AppletClassLoader.loadCode(AppletClassLoader.java:577)
at sun.applet.AppletPanel.createApplet(AppletPanel.java:710)
at sun.applet.AppletPanel.runLoader(AppletPanel.java:639)
at sun.applet.AppletPanel.run(AppletPanel.java:319)
at java.lang.Thread.run(Thread.java:595)
010388
05/02/09 23:28:55>>88をrobot, home, Stage, Mainの4つのクラスに分けて作れ。
Add a score keeper for your game, and record the top n scores in a file.
Implement three sorting algorithms to sort these scores.
(Only one sorting algorithm needs to be in place by your program due date.
The other two will be used in the analysis.)
Two of the algorithms may be an elementary sorting algorithm, such as: insertion sort, selection sort, bubble sort.
One of the algorithms must be an efficient sorting algorithm, such as: the quick sort, the shell sort, the heap sort, the merge sort, or the radix sort.
You may choose which list structure to use for the scores, such as your own array or linked list, or an ArrayList or a LinkedList.
To implement sorting of the scores:
The score data type will need a method to compare objects. Typically this involves a compareTo() method as well as an equals() method (use the Comparable Interface).
Duplicate scores are allowed in your list.
Use file input and output to store the scores.
Use exception handling for file errors.
010488
05/02/09 23:32:27Part C:
Use exception handling to control user errors.
Display the list of customers and their account balances in sorted order.
Implement three sorting algorithms for the list of customers.
(Only one sorting algorithm needs to be in place by your program due date.
The other two will be used in the analysis.)
Two of the algorithms may be an elementary sorting algorithm, such as: insertion sort, selection sort, bubble sort.
One of the algorithms must be an efficient sorting algorithm, such as: the quick sort, the shell sort, the heap sort, the merge sort, or the radix sort.
The list structure is your choice, such as your own array or linked list, or an ArrayList or a LinkedList.
To implement sorting customers:
The customer data type will need methods to compare objects. Typically this involves a compareTo() method as well as an equals() method (use the Comparable Interface).
Do not allow add duplicate object’s in your list.
Use file input and output to store several objects.
Use exception handling for file errors.
今、時間がないので英文混じりで失礼します。
中には読める方はもちろんたくさんいらっしゃると思うので載せました。
後で日本語概略を載せたいと思いますが、必要ないときは、そんなもんいらねー等、一言いただけたらうれしいです。
0105デフォルトの名無しさん
05/02/09 23:35:35010688
05/02/10 02:05:02不快に思われたのなら本当にすみませんでした。
私としては、ここを利用していらっしゃるみなさんは本当に優秀な人が多いので
英文を簡単に読める人がたくさんいると思っていました。
でも、中には英語は苦手だっていう方もいらっしゃると思い、このような書き込みになりました。
ですから、挑戦的な意味も態度も一切ありません。
不快に思われた方、深くお詫びをしたいと思います。
010788
05/02/10 02:34:39先ほども書き込ませていただきましたが、不快に思われた方に深くお詫びをしたいと思います。
>>88のプログラムにスコアキーパーを追加して、トップスコアいくつかを(たとえばTop5とかTop10とかいくつでも。)
ファイルに保存しなさい。3種類のソートアルゴリズムを使ってスコアをソートしなさい。
(提出用は1つのソートアルゴリズムだけでよい。残りの二つは分析(授業中にほかのプログラムを分析します)に使います。)
2つのアルゴリズムは以下の基本のソーティングアルゴリズムです。
挿入ソート(insertion sort)、選択整列(selection sort)、バブル・ソート(bubble sort)
以下のアルゴリズムは効率的なソーティングアルゴリズムです。
クイックソート(Quick sort)、シェルソート(Shell sort)、ヒープソート(heap sort)、マージソート(merge sort)、基数ソート(radix sort)
どのリストストラクチャーを使うかは自分で選択しなさい。自分のアレイ、リンクリストまたはArrayList、LinkedListから選択しなさい。
スコアのソーティングを実装するために:
スコアデータ型はオブジェクトを比較するメソッドを必要とします。
通常、これはequals()メソッドと同様にcompareTo()メソッドにかかわります
(Comparable Interfaceを使用してください)。
同スコアもリストにのせてください。(たとえば2位と3位が両方とも同スコアとか)
file input, outputを使用して、スコアを保存してください。
ファイルエラーに例外処理(exception)を使用してください。
以上です。
どなたかお願いいたします。
0108105
05/02/10 10:00:330109デフォルトの名無しさん
05/02/10 14:38:19・顧客リストとそれぞれの残高を名前順、残高順に表示しなさい。
・顧客のデータタイプはオブジェクトを比較するメソッドを使用します。
・通常、これはequals()メソッドと同様にcompareTo()メソッドにかかわります
(Comparable Interfaceを使用してください)。
・データの重複は禁止します。
・file input, outputを使用して、スコアを保存してください。
・ファイルエラーに例外処理(exception)を使用してください。
だれか、これをお願いします。
0110デフォルトの名無しさん
05/02/10 14:48:47おまえ普段からエロペグ収集やゲームに夢中で仕事なんかしてなかっただろ。
キーボードまったく叩かずに頬杖ついてマウスでクリックばっかりやってれば、いかにも仕事してないってわかるし、だいたい夜なんかあんたの後ろのガラスにエロ画像表示した画面が丸映り。
システムGr全員と社長もとっくに知ってたよ。
いつも一日中頬杖マウスで納期間際になると決まってすごい勢いでキーボードバチバチ叩いてたもんな。
そんなことやってるからあんたの組んだシステムはお客さんに納めてからバグが連発するんだよ。
いつもそうだったろ、学習しろよ。皆にとっていい迷惑なんだよ。
おまえのこと、もう1年以上前から皆の間じゃ問題になっててこっそりハードディスクの中も調べたらエロ画像だらけだし、どうするべきかおまえがいないときに皆で会議とかやってたんだよ。
M部長を含め、大方の社員はクビにしろっていってたけど、おまえは集中すれば能力高いしエロ画像見てることを指摘して気まずくなるのもなんだから、もう少し様子見ようっていう社長の意見でおまえは今まで会社にいられたんだぞ。
それ知らないで社長に怒られるたびに社長を悪く言ってたけど、再三チャンスを与えてたのは社長なんだからな。怒られてるうちに自分で態度を改めろよ。
そうこうしているうちにおまえがあんな大問題を起こしてさっさと辞めてっちまったけど、これじゃ社長は社内外どちらも立場がないだろ。
社長はあれからお客さんに散々謝って後始末に追われて大変だったんだぞ。
おまえ2ちゃんねるも頻繁に覗いてたみたいだったからここに書いてみた。
どうせまだ暇でここ見てるんだろ。
まぁ40過ぎて独身で会社もクビで大変だろうけど、またのうのうと仕事サボってエロ画像楽しんでいられる幸運な職場にたどり着けることを祈ってるよ。
じゃぁな。プッ!!
0111デフォルトの名無しさん
05/02/10 19:07:20本当に問題はこれだけ?前提条件とかここに至るまでの問題とかないの?
0112デフォルトの名無しさん
05/02/10 22:25:42冷害にならないようにするにはどうすればいいでしょうか。
プログラムは特にいじらないっぽいです。
0113112
05/02/10 22:26:13public class Approx{
public static void main(String[] args){
int i,n=10000;
int k=0;
double x,y,ap;
PrintWriter fo;
try{
fo=new PrintWriter(
new BufferedWriter(
new FileWriter(args[0])));
for(i=0;i<n;i++){
x=2*Math.random()-1;
y=Math.random();
if((x*x*1)*y<x*x)
k++;
}
ap=4.0*k/n;
fo.println("近似値="+ap);
fo.close();
}
catch(Exception e){
System.out.println("書き込みエラー"+e);
}
}
}
以上です。よろしくお願いします。
0114デフォルトの名無しさん
05/02/10 22:53:05>>88のプログラムをrobot, Home, Stage, Mainの4つのクラスに分けて作れ。
>>88のプログラムにスコアキーパーを追加して、トップスコアいくつかを(たとえばTop5とかTop10とかいくつでも。)
ファイルに保存しなさい。3種類のソートアルゴリズムを使ってスコアをソートしなさい。
(提出用は1つのソートアルゴリズムだけでよい。残りの二つは分析(授業中にほかのプログラムを分析します)に使います。)
2つのアルゴリズムは以下の基本のソーティングアルゴリズムです。
挿入ソート(insertion sort)、選択整列(selection sort)、バブル・ソート(bubble sort)
以下のアルゴリズムは効率的なソーティングアルゴリズムです。
クイックソート(Quick sort)、シェルソート(Shell sort)、ヒープソート(heap sort)、マージソート(merge sort)、基数ソート(radix sort)
どのリストストラクチャーを使うかは自分で選択しなさい。自分のアレイ、リンクリストまたはArrayList、LinkedListから選択しなさい。
スコアのソーティングを実装するために:
スコアデータ型はオブジェクトを比較するメソッドを必要とします。
通常、これはequals()メソッドと同様にcompareTo()メソッドにかかわります
(Comparable Interfaceを使用してください)。
同スコアもリストにのせてください。(たとえば2位と3位が両方とも同スコアとか)
file input, outputを使用して、スコアを保存してください。
ファイルエラーに例外処理(exception)を使用してください。
以上です。
よろしくお願いします。
0115デフォルトの名無しさん
05/02/10 23:01:21答えてもらえない原因を考えた方が良いね。
0116デフォルトの名無しさん
05/02/10 23:06:51別に例外にならないけど。
コマンドライン引数を渡してない、とかそんなことでいいの?
0118デフォルトの名無しさん
05/02/10 23:30:58コマンドライン引数に何も与えてないから
args[0]
でArrayIndexOutOfBoundsExceptionが発生する。
ファイルの書き込みエラーじゃないけど
catch(Exception)って書いてるから例外なら何でもcatchしてる。
java Approx aaa.txt
と実行してみ。
0119デフォルトの名無しさん
05/02/10 23:40:54なるほど。
実行できました。
あいがとうございました。
0121デフォルトの名無しさん
05/02/11 02:33:09>>104の件でしたら、先に書き込んだとおり本当に挑戦的、挑発的な意味はまったくありません。
ここのルールで宿題は丸投げせよ、と書いてありましたが、宿題文がすべて英文だったため
>>106の理由の通り、自分の拙い英語ですが訳文を書き込ませていただきました。
その他の失礼はなるべく無いよう気をつけてますが、2ちゃんねる初心者のため
初心者板や、その他のルールなど少し目を通しましたが、まだ他に失礼があったかもしれません。
2ちゃんねるを上手に使っていくため、そしてみなさんに不快な思いをさせないためにも、
他にもなにか失礼があればご指摘ください。
3のルールに反する書き込み失礼しました。
0122105
05/02/11 09:58:39自分は英語の成績が悪いのでうっかり書いてしまいました。
0123デフォルトの名無しさん
05/02/11 10:50:40何度も引っ張ってるかのように書いてますがあんまり気にしないでください。
こちらとしてもちょっと言い方も悪かったかなぁ・・・、と思ってましたので。
では、どうして答えてもらえないんでしょうか?いろいろ考えてみて心当たりはもうすでに書き込ませていただいたのですが・・・。
なにかご指摘ありませんか?
0124>>114 その1
05/02/11 17:21:45import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.util.List;
import java.text.*;
interface Constants {
int XSIZE = 8, YSIZE = 8, PATHSIZE = 16;
String filename = "score.dat";
}
public class Main extends JApplet implements KeyListener, ActionListener, Constants {
private Robot robot = new Robot();
private Home home = new Home();
private Stage stage;
private List scoreList = new ArrayList();
public void init() {
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename));
scoreList = (List) in.readObject();
} catch (Exception e) {
System.out.println("スコアファイル読み込みエラー");
}
int width = getContentPane().getSize().width,
height = getContentPane().getSize().height;
stage = new Stage(width, height, robot, this);
stage.addKeyListener(this);
setContentPane(stage);
startGame();
}
0125>>114 その2
05/02/11 17:22:25if (begin >= end)
return;
Score num = data[begin + 1];
data[begin + 1] = data[begin];
int loc = begin;
for (int idx = begin + 1; idx <= end; idx++) {
if (num.compareTo(data[idx]) >= 0) {
++loc;
Score swap = data[idx];
data[idx] = data[loc];
data[loc] = swap;
}
}
data[begin] = data[loc];
data[loc] = num;
quickSort(data, begin, loc - 1);
quickSort(data, loc + 1, end);
}
void startGame() {
robot.reset();
home.reset();
stage.putRobot(robot);
int dist = Math.abs(robot.getPx() - home.getPx())
+ Math.abs(robot.getPy() - home.getPy());
stage.displayInfo("ゴールへの距離 " + dist + "m : ゲームスタート");
stage.requestFocus();
}
0126>>114 その3
05/02/11 17:22:57robot.change();
stage.displayInfo("ゲームクリア");
scoreList.add(new Score(robot.getCost()));
Score[] data = (Score[]) scoreList.toArray(new Score[0]);
quickSort(data, 0, data.length - 1);
scoreList = new ArrayList(Arrays.asList(data));
String msg = "クリアしました\nかかった経費" + robot.getCost()
+ "ドル\nもう一度プレイしますか?";
int ans = JOptionPane.showConfirmDialog(this, msg, "ゲームのリトライ",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (ans == JOptionPane.YES_OPTION) {
startGame();
} else {
getContentPane().setVisible(false);
}
try {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filename));
out.writeObject(scoreList);
} catch (Exception e) {
System.out.println("スコアファイル書き込みエラー");
}
}
public void keyTyped(KeyEvent e) {
switch (e.getKeyChar()) {
case 'i':
case 'I':
if (robot.getPy() > 0)
robot.movePy(-1);
break;
0127>>114 その5
05/02/11 17:23:31case 'J':
if (robot.getPx() > 0)
robot.movePx(-1);
break;
case 'm':
case 'M':
if (robot.getPy() < YSIZE)
robot.movePy(+1);
break;
case 'l':
case 'L':
if (robot.getPx() < XSIZE)
robot.movePx(+1);
}
stage.putRobot(robot);
int dist = Math.abs(robot.getPx() - home.getPx())
+ Math.abs(robot.getPy() - home.getPy());
stage.displayInfo("ゴールへの距離 " + dist + "m : 現在の経費 "
+ robot.getCost() + "ドル");
if (robot.getPx() == home.getPx() && robot.getPy() == home.getPy())
endGame();
}
public void actionPerformed(ActionEvent e) {
if (stage.isButtonSelected()) {
StringBuffer sb = new StringBuffer("スコア表 ベスト10\n\n");
for (int i = 0; i < scoreList.size() && i < 10; i++) {
sb.append((i + 1) + "位 " + scoreList.get(i).toString());
}
stage.displayScores(sb.toString());
0128>>114 その6
05/02/11 17:25:01stage.removeScores();
}
stage.requestFocus();
}
public void keyPressed(KeyEvent e) { }
public void keyReleased(KeyEvent e) { }
}
class Score implements Comparable, Serializable {
private static MessageFormat msg = new MessageFormat(
"コスト {0,number,integer} ドル 日時 {1,date,short} {1,time,short} \n");
private int number;
private Date date = new Date(System.currentTimeMillis());
Score(int number) {
this.number = number;
}
public int compareTo(Object obj) {
Score sc = (Score) obj;
return new Integer(number).compareTo(new Integer(sc.number));
}
public String toString() {
return msg.format(new Object[] { number, date });
}
}
class Robot extends JLabel implements Constants {
private int px, py, cost;
Robot() {
setFont(new Font("Dialog", 1, 15));
setForeground(new Color(50, 50, 250));
setBounds(0, 0, PATHSIZE, PATHSIZE);
}
0129>>114 その7
05/02/11 17:25:50px = 0;
py = 0;
cost = 0;
setText("●");
}
int getCost() {
return cost;
}
int getPx() {
return px;
}
int getPy() {
return py;
}
void movePx(int pt) {
px += pt;
++cost;
}
void movePy(int pt) {
py += pt;
++cost;
}
void change() {
setText("★");
}
}
0130>>114 その8
05/02/11 17:26:24private int px, py;
void reset() {
px = 0;
py = 0;
while (px == 0 && py == 0) {
px = (int) (Math.random() * XSIZE);
py = (int) (Math.random() * YSIZE);
}
}
int getPx() {
return px;
}
int getPy() {
return py;
}
}
class Stage extends JPanel implements Constants {
private JPanel room = new JPanel(new GridLayout(YSIZE, XSIZE, PATHSIZE, PATHSIZE));
private JLabel[][] wall = new JLabel[XSIZE][YSIZE];
private JLabel topBar = new JLabel();
private JTextArea scores = new JTextArea();
private JLayeredPane lp = new JLayeredPane();
private JToggleButton btn = new JToggleButton("スコア表示");
0131>>114 その9
05/02/11 17:27:04setBackground(Color.black);
topBar.setBorder(BorderFactory.createEtchedBorder());
topBar.setPreferredSize(new Dimension(1000, 0));
topBar.setHorizontalAlignment(JLabel.CENTER);
topBar.setFont(new Font("Dialog", 1, 13));
topBar.setOpaque(true);
topBar.setBackground(new Color(200, 200, 255));
btn.setFont(new Font("Dialog", 0, 10));
btn.setMargin(new Insets(2, 2, 2, 2));
btn.addActionListener(al);
Box menu = Box.createHorizontalBox();
menu.add(btn);
menu.add(topBar);
room.setBackground(new Color(240, 240, 255));
room.setBorder(BorderFactory.createEmptyBorder(PATHSIZE, PATHSIZE,
PATHSIZE, PATHSIZE));
Dimension wallsize = new Dimension((width - PATHSIZE * (XSIZE + 1))
/ XSIZE, (height - PATHSIZE * (YSIZE + 1)) / YSIZE);
for (int a = 0; a < wall.length; a++) {
for (int b = 0; b < wall[a].length; b++) {
wall[a][b] = new JLabel();
wall[a][b].setPreferredSize(wallsize);
wall[a][b].setOpaque(true);
wall[a][b].setBackground(new Color(200, 200, 250));
wall[a][b].setBorder(BorderFactory.createRaisedBevelBorder());
}
}
0132>>114 その10
05/02/11 17:27:39for (int b = 0; b < wall[a].length; b++) {
room.add(wall[a][b]);
}
}
room.setBounds(0, 0, width, height - btn.getPreferredSize().height);
lp.add(room, new Integer(0));
lp.add(rb, new Integer(1));
setLayout(new BorderLayout());
add(lp);
add(menu, BorderLayout.NORTH);
scores.setOpaque(false);
scores.setMargin(new Insets(16, 32, 16, 32));
scores.setFont(new Font("Dialog", 1, 16));
scores.setForeground(Color.green);
}
void putRobot(Robot rb) {
int cpX, cpY, rbX = (rb.getPx() == XSIZE) ? rb.getPx() - 1 : rb.getPx(),
rbY = (rb.getPy() == YSIZE) ? rb.getPy() - 1 : rb.getPy();
if (rb.getPx() < XSIZE)
cpX = wall[rbY][rbX].getLocation().x - PATHSIZE;
else
cpX = wall[rbY][rbX].getLocation().x
+ wall[rbY][rbX].getSize().width;
if (rb.getPy() < YSIZE)
cpY = wall[rbY][rbX].getLocation().y - PATHSIZE;
else
cpY = wall[rbY][rbX].getLocation().y
+ wall[rbY][rbX].getSize().height;
rb.setLocation(cpX, cpY);
}
0133>>114 その11
05/02/11 17:28:13topBar.setText(text);
}
boolean isButtonSelected() {
return btn.isSelected();
}
void displayScores(String text) {
scores.setBounds(room.getBounds());
scores.setText(text);
lp.add(scores, new Integer(2));
room.setBackground(new Color(240, 240, 255, 128));
for (int a = 0; a < wall.length; a++) {
for (int b = 0; b < wall[a].length; b++) {
wall[a][b].setBackground(new Color(200, 200, 255, 128));
}
}
}
void removeScores() {
lp.remove(scores);
lp.validate();
room.setBackground(new Color(240, 240, 255, 255));
for (int a = 0; a < wall.length; a++) {
for (int b = 0; b < wall[a].length; b++) {
wall[a][b].setBackground(new Color(200, 200, 255, 255));
}
}
}
}
0134デフォルトの名無しさん
05/02/11 18:02:42どうもありがとうございました。
プログラム自体はきちんと動作してくれてます。
ただ、
public String toString() {
return msg.format(new Object[] { number, date });
}
の return msg.の行にエラーが出ます。
互換性のない型 出現:int 要求:java.lang.Objectとでます。
そしてファイルの書き込み、読み込みともにエラーになってしまいます。
0135デフォルトの名無しさん
05/02/11 18:12:20失礼。そこだけAutoBoxingにしてしまいました。(JDK1.5対応)
public String toString() {
return msg.format(new Object[] { number, date });
}
を
public String toString() {
return msg.format(new Object[] { new Integer(number), date });
}
としてください。
0136デフォルトの名無しさん
05/02/11 18:36:01どうもありがとうございました。
エラーは消えましたが、プレイするたびにファイルの書き込みエラー
読み込みエラーが出ます。
これはどうしたら無くすことができますか?
0137デフォルトの名無しさん
05/02/11 18:58:45問題文: マインスイーパを作成せよ。サイズは9*9とする。
期限:2/14までに作っていただければ幸いです
です。どうかよろしくお願いします。。。
0138デフォルトの名無しさん
05/02/11 19:23:190139デフォルトの名無しさん
05/02/11 20:17:00元々アプレットには、File Permission がないですから・・・
ファイルパーミッションを持つappletviewerで実行させるしか
ありません・・・
0140デフォルトの名無しさん
05/02/12 00:25:27コンソールでもなんでもいいのか?
アプレット限定とかなら、ちゃんとかけよ。
0141>>137 その1
05/02/12 01:24:20import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;
import java.text.*;
public class HW78 extends JFrame {
static final int SIZE = 9, BOMBCNT = 10;
JLabel[][] cell = new JLabel[SIZE][SIZE];
JLabel info = new JLabel();
JButton btn = new JButton("開始");
int[][] attCM, figCM;
Set bombSet = new HashSet(), noneSet = new HashSet();
PanelAction action = new PanelAction();
boolean endFlag;
static ChoiceFormat cfOpen = new ChoiceFormat(
"0# |1#1|2#2|3#3|4#4|5#6|6#6|7#7|8#8|9#9|10#爆");
static ChoiceFormat cfClose = new ChoiceFormat("0# |1# |2#危|3#印");
static final int NONE = 0, BOMB = 10;
static final int CLOSE = 0, OPEN = 1, DENG = 2, MARK = 3;
static final int NEXT = 0, CLEAR = 1, OVER = 2;
static final Point[] AROUND = new Point[] { new Point(0, -1), new Point(-1, -1),
new Point(-1, 0), new Point(-1, 1), new Point(0, 1), new Point(1, 1),
new Point(1, 0), new Point(1, -1) };
public static void main(String[] args) {
new HW78();
}
0142>>137 その2
05/02/12 01:24:58JPanel pal = new JPanel(new GridLayout(9, 9));
pal.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
for (int a = 0; a < cell.length; a++) {
for (int b = 0; b < cell.length; b++) {
cell[a][b] = new JLabel();
cell[a][b].setOpaque(true);
cell[a][b].setHorizontalAlignment(JLabel.CENTER);
cell[a][b].setFont(new Font("Dialog", 1, 18));
cell[a][b].setName(a + "-" + b);
cell[a][b].addMouseListener(action);
pal.add(cell[a][b]);
}
}
info.setHorizontalAlignment(JLabel.CENTER);
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
startGame();
}
});
JPanel top = new JPanel(new BorderLayout());
top.add(btn, BorderLayout.WEST);
top.add(info);
getContentPane().add(pal);
getContentPane().add(top, BorderLayout.NORTH);
startGame();
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
0143>>137 その3
05/02/12 01:25:30attCM = new int[SIZE][SIZE];
figCM = new int[SIZE][SIZE];
bombSet.clear();
while (bombSet.size() < BOMBCNT) {
int x = (int) (Math.random() * 9), y = (int) (Math.random() * 9);
bombSet.add(new Point(x, y));
attCM[x][y] = BOMB;
}
for (int a = 0; a < cell.length; a++) {
for (int b = 0; b < cell.length; b++) {
noneSet.add(new Point(a, b));
}
}
noneSet.removeAll(bombSet);
Iterator it = noneSet.iterator();
while (it.hasNext()) {
Point pt = (Point) it.next();
int count = 0;
for (int i = 0; i < AROUND.length; i++) {
Point newpt = new Point(pt);
newpt.translate(AROUND[i].x, AROUND[i].y);
if (newpt.x >= 0 && newpt.x < SIZE && newpt.y >= 0 && newpt.y < SIZE) {
if (attCM[newpt.x][newpt.y] == BOMB)
++count;
}
}
attCM[pt.x][pt.y] = count;
}
0144>>137 その4
05/02/12 01:26:01for (int b = 0; b < cell.length; b++) {
cell[a][b].setBackground(new Color(220, 220, 255));
cell[a][b].setBorder(BorderFactory.createRaisedBevelBorder());
cell[a][b].setText("");
cell[a][b].setForeground(Color.black);
}
}
info.setText("ゲームスタート:爆弾数" + BOMBCNT);
endFlag = false;
}
void endGame(int ans) {
endFlag = true;
if (ans == CLEAR) {
info.setText("ゲームクリア");
Iterator it = bombSet.iterator();
while (it.hasNext()) {
Point pt = (Point) it.next();
cell[pt.x][pt.y].setText("消");
cell[pt.x][pt.y].setForeground(Color.blue);
}
} else {
info.setText("ゲームオーバー");
Iterator it = noneSet.iterator();
while (it.hasNext()) {
Point pt = (Point) it.next();
cell[pt.x][pt.y].setBackground(new Color(245, 245, 255));
cell[pt.x][pt.y].setBorder(BorderFactory.createLineBorder(new Color(200, 200, 255), 1));
String text = cfOpen.format(attCM[pt.x][pt.y]);
cell[pt.x][pt.y].setText(text);
cell[pt.x][pt.y].setForeground(Color.blue);
}
0145>>137 その5
05/02/12 01:26:39while (it.hasNext()) {
Point pt = (Point) it.next();
cell[pt.x][pt.y].setBackground(new Color(245, 245, 255));
cell[pt.x][pt.y].setBorder(BorderFactory.createLineBorder(new Color(200, 200, 255), 1));
cell[pt.x][pt.y].setText("爆");
cell[pt.x][pt.y].setForeground(new Color(255, 160, 0));
}
}
}
int openPanels(int x, int y) {
int ans = openPanel(x, y);
if (ans != NEXT)
return ans;
if (attCM[x][y] != NONE)
return NEXT;
LinkedList list = new LinkedList();
List checks = new ArrayList();
list.addLast(new Point(x, y));
while (!list.isEmpty()) {
Point pt = (Point) list.removeFirst();
for (int i = 0; i < AROUND.length; i++) {
Point newpt = new Point(pt);
newpt.translate(AROUND[i].x, AROUND[i].y);
if (newpt.x >= 0 && newpt.x < SIZE && newpt.y >= 0 && newpt.y < SIZE) {
if (attCM[newpt.x][newpt.y] != BOMB) {
ans = openPanel(newpt.x, newpt.y);
if (ans != NEXT)
return ans;
}
0146>>137 その6
05/02/12 01:27:22list.addLast(newpt);
checks.add(newpt);
}
}
}
}
return NEXT;
}
int openPanel(int x, int y) {
cell[x][y].setBackground(new Color(245, 245, 255));
cell[x][y].setBorder(BorderFactory.createLineBorder(new Color(200, 200, 255), 1));
String text = cfOpen.format(attCM[x][y]);
cell[x][y].setText(text);
figCM[x][y] = OPEN;
if (attCM[x][y] == BOMB) {
cell[x][y].setForeground(Color.red);
bombSet.remove(new Point(x, y));
return OVER;
}
noneSet.remove(new Point(x, y));
if (noneSet.isEmpty())
return CLEAR;
else
return NEXT;
}
0147:>>137 その7
05/02/12 01:27:52if (figCM[x][y] == CLOSE) {
figCM[x][y] = DENG;
} else if (figCM[x][y] == DENG) {
figCM[x][y] = MARK;
} else if (figCM[x][y] == MARK) {
figCM[x][y] = CLOSE;
}
String text = cfClose.format(figCM[x][y]);
cell[x][y].setText(text);
}
int openPanelRounded(int x, int y) {
int ans = openPanel(x, y);
if (ans != NEXT)
return ans;
Point pt = new Point(x, y);
for (int i = 0; i < AROUND.length; i++) {
Point newpt = new Point(pt);
newpt.translate(AROUND[i].x, AROUND[i].y);
if (newpt.x >= 0 && newpt.x < SIZE && newpt.y >= 0 && newpt.y < SIZE) {
if (figCM[newpt.x][newpt.y] != DENG) {
ans = openPanel(newpt.x, newpt.y);
if (ans != NEXT)
return ans;
}
}
}
return NEXT;
}
0148>>137 その8
05/02/12 01:28:31public void mousePressed(MouseEvent e) {
if (endFlag)
return;
Component cp = e.getComponent();
int x = Integer.parseInt(cp.getName().split("-")[0]);
int y = Integer.parseInt(cp.getName().split("-")[1]);
if (figCM[x][y] == OPEN)
return;
if ((e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) != 0
&& (e.getModifiersEx() & MouseEvent.BUTTON3_DOWN_MASK) != 0) {
int ans = openPanelRounded(x, y);
if (ans != NEXT)
endGame(ans);
} else if (e.getButton() == MouseEvent.BUTTON1) {
int ans = openPanels(x, y);
if (ans != NEXT)
endGame(ans);
} else if (e.getButton() == MouseEvent.BUTTON3) {
markPanel(x, y);
}
}
}
}
0149デフォルトの名無しさん
05/02/12 15:47:01結果cを表示するプログラムを作りたいです。
どこをどう直せばよいでしょうか。
class Vec1{
public static void naiseki(double[]a,double[]b,double[]c){
double ci=0;
for(int i=0;i<a.length;i++){
ci+=a[i]*b[i];
c[i]=ci;
}
}
}
以下のプログラムにコンパイルエラーが出ます。
class VecSousa1{
public static void main(String[] args){
Vec1 vec=new Vec1();
vec naiseki(a,b,c);
double[]a={1,2,3};
double[]b={2,3,4};
System.out.println("内積a・b=" +c[i]);
}
}
0150デフォルトの名無しさん
05/02/12 16:48:40public static void main(String[] args){
Vec1 vec=new Vec1();
double[]a={1,2,3};
double[]b={2,3,4};
double[]c={0,0,0};
vec.naiseki(a,b,c);
System.out.println("内積a・b=" +c[i]);
}
}
0151デフォルトの名無しさん
05/02/12 17:22:52誰か出来ましたらお願いします m(_ _)m
期限は来週の金曜までです。
0152デフォルトの名無しさん
05/02/12 17:28:070153デフォルトの名無しさん
05/02/12 17:36:38ありがとうございます。
直してコンパイルしたところ
System.out.println("内積a・b=" +c[i]);
の行で変数Cを解決できない、と出てしまいます。
これはどうすればよいでしょうか。
0155デフォルトの名無しさん
05/02/12 17:46:28でつくったボタンのオブジェクト名ってなんになるの?
たとえば Button myButton = new Button("1");
this.add(myButton)
としたらオブジェクト名はmyButtonですよね
0156デフォルトの名無しさん
05/02/12 18:30:46もともとオブジェクト名なるものは存在しない
あるのはクラスとそのインスタンス
0157デフォルトの名無しさん
05/02/12 18:33:39http://www.amazon.co.jp/exec/obidos/ASIN/4797318422/
0158デフォルトの名無しさん
05/02/12 18:40:37その本は知ってます。書店で見ました。。。表紙のとんがり帽子の娘に
ハァハァでしたが、参考にしてもゲームを作るのには労力がいります。
誰か参考に作ってください、。。。
0159デフォルトの名無しさん
05/02/12 20:24:310160155
05/02/12 20:30:20mybutton.setfont(new font(ほにゃらら))
はできるけどthis.add(new Button("1"));
だと参照名がわからないから、あとからいじるのは不可能なように思えます。
メモリをサーチしてアドレスを突き止めるしかないのでしょうか
0161デフォルトの名無しさん
05/02/12 21:03:56>>160
getComponent(int n)
getComponents()
を使えば後からでもできる。
0162153
05/02/12 21:53:27class Vec1{
public static void naiseki(double[]a,double[]b,double[]c){
double ci=0;
for(int i=0;i<a.length;i++){
ci+=a[i]*b[i];
c[i]=ci;
}
}
}
もとのソースとはこれですよね?
これはcを宣言していないことになるのでしょうか・・。
これと>>150でどう動かせばよいんでしょう。
0163デフォルトの名無しさん
05/02/13 12:09:18class Vec1 {
public void naiseki(double[] a, double[] b, double[] c) {
for(int i = 0; i < a.length; i++)
c[i] += a[i] * b[i];
}
}
public class VecSousa1 {
public static void main(String[] args) {
Vec1 vec = new Vec1();
double[] a = {1, 2, 3};
double[] b = {2, 3, 4};
double[] c = {0, 0, 0};
vec.naiseki(a, b, c);
System.out.print("内積 a・b = {");
for(int i = 0; i < c.length; i++){
System.out.print(c[i] + ((i < c.length - 1) ? ", " : "}\n"));
}
}
}
0164デフォルトの名無しさん
05/02/13 12:35:50public class VecSousa {
public static void main(String[] args) {
Vec vec_a = new Vec(new double[] {1, 2, 3});
Vec vec_b = new Vec(new double[] {2, 3, 4});
Vec vec_c = vec_a.naiseki(vec_b);
System.out.println("内積 a・b = " + vec_c.toString());
}
}
class Vec {
double[] vec;
Vec(double[] v) {
vec = v;
}
public Vec naiseki(Vec v) {
double[] result = vec;
for(int i = 0; i < result.length; i++)
result[i] *= v.vec[i];
return new Vec(result);
}
public String toString() {
String result = "{";
for(int i = 0; i < vec.length; i++)
result += vec[i] + ((i < vec.length - 1) ? ", " : "}");
return result;
}
}
0166デフォルトの名無しさん
05/02/13 13:32:120167デフォルトの名無しさん
05/02/13 19:16:41public int aaa() {
return bbb();
}
private int bbb() {
int i =ccc() + ddd();
return i;
}
}
みたいなクラスでaaaメソッドをJunitでテストしたいのですが
どうすればいいでしょうか?
aaaメソッドを単体でテストしたいのでbbbメソッドを
何か値を返す別のものにしたいのですが、良い方法
が思いつきません。privateをprotectedにしてしまうのも
1つの手ですが、あまりやりたくありません。
0168デフォルトの名無しさん
05/02/13 20:28:56aaaはbbbの戻り値を返すだけのメソッドなの?
なら、テストする必要ないじゃん。
あと、そういうとこで悩むってことはクラス設計が悪いってこと。
設計見直せ。
0169159 >>151 その1
05/02/14 02:12:07import java.io.*;
import java.util.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
public class FaqMan {
public static void main(String[] args) {
new GameFrame();
}
}
0170>>151 その2
05/02/14 02:12:58static final String[] itemBmp = {
"0000000000300300000000000030030000000000000000000030030000300300",
"0000000000300300000000000030030000000000000000000030030000300300",
"0000000000300300333333333300003333333000000333330030003333000300",
"0000000000300300000000000000000000000300003000000030000000000300",
"0000000000300300000000000000000000000300003000000030000000000300",
"0000000000300300333333333300003333000300003000330003333333333000",
"0000000000300300000000000030030000300300003003000000000000000000",
"0000000000300300000000000030030000300300003003000000000000000000",
"0000000000000000000000000030030000300300003003000030030000000000",
"0000000000000000000000000030030000300300003003000030030000000000",
"3333300000033000000333330030030000300033330000333300030033333333",
"0000030000300300003000000030030000300000000000000000030000000000",
"0000030000300300003000000030030000300000000000000000030000000000",
"3333300000300300000333330003300000300033333333333300030033000033",
"0000000000300300000000000000000000300300000000000030030000300300",
"0000000000300300000000000000000000300300000000000030030000300300",
"0022220000111100000000000000000000111100010000100011110000111100",
"0222222001111110000000000001100001111111011001101111111001111110",
"2202202211111111000000000011110011111110111001110111111111111111",
"2202202211111111000110000111111011111000111111110001111111111111",
"2222222211111111000110000111111011111000111111110001111111111111",
"2222222211111111000000000011110011111110111111110111111111100111",
"0202202001111110000000000001100001111111011111101111111001100110",
"2020020200111100000000000000000000111100001111000011110001000010"
};
BufferedImage bi;
0171>>151 その3
05/02/14 02:13:33int width = itemBmp[0].length();
int height = itemBmp.length;
byte[] pixel = new byte[width * 3 * height];
for(int j = 0; j < height; j++){
for(int i = 0; i < width; i++){
int p = itemBmp[j].charAt(i) - '0';
byte red = 0, green = 0, blue = 0;
if(p == 1) red = -1;
if(p == 1 || p == 2) green = -1;
if(p == 3) blue = -1;
pixel[(j * width + i) * 3] = red;
pixel[(j * width + i) * 3 + 1] = green;
pixel[(j * width + i) * 3 + 2] = blue;
}
}
bi = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
bi.getRaster().setDataElements(0, 0, width, height, pixel);
}
public BufferedImage getImage() { return bi; }
}
0172>>151 その4
05/02/14 02:14:06static final String title = "FaqMan";
final int CanvasW = 640, CanvasH = 480;
final int FieldX = 40, FieldY = 80;
final int StateX = 170, StateY = 270, StateC = 100;
final int InfoX = 160, InfoY = 20;
final int ScoreX = 160, ScoreY = 40;
final ImgPalette imgpalette = new ImgPalette();
final int itemW = 16, itemH = 16, itemB = 8;
final int markp = 19, dotp = 18, faq_wink = 17, mon = 16, maxmove = 10;
final int scene_0 = 50, scene_1 = 60, scene_9 = 99999999;
final Font font = new Font("Terminal", Font.BOLD, itemH);
final Random random = new Random();
FieldCanvas field;
int key;
class GameKeyListener implements KeyListener {
public void keyPressed(KeyEvent e) { key = e.getKeyChar(); }
public void keyReleased(KeyEvent e) { }
public void keyTyped(KeyEvent e) { }
}
0173>>151 その5
05/02/14 02:15:25int posx, posy, direc, dots, mons;
String[] map;
Stage(int x, int y, int d, int t, int s, String[] m) {
posx = x; posy = y; direc = d; dots = t; mons = s; map = m;
}
}
final Stage[] stage = {
0174>>151 その6
05/02/14 02:15:52"5222222222f2222222224",
"1iiiiiiiii1iiiiiiiii1",
"1i524i524i1i524i524i1",
"1j101i101i1i101i101j1",
"1i627i627ibi627i627i1",
"1iiiiiiiiiiiiiiiiiii1",
"1ia28i9ia2f28i9ia28i1",
"1iiiii1iii1iii1iiiii1",
"62224ic280b0a2ei52227",
"00001i100000001i10000",
"a2227ib0580a40bi62228",
"00000i001000100i00000",
"a2224i906222709i52228",
"00001i100000001i10000",
"52227ib0a2f280bi62224",
"1iiiiiiiii1iiiiiiiii1",
"1ia24ia28ibia28i528i1",
"1jii1iiiii0iiiii1iij1",
"c28ibi9ia2f28i9ibia2e",
"1iiiii1iii1iii1iiiii1",
"1ia222d28ibia2d2228i1",
"1iiiiiiiiiiiiiiiiiii1",
"622222222222222222227"
}),
0175>>151 その7
05/02/14 02:16:39"52228ia222f2228ia2224",
"1iiiiiiiii1iiiiiiiii1",
"1i524i524i1i524i524i1",
"1j101i101i1i101i101j1",
"1i627i627ibi627i627i1",
"1iiiiiiiiiiiiiiiiiii1",
"1ia28i9ia2f28i9ia28i1",
"1iiiii1iii1iii1iiiii1",
"62224ic280b0a2ei52227",
"00001i1iiiiiii1i10000",
"a2227ibi580a4ibi62228",
"iiiiiiii1iii1iiiiiiii",
"a2224i906222709i52228",
"00001i100000001i10000",
"52227ib0a2f280bi62224",
"1iiiiiiiii1iiiiiiiii1",
"1ia24ia28ibia28i528i1",
"1jii1iiiii0iiiii1iij1",
"c28ibi9ia2f28i9ibia2e",
"1iiiii1iii1iii1iiiii1",
"1ia222d28ibia2d2228i1",
"1iiiiiiiiiiiiiiiiiii1",
"62228ia22222228ia2227"
})
};
0176>>151 その8
05/02/14 02:17:20Thread thread = null;
int threadsleep = 20;
Dimension dbuf = null;
Image imgbuf = null;
Graphics gbuf = null;
int width, height;
int[] posx = new int[maxmove];
int[] posy = new int[maxmove];
int[] direc = new int[maxmove];
int dots, mons, snum, score, state, heartbeat;
int[][] map;
FieldCanvas() {
snum = 0; score = 0;
}
0177>>151 その9
05/02/14 02:18:13Stage s = stage[(snum = n) > 0 ? 1 : 0];
width = s.map[0].length(); height = s.map.length;
posx[0] = s.posx; posy[0] = s.posy; direc[0] = s.direc;
dots = s.dots; mons = s.mons;
map = new int[height][width];
for(int j = 0; j < height; j++){
for(int i = 0; i < width; i++){
char c = s.map[j].charAt(i);
map[j][i] = (c <= '9') ? (c - '0') : (c - 'a' + 10);
}
}
for(int i = 1; i <= mons; i++){
posx[i] = 10; posy[i] = 11; direc[i] = (i % 2) * 2;
}
state = 0; heartbeat = 0;
}
0178>>151 その10
05/02/14 02:19:02if(thread == null){
thread = new Thread(this);
thread.start();
}
}
public void stop() {
if(thread != null){
thread.stop();
thread = null;
}
}
0179>>151 その11
05/02/14 02:19:38Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
while(thread != null){
repaint();
if(heartbeat < scene_9) heartbeat++;
if(heartbeat < scene_0){
key = 0;
}else{
if(crash()){
state = -1;
continue;
}
if(map[posy[0]][posx[0]] == markp){
map[posy[0]][posx[0]] = 0;
score += 10;
dots--;
}
if(map[posy[0]][posx[0]] == dotp){
map[posy[0]][posx[0]] = 0;
score++;
dots--;
}
if(dots == 0){
state++;
continue;
}
0180>>151 その12
05/02/14 02:20:27case 'H': case 'h': direc[0] = 2; break;
case 'J': case 'j': direc[0] = 3; break;
case 'K': case 'k': direc[0] = 1; break;
case 'L': case 'l': direc[0] = 0; break;
}
for(int i = 0; i <= mons; i++){
if(i > 0 && ((int)random.nextLong() % 100 < 10)){
if(heartbeat < scene_1) direc[i] = 2 - direc[i];
else direc[i] = (int)random.nextLong() % 4;
}
switch(direc[i]){
case 0:
if(posx[i] == width - 1) posx[i] = 0;
else if(!wall(posx[i] + 1, posy[i])) posx[i]++;
break;
case 1:
if(posy[i] == 0) posy[i] = height - 1;
else if(!wall(posx[i], posy[i] - 1)) posy[i]--;
break;
case 2:
if(posx[i] == 0) posx[i] = width - 1;
else if(!wall(posx[i] - 1, posy[i])) posx[i]--;
break;
case 3:
if(posy[i] == height - 1) posy[i] = 0;
else if(!wall(posx[i], posy[i] + 1)) posy[i]++;
break;
}
}
0181>>151 その13
05/02/14 02:21:07try{
Thread.sleep(threadsleep);
}catch(InterruptedException e){ }
}
}
public boolean wall(int x, int y) {
if(map[y][x] > 0 && map[y][x] < mon) return true;
else return false;
}
public boolean crash() {
boolean result = false;
for(int i = 1; i <= mons; i++){
if(posx[0] == posx[i] && posy[0] == posy[i]){
result = true;
break;
}
}
return result;
}
public void update(Graphics g) {
paint(g);
}
0182>>151 その14
05/02/14 02:21:44Dimension dm = size();
if(dbuf == null
|| dbuf.width != dm.width || dbuf.height != dm.height){
dbuf = dm;
imgbuf = createImage(dbuf.width, dbuf.height);
gbuf = imgbuf.getGraphics();
}
if(gbuf != null){
bufferedPaint(gbuf);
g.drawImage(imgbuf, 0, 0, this);
}
}
0183>>151 その15
05/02/14 02:22:29g.setColor(Color.black);
g.fillRect(0, 0, dbuf.width, dbuf.height);
g.drawImage(imgpalette.getImage(), 0, 0, 128, 48, this);
if(map == null) return;
for(int j = 0; j < height; j++){
for(int i = 0; i < width; i++){
transItem(g, i, j, map[j][i]);
}
}
transItem(g, posx[0], posy[0],
faq_wink + ((heartbeat % 2 == 0) ? 0 : (3 + direc[0])));
for(int i = 1; i <= mons; i++){
transItem(g, posx[i], posy[i], mon);
}
g.setFont(font);
g.setColor(Color.yellow);
g.drawString("FaqMan ←:H ↓:J ↑:K →:L", InfoX, InfoY);
g.setColor(Color.green);
g.drawString("Stage " + (snum + 1)
+ " Score " + score, ScoreX, ScoreY);
0184>>151 その16
05/02/14 02:23:03g.setColor(Color.red);
g.drawString("Start " + (scene_0 - heartbeat),
StateX, StateY);
}
if(state < 0){
g.setColor(Color.magenta);
g.drawString("Game Over", StateX, StateY);
}
if(state > 0){
g.setColor(Color.cyan);
g.drawString("Stage Clear " + (StateC - state),
StateX, StateY);
}
if(state > StateC){
loadStage(++snum);
}
}
public void transItem(Graphics g, int x, int y, int item) {
int sx = itemW * (item % itemB);
int sy = itemH * (int)(item / itemB);
int dx = FieldX + x * itemW - sx;
int dy = FieldY + y * itemH - sy;
g.copyArea(sx, sy, itemW, itemH, dx, dy);
}
}
0185>>151 その17
05/02/14 02:23:36super(title);
addKeyListener(new GameKeyListener());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
pack();
Dimension dm = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((dm.width - CanvasW) / 2, (dm.height - CanvasH) / 2);
Insets is = getInsets();
setSize(CanvasW + is.left + is.right, CanvasH + is.top + is.bottom);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
field = new FieldCanvas();
getContentPane().add(field);
setVisible(true);
field.loadStage(0);
field.start();
}
}
0186159
05/02/14 02:24:110187デフォルトの名無しさん
05/02/14 02:29:12おお! ありがとうございます。
長大なソースをわざわざ作ってくださって感謝感激です!
これからエクリプスを立ち上げて、コンパイルさせて頂きますが
どの様なゲームなのか概要を教えてください。
ルールと操作法もお願いします。
0188デフォルトの名無しさん
05/02/14 02:33:050189デフォルトの名無しさん
05/02/14 02:36:48某ゲームの「もどき版」です。
操作方法は画面上に書いてあります。
0190デフォルトの名無しさん
05/02/14 02:59:47すいません。
コンパイル&報告は明日の帰宅後にさせて頂きます。
0191デフォルトの名無しさん
05/02/14 12:49:310192デフォルトの名無しさん
05/02/14 13:11:42文字を表示するプログラムを作ったのですが、表示される文字列が配列の第一要素しか
表示されません。どこを直せばよいのか教えてください。
0193デフォルトの名無しさん
05/02/14 13:19:21ソースがないとどこを直せばいいのかわかりません
せめて、そのBM法で照合成功した後だけでもいいので書いてください
0194デフォルトの名無しさん
05/02/14 16:27:39すごい。。。記録を塗り替えたよ。
確か今までの最長コードは15レスだったが、今17レスの新記録が
生まれた。
さあ、皆でこのスレッドをソースコードで埋め尽くすのだ!
JAVAプログラマの力を見せ付けてやるのだ!
0195デフォルトの名無しさん
05/02/14 16:32:230196デフォルトの名無しさん
05/02/14 17:42:40ここで聞いてみる。
byte[] b = new byte[] {
0xDB, 0x01
};
こういうbyte配列宣言したいんだけど、
0xDBが signed byteの範囲を超えてるから怒られるんだよ。
こういうときってどうしたらいいのん?
0197デフォルトの名無しさん
05/02/14 17:52:59大文字小文字を区別してファイルの中身を検索し、マッチした行を表示する方法教えてください。
0198デフォルトの名無しさん
05/02/14 17:55:48byte[] b = new byte[] {
-37, 0x01
};
0199デフォルトの名無しさん
05/02/14 17:56:36byte[] b = new byte[] {
(byte) 0xDB, 0x01
};
0200デフォルトの名無しさん
05/02/14 18:09:02なる。signedに変えちゃうか…。
でもそれだと、0xDBであることがわかりにくくなるから、
あまり気持ちよくないね…。
>>199
あ、それいい。
とりあえずそれで行ってみるよ。
こんなことに気づけなかった漏れ…orz
0201デフォルトの名無しさん
05/02/14 18:27:28byte[] b = new byte[] {
0xDB, 0xBE, 0x8B, 0xAB, 0x9F, 0xEB, 0xCB, 0x01
};
みたいなときに
(byte)0xDB, (byte)0xBE, (byte)0x8B, (byte)0xAB, (byte)0x9F, (byte)0xEB, (byte)0xCB, 0x01
って書きたくないんですけど、
やっぱりこれしか方法は無いんですかね。・・・orz
0202デフォルトの名無しさん
05/02/14 18:41:29int[] a = {0xDB, 0xBE, 0x8B, 0xAB, 0x9F, 0xEB, 0xCB, 0x01};
byte[] b = new byte[a.length];
for(int i = 0; i < b.length; i++)
b[i] = (byte)a[i];
0203デフォルトの名無しさん
05/02/14 19:09:24勉強中ですがいまいちJAVAのプログラム方法がつかめません。
宿題の内容はこのディレクトリのREADME.TXT中のThe exerciseと
Challenge Exercisesに書いてあります(文頭が+になっているものです)。
ttp://www.daimi.au.dk/dIntProg/eksempler/bluej/chapter04/club/
Club.javaのソースに付け足す形になります。
本当に丸投げになってしまい申し訳ありませんがよろしくお願いします。
0204デフォルトの名無しさん
05/02/14 19:19:08当方英語の知識がなく困っています。
読めっつってんの?
0205197です。
05/02/14 19:22:19大文字小文字を区別してファイルの中身を検索し、マッチした行を表示する方法のメソッドを作るのですがよろしくお願いします。
0206デフォルトの名無しさん
05/02/14 19:25:44ありがとうございます。
なかなかスマートな方法ですね。
一旦intに入れたり、実行中にコピーされるのが
無駄な感じがしますが仕方ないですね。
0207デフォルトの名無しさん
05/02/14 19:28:53行がずれてたり片方には無かったりすることは考えなくていいの?
それともdiffコマンド見たいなもの作れって言う話?
0208デフォルトの名無しさん
05/02/14 19:31:56これ結構感動しました。
でもWindowsでは動くのですが、うちのLinux君だと動いてくれません。
どうしたもんでしょうか?
0209204
05/02/14 20:01:38できたから貼っとく。
英語めんどいわ。。
import java.util.ArrayList;
public class Club {
ArrayList memberList;
public Club() { memberList = new ArrayList(); }
public void join(Membership member) { memberList.add(member); }
public int numberOfMembers() { return memberList.size(); }
public int joinedInMonth(int month) {
int count=0;
for( int i=0; i<memberList.size(); i++ ) {
if( ((Membership)memberList.get(i)).getMonth() == month ) count++;
}
return count;
}
public ArrayList purge(int month, int year) {
ArrayList purgedList = new ArrayList();
for( int i=0; i<memberList.size(); i++ ) {
if( ((Membership)memberList.get(i)).getMonth() == month ) {
if( ((Membership)memberList.get(i)).getYear() == year ) {
memberList.remove(i);
purgedList.add((Membership)memberList.get(i));
}
}
}
return purgedList;
}
}
0210デフォルトの名無しさん
05/02/14 22:46:16ただの絵でもいいらしいんですができれば少しぐらい動いたほうが良いらしいです。
誰かなんか作って下さい。
0211java初心者
05/02/14 22:51:26どうしても一つ分からないところがあります。
作っているのはブロック崩しのゲームなのですが、ボールの当たり判定がよくわかりません。
ballX+=ballVX;
if (ballX<=2) {
ballX=2;
ballVX=-ballVX;
} else if (ballX>=118) {
ballX=118;
ballVX=-ballVX;
} else {
i=(ballY/10)*6+ballX/20;
if (0<=i && i<60 && block[i]!=0) {
block[i]=block[i]-1;
ballVX =-ballVX;
if (--rest<=0) init=S_CLEAR;
}
}
この部分を説明しなくてはいけないのですが、ここはどういった意味なのでしょう?
分かる方いらっしゃいましたらご指導お願いします。
0212java初心者
05/02/14 22:53:270213デフォルトの名無しさん
05/02/14 23:27:05でballVXちうのはボールの移動速度のX座標分なんだろうなー。
でもってballXが2以下かもしくは118以上ってのは横の壁に当たったことを意味してるのかなー。違うかなー。
壁に当たったからボールの移動方向が逆になってるんだろーなー。
でこのiってなんだろーなー意味分からんなー。
ちうかそもそもこの処理はいつ呼ばれるのかなー。
>>211はボールの当たり判定とか言ってるから、ボールが何かに当たったときにコールされるのかなー。分からんなー。
あーなんか腹立ってきたなー。こんなんで分かれっていう奴の神経が分からんなー。
このelse文はブロックに当たったときなのかなー。
block配列はブロックの有無を表してるフラグなのかなー。
iがなんなのかよく分からんが、とりあえずこのif文はボールの座標にブロックがあった場合なのかなー。
ある状態が1でない状態が0だからボールがブロックに当たったらblock配列のi番目を1引いてるのかなー。
んでもってぶつかったからボールの移動方向が逆になってるんだろーか。
俺ならボールの移動速度の「Y座標」の正負を逆にしたいなー。勘違いしてるかなー。
最後のif文なんやろーなー。
あーrestって「残り」ってことかなー?ボールがブロックにぶつかって残りブロックが1引かれて、
それが0以下なら消さなきゃいけないブロックはないからこのステージは終わりなんやろーなー。
だからinitっていうなんかよー分からん変数に「ステージクリアー」のフラグを立ててるんやろーなー。
違うかなー。でも別にどーでもいいなー。
0214java初心者
05/02/14 23:38:10返信ありがとうございます。
>>213さんの推測どおりであっています!さすがです。
iっていうのはブロック数です。縦10x横6の60個で構成されています。
>>213さんのお陰でなんとか分かりそうです。ありがとうございます。
あと
i=(ballY/10)*6+ballX/20;
が何を表しているのかがよく分かりません。
よろしければ教えてください。
何度もすみません
0215デフォルトの名無しさん
05/02/14 23:49:45その部分は自分で作ってるんじゃないのか?
0216213
05/02/14 23:54:52>>>213さんの推測どおりであっています!さすがです。
あってるってことが分かってるってことは
理解できてるんじゃん。
イマイチ>>213で俺の言いたいことが伝わってないっぽいけど、
持ってる情報は「全部」出して。
今回のケースなら変数が何を表してるのかってのはそっちで分かってるんでしょ?
でもこっちはそれすら推測しなきゃいけないんだから、はっきりいってツライ。
iはブロック数じゃないでしょ。ブロックがある場所だわきっと。
0 1 2 3 4 5
6 7 8 ...
てな具合に0から59まで横6縦10でブロックを配置してる。
でブロックは1コにつき横20縦10のサイズなんだと思う。
だからボールのy座標を10で割れば「どの行」にボールがいるか分かるわけで
たとえばボールのy座標が11なら10で割って6掛ければ「6」だから
iが6から11のどれかってゆーのが分かる。
x座標も同様。たとえばx座標が50なら20で割って「2」だから
さっきの6に2足してiは8。
つまりボールのx座標とy座標からブロックのある場所を計算してる。
0217デフォルトの名無しさん
05/02/14 23:56:56それはボールの座標から、当たったブロックのブロック配列の中での位置(i)を算出
0218デフォルトの名無しさん
05/02/15 00:00:05ありがとうございました。感動しました。私の日本語訳よりソースの完成が早い
とは思いませんでした。
これから勉強して自分で出来るようにならないといけませんね。今回は本当にあ
りがとうございました。
0219デフォルトの名無しさん
05/02/15 00:01:09判定の部分は友人に作ってもらいました・・・。
>>213さん
あ、そうです。iはブロックのある場所でした。すみません。
0は背景で設定しているので、1〜60がブロックになります。
ブロックのサイズも213さんのおっしゃる通りです。
ご説明ありがとうございます。結構なぞが解けてきました。
でわ、1ステージ分のソースを載せさせていただきます
0220デフォルトの名無しさん
05/02/15 00:01:11もし他の香具師が作ったものをメンテで作り直してるんなら
この際そこら辺も直しとけ
0221デフォルトの名無しさん
05/02/15 00:02:59>0は背景で設定しているので、1〜60がブロックになります。
お前のブロックは左上が欠けてるのか?
0222java初心者
05/02/15 00:03:39ありがとうございます。213さんの説明で納得できました。
>>220
マジックナンバーって何だかよくわかりません・・・すみません。
0223デフォルトの名無しさん
05/02/15 00:04:14お待ちしております
0224デフォルトの名無しさん
05/02/15 00:05:20ttp://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/example/MagicNumber.html
0225java初心者
05/02/15 00:08:41//ブロック崩し(キャンバス)
final class BlockCanvas extends Canvas {
private static int event;
void exe() {
Graphics g=getGraphics();
int i,j,k;
int stage=0;
int S_TITLE=0, //シーン定数
S_PLAY =3,
S_CLEAR=1,
S_MISS =2;
String[] TEXT={//テキスト
"PLEASE START",
"CLEAR!",
"MISS!"};
0226デフォルトの名無しさん
05/02/15 00:09:11int scene ; //シーン
int init ; //初期化
int rest; //ノ残り
long sleepTime; //前時間
//ブロック・ボール・バー
int ballX; //ボールX座標
int ballY; //ボールY座標
int ballVX; //ボールX速度
int ballVY; //ボールY速度
int barX; //バーX座標
0227java初心者
05/02/15 00:10:17{ //stage=0 のブロック
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,1,1,1,1,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,}
Image[] image =new Image[61];//イメージ
int[] block =new int[60];//ブロック
0228java初心者
05/02/15 00:10:49switch(stage){
case 0:
//システム
scene =S_TITLE; //シーン
init =S_TITLE; //初期化
rest =0; //ノ残り
sleepTime=0; //前時間
ballX =0; //ボールX座標
ballY =0; //ボールY座標
ballVX=0; //ボールX速度
ballVY=0; //ボールY速度
barX =0; //バーX座標
0229デフォルトの名無しさん
05/02/15 00:11:210230java初心者
05/02/15 00:11:46//画面サイズ
g.setColor(g.getColorOfName(g.BLUE));
g.fillRect(0,0,getWidth(),getHeight());
if (getHeight()>=130) {
g.setOrigin((getWidth()-120)/2,(getHeight()-130)/2);
} else {
g.setOrigin((getWidth()-120)/2,0);
}
//フォントサイズ
if (Font.getDefaultFont().getHeight()>12)
g.setFont(Font.getFont(Font.SIZE_SMALL));
0231java初心者
05/02/15 00:12:25for (i=60;i>=1;i--) {
if (BLOCK[stage][i-1]!=0) {
k=100*stage+i;
m=MediaManager.getImage("resource:///"+k+".gif");
m.use();
image[i]=m.getImage();
}
}
m=MediaManager.getImage("resource:///00.gif");
m.use();
image[0]=m.getImage();
0232java初心者
05/02/15 00:12:56while (true) {
//初期化
if (init>=0) {
scene=init;
init=-1;
//タイトル・プレイ
if (scene==S_TITLE || scene==S_PLAY) {
rest=0;
for (i=59;i>=0;i--) {
block[i]=BLOCK[stage][i];
if (block[i]!=0) rest=rest+block[i];
}
}
0233java初心者
05/02/15 00:13:57if (scene!=S_PLAY) {
setSoftLabel(SOFT_KEY_1,"スタート");
}
//プレイ
else {
ballX =60;
ballY =113;
ballVX =0;
ballVY =0;
barX =60;
setSoftLabel(SOFT_KEY_1,"");
}
}
0234java初心者
05/02/15 00:14:43g.lock();
g.setColor(g.getColorOfName(g.WHITE));
g.fillRect(0,0,120,130);
g.drawImage(image[0],0,0);
for (i=59;i>=0;i--) {
if (block[i]!=0) {
g.drawImage(image[i+1],(i%6)*20,(i/6)*10);
}
}
//プレイ
if(scene==S_PLAY) {
//バー移動
if (((1<<Display.KEY_LEFT)&getKeypadState())!=0) {
barX-=8;
if (barX<10) barX=10;
if (ballVX==0) ballX-=8;
}
if (((1<<Display.KEY_RIGHT)&getKeypadState())!=0) {
barX+=8;
if (barX>110) barX=110;
if (ballVX==0) ballX+=8;
}
0235java初心者
05/02/15 00:15:20if (barX-12<=ballX && ballX<=barX+12 &&
116 <=ballY && ballY<=120) {
ballVY=-Math.abs(ballVY);
if (ballX>=barX+8) {
ballVX=4;
} else if (ballX<=barX-8) {
ballVX=-4;
} else if (ballX>=barX+4) {
ballX+=3;
} else if (ballX<=barX-4) {
ballX-=3;
}
}
0236デフォルトの名無しさん
05/02/15 00:16:120237デフォルトの名無しさん
05/02/15 00:17:080238java初心者
05/02/15 00:17:14ballX+=ballVX;
if (ballX<=2) {
ballX=2;
ballVX=-ballVX;
} else if (ballX>=118) {
ballX=118;
ballVX=-ballVX;
} else {
i=(ballY/10)*6+ballX/20;
if (0<=i && i<60 && block[i]!=0) {
block[i]=block[i]-1;
ballVX =-ballVX;
if (--rest<=0) init=S_CLEAR;
}
}
0239java初心者
05/02/15 00:18:19ballY+=ballVY;
if (ballY<=2) {
ballY=2;
ballVY=-ballVY;
} else if (ballY>=128) {
ballY=128;
init=S_MISS;
S_TITLE=0;
} else {
i=(ballY/10)*6+ballX/20;
if (0<=i && i<60 && block[i]!=0) {
block[i]=block[i]-1;
ballVY =-ballVY;
if (--rest<=0) init=S_CLEAR;
}
}
0240デフォルトの名無しさん
05/02/15 00:18:320241java初心者
05/02/15 00:18:57g.setColor(g.getColorOfName(g.RED));
g.fillRect(ballX-2,ballY-2,4,4);
g.setColor(g.getColorOfName(g.GREEN));
g.fillRect(barX-10,116,20,4);
g.drawString(String.valueOf(rest),3,13);
}
//タイトル・クリア・ミス
else{
g.setColor(g.getColorOfName(g.BLACK));
g.drawString(TEXT[scene],
(120-TEXT[scene].getBytes().length*6)/2+1,116);
g.setColor(g.getColorOfName(g.RED));
g.drawString(TEXT[scene],
(120-TEXT[scene].getBytes().length*6)/2,116);
}
g.unlock(true);
// case 0 の終わり
if(scene==S_CLEAR){stage+=1;break;}
0242デフォルトの名無しさん
05/02/15 00:19:35//システム
int scene ; //シーン
int init ; //初期化
int rest; //ノ残り
long sleepTime; //前時間
//ブロック・ボール・バー
int ballX; //ボールX座標
int ballY; //ボールY座標
int ballVX; //ボールX速度
int ballVY; //ボールY速度
int barX; //バーX座標
・・・
0243java初心者
05/02/15 00:19:43while (System.currentTimeMillis()<sleepTime+70L) Thread.yield();
sleepTime=System.currentTimeMillis();
//イベント
if (S_TITLE==0 && scene==S_PLAY && event==Display.KEY_SELECT) {
ballVX=-4;
ballVY=-3;
if (barX>60) ballVX=3;
} else if (scene!=S_PLAY && event==Display.KEY_SOFT1) {
init=S_PLAY;
} else if (event==Display.KEY_SOFT2) {
IApplication.getCurrentApp().terminate();
}
event=-222;
}
} catch (Exception e) {
}
0244java初心者
05/02/15 00:20:33当方超初心者の為色々不備があると思いますが
ご指導お願いします
0245デフォルトの名無しさん
05/02/15 00:22:33エミュ持ってないから遊べないや
0246デフォルトの名無しさん
05/02/15 00:25:39おつかれさまです
いまから試してみます
0247java初心者
05/02/15 00:25:44初めて組んだjavaのプログラムなので、相当不備があると思われます。
すみません。
>>245
エミュはドコモのHPにありますよ。
0248java初心者
05/02/15 00:26:48改行多すぎとか色々言われて時間が掛かってしまいました。
0249デフォルトの名無しさん
05/02/15 00:27:35http://takenaka-akio.cool.ne.jp/doc/perl_kiso/readable.html
http://www.c3.club.kyutech.ac.jp/~sukiyaki/mod/miyasui.html
http://www.codeseek.net/think/thinkLiteral.htm
0250デフォルトの名無しさん
05/02/15 00:30:37サイズ大きくなるより、読みにくくてもストレートなコード
書く傾向にあるのは止むを得まい。
0251java初心者
05/02/15 00:33:19ご指導ありがとうございます。ブックマークさせていただいたので
後ほどじっくり勉強したいと思います。
>>250
超初心者なので全てストレートです。何も応用とかはしていません。
0252デフォルトの名無しさん
05/02/15 00:37:130253java初心者
05/02/15 00:38:56あ・・・そうでしたか・・・すみません。
0254デフォルトの名無しさん
05/02/15 00:50:22ダウンロード完了しました。
0255java初心者
05/02/15 00:52:12お疲れ様でした。とろとろしていた私にも責任があります。
すみませんでした。そして、ありがとうございます。
0256java初心者
05/02/15 00:54:11バーの衝突判定なのですが・・・本当に何度もすみません。
//バー衝突判定
if (barX-12<=ballX && ballX<=barX+12 &&
116 <=ballY && ballY<=120) {
ballVY=-Math.abs(ballVY);
if (ballX>=barX+8) {
ballVX=4;
} else if (ballX<=barX-8) {
ballVX=-4;
} else if (ballX>=barX+4) {
ballX+=3;
} else if (ballX<=barX-4) {
ballX-=3;
}
この部分です。これを説明おねがいします。何度もすみません。
0257デフォルトの名無しさん
05/02/15 00:56:32ここでエラーが出ます
int[][] BLOCK={
{ //stage=0 のブロック
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,1,1,1,1,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,}
Image[] image =new Image[61];//イメージ
int[] block =new int[60];//ブロック
0258java初心者
05/02/15 00:58:14int[] BLOCK={
{ //stage=0 のブロック
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,1,1,1,1,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,}
Image[] image =new Image[61];//イメージ
int[] block =new int[60];//ブロック
これで動きませんか?
0259デフォルトの名無しさん
05/02/15 01:03:40リソースの00.gifとかxx.gif
っていうファイルいっぱいいるよね?
0260java初心者
05/02/15 01:05:55はい。いっぱいあります。それもUPします。少々お待ちください。
0261デフォルトの名無しさん
05/02/15 01:06:51ここに出した方が良かったのかも知れない。
http://pc5.2ch.net/test/read.cgi/tech/1102844217/l50
0262java初心者
05/02/15 01:08:49http://upload.fam.cx/cgi-bin/img-box/uh750215010700.zip
ここにUPしました。すべてのプログラムもここにあります。
最初からこうすればよかったですね。すみません。
0263java初心者
05/02/15 01:09:40あ・・・そうですね。そちらの方がよかったかもしれないですね・・・
申し訳ないです
0264デフォルトの名無しさん
05/02/15 01:12:40int[][] BLOCK={{ //stage=0 のブロック
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,1,1,1,1,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,}};
将来ステージが増える(かもしれない)ことを考えるとこっちじゃないかな
0265java初心者
05/02/15 01:15:58あ・・・そうなりますか・・・すみません。
>>262にすべてのプログラムをUPしました。
最初からこうすればよかったですね・・・本当にご面倒をおかけして申し訳ないです
0266デフォルトの名無しさん
05/02/15 01:33:16try{ と }catch() までの間に } が一個多い。
対応おかしくなってるかソースの貼り間違いじゃないのか・・・orz
0267デフォルトの名無しさん
05/02/15 01:34:340268デフォルトの名無しさん
05/02/15 01:35:57ソース全部貼ってないだろう。
0269java初心者
05/02/15 01:37:19貼り付けているうちになんだか混乱してしまいました・・・
>>262に完全なプログラムをUPさせていただきましたので
そちらをご参照ください。ご面倒おかけして本当にすみません。
0270java初心者
05/02/15 01:38:33申し訳ありません。削っているうちに余計なのまで削ったりしてしまったようです。
くわしくは>>262をご参照ください。ご面倒おかけして本当にすみません。
0271デフォルトの名無しさん
05/02/15 01:39:53ここ見たら中身全然違うしw
0272java初心者
05/02/15 01:40:39すみません。そうですよね。本当に申し訳ありません・・・
0273デフォルトの名無しさん
05/02/15 01:41:46とりあえずめちゃくちゃなソースなんで清書するわ
0274java初心者
05/02/15 01:44:23めちゃくちゃですか・・・ご面倒おかけして本当に申し訳ありません。
0275デフォルトの名無しさん
05/02/15 01:46:13これそのまま使って大丈夫なん?
0276java初心者
05/02/15 01:50:09はい。これはこのままでOKです。正常に動きます。
0277java初心者
05/02/15 01:50:57あ、第一ステージだけ発表のため一部省略していますが、そのままで動きます。
0278デフォルトの名無しさん
05/02/15 01:53:590279java初心者
05/02/15 01:54:58そうです。すみません・・・
0280デフォルトの名無しさん
05/02/15 02:01:02同じ処理が繰り返し書かれてるんだけど、この書き方って最悪・・・
0281java初心者
05/02/15 02:02:43そうなんです・・・全く応用ができなかったものでそれでもう提出してしまいました・・・
すみません
0282デフォルトの名無しさん
05/02/15 02:03:55おなじ処理の繰り返しにコピペをしている発想がまずすぎ。
判定するためのコードは共通にして、関数化する必要がある。
各stage毎の処理は関数呼び出し時のパラメータで変化させる。
こりゃ清書どころか全面的に書き直しだな。
0283デフォルトの名無しさん
05/02/15 02:05:100284デフォルトの名無しさん
05/02/15 02:07:30この宿題って明日までなんだよね?
0285java初心者
05/02/15 02:09:40ご指摘ありがとうございます。これからもっと勉強していきます。
もうこれで提出してしまったので、書き直しはできません・・・
まだまだ私の知識が甘いって事を痛感しております。
>>283さん
ありがとうございます。ちょっと頑張りました。
0286java初心者
05/02/15 02:11:10プログラム自体はもう提出してありまして、明日は発表なのです。
だからプログラム全体を理解しておかないとまずいんです。
プログラムは教授と友人の助けによりなんとかなったのですが、
発表は自分でやらないといけないので・・・
0287デフォルトの名無しさん
05/02/15 02:11:48清書出来たら戻ってくる
0288java初心者
05/02/15 02:14:55申し訳ありません。本当にありがとうございます。
私も明日の発表用の論文とパワーポイントをやってきます。
みなさん、本当にありがとうございます。
0289デフォルトの名無しさん
05/02/15 02:15:10明日発表なら考察に「リファクタリングが今後の課題」とでも書いて桶。
0290java初心者
05/02/15 02:22:43ご意見ありがとうございます。参考にさせていただきます。
0291java初心者
05/02/15 02:25:44みなさん本当にありがとうございました!
0292java初心者
05/02/15 03:13:40どなたか解説お願いします。本当に何度もすみません
//バー衝突判定
if (barX-12<=ballX && ballX<=barX+12 &&
116 <=ballY && ballY<=120) {
ballVY=-Math.abs(ballVY);
if (ballX>=barX+8) {
ballVX=4;
} else if (ballX<=barX-8) {
ballVX=-4;
} else if (ballX>=barX+4) {
ballX+=3;
} else if (ballX<=barX-4) {
ballX-=3;
}
これです。
0293デフォルトの名無しさん
05/02/15 03:28:580294デフォルトの名無しさん
05/02/15 03:31:09116 <=ballY && ballY<=120) {
ballVY=-Math.abs(ballVY);
ballX が bar の左端と右端の間にあって
ballY が bar の上と下の間にあればボールは上にもどる
0295java初心者
05/02/15 03:32:29心にズキズキ響きます。リファクタリングはこれから勉強していきます・・・
0296デフォルトの名無しさん
05/02/15 03:32:42ballVX=4;
} else if (ballX<=barX-8) {
ballVX=-4;
bar の比較的外側にあたったときは逆方向に打ち返される
0297デフォルトの名無しさん
05/02/15 03:33:32ballX+=3;
} else if (ballX<=barX-4) {
ballX-=3;
}
bar の比較的中心(スウィートスポット)に当たった時は順方向に跳ね返るだけ
0298java初心者
05/02/15 03:35:07ご説明ありがとうございます。
ballVY=-Math.abs(ballVY);
がballY が bar の上と下の間にあればボールは上にもどる
という意味なのでしょうか?
ballVY=-Math.abs(ballVY);
の意味がよく分からないんです・・・
0299デフォルトの名無しさん
05/02/15 03:36:37スウィートスポットの話はではないが、それは条件が除外された後の話。
0300java初心者
05/02/15 03:36:39ご説明ありがとうございます。理解できました!ありがとうございました。
0301java初心者
05/02/15 03:37:29え、そうなのですか?うぅどうしよう・・・
0302デフォルトの名無しさん
05/02/15 03:38:05これは上下の中間に入ってしまった時に誤動作しないための処理。
もし、
ballVY=-ballVY;
と書いてしまうと、ボールがbarの中でバウンドするはずw
0303java初心者
05/02/15 03:41:31なるほど。そうなんですか!ありがとうございます。
0304デフォルトの名無しさん
05/02/15 03:45:300305java初心者
05/02/15 03:56:25やってみました。特に問題なく動いたのですが、バーに当たったときの
ボールの跳ね返り方に変化がありました。ワンパターンな跳ね返りしかしませんでした。
-Math.abs(ballVY);にはどういった意味があるのですか?
0306java初心者
05/02/15 04:21:12色々ご指導してくださったみなさん、本当にありがとうございました。
感謝感謝です。
0307デフォルトの名無しさん
05/02/15 06:23:53そこのiアプリ実行してみました。stage1はなかなか良いですね。
ブロックが白じゃなくて他の色だともっと楽しめると思います。
他に気になることと言えば、ブロックに書いてある数字より少ない
カウントでブロックが消えることが多いように見受けられます。
画像が合ってないのかプログラムの配列の初期値がおかしいのか、
ブロック減数のバグとか衝突判定のバグとか何が間違えてるかは不明。
0308>>210 その1
05/02/15 23:19:32import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.util.*;
import java.util.Timer;
public class HW80 extends JFrame {
static final double XMIN = -1, XMAX = 1, YMIN = -1, YMAX = 1, ZMIN = -1, ZMAX = 1;
static final int N = 20;
double z[][] = new double[N][N];
double degX = 45, degY = 45;
double radX = Math.toRadians(degX), radY = Math.toRadians(degY);
int prevX, prevY;
boolean axisZFlag;
int cntZ = 0;
BufferedImage img;
Graphics2D g;
JLabel lab = new JLabel();
public static void main(String[] arg) {
new HW80();
}
HW80() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
z[i][j] = 0.4 * Math.sin(2.0 * Math.PI / N * i)
* Math.sin(2.0 * Math.PI / N * j);
}
}
0309>>210 その2
05/02/15 23:20:11public void mousePressed(MouseEvent e) {
prevX = e.getX();
prevY = e.getY();
}
});
lab.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
int addX = (e.getX() - prevX) / 4 * 4;
int addY = (e.getY() - prevY) / 4 * 4;
if (addX == 0 && addY == 0)
return;
degY += addX;
if (degY >= 360)
degY = 0;
else if (degY < 0)
degY = 359;
degX += addY;
if (degX >= 360)
degX = 0;
else if (degX < 0)
degX = 359;
prevX = e.getX();
prevY = e.getY();
radX = Math.toRadians(degX);
radY = Math.toRadians(degY);
draw();
}
});
getContentPane().add(lab);
0310:>>210 その4
05/02/15 23:20:41setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
draw();
new Timer().schedule(new TimerTask() {
public void run() {
moveZ();
draw();
}
}, 100, 50);
}
synchronized void moveZ() {
if (axisZFlag) {
--cntZ;
if (cntZ <= -15)
axisZFlag ^= true;
} else {
++cntZ;
if (cntZ >= 15)
axisZFlag ^= true;
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
z[i][j] = 0.4 * Math.sin(2.0 * Math.PI / N * i)
* Math.sin(2.0 * Math.PI / N * j)
* ((double) cntZ / 10);
}
}
}
0311>>210 その5
05/02/15 23:21:15return (int) ((x - XMIN) / (XMAX - XMIN) * getSize().width * 0.8 + (getSize().width * 0.1));
}
int transZ(double z) {
return (int) ((ZMAX - z) / (ZMAX - ZMIN) * getSize().height * 0.8 + (getSize().height * 0.1));
}
synchronized void draw() {
if (img == null) {
img = new BufferedImage(getSize().width, getSize().height,
BufferedImage.TYPE_INT_ARGB);
g = img.createGraphics();
g.setBackground(Color.white);
g.setColor(Color.black);
lab.setIcon(new ImageIcon(img));
}
g.clearRect(0, 0, img.getWidth(), img.getHeight());
double xx[][] = new double[z.length][z.length];
double zz[][] = new double[z.length][z.length];
double sinA = Math.sin(radX), sinB = Math.sin(radY);
double cosA = Math.cos(radX), cosB = Math.cos(radY);
double x, y, y0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
x = XMIN + (XMAX - XMIN) / N * i;
y = YMIN + (YMAX - YMIN) / N * j;
y0 = y * cosA - z[i][j] * sinA;
zz[i][j] = y * sinA + z[i][j] * cosA;
xx[i][j] = x * cosB - y0 * sinB;
}
}
0312>>210 その6
05/02/15 23:22:16for (int j = 0; j < N - 1; j++) {
int xpg[] = { transX(xx[i][j]), transX(xx[i + 1][j]),
transX(xx[i + 1][j + 1]), transX(xx[i][j + 1]) };
int zpg[] = { transZ(zz[i][j]), transZ(zz[i + 1][j]),
transZ(zz[i + 1][j + 1]), transZ(zz[i][j + 1]) };
g.drawPolygon(xpg, zpg, xpg.length);
}
}
lab.repaint();
}
}
0313デフォルトの名無しさん
05/02/16 00:03:34ただの絵でもいいらしいんですができれば少しぐらい動いたほうが良いらしいです。
誰かなんか作って下さい。
0314デフォルトの名無しさん
05/02/16 00:09:06>>210
0315デフォルトの名無しさん
05/02/16 00:12:20お尻とオパーイに見えた
0316デフォルトの名無しさん
05/02/16 00:23:12すぐ上に作ってるよー
0317デフォルトの名無しさん
05/02/16 00:24:27なんかエッチなアプリだな。
0318デフォルトの名無しさん
05/02/16 00:25:22溜まりすぎだ。ちゃんと定期的に抜いてオケよ。
0319デフォルトの名無しさん
05/02/16 02:21:200320デフォルトの名無しさん
05/02/16 02:56:06珍しく感想を言おう。おまいはエロい。
0321デフォルトの名無しさん
05/02/16 09:38:300322デフォルトの名無しさん
05/02/16 16:01:37今までのプログラムに以下のものを追加せよ。
・自分のロボットと敵(コンピュータ)のロボットをフィールド上にランダムに
配置して交互に一マスずつロボットを進めていき、先にHOMEにたどり着けたほうが勝ち。
・HOMEまでの道のりのマスにボーナス(20ドルゲットとか50ドルゲットとか)をランダムで配置。
・勝った場合、賞金として100ドルゲット。
・HOMEにいたるまでのコストを賞金から引いて残金を最終スコアとする。
・スコアキーパー(デフォルトのTOP5のデータを入れておく。)からデータを読み取り、TOP5を記録。
このとき、現在プレイしたスコアがTOP5入りするようなら名前の入力を求める。
以上です。
どなたかお願いします。
0323デフォルトの名無しさん
05/02/16 17:33:50アミューズメント・クリエーター学院とか
0324sage
05/02/17 02:50:35普通の4年制大学です。アルゴリズムのクラスですね。
0325デフォルトの名無しさん
05/02/17 19:19:400326デフォルトの名無しさん
05/02/17 19:31:470327322
05/02/17 20:07:580328115
05/02/17 20:31:49115では答えてもらえない原因って書いたけど、
「追加の宿題」ってこっちからしたら
今までの問題すべてふまえないといけないのでめんどくさいんだよね。。
これまでの宿題ったって人の書いたソースだからいちいち読まないし。
0329322
05/02/17 22:32:48おっしゃることは最もだと思います。ただ、うちの先生の方針がこうなので・・・。
皆さんの作ったのを参考にしたいので、今までの方とは違ったものでもいいので
どなたかお願いできませんか?
0330322
05/02/18 14:15:43以下がゲームの必要事項です。
スタートボタンを押すとロボット(プレイヤー)とロボット(コンピュータ)
HOMEをそれぞれランダムで格子状(gridLayoutを使って作ります)のステージに配置します。
ステージのマスの数(縦×横)はプレイヤーが数字を入力して選べます。
HOMEはプレイヤーにはわからないようにします。
プレイヤーとコンピュータのロボットは交互に一マスずつ動いていきます。
ロボットが一マス動くごとに1ドルのコストがかかります。
ロボットが一マス動くごとにステージをアップデートしてHOMEまでの距離を表示します。
ロボットはキーボード操作でマスを上下左右に移動できます。(斜めはなし)
上=I, 下=M, 右=L, 左=Jのキー配置です。
HOMEまでの道のりのマスにボーナス(20ドルゲットとか50ドルゲットとか)をランダムで配置します。
どちらかのロボットが先にHOMEについた時点でゴールです。
プレイヤーが先にゴールした場合、ボーナスとして100ドルを受け取れます。
最終スコアは勝った場合のボーナスとHOMEまでの道のりで得たボーナスから
コストを引いたものが最終スコアとなります。
スコアキーパー(デフォルトのTOP5のデータを入れておく。)からデータを読み取り、TOP5を記録。
このとき、現在プレイしたスコアがTOP5入りするようなら名前の入力を求める。
ゴール後ウィンドウをポップアップさせて最終スコアとリプレイするかしないかを表示します。
0331322
05/02/18 14:19:53スコアキーパーは3種類のソートアルゴリズムを使ってスコアをソートしなさい。
(提出用は1つのソートアルゴリズムだけでよい。残りの二つは分析(授業中にほかのプログラムを分析します)に使います。)
2つのアルゴリズムは以下の基本のソーティングアルゴリズムです。
挿入ソート(insertion sort)、選択整列(selection sort)、バブル・ソート(bubble sort)
以下のアルゴリズムは効率的なソーティングアルゴリズムです。
クイックソート(Quick sort)、シェルソート(Shell sort)、ヒープソート(heap sort)、マージソート(merge sort)、基数ソート(radix sort)
どのリストストラクチャーを使うかは自分で選択しなさい。自分のアレイ、リンクリストまたはArrayList、LinkedListから選択しなさい。
スコアのソーティングを実装するために:
スコアデータ型はオブジェクトを比較するメソッドを必要とします。
通常、これはequals()メソッドと同様にcompareTo()メソッドにかかわります
(Comparable Interfaceを使用してください)。
同スコアもリストにのせてください。(たとえば2位と3位が両方とも同スコアとか)
file input, outputを使用して、スコアを保存してください。
ファイルエラーに例外処理(exception)を使用してください。
>>115さんの発言を踏まえ、前を見直さなくてもわかるように
ひとつにまとめてみました。(長すぎて2つになりましたが・・・。)
今までに回答を下さった方にはとても感謝していますしとても参考になりました。
また、新たにこれをやってやろうと考えている方がおりましたら、
他の方のソースを踏まえてでも、オリジナルでもかまいませんのでお願いいたします。
0332デフォルトの名無しさん
05/02/18 16:02:32プログラムを作るには曖昧なところがいっぱいあるね。私が作るとするなら、まず以下のようなことを明らかにしたいと思うと思う。
a) プレイヤーとコンピュータの両ロボット、HOME、ボーナスの初期配置に関して、同一セルに配置してはいけないものはあるか。
b) a に関連して、ステージのマスの数を受け付ける際、プログラムとして受け付ける最大値と最小値は?(1x1って入力されたらどうするの?)
c) コンピュータ側のロボットの動き方。HOMEに向かって突き進むのか、ランダムに動くのか。
d) c に関して「HOMEに突き進む」とする場合、コンピュータ側ロボットの斜め方向にHOMEがある場合、縦位置と横位置のどちらを先に合わせようとするか、等。
e) プレイヤーが格子状世界から飛び出るような動きをした場合、動けるのか?(反対側にワープ?)
f) e のような場合を「動けない」と扱う場合、e のようなキー入力のあとにコンピュータ側ロボットの移動に移るのか、あるいは、無効な入力としてもう一度プレイヤーの入力を待つのか。
g) ボーナス配置について、格子状世界全体にランダムに配置するのか、「HOMEまでの道のり」上のみに配置するのか。(ボーナスをゲットしたことを、HOMEに近づいているというヒントとしてプレイヤーに提示するゲームなのか?)
h) g に関して「HOMEまでの道のり上のみに配置する」場合、その道のりが複数経路考えられる場合どうするか。
i) ボーナスの種類と頻度と可視性。どの種類のボーナスをどれくらいの頻度で配置するか。ボーナスは見えるのか。
j) 「HOMEまでの距離を表示」とあるのは、プレイヤー側のロボットのHOMEまでの距離か、コンピュータ側のロボットのHOMEまでの距離か、あるいは両方か。
k) j に関連して、表示する距離は直線距離か、マンハッタン距離か。
l) 所持金不足で動けなくなることはあるのか。(所持金という概念があるのかどうか)
0333デフォルトの名無しさん
05/02/18 16:19:180334デフォルトの名無しさん
05/02/18 16:27:40> 隣接した小島はひとつの島とします (ナナメも隣接とする)
○●○○○○○●○○
○○○○●○●○○○
○○●○○○○○○●
○○○○○○○○○○
●●○○○○○●●○
○●○●●○○○○○
●○●○○●●●○●
○●○○○○○○○○
●○○○○○○●○●
●○○○○●○○●○
1.Island(1)
2.Island(2)
3.Island(1)
4.Island(1)
5.Island(1)
6.Island(13)
7.Island(2)
8.Island(1)
9.Island(3)
10.Island(1)
total:10(26)
0336デフォルトの名無しさん
05/02/18 16:33:40へらず口を利くヒマがあったら、キーボードの一つでも叩きなさい。
0338デフォルトの名無しさん
05/02/18 16:36:18他人を動かすより自分の手を動かせ
0339>>330 その1
05/02/18 22:39:44import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.util.List;
import java.text.*;
interface Constants {
int SIZE = 8, PATHSIZE = 16;
String filename = "score.dat";
}
public class HW81 extends JApplet implements KeyListener, ActionListener, Constants {
private Home home = new Home();
private Robot robot = new Robot();
private Enemy enemy = new Enemy();
private Stage stage;
private List scoreList = new ArrayList();
private List goldList = new ArrayList();
private static boolean initFlag;
public void init() {
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(
filename));
scoreList = (List) in.readObject();
} catch (FileNotFoundException e) {
scoreList.add(new Score(100, "aaa"));
scoreList.add(new Score(90, "bbb"));
scoreList.add(new Score(80, "ccc"));
scoreList.add(new Score(70, "ddd"));
scoreList.add(new Score(60, "eee"));
0340>>330 その2
05/02/18 22:40:17System.out.println("スコアファイル読み込みエラー");
System.out.println(e);
}
addComponentListener(new ComponentAdapter() {
public void componentShown(ComponentEvent e) {
if (!initFlag) {
int width = getContentPane().getSize().width, height = getContentPane()
.getSize().height;
stage = new Stage(width, height, robot, enemy, HW81.this);
stage.addKeyListener(HW81.this);
setContentPane(stage);
startGame();
initFlag = true;
}
}
});
}
void quickSort(Score[] data, int begin, int end) {
if (begin >= end)
return;
Score num = data[begin + 1];
data[begin + 1] = data[begin];
int loc = begin;
for (int idx = begin + 1; idx <= end; idx++) {
if (num.compareTo(data[idx]) <= 0) {
++loc;
Score swap = data[idx];
data[idx] = data[loc];
data[loc] = swap;
}
}
0341:>>330 その3
05/02/18 22:42:40data[loc] = num;
quickSort(data, begin, loc - 1);
quickSort(data, loc + 1, end);
}
void startGame() {
home.reset();
List ptList = new ArrayList();
while (ptList.size() < 2) {
ptList.clear();
int dist = (int) ((Math.random() * SIZE) + SIZE);
for (int x = 0; x <= SIZE; x++) {
for (int y = 0; y <= SIZE; y++) {
if (Math.abs(home.x() - x + home.y() - y) == dist)
ptList.add(new Point(x, y));
}
}
}
Collections.shuffle(ptList);
robot.reset((Point) ptList.get(0));
enemy.reset((Point) ptList.get(1));
stage.putPiece(robot);
stage.putPiece(enemy);
for (int i = 0; i < goldList.size(); i++)
stage.removePiece((Home) goldList.get(i));
goldList.clear();
for (int i = 0; i < SIZE * SIZE / 2; ) {
Gold gold = new Gold();
if (!examineOverlaps(gold.x, gold.y)) {
goldList.add(gold);
0342>>330 その4
05/02/18 22:43:58stage.putPiece(gold);
++i;
}
}
int dist = Math.abs(robot.x() - home.x())
+ Math.abs(robot.y() - home.y());
stage.displayInfo("距離" + dist + "m ゲームスタート");
stage.requestFocus();
}
void endGame(Robot obj) {
obj.modifyMoney(100);
stage.displayInfo("ゲーム終了 お金" + robot.money() + "$ 敵の金"
+ enemy.money() + "$");
String msg;
if (robot.money() >= enemy.money()) {
String name = JOptionPane.showInputDialog(this, "あなたは" + robot.money
+ "$対" + enemy.money() + "$で勝利しました。名前を入力してください。",
"スコア登録", JOptionPane.INFORMATION_MESSAGE);
scoreList.add(new Score(robot.money(), name));
Score[] data = (Score[]) scoreList.toArray(new Score[0]);
quickSort(data, 0, data.length - 1);
scoreList = new ArrayList(Arrays.asList(data));
try {
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(filename));
out.writeObject(scoreList);
} catch (Exception e) {
0343:>>330 その5
05/02/18 22:46:44System.out.println(e);
}
msg = "もう一度プレイしますか?";
} else {
msg = "あなたは敗北しました\nもう一度プレイしますか?";
}
int ans = JOptionPane.showConfirmDialog(this, msg, "ゲームのリトライ",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (ans == JOptionPane.YES_OPTION) {
startGame();
} else {
getContentPane().setVisible(false);
}
}
boolean examineOverlaps(int x, int y) {
if (robot.x() == x && robot.y() == y)
return true;
if (enemy.x() == x && enemy.y() == y)
return true;
for (int i = 0; i < goldList.size(); i++) {
Gold gold = (Gold) goldList.get(i);
if (gold.x() == x && gold.y() == y)
return true;
}
return false;
}
0344>>330 その6
05/02/18 22:47:26switch (e.getKeyChar()) {
case 'i':
case 'I':
robot.moveY(-1, enemy);
break;
case 'j':
case 'J':
robot.moveX(-1, enemy);
break;
case 'm':
case 'M':
robot.moveY(+1, enemy);
break;
case 'l':
case 'L':
robot.moveX(+1, enemy);
}
stage.putPiece(robot);
if (goldList.contains(robot)) {
Gold gold = (Gold) goldList.remove(goldList.indexOf(robot));
robot.modifyMoney(gold.point());
stage.removePiece(gold);
}
enemy.move(robot, home);
stage.putPiece(enemy);
0345:>>330 その7
05/02/18 22:48:02Gold gold = (Gold) goldList.remove(goldList.indexOf(enemy));
enemy.modifyMoney(gold.point());
stage.removePiece(gold);
}
int dist = Math.abs(robot.x() - home.x())
+ Math.abs(robot.y() - home.y());
stage.displayInfo("距離" + dist + "m お金" + robot.money() + "$ 敵の金"
+ enemy.money() + "$");
if (robot.equals(home))
endGame(robot);
else if (enemy.equals(home))
endGame(enemy);
}
public void actionPerformed(ActionEvent e) {
if (stage.isButtonSelected()) {
StringBuffer sb = new StringBuffer("スコア表 ベスト5\n\n");
for (int i = 0; i < scoreList.size() && i < 5; i++) {
sb.append((i + 1) + "位 " + scoreList.get(i).toString());
}
stage.displayScores(sb.toString());
} else {
stage.hiddenScores();
}
stage.requestFocus();
}
0346>>330 その8
05/02/18 22:48:35}
public void keyReleased(KeyEvent e) {
}
}
class Stage extends JPanel implements Constants {
private JPanel room = new JPanel(new GridLayout(SIZE, SIZE, PATHSIZE,
PATHSIZE));
private JLabel[][] wall = new JLabel[SIZE][SIZE];
private JLabel topBar = new JLabel();
private JTextArea scores = new JTextArea();
private JLayeredPane lp = new JLayeredPane();
private JToggleButton btn = new JToggleButton("スコア");
Stage(int width, int height, Robot rb, Enemy em, ActionListener al) {
setBackground(Color.black);
topBar.setBorder(BorderFactory.createEtchedBorder());
topBar.setPreferredSize(new Dimension(1000, 0));
topBar.setHorizontalAlignment(JLabel.CENTER);
topBar.setFont(new Font("Dialog", 1, 13));
topBar.setOpaque(true);
topBar.setBackground(new Color(200, 200, 255));
btn.setFont(new Font("Dialog", 0, 10));
btn.setMargin(new Insets(2, 1, 2, 1));
btn.addActionListener(al);
Box menu = Box.createHorizontalBox();
menu.add(btn);
menu.add(topBar);
room.setBackground(new Color(240, 240, 255));
room.setBorder(BorderFactory.createEmptyBorder(PATHSIZE, PATHSIZE,
PATHSIZE, PATHSIZE));
0347:>>330 その9
05/02/18 22:49:10/ SIZE, (height - PATHSIZE * (SIZE + 1)) / SIZE);
for (int a = 0; a < wall.length; a++) {
for (int b = 0; b < wall[a].length; b++) {
wall[a][b] = new JLabel();
wall[a][b].setPreferredSize(wallsize);
wall[a][b].setOpaque(true);
wall[a][b].setBackground(new Color(200, 200, 250));
wall[a][b].setBorder(BorderFactory.createRaisedBevelBorder());
}
}
for (int a = 0; a < wall.length; a++) {
for (int b = 0; b < wall[a].length; b++) {
room.add(wall[a][b]);
}
}
room.setBounds(0, 0, width, height - btn.getPreferredSize().height);
lp.add(room, new Integer(0));
lp.add(rb, new Integer(1));
lp.add(em, new Integer(1));
setLayout(new BorderLayout());
add(lp);
add(menu, BorderLayout.NORTH);
scores.setOpaque(false);
scores.setMargin(new Insets(16, 32, 16, 32));
scores.setFont(new Font("Dialog", 1, 16));
scores.setForeground(Color.green);
}
0348::>>330 その10
05/02/18 22:49:45lp.add(obj, new Integer(zorder));
}
void removePiece(Home obj) {
lp.remove(obj);
}
void putPiece(Home obj) {
int cpX, cpY, rbX = (obj.x() == SIZE) ? obj.x() - 1 : obj.x(), rbY = (obj
.y() == SIZE) ? obj.y() - 1 : obj.y();
if (obj.x() < SIZE)
cpX = wall[rbY][rbX].getLocation().x - PATHSIZE;
else
cpX = wall[rbY][rbX].getLocation().x
+ wall[rbY][rbX].getSize().width;
if (obj.y() < SIZE)
cpY = wall[rbY][rbX].getLocation().y - PATHSIZE;
else
cpY = wall[rbY][rbX].getLocation().y
+ wall[rbY][rbX].getSize().height;
obj.setLocation(cpX, cpY);
}
void displayInfo(String text) {
topBar.setText(text);
}
boolean isButtonSelected() {
return btn.isSelected();
}
0349>>330 その11
05/02/18 22:50:18scores.setBounds(room.getBounds());
scores.setText(text);
lp.add(scores, new Integer(2));
room.setBackground(new Color(240, 240, 255, 128));
for (int a = 0; a < wall.length; a++) {
for (int b = 0; b < wall[a].length; b++) {
wall[a][b].setBackground(new Color(200, 200, 255, 128));
}
}
}
void hiddenScores() {
lp.remove(scores);
lp.validate();
room.setBackground(new Color(240, 240, 255, 255));
for (int a = 0; a < wall.length; a++) {
for (int b = 0; b < wall[a].length; b++) {
wall[a][b].setBackground(new Color(200, 200, 255, 255));
}
}
}
}
class Home extends JLabel implements Constants {
int x, y;
void reset() {
x = 0;
y = 0;
0350:>>330 その12
05/02/18 22:50:52x = (int) (Math.random() * (SIZE + 1));
y = (int) (Math.random() * (SIZE + 1));
}
}
int x() {
return x;
}
int y() {
return y;
}
public boolean equals(Object obj) {
return x == ((Home) obj).x && y == ((Home) obj).y;
}
}
class Gold extends Home implements Constants {
private int point;
Gold() {
point = (int) (Math.random() * 9) * 10 + 10;
x = (int) (Math.random() * (SIZE + 1));
y = (int) (Math.random() * (SIZE + 1));
setFont(new Font("Dialog", 1, 15));
setForeground(new Color(200, 50, 250));
setBounds(0, 0, PATHSIZE, PATHSIZE);
setText(String.valueOf(point));
}
0351>>330 その13
05/02/18 22:51:39return point;
}
}
class Robot extends Home implements Constants {
int money;
Robot() {
setFont(new Font("Dialog", 1, 15));
setForeground(new Color(50, 50, 250));
setBounds(0, 0, PATHSIZE, PATHSIZE);
}
void reset(Point pt) {
x = pt.x;
y = pt.y;
money = 0;
setText("●");
}
int money() {
return money;
}
boolean moveX(int pt, Enemy em) {
if (x + pt >= 0 && x + pt <= SIZE && (x + pt != em.x() || y != em.y())) {
x += pt;
--money;
return true;
}
return false;
}
0352:>>330 その14
05/02/18 22:52:42if (y + pt >= 0 && y + pt <= SIZE && (x != em.x() || y + pt != em.y())) {
y += pt;
--money;
return true;
}
return false;
}
void modifyMoney(int value) {
money += value;
}
void changeFigure() {
setText("★");
}
}
class Enemy extends Robot {
private int rbDist = 0;
private List route = new ArrayList();
Enemy() {
setForeground(new Color(250, 50, 50));
}
void reset(Point pt) {
x = pt.x;
y = pt.y;
money = 0;
rbDist = 0;
setText("■");
}
0353>>330 その15
05/02/18 22:53:21int px, py, count = 0;
do {
px = x;
py = y;
if (Math.random() < 0.5) {
if (x < hm.x)
++px;
else if (x > hm.x)
--px;
} else {
if (y < hm.y)
++py;
else if (y > hm.y)
--py;
}
++count;
if (count >= 10)
return;
} while ((px == x && py ==y) || (px == rb.x() && py == rb.y()));
x = px;
y = py;
--money;
}
}
0354:>>330 その16
05/02/18 22:53:52private static MessageFormat msg = new MessageFormat(
"{0,number,integer}$ {1} {2,date,short} {2,time,short} \n");
private int number;
private String name;
private Date date = new Date(System.currentTimeMillis());
Score(int number, String name) {
this.number = number;
this.name = name;
}
public int compareTo(Object obj) {
Score sc = (Score) obj;
return new Integer(number).compareTo(new Integer(sc.number));
}
public String toString() {
return msg.format(new Object[] { number, name, date });
}
}
0355デフォルトの名無しさん
05/02/18 22:54:48荒らし失せろ
0356>>330 訂正
05/02/18 22:58:30obj.changeFigure();
↑を挿入してください。
0357デフォルトの名無しさん
05/02/18 23:02:15長いんだよ。ウザインだよ。クソコード書き散らしてるんじゃねえ。
自分から低レベルコーディングをバラして楽しいか?
0358デフォルトの名無しさん
05/02/19 05:58:28とりあえず動けばいいんだよ。
いちゃもんつけてないで自分がおしえてあげたらどうなんだ?
それとも自分のレベル晒すのが恥ずかしいのか?
0359デフォルトの名無しさん
05/02/19 06:33:49なんで
>>339-354
を非難して
>>169-185
がお咎め無しなんだ?
あっちの方が長いのに
0360デフォルトの名無しさん
05/02/19 07:35:220361デフォルトの名無しさん
05/02/19 12:19:39あの程度の内容じゃやる気が出ない。
もっと「要コーディングテクニック」な課題をキボン
0362デフォルトの名無しさん
05/02/19 12:58:130363>>334 その1
05/02/19 13:16:50public class HW82 {
static final String seamap =
"○●○○○○○●○○\n"
+ "○○○○●○●○○○\n"
+ "○○●○○○○○○●\n"
+ "○○○○○○○○○○\n"
+ "●●○○○○○●●○\n"
+ "○●○●●○○○○○\n"
+ "●○●○○●●●○●\n"
+ "○●○○○○○○○○\n"
+ "●○○○○○○●○●\n"
+ "●○○○○●○○●○";
static class Cell {
int x, y;
boolean island;
Cell(int x, int y, boolean island) {
this.x = x;
this.y = y;
this.island = island;
}
public boolean equals(Object obj) {
return x == ((Cell) obj).x && y == ((Cell) obj).y;
}
}
0364>>334 その2
05/02/19 13:17:30System.out.println(seamap);
List cellList = new ArrayList();
String[] line = seamap.split("\n");
for (int y = 0; y < line.length; y++) {
for (int x = 0; x < line[y].length(); x++) {
cellList.add(new Cell(x, y, line[y].charAt(x) == '●'));
}
}
int[][] around = { {0, -1}, {-1, -1}, {-1, 0}, {-1, 1},
{0, 1}, {1, 1}, {1, 0}, {1, -1} };
List countList = new ArrayList();
LinkedList queue = new LinkedList();
while (!cellList.isEmpty()) {
Cell cell = (Cell) cellList.remove(0);
if (!cell.island)
continue;
queue.addLast(cell);
int count = 0;
0365:>>334 その3
05/02/19 13:18:06cell = (Cell) queue.removeFirst();
if (cell.island) {
++count;
for (int i = 0; i < around.length; i++) {
int idx = cellList.indexOf(new Cell(cell.x + around[i][0],
cell.y + around[i][1], true));
if (idx != -1)
queue.addLast(cellList.remove(idx));
}
}
}
countList.add(new Integer(count));
}
int total = 0;
for (int i = 0; i < countList.size(); i++) {
System.out.println(i + 1 + ":Island( " + countList.get(i) + " )");
total += ((Integer) countList.get(i)).intValue();
}
System.out.println("total:" + countList.size() + "(" + total + ")");
}
}
0366デフォルトの名無しさん
05/02/19 13:21:270367デフォルトの名無しさん
05/02/19 13:25:42って、プロキシ経由の自動投稿ツール作れば容易にできるが・・・
0368デフォルトの名無しさん
05/02/19 13:27:130369330
05/02/19 13:39:48どうもありがとうございました。きちんと動きました。
ただ、前回と同じくファイルの書き込み、読み込みができません。
スコアファイル読み込みエラー
java.security.AccessControlException: access denied (java.io.FilePermission score.dat read)
スコアファイル書き込みエラー
java.security.AccessControlException: access denied (java.io.FilePermission score.dat write)
>>360
すみませんが、今回の教授の方針がこうなもので。
これからもお世話になるかもしれませんがよろしくお願いします。
0370デフォルトの名無しさん
05/02/19 13:57:22他人が頑張ってるんだから、それぐらい自分で調べるべきだ
0371デフォルトの名無しさん
05/02/19 14:04:52自動投稿ツール作ってみたけど、これ使うとアクセス禁止にならんよな?
0372デフォルトの名無しさん
05/02/19 14:10:310374デフォルトの名無しさん
05/02/19 16:03:24http://sourcepost.sytes.net/
0375デフォルトの名無しさん
05/02/19 17:11:26フィールドとして、氏名・年齢・性別、そして「彼女がいるかどうか」を示すデータも作れと言われた。
教官が「俺を題材にしてデータを入れてもいいぞ」って言ったから
boolean 型じゃなくて配列型にしてやった。
教官に怒られた。
0376デフォルトの名無しさん
05/02/19 17:13:090377デフォルトの名無しさん
05/02/19 17:20:29いきなり定数インタフェースパターンかよ。w
0378デフォルトの名無しさん
05/02/19 18:43:10フィールドとして、氏名・年齢・性別、そして「彼女がいるかどうか」を示すデータも作れと言われた。
教官が「俺を題材にしてデータを入れてもいいぞ」って言ったから
boolean型をstatic finalにした。中身はfalse。
教官に退学させられた。
0379デフォルトの名無しさん
05/02/19 19:47:06糧になるんだ?試行錯誤もしないでプログラムを写すことで何が得られるんだ?
教えてくれよ
0380デフォルトの名無しさん
05/02/19 19:51:050381デフォルトの名無しさん
05/02/19 19:56:14苦労してやっても将来使わないし、それなら誰かにやってもらって
丸写しした方が良い。外の本当に大切な勉強に時間を使えるし。
0382デフォルトの名無しさん
05/02/19 20:01:58大学のほとんどの学生はその考え方だろうな
それで金を親に払わせてるやつはどうしようもないな
>>381
何も勉強できない奴のいいわけじゃんw
つうかプログラムだけでなく宿題は他人まかせだろw
0383デフォルトの名無しさん
05/02/19 20:25:33プログラミングなぞ無用だもんな。そっかそっか。悲しいなぁ
0384デフォルトの名無しさん
05/02/19 20:36:41自分で勉強できないから全て先生のせいになる。
日本のレベルはますます下がるばかり。悲しいね
0385デフォルトの名無しさん
05/02/19 21:01:48わかりやすいにもほどがある!!「新Java言語入門」!!
http://page10.auctions.yahoo.co.jp/jp/auction/m10934672
0386デフォルトの名無しさん
05/02/19 22:08:26そうやって伸びなかった奴は勝手に土木建築員になってるだろうし
そうやって大成した奴は要領が良かったと言うことだ。
0387デフォルトの名無しさん
05/02/20 01:18:02留年したら余計に金かかるんだから、
宿題写してでもさっさと卒業した方が
親にも迷惑掛けないで済むんじゃね?
0388デフォルトの名無しさん
05/02/20 01:21:56儲かってるのは教育関係くらいだしな。
0389デフォルトの名無しさん
05/02/20 05:10:57無駄口たたいてないで答えりゃいいじゃん。
0390デフォルトの名無しさん
05/02/20 05:52:040391デフォルトの名無しさん
05/02/20 09:28:45そもそも、大学の行ってるやつのほとんどは
大学に行ってる意味が無いから、すでに迷惑だと思うが
0392デフォルトの名無しさん
05/02/20 09:55:330393デフォルトの名無しさん
05/02/20 10:46:380394デフォルトの名無しさん
05/02/20 12:16:090395M.B.
05/02/20 14:11:44「このパターンはあのプログラムからパクッてきて……」とかいった
「鑑」(=「土地鑑」の「鑑」)が鈍っちゃって四苦八苦。
アクセルロッドの『囚人のジレンマ』問題のコードを書くのに、
三時間以上も苦しんでいる漏れ……
ちくしょう ○| ̄|_
0396デフォルトの名無しさん
05/02/20 15:34:140397デフォルトの名無しさん
05/02/20 16:02:08>「鑑」(=「土地鑑」の「鑑」)
これ、今の流行?
0398デフォルトの名無しさん
05/02/20 16:22:060399デフォルトの名無しさん
05/02/20 19:18:36です。丸投げですがお願いします
0400デフォルトの名無しさん
05/02/20 19:49:37Applet?それとも単体で動けばいいのか?
0401デフォルトの名無しさん
05/02/20 19:52:14たぶん↓のほうが早いよ。
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=java+%E3%82%AA%E3%82%BB%E3%83%AD&num=50
0402デフォルトの名無しさん
05/02/20 19:54:370403デフォルトの名無しさん
05/02/20 20:06:13あ、ググれば良かったのですね。そっちを参考にします。
ありがとうございました。
0404デフォルトの名無しさん
05/02/20 23:57:38「ボタンを1個用意して、それを押すたびにラベルに各自の姓と名が交互に表示されるようにする」
です。お願いします。
0405その1
05/02/21 01:19:49import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Main extends JFrame implements ActionListener {
private JLabel label;
private JButton button;
private String first_name = "Jun'ichiro";
private String last_name = "Koizumi";
public Main() {
label = new JLabel(first_name);
button = new JButton("push me");
button.addActionListener(this);
Container contentPane = getContentPane();
contentPane.add(button, BorderLayout.NORTH);
contentPane.add(label, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
0406その2
05/02/21 01:20:38if (label.getText().equals(first_name)) {
label.setText(last_name);
} else {
label.setText(first_name);
}
}
public static void main(String[] args) {
Main main = new Main();
}
}
0407デフォルトの名無しさん
05/02/21 01:56:35早速試しました。無事に動きました!
0408デフォルトの名無しさん
05/02/21 02:12:07ここ数ヶ月の暇つぶしでちょうど作ってるところ。
バグだらけで見せられる代物ではないが。
自分でやってみたら面白いよ。
コンピューター側のアルゴリズムが腐ってて、
min-maxで思考できるのは、最後の10手くらい。
0409デフォルトの名無しさん
05/02/21 02:50:12>コンピューター側のアルゴリズムが腐ってて、
>min-maxで思考できるのは、最後の10手くらい。
もともとオセロってそういうもんだよ。
序盤中盤はmin-maxの評価の仕方が違う。
そもそも石の数で評価してはいけない。
0410デフォルトの名無しさん
05/02/21 14:13:03それともコピペして必要な所だけ書き直しているのでしょうか?
0411デフォルトの名無しさん
05/02/21 14:27:040412& ◆R7PNoCmXUc
05/02/21 16:11:13アプレットじゃ受けとらん、なんてこといわれました・・・。
アプレットを使わずに以下のプログラムをどなたかできませんでしょうか?
ロボットをキーボードで操作してHOMEに帰すゲームをGUIを使って作りなさい。
以下がゲームの必要事項です。
スタートボタンを押すとロボット(プレイヤー)とロボット(コンピュータ)
HOMEをそれぞれランダムで格子状(gridLayoutを使って作ります)のステージに配置します。
ステージのマスの数(縦×横)はプレイヤーが数字を入力して選べます。
HOMEはプレイヤーにはわからないようにします。
プレイヤーとコンピュータのロボットは交互に一マスずつ動いていきます。
ロボットが一マス動くごとに1ドルのコストがかかります。
ロボットが一マス動くごとにステージをアップデートしてHOMEまでの距離を表示します。
ロボットはキーボード操作でマスを上下左右に移動できます。(斜めはなし)
上=I, 下=M, 右=L, 左=Jのキー配置です。
HOMEまでの道のりのマスにボーナス(20ドルゲットとか50ドルゲットとか)をランダムで配置します。
どちらかのロボットが先にHOMEについた時点でゴールです。
プレイヤーが先にゴールした場合、ボーナスとして100ドルを受け取れます。
最終スコアは勝った場合のボーナスとHOMEまでの道のりで得たボーナスから
コストを引いたものが最終スコアとなります。
スコアキーパー(デフォルトのTOP5のデータを入れておく。)からデータを読み取り、TOP5を記録。
このとき、現在プレイしたスコアがTOP5入りするようなら名前の入力を求める。
ゴール後ウィンドウをポップアップさせて最終スコアとリプレイするかしないかを表示します。
0413& ◆R7PNoCmXUc
05/02/21 16:12:17スコアキーパーは3種類のソートアルゴリズムを使ってスコアをソートしなさい。
(提出用は1つのソートアルゴリズムだけでよい。残りの二つは分析(授業中にほかのプログラムを分析します)に使います。)
2つのアルゴリズムは以下の基本のソーティングアルゴリズムです。
挿入ソート(insertion sort)、選択整列(selection sort)、バブル・ソート(bubble sort)
以下のアルゴリズムは効率的なソーティングアルゴリズムです。
クイックソート(Quick sort)、シェルソート(Shell sort)、ヒープソート(heap sort)、マージソート(merge sort)、基数ソート(radix sort)
どのリストストラクチャーを使うかは自分で選択しなさい。自分のアレイ、リンクリストまたはArrayList、LinkedListから選択しなさい。
スコアのソーティングを実装するために:
スコアデータ型はオブジェクトを比較するメソッドを必要とします。
通常、これはequals()メソッドと同様にcompareTo()メソッドにかかわります
(Comparable Interfaceを使用してください)。
同スコアもリストにのせてください。(たとえば2位と3位が両方とも同スコアとか)
file input, outputを使用して、スコアを保存してください。
ファイルエラーに例外処理(exception)を使用してください。
どなたかおねがいいたします。
0414デフォルトの名無しさん
05/02/21 16:19:420415デフォルトの名無しさん
05/02/21 17:02:540416デフォルトの名無しさん
05/02/21 18:59:14ファイル書き込みが出来ないのは、その為だというのに・・・
0417デフォルトの名無しさん
05/02/21 19:31:29以前のプログラムのメソッドを以下の様に置き換えてください。
置き換えるメソッドは4つです。
HW81.HW81()
HW81.endGame()
HW81.keyTyped()
Stage.Stage()
0418デフォルトの名無しさん
05/02/21 19:32:24new HW81();
}
HW81() {
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(
filename));
scoreList = (List) in.readObject();
} catch (FileNotFoundException e) {
scoreList.add(new Score(100, "aaa"));
scoreList.add(new Score(90, "bbb"));
scoreList.add(new Score(80, "ccc"));
scoreList.add(new Score(70, "ddd"));
scoreList.add(new Score(60, "eee"));
} catch (Exception e) {
System.out.println("スコアファイル読み込みエラー");
System.out.println(e);
}
stage = new Stage(PANELW, PANELH, robot, enemy, HW81.this);
stage.addKeyListener(HW81.this);
setContentPane(stage);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
startGame();
}
0419デフォルトの名無しさん
05/02/21 19:32:54obj.changeFigure();
obj.modifyMoney(100);
stage.displayInfo("ゲーム終了 お金" + robot.money() + "$ 敵の金"
+ enemy.money() + "$");
String msg;
if (robot.money() >= enemy.money()) {
String name = JOptionPane.showInputDialog(this, "あなたは" + robot.money
+ "$対" + enemy.money() + "$で勝利しました。\n"
+ "名前を入力してください。", "スコア登録",
JOptionPane.INFORMATION_MESSAGE);
scoreList.add(new Score(robot.money(), name));
Score[] data = (Score[]) scoreList.toArray(new Score[0]);
quickSort(data, 0, data.length - 1);
scoreList = new ArrayList(Arrays.asList(data));
try {
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(filename));
out.writeObject(scoreList);
} catch (Exception e) {
System.out.println("スコアファイル書き込みエラー");
System.out.println(e);
}
msg = "もう一度プレイしますか?";
} else {
msg = "あなたは" + robot.money + "$対" + enemy.money()
+ "$で敗北しました。\nもう一度プレイしますか?";
}
0420デフォルトの名無しさん
05/02/21 19:33:31JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (ans == JOptionPane.YES_OPTION) {
startGame();
} else {
getContentPane().setVisible(false);
}
}
0421デフォルトの名無しさん
05/02/21 19:34:11switch (e.getKeyChar()) {
case 'i':
case 'I':
robot.moveY(-1, enemy);
break;
case 'j':
case 'J':
robot.moveX(-1, enemy);
break;
case 'm':
case 'M':
robot.moveY(+1, enemy);
break;
case 'l':
case 'L':
robot.moveX(+1, enemy);
break;
default:
return;
}
stage.putPiece(robot);
if (goldList.contains(robot)) {
Gold gold = (Gold) goldList.remove(goldList.indexOf(robot));
robot.modifyMoney(gold.point());
stage.removePiece(gold);
}
int dist = Math.abs(robot.x() - home.x())
+ Math.abs(robot.y() - home.y());
stage.displayInfo("距離" + dist + "m お金" + robot.money() + "$ 敵の金"
+ enemy.money() + "$");
0422デフォルトの名無しさん
05/02/21 19:34:49endGame(robot);
try {
EventQueue.invokeLater(new Runnable() {
public void run() {
synchronized (HW81.this) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
}
enemy.move(robot, home);
stage.putPiece(enemy);
if (goldList.contains(enemy)) {
Gold gold = (Gold) goldList.remove(goldList.indexOf(enemy));
enemy.modifyMoney(gold.point());
stage.removePiece(gold);
}
int dist = Math.abs(robot.x() - home.x()) + Math.abs(robot.y() - home.y());
stage.displayInfo("距離" + dist + "m お金" + robot.money()
+ "$ 敵の金" + enemy.money() + "$");
if (enemy.equals(home))
endGame(enemy);
}
}
});
} catch (Exception e1) {
}
}
0423デフォルトの名無しさん
05/02/21 19:35:20setBackground(Color.black);
topBar.setBorder(BorderFactory.createEtchedBorder());
topBar.setMaximumSize(new Dimension(1000, 1000));
topBar.setHorizontalAlignment(JLabel.CENTER);
topBar.setFont(new Font("Dialog", 1, 13));
topBar.setOpaque(true);
topBar.setBackground(new Color(200, 200, 255));
btn.setFont(new Font("Dialog", 0, 10));
btn.setMargin(new Insets(2, 1, 2, 1));
btn.addActionListener(al);
Box menu = Box.createHorizontalBox();
menu.add(btn);
menu.add(topBar);
room.setBackground(new Color(240, 240, 255));
room.setBorder(BorderFactory.createEmptyBorder(PATHSIZE, PATHSIZE,
PATHSIZE, PATHSIZE));
Dimension wallsize = new Dimension((width - PATHSIZE * (SIZE + 1))
/ SIZE, (height - PATHSIZE * (SIZE + 1)) / SIZE);
for (int a = 0; a < wall.length; a++) {
for (int b = 0; b < wall[a].length; b++) {
wall[a][b] = new JLabel();
wall[a][b].setPreferredSize(wallsize);
wall[a][b].setOpaque(true);
wall[a][b].setBackground(new Color(200, 200, 250));
wall[a][b].setBorder(BorderFactory.createRaisedBevelBorder());
}
}
0424デフォルトの名無しさん
05/02/21 19:37:54for (int b = 0; b < wall[a].length; b++) {
room.add(wall[a][b]);
}
}
room.setBounds(0, 0, width, height);
lp.add(room, new Integer(0));
lp.add(rb, new Integer(1));
lp.add(em, new Integer(1));
lp.setPreferredSize(new Dimension(width, height));
setLayout(new BorderLayout());
add(lp);
add(menu, BorderLayout.NORTH);
scores.setOpaque(false);
scores.setMargin(new Insets(16, 32, 16, 32));
scores.setFont(new Font("Dialog", 1, 16));
scores.setForeground(Color.green);
}
0425デフォルトの名無しさん
05/02/21 21:03:03八割方コピペでしょう。
「できるプログラマ」というのは、おおむね「既存のコードを
適切にパクる技術に長けているプログラマ」であると同時に、
「再利用しやすいコードを書くプログラマ」でもあったりするし。
0426デフォルトの名無しさん
NGNG2 月末が期限として出された課題の中でどうしても解らない問題があり大変困っています.
皆さんのお力を貸していただきご教授いただけないでしょうか?
出されている課題の内容は, Java 言語で書かれたコンパイラの機能拡張が目的で,
(1) 関数の引数として 1 次元配列を渡せるように機能拡張せよ.
渡し方は C言語の方法に習え.すなわち, 配列の要素全体のコピーを渡すのではなく, 配列の先頭の番地を渡せ.
(2) 変数の「参照渡し」を実現せよ.「参照渡し」とは, 変数を関数の実引数にしたとき, 変数の中身ではなく変数自体の番地を渡すことにより,
呼び出された関数の中から呼び出し元の変数の内容を更新できるようにするものである.
の 2問です.何卒宜しくお願いします.
コンパイラのソースコードは,
http://book.gihyo.co.jp/s-com/ からダウンロードできるようになっております.
この本を読んだことがない方でも, 上記 2 問に対する拡張方法のプログラムが解る方からの返信もお待ちしております.
0427デフォルトの名無しさん
05/02/21 22:37:09JTree のコンストラクタを使って、以下のツリーを作成しなさい
JTree
+- colors
| +- blue
| +- violet
| +- red
| +- yellow
+- sports
| +- basketball
| +- soccer
| +- football
| +- bockey
+- food
+- hot dogs
+- pizza
+- ravioli
+- bananas
0428デフォルトの名無しさん
05/02/21 23:02:21// JTreeSample.java
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.WindowConstants;
public class JTreeSample extends JFrame {
public JTreeSample() {
JPanel panel = new JPanel();
JTree tree = new JTree();
panel.add(tree);
panel.setVisible(true);
add(panel);
}
public static void main(String[] args) {
JTreeSample self = new JTreeSample();
self.setSize(200, 400);
self.setTitle(self.getClass().getName());
self.setVisible(true);
self.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
0429デフォルトの名無しさん
05/02/21 23:14:58w
0430デフォルトの名無しさん
05/02/21 23:28:35JTree のデフォルト コンストラクタにサンプルデータが入って
いることをソースを見てはじめて知って、俺みたいに無知な
やつが釣られてくれるかと思ったのだが。
タイプミスで結局 TreeNode または TreeModel を使って
コンストラクタを呼び出すのが正解になってしまった...
ちなみにこれも追加おながい。
Toolkit tk = self.getToolkit();
Dimension scrSz = tk.getScreenSize();
Dimension frameSz = self.getSize();
self.setLocation((scrSz.width-frameSz.width)/2 ,(scrSz.height-frameSz.height)/2);
0431デフォルトの名無しさん
05/02/22 01:49:40第3章 拡張
の4つソースコードを改変しろとの事なのですか?
0432デフォルトの名無しさん
05/02/22 06:25:10の4つソースコードを改変しろとの事なのです
0433デフォルトの名無しさん
05/02/22 12:13:440434デフォルトの名無しさん
05/02/22 15:17:554つのメソッドの置き換えだけですね。
わかりました、やってみます。
ありがとうございました。
0435デフォルトの名無しさん
05/02/22 17:10:390436デフォルトの名無しさん
05/02/22 17:13:04int pos = a.indexOf( "b" );
0437435
05/02/22 19:06:50ありがとうございます。
もう少し詳しく教えていただけますか?
0438デフォルトの名無しさん
05/02/22 19:13:43>>436は>>435の質問に対して十分詳しく教えてると思うが
何を教えればいいんだ?
0439デフォルトの名無しさん
05/02/22 19:34:18「indexOfで」これが、どこにかかるのかわからん。
0440デフォルトの名無しさん
05/02/23 01:29:450441デフォルトの名無しさん
05/02/23 04:38:450442デフォルトの名無しさん
05/02/23 10:08:23クライアントでコマンドラインの引数として1個のdouble型数値(実際は文字列)を取り込み、
それをホストに送り、ホストではその値を2乗してクライアントに返し、
返してもらったクライアントはそれを表示する
以上を実現するプログラムをサーバサイド、クライアントサイドで作成する
0443442
05/02/23 10:17:24Java Swingの課題です。
0444デフォルトの名無しさん
05/02/23 19:02:270445442
05/02/23 19:25:030446デフォルトの名無しさん
05/02/23 20:14:05実行例に示すとおり、二つの整数値を読み込んで、後者が前者の約数であれば、
「BはAの約数です。」と表示し、そうでなければ、「BはAの約数ではありません。」
と表示するプログラムを作成しなさい。
実行例
二つの整数値を入力してください。
整数A:10
整数B:5
BはAの約数です。
0447デフォルトの名無しさん
05/02/23 20:16:12アプレット?
0448446
05/02/23 20:18:110449446
05/02/23 21:30:270450M.B.
05/02/23 22:06:28import java.io.*;
public class yakusu {
public static void main(String[] args) {
try {
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
System.out.println("二つの整数値を入力してください。");
System.out.print("整数A:");
System.out.flush();
int a = Integer.parseInt(in.readLine());
System.out.print("整数B:");
System.out.flush();
int b = Integer.parseInt(in.readLine());
System.out.print("BはAの約数");
if ((a % b) == 0) {
System.out.print("です。");
} else {
System.out.print("ではありません。");
}
} catch (IOException e) {
System.out.println("失敗。");
}
}
}
0451デフォルトの名無しさん
05/02/23 22:34:460452442
05/02/23 22:53:550454446
05/02/23 23:09:30コンパイルしたところ不正な文字ですとエラーが100個と出たのですがなぜでしょうか?
コマンドプロンプトからSDKでjavac ファイル名.javaでしました。
0455デフォルトの名無しさん
05/02/23 23:23:40空白が全角スペースなんでしょ。半角に。
で>>442。Client-Serverを実現するプログラムなんて初めて書いたからなんかアヤシイ。
以前ココに貼られたソースを参考にしました。
パッケージ切ってます。こちらの管理の都合のためだけです。
// Server.java
package power;
import java.io.*;
import java.net.*;
public class Server {
static boolean isEnd = false;
public static void main(String[] args) {
ServerSocket ss = null;
try {
System.out.print("サーバ起動..");
ss = new ServerSocket(22003);
System.out.println("完了");
} catch (Exception e1) {
System.out.println("エラー終了");
System.exit(0);
}
while (!isEnd) {
try {
Socket sc = ss.accept();
new HttpIO(sc).start();
} catch (IOException e) {
}
}
try {
ss.close();
} catch (IOException e) {
}
0456455
05/02/23 23:24:20System.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) {
}
}
}
void io() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(sc.getInputStream()));
String line = br.readLine();
double inputNumber = Double.parseDouble(line.split(" ")[1]);
OutputStream out = sc.getOutputStream();
StringBuffer sb = new StringBuffer();
// 重い処理を想定。
Thread.sleep(1000);
sb.append("Server->Client " + (inputNumber * inputNumber));
out.write(sb.toString().getBytes());
br.close();
0457455
05/02/23 23:25:14out.close();
isEnd = true;
}
}
}
// Client.java
package power;
import java.io.*;
import java.net.*;
import java.nio.channels.*;
import javax.swing.*;
public class Client extends JFrame {
JTextArea textArea;
public static void main(String[] args) {
Client self = new Client();
self.setSize( 300, 300 );
self.setTitle( self.getClass().getName() );
self.setVisible(true);
self.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
self.process(Double.parseDouble(args[0]));
}
public void process(double inputNumber) {
SocketChannel ch;
try {
textArea = new JTextArea();
getContentPane().add(textArea);
textArea.append("コマンドライン引数:" + inputNumber + "\n");
textArea.append("サーバにデータを送信中...");
ch = SocketChannel.open(new java.net.InetSocketAddress("localhost", 22003));
StringBuffer sb = new StringBuffer();
sb.append("Client->Server " + inputNumber + "\r\n");
0458455
05/02/23 23:26:12ch.write(java.nio.ByteBuffer.wrap(sb.toString().getBytes("ISO-8859-1")));
textArea.append("完了" + "\n");
textArea.append("サーバからデータを受信中...");
Socket sc = ch.socket();
BufferedReader br = new BufferedReader(new InputStreamReader(sc.getInputStream()));
String line = br.readLine();
double outputNumber = Double.parseDouble(line.split(" ")[1]);
textArea.append("完了" + "\n");
textArea.append("受信データ:" + outputNumber + "\n");
ch.close();
} catch(IOException ioe) {
textArea.append(ioe.getMessage());
}
}
}
ポートは22003番使ってます。
Serverを立ち上げてからClientを実行してください。
0459M.B.
05/02/23 23:39:19> 回答ありがとうございます。
いえいえ、こちらこそリハビリに役立てさせていただきました。m(_ _)m
(話は全然違うが『囚人のジレンマ』問題は interface と抽象クラスの
手頃なサンプルになってなかなか演習向きだと思った)
> コンパイルしたところ不正な文字ですとエラーが100個と出たのですがなぜでしょうか?
>>455 氏のおっしゃる通り。全角スペースを半角スペースに直し、yakusu.java
の名前にしてjavac yakusu.java。
0461デフォルトの名無しさん
05/02/24 00:02:01そもそもなんで1回計算しただけで isEnd に true を立てる
設計なのかわからないけど、
static boolean isEnd = false;
じゃなくて、
static volatile boolean isEnd = false;
じゃないと、別スレッドから isEnd を変更したときに
その変更が見えないかもしれないんじゃないかと思う。
(あるいは、synchronized なメソッド経由で isEnd を参照するか)
0462デフォルトの名無しさん
05/02/24 00:33:31読み込まれた値を昇順に並べ替えるプログラムを作成しなさい。
実行結果
整数値を入力してください。
1,4,2,3
1,2,3,4
よろしくお願いします<m(__)m>
0463442
05/02/24 00:35:52本当にありがとうございました。
今のところ動作の確認は完了してませんが、
コンパイルは出来たのでなんとかなりそうです。
途中偽者が二人いますが後ろの方どうもです。
0464442
05/02/24 02:30:20明日提出なんですから。ちょっと遅すぎです。
おかげで夜遅くなってしまいました。睡眠時間が減ってしまいましたが
どうしてくれるのですか?
0465デフォルトの名無しさん
05/02/24 02:41:400466デフォルトの名無しさん
05/02/24 11:21:300467デフォルトの名無しさん
05/02/24 11:22:11後述のappletAを既存のappletBのボタンを押したら新しいフレームで表示させるよう
にしたいのですが。
組み込みたいappletAは以下です。
import java.applet.*;
import java.awt.*;
public class testApp extends Applet {
HighScoreManager HS;
Image im;
Graphics g;
Panel p = new Panel();
TextField F;
public void init() {
HS = new HighScoreManager(10);
setLayout(new BorderLayout());
add("South", p);
0468デフォルトの名無しさん
05/02/24 11:22:45p.add( new Button("Change Color"));
F = new TextField(10);
p.add(F);
repaint();
}
public void update(Graphics bg) {
int panel_height = p.preferredSize().height;
Rectangle r= new Rectangle(0,0,size().width,size().height-panel_height);
im=createImage(size().width,size().height);
g=im.getGraphics();
g.clipRect(0,0,size().width,size().height);
HS.paintScores(g,r);
paint(bg);
}
public void paint(Graphics bg) {
if(im!=null)
bg.drawImage(im,0,0,null);
}
public boolean action(Event evt, Object arg) {
if("Change Color".equals(arg)) {
0469デフォルトの名無しさん
05/02/24 11:23:16repaint();
return true;
}
if ("Add".equals(arg)) {
HS.addScore(F.getText(),(int)(Math.random() * 1000),"blah@blah"," ");
F.setText(null);
repaint();
return true;
}
return false;
}
}
0470デフォルトの名無しさん
05/02/24 12:40:270471デフォルトの名無しさん
05/02/24 12:46:31答えを求めるより勉強した方がよさそう
0472デフォルトの名無しさん
05/02/24 14:41:07n個の整数値を入力し(値はカンマで区切る)、
読み込まれた値を昇順に並べ替えるプログラムを作成しなさい。
実行結果
整数値を入力してください。
1,4,2,3
1,2,3,4
というプログラムです。
0473デフォルトの名無しさん
05/02/24 14:58:11import java.io.*;
import java.util.*;
public class Sample {
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s[];
String strErr = "エラーが発生しました。\n";
int i,l,intArr[];
try{
System.out.println("整数値を入力してください。");
s = in.readLine().split(",");
l = s.length;
intArr = new int[l];
for(i = 0; i < l; i++)
intArr[i] = Integer.parseInt(s[i]);
Arrays.sort(intArr);
for(i = 0; i < l - 1; i++)
System.out.print(intArr[i] + ",");
System.out.println(intArr[i]);
}catch(IOException e){
System.out.println(strErr + "出入力に異常がある可能性があります。");
}catch(NumberFormatException e){
System.out.println(strErr + "入力された値が適当でない可能性があります。");
}catch(Exception e){
System.out.println(strErr);
}
}
}
0474472
05/02/24 16:18:57回答ありがとうございます<m(__)m>
無事コンパイル&実行することができました。
ホントにありがとうございます。
0475デフォルトの名無しさん
05/02/24 22:15:31rmi(Remote Method Invocation)を用いたアプリケーション作成
rmiを用いて簡単なメッセージネットワークを作成する。仕様は以下の通りとする。
※サーバーと複数のクライアントから構成される。
※クライアントは自分の画面にメッセージを表示させるメソッド
showMessage(String message)を実装したリモートオブジェクトを持つ。
※クライアントは起動すると、まずサーバーに自分の名前を登録する。
※クライアントは通信したい相手の名前を指定してサーバーに要求を出す。
※サーバーはその相手名が存在してるなら、相手側のリモートオブジェクトを
取得してそれを要求側に送る。同じく要求側のリモートオブジェクトを
取得して相手側に送る。それ以降は双方のリモートオブジェクトのshowMessageが
互いに呼び出される事によって、クライアント同士の直接通信が可能となる。
※クライアントは同時に複数の相手と通信できるようにする。
※アクティベーションを用いる。
※サーバープログラムとクライアントプログラムの二つを作成する。
という課題です。期限は2月末です。よろしくお願いします。
0476デフォルトの名無しさん
05/02/25 01:53:16この中から、共通の文字列をより多く見つけるアルゴリズム考えよという
問題が出ました。これは編集距離を求める問題らしいです。
しかし設問2に
このランダムな文字列の長さが100、1000、10000、100000、1000000と増えた
場合にも対応可能な手法も考えよという問題がでました。
編集距離を求めるには大きなメモリコストがかかるためどのようにアルゴリズム
を組めばよいのか苦慮しています。
0477デフォルトの名無しさん
05/02/25 02:30:59なんでメモリコスト大きいの?
0478デフォルトの名無しさん
05/02/25 03:01:19今ネットで調べたけど、なんか違うことが書いてある。
私が調べたところによると、編集距離とは、例えば文字列が「あいうえお」と与えられたとして、
これを、「あおいうみ」に変更したい。ただし、やってよい手段の種類は、一字削除、一字挿入、
一字置換の3つだけ。一字削除にはX円、一字挿入にはY円、一字置換にはZ円かかります。
この3つの手段を、与えられた文字列の好きな位置に好きなだけ繰り返して、できるだけ安く
「あおいうみ」を作り出した場合、おいくらになりますか?ってことだとおもう。
0479デフォルトの名無しさん
05/02/25 03:10:20たとえば
AABCDDD
と
ABCCDDDD
では、どういう答えが導き出される事を期待している?
0480デフォルトの名無しさん
05/02/25 23:14:31ソ−ス中のタイトルにあるとおり、図形をフレーム表示するプログラムを作りたいです。
エラーが出るのですが、どこを直して良いやら分かりません。
宜しくお願いします。
import java.awt.*;
import java.awt.event.*;
public class Diamond extends Frame{
public Diamond(){
setSize(600,500);
setTitle("分割数が4から7までのダイアモンドリングを描く");
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public void paint(Graphics g){
int ix=30,iy=60; //バーを考慮したマージン
int sx=10; //図形間のマージン
int ox,oy; //中心
int r=90; //半径
int x1,y1,x2,y2; //円分点
double t,t1,t2; //角度
ox=ix+r;oy=iy+r; //最初の中心
0481480続き
05/02/25 23:15:32t=2*Math.360/p; //p分割の単位角
for(int i=0;i<p-2;i++){
t1=i*t;
x1=ox+r*Math.rint(r*Math.cos(t1));
y1=oy-r*Math.rint(r*Math.sin(t1));
for(int j=i+1;j<p-1;j++){
t2=j*t;
x2=ox+r*Math.rint(r*Math.cos(t2));
y2=oy-r*Math.rint(r*Math.sin(t2));
g.drawLine(x1,y1,x2,y2);
}
}
ox=ox+2*r+sx;
}
public static void main(String[] args){
Frame w=new Diamond();
w.show();
}
}
以上です。
0482>>475 サーバー その1
05/02/26 00:00:40import java.util.*;
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.activation.*;
interface ServerBehavior extends Remote {
boolean entryUser(String name, String host, int port) throws RemoteException;
void removeUser(String name) throws RemoteException;
Remote openConnection(Remote sendR, String sender, String receiver)
throws RemoteException;
}
public class HW83 {
static final String CODEBASE = System.getProperty("user.dir");
static final String HOST = "localhost";
static final int PORT = 1099;
static Map userMap = Collections.synchronizedMap(new TreeMap());
static public void main(String[] args) {
System.setProperty("java.security.policy",
System.getProperty("user.dir") + "/myapp.policy");
System.setProperty("java.rmi.server.codebase", CODEBASE);
try {
Registry reg = LocateRegistry.createRegistry(PORT);
Properties ps = new Properties();
ActivationGroupDesc groupD = new ActivationGroupDesc(ps, null);
ActivationGroupID groupID = ActivationGroup.getSystem().registerGroup(groupD);
ActivationGroup.createGroup(groupID, groupD, 0);
ActivationDesc desc = new ActivationDesc(groupID, "hw83.HW83$Server",
CODEBASE, null);
Remote stab = Activatable.register(desc);
reg.rebind("server", stab);
0483:>>475 サーバー その2
05/02/26 00:01:28e.printStackTrace();
System.out.println("エラー終了");
}
}
public static class Server extends Activatable implements ServerBehavior {
public Server(ActivationID id, MarshalledObject mo)
throws RemoteException {
super(id, 0);
}
public boolean entryUser(String name, String host, int port)
throws RemoteException {
if (name.length() == 0)
return false;
if (userMap.containsKey(name))
return false;
userMap.put(name, new String[] { host, String.valueOf(port) });
return true;
}
public void removeUser(String name) throws RemoteException {
userMap.remove(name);
}
public Remote openConnection(Remote sendR, String sender,
String receiver) throws RemoteException {
try {
if (sender.equals(receiver))
return null;
String[] userData = (String[]) userMap.get(receiver);
0484::>>475 サーバー その3
05/02/26 00:02:28return null;
String url = "rmi://" + userData[0] + ":" + userData[1] + "/client";
Remote receiveR = Naming.lookup(url);
receiveR.getClass().getMethod("openPanel",
new Class[] { Remote.class, String.class })
.invoke(receiveR, new Object[] { sendR, sender });
return receiveR;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
}
0485>>475 クライアント その1
05/02/26 00:03:21import java.util.*;
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.activation.*;
import java.lang.reflect.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
interface ClientBehavior extends Remote {
void showMessage(String msg) throws RemoteException;
void closeConnection() throws RemoteException;
void openPanel(Remote partner, String partnerName) throws RemoteException;
Long getTextAreaID() throws RemoteException;
}
public class ClientFrame extends JFrame {
static final String CODEBASE = System.getProperty("user.dir");
static final String SERVERHOST = "localhost";
static final int SERVERPORT = 1099;
static final String HOST = "localhost";
static int PORT = 1100;
static ActivationGroupID groupID;
static Registry reg;
static JTabbedPane tabpane = new JTabbedPane(JTabbedPane.TOP,
JTabbedPane.WRAP_TAB_LAYOUT);
static JPanel entryPanel, conePanel;
static String myname;
static Map textMap = Collections.synchronizedMap(new TreeMap());
0486:>>475 クライアント その2
05/02/26 00:04:00if (args.length > 0)
PORT = Integer.parseInt(args[0]);
System.setProperty("java.security.policy",
System.getProperty("user.dir") + "/myapp.policy");
System.setProperty("java.rmi.server.codebase", CODEBASE);
try {
reg = LocateRegistry.createRegistry(PORT);
Properties ps = new Properties();
ActivationGroupDesc groupD = new ActivationGroupDesc(ps, null);
groupID = ActivationGroup.getSystem().registerGroup(groupD);
ActivationGroup.createGroup(groupID, groupD, 0);
ActivationDesc desc = new ActivationDesc(groupID, "hw832.ClientFrame$Client",
CODEBASE, null);
Remote stab = Activatable.register(desc);
reg.rebind("client", stab);
} catch (Exception e) {
e.printStackTrace();
System.out.println("エラー終了");
return;
}
new ClientFrame();
}
ClientFrame() {
entryPanel = new JPanel(new BorderLayout());
final JButton entbtn = new JButton("登録");
final JTextField enttfd = new JTextField();
entbtn.addActionListener(new ActionListener() {
0487>>475 クライアント その3
05/02/26 00:04:42entry(enttfd.getText());
enttfd.setText("");
}
});
conePanel = new JPanel(new BorderLayout());
final JButton conebtn1 = new JButton("通信");
final JButton conebtn2 = new JButton("退席");
final JTextField conetfd = new JTextField();
conebtn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
connect(conetfd.getText());
conetfd.setText("");
}
});
conebtn2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
remove();
}
});
conePanel.add(conebtn1, BorderLayout.WEST);
conePanel.add(conetfd);
conePanel.add(conebtn2, BorderLayout.EAST);
entryPanel.add(entbtn, BorderLayout.WEST);
entryPanel.add(enttfd);
getContentPane().add(entryPanel, BorderLayout.NORTH);
getContentPane().add(tabpane);
setSize(640, 480);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
0488>>475 クライアント その4
05/02/26 00:05:22ClientFrame.myname = myname;
try {
Remote server = Naming.lookup("rmi://" + SERVERHOST + ":" + SERVERPORT + "/server");
Method meth = server.getClass().getMethod("entryUser",
new Class[] { String.class, String.class, Integer.TYPE });
Boolean flag = (Boolean) meth.invoke(server, new Object[] { myname, HOST, PORT } );
if (!flag.booleanValue()) {
JOptionPane.showMessageDialog(this, "名前が空かすでに使われてます",
"登録失敗通知", JOptionPane.ERROR_MESSAGE);
return;
}
JOptionPane.showMessageDialog(this, myname + "の名前で登録しました",
"登録通知", JOptionPane.INFORMATION_MESSAGE);
getContentPane().remove(entryPanel);
getContentPane().add(conePanel, BorderLayout.NORTH);
getContentPane().validate();
setTitle(myname);
getContentPane().repaint();
} catch (Exception e1) {
e1.printStackTrace();
JOptionPane.showMessageDialog(this, e1 + "の例外が発生しました",
"エラー通知", JOptionPane.ERROR_MESSAGE);
}
}
void connect(String partnerName) {
try {
Remote meR = reg.lookup("client");
Remote server = Naming.lookup("rmi://" + SERVERHOST + ":" + SERVERPORT + "/server");
0489:>>475 クライアント その5
05/02/26 00:05:55new Class[] { Remote.class, String.class, String.class })
.invoke(server, new Object[] { meR, myname, partnerName });
if (partnerR == null) {
JOptionPane.showMessageDialog(this, "その相手名は存在しません",
"通信失敗通知", JOptionPane.ERROR_MESSAGE);
return;
}
((ClientBehavior) meR).openPanel(partnerR, partnerName);
} catch (Exception e1) {
e1.printStackTrace();
JOptionPane.showMessageDialog(this, e1 + "の例外が発生しました",
"エラー通知", JOptionPane.ERROR_MESSAGE);
}
}
void remove() {
try {
Remote server = Naming.lookup("rmi://" + SERVERHOST + ":" + SERVERPORT + "/server");
Method meth = server.getClass().getMethod("removeUser",
new Class[] { String.class });
meth.invoke(server, new Object[] { ClientFrame.myname } );
JOptionPane.showMessageDialog(tabpane, ClientFrame.myname + "の名前を解約しました",
"解約通知", JOptionPane.INFORMATION_MESSAGE);
getContentPane().remove(conePanel);
getContentPane().add(entryPanel, BorderLayout.NORTH);
getContentPane().validate();
setTitle("");
getContentPane().repaint();
0490>>475 クライアント その6
05/02/26 00:06:31e1.printStackTrace();
JOptionPane.showMessageDialog(this, e1 + "の例外が発生しました",
"エラー通知", JOptionPane.ERROR_MESSAGE);
}
}
public static class Client implements ClientBehavior {
String hereName = "";
Long textareaID = new Long(hashCode());
CommunicationPanel cpanel;
public Client(ActivationID id, MarshalledObject mo)
throws RemoteException, Exception {
Activatable.exportObject(this, id, 0);
ActivationDesc desc = new ActivationDesc(groupID,
"hw832.ClientFrame$Client", CODEBASE, null);
Remote stab = Activatable.register(desc);
reg.rebind("client", stab);
textMap.put(textareaID, new JTextArea());
}
public void showMessage(String msg) throws RemoteException {
System.out.println(msg);
((JTextArea) textMap.get(textareaID)).append(hereName + ": " + msg + "\n");
}
public void openPanel(Remote partner, String partnerName)
throws RemoteException {
try {
cpanel = new CommunicationPanel(this, partner);
0491>>475 クライアント その7
05/02/26 00:07:06e1.printStackTrace();
JOptionPane.showMessageDialog(tabpane, e1 + "の例外が発生しました",
"エラー通知", JOptionPane.ERROR_MESSAGE);
return;
}
tabpane.add(cpanel, partnerName);
hereName = partnerName;
// JOptionPane.showMessageDialog(tabpane, hereName + "さんとの通信が開始しました",
// "接続通知", JOptionPane.INFORMATION_MESSAGE);
}
public void closeConnection() throws RemoteException {
tabpane.remove(cpanel);
JOptionPane.showMessageDialog(tabpane, hereName + "さんとの通信が終了しました",
"接続終了通知", JOptionPane.INFORMATION_MESSAGE);
}
public Long getTextAreaID() throws RemoteException {
return textareaID;
}
}
static class CommunicationPanel extends JPanel {
CommunicationPanel(final Object me, final Object partner)
throws Exception {
JPanel pal = new JPanel(new BorderLayout());
Long id = (Long) ((ClientBehavior) me).getTextAreaID();
final JTextArea tarea = (JTextArea) textMap.get(id);
tarea.setEditable(false);
final JButton btn1 = new JButton("送信");
final JButton btn2 = new JButton("終了");
final JTextField tfd = new JTextField();
0492>475 クライアント その8
05/02/26 00:07:42public void actionPerformed(ActionEvent e) {
try {
partner.getClass().getMethod("showMessage",
new Class[] { String.class })
.invoke(partner, new Object[] { tfd.getText() });
tarea.append(myname + ": " + tfd.getText() + "\n");
tfd.setText("");
} catch (Exception e1) {
e1.printStackTrace();
JOptionPane.showMessageDialog(tabpane, e1 + "の例外が発生しました",
"エラー通知", JOptionPane.ERROR_MESSAGE);
}
}
});
btn2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
partner.getClass().getMethod("closeConnection", new Class[0])
.invoke(partner, new Object[0]);
((ClientBehavior) me).closeConnection();
} catch (Exception e1) {
e1.printStackTrace();
JOptionPane.showMessageDialog(tabpane, e1 + "の例外が発生しました",
"エラー通知", JOptionPane.ERROR_MESSAGE);
}
}
});
0493>475 クライアント その9
05/02/26 00:12:55pal.add(tfd);
pal.add(btn2, BorderLayout.EAST);
setLayout(new BorderLayout());
add(pal, BorderLayout.NORTH);
add(new JScrollPane(tarea));
}
}
}
同一マシンでのテスト実行
rmid.exeを起動後にサーバーを実行します。次にクライアントを実行します。
クライアントはデフォルトでポート1100にバインドされます。
2つ以降のクライアントは実行引数でポート指定できます。
(例:hw832.ClientFrame 1101)
パッケージhw83とhw832を置いたフォルダに、rmiを実行可能にする
ポリシーファイルを置いてください。
0494デフォルトの名無しさん
05/02/26 00:23:300495デフォルトの名無しさん
05/02/26 00:35:240496>>476 その1
05/02/26 09:16:31import java.io.*;
public class HW84 {
static class Node extends javax.swing.tree.DefaultMutableTreeNode {
Node(Object obj) {
super(obj);
}
}
public static void main(String[] args) {
String str1 = "", str2 = "";
try {
System.out.print("文字列1の入力:");
str1 = new BufferedReader(new InputStreamReader(System.in)).readLine();
System.out.print("文字列2の入力:");
str2 = new BufferedReader(new InputStreamReader(System.in)).readLine();
} catch (IOException e) {
System.out.print("エラー発生終了");
System.exit(0);
}
Set stringSet = new TreeSet();
Node root1 = makeTree(str1), root2 = makeTree(str2);
LinkedList queue = new LinkedList();
queue.addLast(root1);
0497:>>476 その2
05/02/26 09:17:07Node node = (Node) queue.removeFirst();
if (node.getChildCount() == 0) {
Object[] path = node.getUserObjectPath();
int count = compareTree(path, root2);
if (count >= 2) {
for (int i = 0; i < count - 1; i++) {
StringBuffer sb = new StringBuffer();
for (int k = 1; k <= count - i; k++)
sb.append(((Character) path[k]).charValue());
stringSet.add(sb.toString());
}
}
} else {
for (int i = 0; i < node.getChildCount(); i++)
queue.addLast(node.getChildAt(i));
}
}
System.out.println("両Stringの共通文字列(2文字以上)");
Iterator it = stringSet.iterator();
int no = 1;
while (it.hasNext())
System.out.println((no++) + "個目: " + it.next());
}
0498>>476 その3
05/02/26 09:17:40Node root = new Node(new Character('@'));
for (int i = 0; i < str.length(); i++) {
Node next = root;
for (int idx = i; idx < str.length(); idx++) {
Node parent = next;
Node node = new Node(new Character(str.charAt(idx)));
block: {
for (int k = 0; k < parent.getChildCount(); k++) {
Node child =(Node) parent.getChildAt(k);
if (child.getUserObject().equals(node.getUserObject())) {
next = child;
break block;
}
}
parent.add(node);
next = node;
}
}
}
return root;
}
0499:>>476 その4
05/02/26 09:18:13loop: for (int i = 1; i < line.length; i++) {
for (int k = 0; k < node.getChildCount(); k++) {
Node child = (Node) node.getChildAt(k);
if (child.getUserObject().equals(line[i])) {
node = child;
continue loop;
}
}
return i - 1;
}
return line.length - 1;
}
}
0500デフォルトの名無しさん
05/02/26 10:09:47p分割の単位角
Math.360 って何
0501デフォルトの名無しさん
05/02/26 10:34:38AABCDDD(1)
ABCCDDD(2)とすれば
(1)にはBCの後にCを挿入してAABCCDDDとして
(2)にはAの後にAを挿入してAABCCDDDとするというように
編集すれば最小の編集で同じ文字列が生成されるということをわかりたいの
です。差分情報から、最小の編集コストを見つけたいということです。
ただ、LCSとかやるとメモリが[m*n]消費してしまって500kbのデータなんて
比較することもできません。
0502デフォルトの名無しさん
05/02/26 11:56:00http://hp.vector.co.jp/authors/VA007799/viviProg/doc5.htm
0503デフォルトの名無しさん
05/02/26 12:17:59これで組んでもメモリの使用量減らないですがどうすればいいの?
結局[m,n]の容量必要なのですが。1kのデータそれで比較しただけ1Mですよ?
0504デフォルトの名無しさん
05/02/26 12:27:460505デフォルトの名無しさん
05/02/26 14:02:23kyori[i] = kyorix[i]*kyorix[i]+kyoriy[i]*kyoriy[i];
右辺をまるごと√で括るにはどうしたらいいでしょうか?
0506デフォルトの名無しさん
05/02/26 14:14:01バックトラックじゃだめなの?
>>505
java.lang.Math#sqrt(double)
java.lang.StrictMath#sqrt(double)
0507デフォルトの名無しさん
05/02/26 15:10:08kyori[i] = √(kyorix[i]*kyorix[i]+kyoriy[i]*kyoriy[i]);
0508デフォルトの名無しさん
05/02/26 21:13:33ただメモリを使わないだけのアルゴリズムなら簡単なはずだが・・・
0509名無しさん@お腹いっぱい。
05/02/27 04:04:3252枚のトランプの画像を使って対人戦の神経衰弱を作れという宿題です。
よろしくお願いします
0510デフォルトの名無しさん
05/02/27 04:57:360511名無しさん@お腹いっぱい。
05/02/27 06:57:480512デフォルトの名無しさん
05/02/27 07:01:200513デフォルトの名無しさん
05/02/27 10:22:330514デフォルトの名無しさん
05/02/27 12:19:10http://www.kikihouse.com/
http://www.kikihouse.com/amusement/sozai.htm
0515デフォルトの名無しさん
05/02/27 12:41:23思いつかない。ダメだ....
0516デフォルトの名無しさん
05/02/27 12:49:51両データの編集距離を求めるプログラムでいいの?
AABCDDDとABCCDDDだったら2とか。
ABCDDDとABCCDDDだったら1とか。
0517デフォルトの名無しさん
05/02/27 17:40:020518デフォルトの名無しさん
05/02/27 22:07:551、カスタマークラスを作成しなさい
またカスタマークラスの動作を確認をのメインメソッドをもつクラスを作成しなさい
カスタマークラスは名前、住所という2つのインスタンス変数を持つ
2、 2つのコンストラクタを持つ
引数を持たないコンストラクタと名前を受け取りインスタンス変数に設定するコンストラクタ
5つのメソッドを持つ
�@注文メソッド「注文をしました」と出力
�A名前設定メソッド
�B名前取得メソッド
�C住所設定メソッド
�D住所取得メソッド
よろしくお願いしますです
0519518
05/02/27 22:12:45二つのインスタンス変数はprivateで宣言する を追加でおねがいします
よろしくお願いします
0520デフォルトの名無しさん
05/02/27 23:25:09コンストラクタが受け取るのは名前だけ?住所もだよね?
名前と住所は String 型でいいんだよね?姓と名は分けなくてもいいんだよね?
public class Customer { private String name; private String address;
public Customer() {} public Customer(String name, String address) { this.name = name; this.address = address; }
public String getName() { return name; } public String getAddress() { return address; }
public void setName(String name) { this.name = name; } public void setAddress(String address) { this.address = address; }
public void order() { System.out.println("注文をしました"); } public static void main(String[] args) {
Customer c = new Customer(); System.out.println(c.getName()+c.getAddress());
c.setName("name"); System.out.println(c.getName()+c.getAddress());
c.setAddress("addr"); System.out.println(c.getName()+c.getAddress());
c = new Customer("NAME", "ADDR"); System.out.println(c.getName()+c.getAddress()); c.order(); }}
テスト用クラスは別に作らず、カスタマークラスの中にメインメソッドを置いた。
テスト項目は一応全ての機能を使い結果を標準出力に吐かせるだけにとどめた。(目で確認)
(本来は、setしているものを正しくgetできるか、nameへのsetがaddressに影響を及ぼさないか等を
網羅的に、かつプログラムで確認すべき。っていうかテストケースを書くべき。)
名前や住所が設定されていなくても注文はできる。(本来はエラーにすべきか?)
改行が多いと2chには貼れないので、改行をいくつも削除した。
0521518
05/02/27 23:52:54ありがとうですー
情報ちゃんとだしてなくてすみません
名前と住所とかの条件はおっしゃられたとおりです〜
一応元の宿題が
インスタンス変数で
名前 ID 住所とインスタンス変数をとるという形だったのですが
自分で挑戦してみようと思い 先程のような形でだしてみたのです
とても助かりました
ありがとうございました
0522名無しさん@お腹いっぱい。
05/02/28 12:51:43画像はこれを使います
http://up.isp.2ch.net/up/cff0a5cd0987.zip
お願いします
0523デフォルトの名無しさん
05/02/28 15:44:50DOS窓で「appletviewer ButtonEvents.java」と打ってもウィンドウすら出ずに終わってしまいます。何故でしょうか?
「Apple」「Banana」「Orange」と書かれたボタン3つと空文字列の入ったラベル1つを表示し、
ボタンを押すとラベルにボタンにかかれた文字が表示される、というプログラムらしいです。
某書籍にかかれたサンプルプログラムの丸写しのハズなんですが・・・。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
/*
<applet code="ButtonEvents" width="400" height="60>
</applet>
*/
public class ButtonEvents extends Applet implements ActionListener{
Label label;
public void init(){
Button b1 = new Button("Apple");
b1.addActionListener(this);
add(b1);
Button b2 = new Button("Banana");
b1.addActionListener(this);
add(b2);
Button b3 = new Button("Orange");
b3.addActionListener(this);
add(b3);
label = new Label(" ");
add(label);
}
public void actionPerformed(ActionEvent ae){
label.setText(ae.getActionCommand());
}
}
0524デフォルトの名無しさん
05/02/28 15:52:56アプレットビューワーの使い方を検索するんだ!
0525デフォルトの名無しさん
05/02/28 16:09:50遅くなってすみませんが、エラーが出たためご相談です。
HW81.java [45:1] シンボルを見つけられません。
シンボル: 変数 PANELW
場所 : HW81 の クラス
stage = new Stage(PANELW, PANELH, robot, enemy, HW81.this);
^
HW81.java [45:1] シンボルを見つけられません。
シンボル: 変数 PANELH
場所 : HW81 の クラス
stage = new Stage(PANELW, PANELH, robot, enemy, HW81.this);
^
HW81.java [48:1] シンボルを見つけられません。
シンボル: メソッド setDefaultCloseOperation(int)
場所 : HW81 の クラス
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
^
HW81.java [49:1] シンボルを見つけられません。
シンボル: メソッド pack()
場所 : HW81 の クラス
pack();
^
注: C:\Documents and Settings\takuya\デスクトップ\java\HW81Frame\HW81.java の操作は、未チェックまたは安全ではありません。
注: 詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください。
エラー 4 個
コンパイルエラー HW81.
言われたとおりに置き換えたところ以上のようなエラーが出ました。
どうしたらいいでしょうか?
0526名無しさん@お腹いっぱい。
05/02/28 17:06:52よろしくお願いします
http://up.isp.2ch.net/up/cff0a5cd0987.zip
0527デフォルトの名無しさん
05/02/28 17:18:010528名無しさん@お腹いっぱい。
05/02/28 17:22:240529デフォルトの名無しさん
05/02/28 17:24:430530名無しさん@お腹いっぱい。
05/02/28 17:29:19一ゲーム終わった後にカードがシャッフルされる仕様です。
0531デフォルトの名無しさん
05/02/28 18:05:14interface Constants {
int SIZE = 8, PATHSIZE = 16;
String filename = "score.dat";
}
public class HW81 extends JApplet implements KeyListener, ActionListener, Constants {
を
interface Constants {
int SIZE = 8, PATHSIZE = 16, PANELW = 400, PANELH = 400;
String filename = "score.dat";
}
public class HW81 extends JFrame implements KeyListener, ActionListener, Constants {
にしてください。
0532455
05/02/28 20:07:59動作確認してないけど、気づいたところ。
×<applet code="ButtonEvents" width="400" height="60>
○<applet code="ButtonEvents.class" width="400" height="60">
・拡張子が抜けてる。
・heightのダブルクオーテーションが抜けてる。
0533デフォルトの名無しさん
05/02/28 20:12:03>>522の書き込み見てキレた人間が数名いると予想する。
0534>>526 その1
05/02/28 21:56:53import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.imageio.*;
import java.net.*;
import java.text.*;
import java.util.List;
public class HW85 extends JFrame {
static final int SIZE = 4;
List allcardList, gamecardList;
JPanel table = new JPanel(new GridLayout(SIZE, SIZE, 16, 16));
JLabel info = new JLabel();
Image backpic;
MouseListener mouseOp = new MouseOperation();
boolean cardFlag, playerFlag;
int blueCount, redCount, reverseCount;
MessageFormat msg = new MessageFormat(
"{0}の番です : 青{1,number,integer}点 赤{2,number,integer}点");
static class CardData implements Cloneable {
String name;
Image img;
boolean reverse;
CardData(String name, Image img) {
this.name = name;
this.img = img;
}
public boolean equals(Object obj) {
return name.equals(((CardData) obj).name);
}
0535>>526 その2
05/02/28 21:58:19return new CardData(name, img);
}
}
public static void main(String[] args) {
try {
new HW85();
} catch (Exception e) {
e.printStackTrace();
System.out.println("初期化失敗エラー終了");
}
}
HW85() throws Exception {
URL url = ClassLoader.getSystemResource("card");
String[] names = new File(url.toURI()).list(
new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.matches(".+\\.gif$")
&& !name.equalsIgnoreCase("omote.gif")
&& !name.equalsIgnoreCase("saa.gif");
}
});
allcardList = new ArrayList();
for (int i = 0; i < names.length; i++) {
Image img = ImageIO.read(new File(new File(url.toURI()),
names[i]));
CardData cd = new CardData(names[i], img);
allcardList.add(cd);
}
InputStream in = ClassLoader.getSystemResourceAsStream("card/omote.gif");
backpic = ImageIO.read(in);
0536:>>526 その3
05/02/28 22:00:25table.setBorder(BorderFactory.createEmptyBorder(16, 16, 16, 16));
table.setPreferredSize(new Dimension(600, 600));
info.setHorizontalAlignment(JLabel.CENTER);
info.setFont(new Font("Dialog", 1, 20));
info.setOpaque(true);
JButton btn = new JButton("開始");
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
startGame();
}
});
JPanel topbar = new JPanel(new BorderLayout());
topbar.add(btn, BorderLayout.WEST);
topbar.add(info);
getContentPane().add(topbar, BorderLayout.NORTH);
getContentPane().add(table);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
void startGame() {
List list = new ArrayList(allcardList);
Collections.shuffle(list);
list.subList(SIZE * SIZE / 2, list.size()).clear();
int size = list.size();
gamecardList = new ArrayList();
for (int i = 0; i < size; i++)
gamecardList.add(((CardData) list.get(i)).clone());
for (int i = 0; i < size; i++)
gamecardList.add(((CardData) list.get(i)).clone());
0537::>>526 その4
05/02/28 22:01:50table.removeAll();
for (int i = 0; i < gamecardList.size(); i++) {
JLabel lab = new JLabel(new ImageIcon(backpic));
lab.setName(String.valueOf(i));
lab.addMouseListener(mouseOp);
table.add(lab);
}
table.validate();
blueCount = 0;
redCount = 0;
reverseCount = 0;
showMessage();
}
void showMessage() {
String text = msg.format(new Object[] { !playerFlag ? "青" : "赤",
new Integer(blueCount), new Integer(redCount) });
info.setText(text);
if (playerFlag)
info.setBackground(new Color(255, 200, 200));
else
info.setBackground(new Color(200, 200, 255));
}
void endGame() {
String text1 = blueCount + "点 対 " + redCount + "点で";
String text2;
if (blueCount > redCount) {
text2 = "青の勝ちです";
info.setBackground(new Color(200, 200, 255));
} else if (redCount > blueCount) {
0538>>526 その5
05/02/28 22:02:34info.setBackground(new Color(255, 200, 200));
} else {
text2 = "引き分けです";
info.setBackground(new Color(200, 255, 200));
}
info.setText(text1 + text2);
}
class MouseOperation extends MouseAdapter {
CardData prevCard;
JLabel prevLabel;
public void mouseClicked(MouseEvent e) {
final JLabel lab = (JLabel) e.getComponent();
int idx = Integer.parseInt(lab.getName());
CardData cd = (CardData) gamecardList.get(idx);
if (cd.reverse)
return;
if (!cardFlag) {
prevLabel = lab;
prevCard = cd;
prevLabel.setIcon(new ImageIcon(prevCard.img));
prevCard.reverse = true;
showMessage();
} else {
lab.setIcon(new ImageIcon(cd.img));
if (cd.equals(prevCard)) {
lab.setBorder(BorderFactory.createLineBorder(
!playerFlag ? Color.blue : Color.red, 2));
prevLabel.setBorder(BorderFactory.createLineBorder(
!playerFlag ? Color.blue : Color.red, 2));
0539>>526 その6
05/02/28 22:03:11if (playerFlag)
++redCount;
else
++blueCount;
showMessage();
reverseCount += 2;
if (reverseCount >= gamecardList.size())
endGame();
} else {
prevCard.reverse = false;
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
}
lab.setIcon(new ImageIcon(backpic));
prevLabel.setIcon(new ImageIcon(backpic));
showMessage();
}
});
playerFlag ^= true;
}
}
cardFlag ^= true;
}
}
}
0540デフォルトの名無しさん
05/02/28 22:08:37クラスパス上にcardパッケージ(フォルダ)を作成して、そこに
全カードGIF画像を入れてください。
static final int SIZEの数を変えると、卓の上に載るカードの数が
変わります。4〜8位の範囲で変えてください。あまり多くするとエラーになる。
0541デフォルトの名無しさん
05/02/28 22:15:08横槍スマソ。
早速動かしてみたけど、これちゃんと動く?
同じ数字でもあたり判定しないことがあるんだが。
0542名無しさん@お腹いっぱい。
05/02/28 22:20:15import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
public class Game extends Applet implements MouseListener{
public String status;
int i = 13,j = 4;
int [][] masu = new int [j][i];
int [] card = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,
14,15,16,17,18,19,20,21,22,23,24,25,26,
27,28,29,30,31,32,33,34,35,36,37,38,39,
40,41,42,43,44,45,46,47,48,49,50,51,52};//カードの変数
int [] tate = new int [2];
int [] yoko = new int [2];
int mx,my;
int x,y,z,zz;
double a=0;
int b=0;
int loop1,loop2;
int pu ;
int turn;
0543名無しさん@お腹いっぱい。
05/02/28 22:21:14int play = 1;
int play1;
int play2;
int win1,win2,win3;
int ban;
int stop;
public void init(){
//初期化
for(y=0;y<4;y++){
for(x=0;x<13;x++){
masu[y][x] = 0;
}
}
for(y=0;y<4;y++){
for(x=0;x<13;x++){
a = (Math.random()*100)%52;//ランダムをきめる
b = (int)a;//aをdouble型からint型にかえる
while(card[b] == 0){
a = (Math.random()*100)%52;
b = (int)a;
0544名無しさん@お腹いっぱい。
05/02/28 22:23:24masu[y][x] = card[b];
card[b] = 0;
}
}
//リスナークラスのインスタンス化
EventHandler eh = new EventHandler();
//フィールドの初期化
status="out";
//リスナーの追加
this.addMouseListener(eh);
}
public void paint(Graphics gs){
Font fnt1 = new Font("TimesRoman",Font.BOLD,25);
gs.setFont(fnt1);
gs.drawString("現在の得点",700,100);
gs.drawString("player1 "+play1+"",720,130);
gs.drawString("player2 "+play2+"",720,160);
if(play == 1){
gs.drawString("player1の番です",100,350);
}else{
gs.drawString("player2の番です",100,350);
}
if(win1 == 1){
gs.drawString("player1の勝利です",100,450);
}else if(win2 == 1){
gs.drawString("player2の勝利です",100,450);
}else if(win3 == 1){
gs.drawString("引き分けです",100,450);
}
0545名無しさん@お腹いっぱい。
05/02/28 22:24:46gs.drawString("カードのある場所をクリックしてください",100,400);
}
Color bg = new Color(0,180,0);
gs.setColor( bg );//盤の色指定
gs.fillRect(5,5,10*70-23,5*52+20);//盤の表示
//線の表示
gs.setColor(Color.black);
for(z=0;z<i+1;z++){
gs.drawLine(52*z+5,5,z*52+5,j*70+5);
for(zz=0;zz<j+1;zz++){
gs.drawLine(5,70*zz+5,i*52+5,zz*70+5);
}
}
//カードの裏側の表示
for(y=0;y<4;y++){
for(x=0;x<13;x++){
if(masu[y][x] != 0){
Image img = getImage(getDocumentBase(),"omote.gif");
gs.drawImage(img,x*52+10,y*70+10,this);
}
}
}
//一枚目の表示
if(pu >= 1){
Image img1 = getImage(getDocumentBase(),masu[tate[0]][yoko[0]]+".gif");
gs.drawImage(img1,yoko[0]*52+10,tate[0]*70+10,this);
}
0546名無しさん@お腹いっぱい。
05/02/28 22:25:42if(pu >= 2){
Image img2 = getImage(getDocumentBase(),masu[tate[1]][yoko[1]]+".gif");
gs.drawImage(img2,yoko[1]*52+10,tate[1]*70+10,this);
}
}
class EventHandler implements MouseListener {
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {
switch(play){
case 1:ban = 1;break;
case -1:ban = 2;break;
}
turn = 0;
mx = (e.getX() - 5) / 52;
my = (e.getY() - 5) / 70;
if(my >= 0 && my < 4 && mx >= 0 && mx < 13 && masu[my][mx] != 0){
if(pu == 0){//1クリック目
tate[0] = my;
yoko[0] = mx;
pu += 1;
}else if(pu == 1){//2クリック目
if(masu[tate[0]][yoko[0]] != masu[my][mx]){//1枚目と2枚目が同じじゃないかを調べる
tate[1] = my;
yoko[1] = mx;
pu += 1;
}
0547名無しさん@お腹いっぱい。
05/02/28 22:26:37qu = pr % 13
}else if(pu == 2){//3クリック目
if(masu[tate[0]][yoko[0]] != masu[tate[1]][yoko[1]]){
if(qu == 0){//同じカードならmasuに0を入れてカードを消す
masu[tate[0]][yoko[0]] = 0;
masu[tate[1]][yoko[1]] = 0;
}else{
turn = 1;
}
}
pu = 0;
check();
}
}
if(turn != 0){//順番を入れ替える
play = (-1)*play;
}
repaint();
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
}
0548名無しさん@お腹いっぱい。
05/02/28 22:27:15public void check(){
if(play == 1 && qu == 0){
play1 += 1;
}else if(play == -1 && qu == 0){
play2 += 1;
}
stop = play1 + play2;
if(stop == 26){
if(play1 > play2){
win1 = 1;//pla
}else if(play1 < play2){
win2 = 1;
}else{
win3 = 1;
}
}
}
}
0549名無しさん@お腹いっぱい。
05/02/28 22:29:41画像をこのソースのファイルと同じフォルダにすればOK
番号振るの忘れたorz
逝ってくる
0550デフォルトの名無しさん
05/02/28 22:31:47確認どうもです。
それはカードが小さいので、マークの見分けがつきにくいからです。
スペードとクラブ、ハートとダイアのカードが同じに見える事が
多々あります。カードをよく見ると問題ないです。
当たり判定は間違いないです。
0551デフォルトの名無しさん
05/02/28 22:33:50同じ数字かどうかじゃなくて同じカードかどうかを見てるのね。。
0552名無しさん@お腹いっぱい。
05/02/28 22:46:26コンパイルしたら以下のエラーが出ました
HW85.java:46: シンボルを解決できません。
シンボル: メソッド toURI ()
場所 : java.net.URL の クラス
String[] names = new File(url.toURI()).list(
^
HW85.java:56: シンボルを解決できません。
シンボル: メソッド toURI ()
場所 : java.net.URL の クラス
Image img = ImageIO.read(new File(new File(url.toURI())
>>542さんのは今確認します
0553デフォルトの名無しさん
05/02/28 23:08:26俺も一応載せとく。
画像からして仕様と違うがナー。
http://www.wikiroom.com/java/?%BF%C0%B7%D0%BF%EA%BC%E5
一番下のCards.zip。
0554名無しさん@お腹いっぱい。
05/02/28 23:22:37>>542さんのコンパイルできました
うまく動かなかったです。
>>553の仕様がよくわかりません
0555553
05/02/28 23:29:41コンパイルして動かすだけだって。
javac *.java
java Main
プレイヤは3人いるが2人にしたけりゃMain.javaを修正して。
0556554
05/02/28 23:37:04シンボル: メソッド getComponentZOrder (CardPanel)
場所 : javax.swing.JPanel の クラス
int pos = panel.getComponentZOrder(cardPanel);
^
エラー 1 個
とでました。
0557デフォルトの名無しさん
05/02/28 23:47:24url.toURI()
の部分を
url.getFile().substring(1).replaceAll("%20", " ")
に
してください・・・・
0558554
05/03/01 00:05:020559デフォルトの名無しさん
05/03/01 00:08:57おーい、みんな554にからかわれてるだけだぞ。
3人も犠牲になったか・・・
0560554
05/03/01 00:12:06ご苦労さんw
0561デフォルトの名無しさん
05/03/01 00:39:19542のほうがソースはきれいだな
動かないが(プゲラ
0562デフォルトの名無しさん
05/03/01 02:23:52public static void main(String[] args) {
String x = "aaaaabccaaddd", y = "aabbbcaaadcdaa";
int xlen = x.length(), ylen = y.length();
int[][] lcs = new int[xlen][ylen];
String[][] move = new String[xlen][ylen];
for(int i = 0; i < xlen; i++){
lcs[i][0] = 0;
}
for(int j = 1; j < ylen; j++){
lcs[0][j] = 0;
}
for(int i = 1; i < xlen; i++){
for(int j = 1; j < ylen; j++){
if(x.charAt(i) == y.charAt(j)){
lcs[i][j] = lcs[i-1][j-1] + 1;
move[i][j] = "S";
else if(lcs[i-1][j] >= lcs[i][j-1]){
lcs[i][j] = lcs[i-1][j];
move[i][j] = "U";
else{
lcs[i][j] = lcs[i][j-1];
move[i][j] = "L";}
}
}
for(int i =0; i < xlen; i++){
for(int j = 0; j < ylen; j++){
System.out.print(move[i][j] + " ");}
System.out.print("\n");
}
}
0563>>562 その1
05/03/01 04:09:41import java.util.*;
import java.awt.Point;
public class HW86 {
static class Data {
int x, y, cost;
Data(int x, int y, int cost) {
this.x = x;
this.y = y;
this.cost = cost;
}
}
public static void main(String[] args) {
String text1 = "", text2 = "";
try {
System.out.print("文字列1の入力:");
text1 = new BufferedReader(new InputStreamReader(System.in))
.readLine();
System.out.print("文字列2の入力:");
text2 = new BufferedReader(new InputStreamReader(System.in))
.readLine();
} catch (IOException e) {
System.out.print("エラー発生終了");
System.exit(0);
}
0564>>562 その2
05/03/01 04:10:18if (text1.length() >= text2.length()) {
str1 = text2;
str2 = text1;
} else {
str1 = text1;
str2 = text2;
}
List list = new ArrayList();
for (int y = 0; y < str1.length(); y++) {
for (int x = 0; x < str2.length(); x++) {
if (str1.charAt(y) == str2.charAt(x))
list.add(new Point(x, y));
}
}
LinkedList queue = new LinkedList();
SortedSet costSet = new TreeSet();
Point pt = new Point(0, 0);
if (list.contains(pt)) {
queue.addLast(new Data(1, 1, 0));
} else {
if (1 < str2.length())
queue.addLast(new Data(1, 0, 1));
if (1 < str1.length())
queue.addLast(new Data(0, 1, 1));
}
0565>>562 その3
05/03/01 04:10:58Data dat = (Data) queue.removeFirst();
if (dat.x == str2.length() - 1 && dat.y == str1.length() - 1) {
costSet.add(new Integer(dat.cost));
continue;
}
pt.setLocation(dat.x + 1, dat.y + 1);
if (list.contains(pt)) {
queue.addLast(new Data(dat.x + 1, dat.y + 1, dat.cost));
continue;
} else {
if (dat.x + 1 < str2.length())
queue.addLast(new Data(dat.x + 1, dat.y, ++dat.cost));
if (dat.y + 1 < str1.length())
queue.addLast(new Data(dat.x, dat.y + 1, ++dat.cost));
}
}
int mincost = ((Integer) costSet.first()).intValue();
System.out.println("二つの文字列の最小編集コスト:" + mincost);
}
}
0566デフォルトの名無しさん
05/03/01 04:48:33途中にこういうところがあるけど、これだと最悪の場合
str1.length() * str2.length() 個の Point オブジェクトが
出来てくるんじゃないか?
List list = new ArrayList();
for (int y = 0; y < str1.length(); y++) {
for (int x = 0; x < str2.length(); x++) {
if (str1.charAt(y) == str2.charAt(x))
list.add(new Point(x, y));
}
}
あと、結果が間違ってる気がする。
>>516 に書いてる例を入れてみた。
文字列1の入力:AABCDDD
文字列2の入力:ABCCDDD
二つの文字列の最小編集コスト:3
バックトラックすれば、マトリックス持たなくていいんじゃない?
0567デフォルトの名無しさん
05/03/01 04:52:25Kokugo="71" Shakai="49"
Kokugo="59" Shakai="79"
こういった内容のファイルに対して
Shakai=""の中身だけ取り出すにはどうすればいいのでしょうか?
フォーマットは上記のものだけです
上記の例だと
67
49
79
となります
0568デフォルトの名無しさん
05/03/01 08:38:340569デフォルトの名無しさん
05/03/01 10:11:390570525
05/03/01 13:10:44コンパイルはできたんですが実行するとアプレットが初期化されてませんと出ます。
以下、スタックトレース
java.lang.ClassCastException: HW81
at sun.applet.AppletPanel.createApplet(AppletPanel.java:710)
at sun.applet.AppletPanel.runLoader(AppletPanel.java:639)
at sun.applet.AppletPanel.run(AppletPanel.java:319)
at java.lang.Thread.run(Thread.java:595)
0571デフォルトの名無しさん
05/03/01 13:20:09おお、指摘どうもです。直します。
0572>>562訂正 その1
05/03/01 13:22:04import java.util.*;
import java.awt.Point;
public class HW86 {
static class Data {
int x, y, cost;
Data(int x, int y, int cost) {
this.x = x;
this.y = y;
this.cost = cost;
}
}
public static void main(String[] args) {
while (true) {
String text1 = "", text2 = "";
try {
System.out.print("文字列1の入力:");
text1 = new BufferedReader(new InputStreamReader(System.in)).readLine();
if (text1.length() == 0)
break;
System.out.print("文字列2の入力:");
text2 = new BufferedReader(new InputStreamReader(System.in)).readLine();
if (text1.length() == 0)
break;
} catch (IOException e) {
System.out.print("エラー発生");
break;
}
compare(text1, text2);
}
System.out.print("終了");
}
0573>>562訂正 その2
05/03/01 13:23:41String str1 = text1, str2 = text2;
if (text1.length() >= text2.length()) {
str1 = text2;
str2 = text1;
}
List list = new ArrayList();
for (int y = 0; y < str1.length(); y++) {
boolean flag = false;
for (int x = y; x < str2.length(); x++) {
if (!flag || x + str1.length() - str2.length() <= str2.length() - x) {
if (str1.charAt(y) == str2.charAt(x)) {
list.add(new Point(x, y));
flag = true;
}
}
}
}
0574>>562訂正 その3
05/03/01 13:24:19SortedSet costSet = new TreeSet();
Point pt = new Point(0, 0);
if (list.contains(pt))
queue.addLast(new Data(0, 0, 0));
else
queue.addLast(new Data(0, 0, 1));
while (!queue.isEmpty()) {
Data dat = (Data) queue.removeFirst();
if (dat.x == str2.length() - 1 && dat.y == str1.length() - 1) {
costSet.add(new Integer(dat.cost));
continue;
}
pt.setLocation(dat.x + 1, dat.y + 1);
if (list.contains(pt)) {
queue.addLast(new Data(dat.x + 1, dat.y + 1, dat.cost));
continue;
} else {
if (dat.x + 1 < str2.length())
queue.addLast(new Data(dat.x + 1, dat.y, dat.cost + 1));
if (dat.y + 1 < str1.length())
queue.addLast(new Data(dat.x, dat.y + 1, dat.cost + 1));
if (dat.x + 1 < str2.length() && dat.y + 1 < str1.length())
queue.addLast(new Data(dat.x + 1, dat.y + 1, dat.cost + 1));
}
}
int mincost = ((Integer) costSet.first()).intValue();
System.out.println("二つの文字列の最小編集コスト:" + mincost);
}
}
0575デフォルトの名無しさん
05/03/01 13:26:53public class HW81 extends JApplet implements KeyListener, ActionListener, Constants {
を
public class HW81 extends JFrame implements KeyListener, ActionListener, Constants {
に
してください。
0576>>562本当の訂正 その3
05/03/01 13:54:44LinkedList queue = new LinkedList();
int mincost = str1.length() + str2.length();
Point pt = new Point(0, 0);
if (list.contains(pt))
queue.addLast(new Data(0, 0, 0));
else
queue.addLast(new Data(0, 0, 1));
while (!queue.isEmpty()) {
Data dat = (Data) queue.removeFirst();
if (dat.x == str2.length() - 1 && dat.y == str1.length() - 1) {
if (dat.cost < mincost)
mincost = dat.cost;
continue;
}
pt.setLocation(dat.x + 1, dat.y + 1);
if (list.contains(pt)) {
queue.addLast(new Data(dat.x + 1, dat.y + 1, dat.cost));
continue;
} else {
if (dat.x + 1 < str2.length())
queue.addLast(new Data(dat.x + 1, dat.y, dat.cost + 1));
if (dat.y + 1 < str1.length())
queue.addLast(new Data(dat.x, dat.y + 1, dat.cost + 1));
if (dat.x + 1 < str2.length() && dat.y + 1 < str1.length())
queue.addLast(new Data(dat.x + 1, dat.y + 1, dat.cost + 1));
}
}
System.out.println("二つの文字列の最小編集コスト:" + mincost);
}
}
0577デフォルトの名無しさん
05/03/01 14:46:38ばっくとらっくしてみたYo!(EditGraph.java)
ちょっと長くなったので、ここに貼った。
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=21927
編集距離って、そういうことなのね。初めて知った。
0579java初心者の名無し
05/03/01 19:31:19arrayPrintメソッドとreplaceメソッドを追加してください。
条件1
arrayPrintメソッドは、パラメータに渡された配列の要素を表示するようにしてください。
条件2
replaceメソッドは、パラメータに渡された2つの配列の要素を入れ替えるようにしてください。
条件3
replaceメソッドに渡される2つの配列がもし同じ要素数でない場合は、
エラーメッセージ「エラー!要素の数が同じではありません。」を表示して、
すぐにmainメソッドに戻るようにしてください。
0580java初心者の名無し
05/03/01 19:31:56public class Test {
// ここにarrayPrintメソッドを追加してください。
// ここにreplaceメソッドを追加してください。
public static void main(String[] args) {
int[] array1 = new int[]{0, 1, 2, 3, 4};
int[] array2 = new int[]{5, 6, 7, 8, 9};
int[] array3 = new int[]{10, 11};
replace(array1,array2);
arrayPrint(array1);
arrayPrint(array2);
replace(array2,array3);
arrayPrint(array2);
arrayPrint(array3);
}
}
実行結果
5 6 7 8 9
0 1 2 3 4
エラー!要素の数が同じではありません。
0 1 2 3 4
10 11
です。どうか助けてください。よろしくお願いします。
0581デフォルトの名無しさん
05/03/01 21:01:53ルールはこんな感じです。
ディーラー(コンピュータ)とプレーヤーの二人で対戦します。
ディーラーは、プレーヤーとディーラーにそれぞれ2枚ずつカードを配ります。
ディーラーのカードは1枚だけ表にしてもう一枚は裏にします。
ディーラーは自分の2枚のカードの合計が17点以上なら待機し、16点以下なら17点以上に
なるまでカードを引き続けます。点数の数え方や勝敗の決め方は普通のBJと同じです。
トランプの絵柄は、数字と簡単な記号位でいいそうです。
誰かお願いします。
0582デフォルトの名無しさん
05/03/01 22:20:19「普通のBJと同じ」とだけ誤魔化して書いた分だけ仕様がアバウトかも。
・「A」は合計が21より大きいときは「1」と数える。それ以外は「11」(カード保有者の都合のいいように解釈する)。
・コインを掛ける話が出てこないのでサレンダー、インシュア、ダブルダウンなどは考慮しなくていい。
こんなもんでOK?
0583デフォルトの名無しさん
05/03/01 23:21:10//行列とベクトルの積を計算するメソッド
public void kakezan(double[][]a,double[]b,double[]c){
double cj;
for(int i=0;i<a.length;i++){
cj=0;
for(int j=0;j<a[0].length;j++){
cj+=a[i][j]*b[j];
c[j]=cj;
}
}
}
このメソッドを、
double[][]a={{1,2},
{4,5}};
double[]b={1,1};
double[]c=new double[2];
の条件でcの要素を表示させると
c={4,7};
になってしまいます。(手計算では{5,7})
どうしてでしょうか?ご教示願います。
0584583
05/03/01 23:22:47表示させるとc={4,9}でした。
よろしくお願いします。
0585デフォルトの名無しさん
05/03/01 23:37:03boolean型の配列に入れた素数を
割り算に使いたいときは
boolean型ではだめなんだそうです。
どうしたらいいのでしょうか。
0586デフォルトの名無しさん
05/03/01 23:40:15はい。それでいいです。カジノみたいな要素もいりません。
ただ勝敗を決めるだけです。
0587デフォルトの名無しさん
05/03/01 23:49:00なんで、下の2行が実行されるんだ?しかも、下から2番目のarrayPrintが
1番目の配列を表示してるのにコード上は2番目の配列になってるけど。
何がしたいんだ?
0588デフォルトの名無しさん
05/03/01 23:52:49酔い覚ましてきたほうがいいよ。
0589デフォルトの名無しさん
05/03/01 23:54:09一応それでもわかるけど、要素の入れ方を説明して欲しかった
例えばa[0][1]は行列の1行目の2列目みたいに
>>583だと逆みたいだね
あと結果が4,9じゃないくて3、9になりそうだけど
確認はしてないけど
cj = a[j][i] * b[j]を
cj = a[j][i] * b[j];
とすればいいはず
0590585
05/03/01 23:58:29booleanで配列を用意して
maxを100などに指定したときに
for(i=2;i<max;i++)
prime[i]=true
判定して、その後にiの倍数は全て
素数じゃない・・・ って形で素数判定したんです。
その素数判定した後に残った配列をどうしたらいいのでしょう。
0592デフォルトの名無しさん
05/03/02 00:05:36例だと2から100までだが、とりあえず10までで考えると、
2から10まで素数は2、3,5,7の4つだが
prime[2]、[3]、[5]、[7]がtrueでそれ以外はfalseが入るって事だよね?
んでもってここで1つしかないけど、10以下の数かつ3の倍数の素数はなんですか
って聞かれると3って出力したいってこと?
0593デフォルトの名無しさん
05/03/02 00:09:30サーティファイのJava検2級や、Sun JAVAなんたらかんたらの認定試験
もってたりします?
0594デフォルトの名無しさん
05/03/02 00:15:48持ってなくて悪いか。
0595デフォルトの名無しさん
05/03/02 00:17:10579しばしお待ちを...
0596デフォルトの名無しさん
05/03/02 00:31:07/**
* @param array1
*/
private static void arrayPrint(int[] array1) {
String temp = "";
for (int i = 0; i < array1.length; i++) {
temp += array1[i] + " ";
}
System.out.println(temp);
}
/**
* @param array1
* @param array2
*/
private static void replace(int[] array1, int[] array2) {
if (array1.length != array2.length) {
System.out.println("エラー!要素の数が同じではありません。");
return;
}
int[] temp = (int[]) array1.clone();
for (int i = 0; i < array2.length; i++) {
array1[i] = array2[i];
}
for (int i = 0; i < array1.length; i++) {
array2[i] = temp[i];
}
}
0597583
05/03/02 00:32:29ありがとうございます。
その通り、a[0][1]は1行目の2列目です。
逆ってことは・・
例えばa={{1,2},{4,5}}
を手計算する時は{1,2}が1行目、{4,5}が2行目の要素になるという事でしょうか。
それともう一度実行してみましたが結果は変わらず{4,9}でした。
返信遅れてすみません。お願いします。
0598デフォルトの名無しさん
05/03/02 00:45:19public static void main(String[] args) {
int[] array1, array2, array3;
array1 = new int[] {0, 1, 2, 3, 4};
array2 = new int[] {5, 6, 7, 8, 9};
array3 = new int[] {10,11};
Test test = new Test();
test.Replace(array1, array2);
test.ArrayPrint(array1);
test.ArrayPrint(array2);
test.Replace(array2, array3);
test.ArrayPrint(array2);
test.ArrayPrint(array3);
}
public Test(){}
public void Replace(int[] array1, int[] array2){
if(array1.length == array2.length){
int temp;
for(int i =0; i < array1.length; i++){
temp = array1[i];
array1[i] = array2[i];
array2[i] = temp;
}
}else{
System.out.println("エラー!要素の数が同じではありません。");
return;}}
public void ArrayPrint(int[] PrintData){
for(int i = 0; i < PrintData.length; i++){
System.out.print(PrintData[i] + " "); }
System.out.print("\n");}
}
0599585
05/03/02 00:50:17すいません。もんもんと考えてました。
目的は素数を二つ掛け算したものを
素数判定した数字で割って、
もとの素数二つを見つけたいんです。
例えば10は2と5の素数判定ですので、
10%i==0の時に
それが素数って・・・うーん
頭足らなくて 意味のわからない文章になってすみません
0600デフォルトの名無しさん
05/03/02 01:13:42積の余りが0になる数で割れるとその数は素数であるっていいたいのか。
そうゆうのを見つけるたいってことか
trueを書き込むときに解るんだからそこで答えだって出せばいいだろうし
どうしてもprimeの中身を見て判別しないといけないのなら、
prime[i] == trueの時のiの値が答えになると思うけど解釈違うかな?
0601585
05/03/02 01:34:44そうなんです。
ずばりそれなんで。
でもわからん〜
0602デフォルトの名無しさん
05/03/02 05:16:31暗号のクラックでもしようとしてるのか?
0603デフォルトの名無しさん
05/03/02 05:37:12???
判定した素数で順番に剰余求めていけばいいじゃない。
ところでprimeはなぜintの配列にしないのだろうか。
私は勘違いしてるのだろうか。
0604デフォルトの名無しさん
05/03/02 06:38:43boolean prime[N];
prime[0] = false;
prime[1] = false;
prime[2] = true;
prime[3] = true;
prime[4] = false;
prime[5] = true;
prime[6] = false;
prime[7] = true;
prime[8] = false;
prime[9] = false;
prime[10] = false;
0605デフォルトの名無しさん
05/03/02 06:45:09prime[0] = 2;
prime[1] = 3;
prime[2] = 5;
prime[3] = 7;
..
はどうなのさ。
0606>>581 その1
05/03/02 07:20:06import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;
import java.awt.image.*;
class HW87 extends JFrame {
static final int NONE = 0, WIN = 1, LOSE = 2, DRAW = 3;
int issue, playerS, dealerS;
boolean waitFlag, exitFlag;
Player player, dealer;
CardHandler ch;
JLabel screen = new JLabel(), message = new JLabel();
JButton btn_hit = new JButton("Hit"), btn_stand = new JButton("Stand"),
btn_next = new JButton("Next"), btn_exit = new JButton("Exit");
BufferedImage table = new BufferedImage(640, 480, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = table.createGraphics();
public static void main(String[] args) {
HW87 wnd = new HW87();
while (!wnd.exitFlag)
wnd.playGame();
wnd.drawTable();
wnd.screen.setText("ゲーム終了");
}
private HW87() {
JPanel panel = new JPanel();
btn_next.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
waitFlag = false;
}
});
0607:>>581 その2
05/03/02 07:20:43public void actionPerformed(ActionEvent e) {
Card card = ch.getOneCard();
player.receiveCard(card, false);
player.showReceivedCard(card);
if (player.getTotalNumber() > 21) {
judge();
}
}
});
btn_stand.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
judge();
}
});
btn_exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
waitFlag = false;
exitFlag = true;
}
});
message.setFont(new Font("Dialog", 1, 16));
message.setHorizontalAlignment(JLabel.CENTER);
message.setText("現在の経過: " + playerS + "勝 " + dealerS + "敗");
g.setBackground(new Color(180, 220, 180));
g.setFont(new Font("Dialog", 0, 20));
screen.setFont(new Font("Dialog", 1, 40));
screen.setHorizontalTextPosition(JLabel.CENTER);
screen.setIcon(new ImageIcon(table));
panel.add(btn_next);
panel.add(btn_hit);
0608>>581 その3
05/03/02 07:21:29panel.add(btn_exit);
getContentPane().add(screen);
getContentPane().add(panel, BorderLayout.SOUTH);
getContentPane().add(message, BorderLayout.NORTH);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
void playGame() {
screen.setText("ゲーム開始");
drawTable();
ch = new CardHandler(false);
player = new Player(new Rectangle(100, 380, 500, 100), this);
dealer = new Player(new Rectangle(100, 10, 500, 100), this);
dealCard();
btn_next.setEnabled(false);
btn_exit.setEnabled(false);
btn_hit.setEnabled(true);
btn_stand.setEnabled(true);
issue = NONE;
while (issue == NONE) {
}
btn_next.setEnabled(true);
btn_exit.setEnabled(true);
btn_hit.setEnabled(false);
btn_stand.setEnabled(false);
waitFlag = true;
0609:>>581 その4
05/03/02 07:22:10}
btn_next.setEnabled(false);
btn_exit.setEnabled(false);
}
void dealCard() {
Card card = ch.getOneCard();
player.receiveCard(card, false);
player.showReceivedCard(card);
card = ch.getOneCard();
dealer.receiveCard(card, true);
dealer.showReceivedCard(card);
card = ch.getOneCard();
player.receiveCard(card, false);
player.showReceivedCard(card);
card = ch.getOneCard();
dealer.receiveCard(card, true);
dealer.showReceivedCard(card);
dealer.reverseCard(1);
}
private void judge() {
btn_hit.setEnabled(false);
btn_stand.setEnabled(false);
final List eventList = new ArrayList();
EventQueue.invokeLater(new Runnable() {
public void run() {
dealer.reverseCard(0);
if (!eventList.isEmpty()) {
EventQueue.invokeLater((Runnable) eventList.remove(0));
}
}
});
0610>>581 その5
05/03/02 07:22:47final Card card = ch.getOneCard();
dealer.receiveCard(card, false);
eventList.add(new Runnable() {
public void run() {
try {
Thread.sleep(500);
} catch (InterruptedException e1) {
}
dealer.showReceivedCard(card);
if (!eventList.isEmpty()) {
EventQueue.invokeLater((Runnable) eventList.remove(0));
}
}
});
}
eventList.add(new Runnable() {
public void run() {
int pn = player.getTotalNumber(), dn = dealer.getTotalNumber();
String text;
if (pn == 100 && dn == 100) {
issue = DRAW;
text = "引き分け " + "BJ vs BJ";
} else if (pn == 100) {
issue = WIN;
text = "勝利 " + "BJ vs " + dn;
} else if (dn == 100) {
issue = LOSE;
text = "負け " + pn + " vs BJ";
} else if (pn > 21 && dn > 21) {
issue = DRAW;
text = "引き分け " + "Over vs Over";
0611デフォルトの名無しさん
05/03/02 09:12:550612589
05/03/02 10:04:06これで大丈夫だと思う
public void kakezan(double[][]a,double[]b,double[]c){
double cj;
for(int i=0;i<a.length;i++){
cj=0;
for(int j=0;j<a[0].length;j++){
cj+=a[j][i] * b[j];
c[i]=cj;
}
}
}
0613583
05/03/02 11:47:10ありがとうございます。
a[][]のjとiを入れ替えたんですね。
それで実行してみたのですが、cに入っているものは{2.0,7.0}でした。
計算メソッドと描画メソッドを載せておきます。
//行列とベクトルの積を計算するメソッド
public void kakezan(double[][]a,double[]b,double[]c){
double cj;
for(int i=0;i<a.length;i++){
cj=0;
for(int j=0;j<a[0].length;j++){
cj+=a[i][j]*b[j];
c[j]=cj;
}
}
}
public void paint(Graphics g){
double[][]a={{1,2},
{4,5}};
double[]b={1,1};
double[]c=new double[2];
kakezan(a,b,c);
g.drawString("A*b = (",60,60);
for(int i=0;i<c.length;i++)
g.drawString(""+c[i],100+30*i,60);
お願いします(*- -)(*_ _)
0616デフォルトの名無しさん
05/03/02 14:32:30以下がゲームの必要事項です。
スタートボタンを押すとロボット(プレイヤー)とロボット(コンピュータ)
HOMEをそれぞれランダムで格子状(gridLayoutを使って作ります)のステージに配置します。
ステージのマスの数(縦×横)はプレイヤーが数字を入力して選べます。
HOMEはプレイヤーにはわからないようにします。
プレイヤーとコンピュータのロボットは交互に一マスずつ動いていきます。
ロボットが一マス動くごとに1ドルのコストがかかります。
ロボットが一マス動くごとにステージをアップデートしてHOMEまでの距離を表示します。
ロボットはキーボード操作でマスを上下左右に移動できます。(斜めはなし)
上=I, 下=M, 右=L, 左=Jのキー配置です。
HOMEまでの道のりのマスにボーナス(20ドルゲットとか50ドルゲットとか)をランダムで配置します。
どちらかのロボットが先にHOMEについた時点でゴールです。
プレイヤーが先にゴールした場合、ボーナスとして100ドルを受け取れます。
最終スコアは勝った場合のボーナスとHOMEまでの道のりで得たボーナスから
コストを引いたものが最終スコアとなります。
スコアキーパー(デフォルトのTOP5のデータを入れておく。)からデータを読み取り、TOP5を記録。
このとき、現在プレイしたスコアがTOP5入りするようなら名前の入力を求める。
ゴール後ウィンドウをポップアップさせて最終スコアとリプレイするかしないかを表示します。
0617デフォルトの名無しさん
05/03/02 14:35:04スコアキーパーは3種類のソートアルゴリズムを使ってスコアをソートしなさい。
(提出用は1つのソートアルゴリズムだけでよい。残りの二つは分析(授業中にほかのプログラムを分析します)に使います。)
2つのアルゴリズムは以下の基本のソーティングアルゴリズムです。
挿入ソート(insertion sort)、選択整列(selection sort)、バブル・ソート(bubble sort)
以下のアルゴリズムは効率的なソーティングアルゴリズムです。
クイックソート(Quick sort)、シェルソート(Shell sort)、ヒープソート(heap sort)、マージソート(merge sort)、基数ソート(radix sort)
どのリストストラクチャーを使うかは自分で選択しなさい。自分のアレイ、リンクリストまたはArrayList、LinkedListから選択しなさい。
スコアのソーティングを実装するために:
スコアデータ型はオブジェクトを比較するメソッドを必要とします。
通常、これはequals()メソッドと同様にcompareTo()メソッドにかかわります
(Comparable Interfaceを使用してください)。
同スコアもリストにのせてください。(たとえば2位と3位が両方とも同スコアとか)
file input, outputを使用して、スコアを保存してください。
ファイルエラーに例外処理(exception)を使用してください。
0618デフォルトの名無しさん
05/03/02 14:40:05上に追加した要素のほかに、
ArrayList, LinkedList, Vector, Stack, または Queue
を使って新要素を追加しなさい。
例えば、Queueを使ってパックマンの敵のようにステージのどこかで待機していて
ある一定時間たつと一匹ずつステージに出てきてパックマンを追い回すやつを作るとか。
上の例は本当にその通りじゃなくてもいいらしいです。
他の面白そうなものを自分で考えてもいいそうです。
以上です。どなたかお願いします。
0619>>581 その6
05/03/02 15:57:21issue = LOSE;
text = "負け " + "Over vs " + dn;
} else if (dn > 21) {
issue = WIN;
text = "勝ち " + pn + " vs Over";
} else if (pn > dn) {
issue = WIN;
text = "勝ち " + pn + " vs " + dn;
} else if (pn < dn) {
issue = LOSE;
text = "負け " + pn + " vs " + dn;
} else {
issue = DRAW;
text = "引き分け " + pn + " vs " + dn;
}
if (issue == WIN)
++playerS;
else if (issue == LOSE)
++dealerS;
screen.setText(text);
message.setText("現在の経過: " + playerS + "勝 " + dealerS + "敗");
}
});
}
void drawTable() {
g.setColor(Color.green);
g.clearRect(0, 0, table.getWidth(), table.getHeight());
screen.repaint();
}
0620:>>581 その7
05/03/02 15:57:59if (card.isReverse) {
g.setColor(new Color(180, 180, 220));
g.fillRect(card.x, card.y, 60, 90);
g.setColor(Color.black);
g.drawRect(card.x, card.y, 59, 89);
screen.repaint(card.x, card.y, 60, 90);
return;
}
g.setColor(Color.white);
g.fillRect(card.x, card.y, 60, 90);
g.setColor(Color.black);
g.drawRect(card.x, card.y, 59, 89);
String text;
switch (card.type) {
case Card.SPADE:
g.setColor(Color.black);
text = "spade";
break;
case Card.CLUB:
g.setColor(Color.blue);
text = "club";
break;
case Card.DIA:
g.setColor(Color.magenta);
text = "dia";
break;
case Card.HEART:
g.setColor(Color.red);
text = "heart";
break;
0621>>581 その8
05/03/02 15:59:55g.setColor(Color.gray);
text = "joker";
g.drawString(text, card.x
+ (60 - g.getFontMetrics().stringWidth(text)) / 2, card.y
+ (90 - g.getFontMetrics().getHeight()) / 2
+ g.getFontMetrics().getAscent());
return;
}
g.drawString(text, card.x + (60 - g.getFontMetrics().stringWidth(text))
/ 2, card.y + g.getFontMetrics().getAscent());
switch (card.no) {
case 1:
text = "A";
break;
case 11:
text = "J";
break;
case 12:
text = "Q";
break;
case 13:
text = "K"; break;
default:
text = String.valueOf(card.no);
}
g.drawString(text, card.x + (60 - g.getFontMetrics().stringWidth(text))
/ 2, card.y + (90 - g.getFontMetrics().getHeight()) / 2
+ g.getFontMetrics().getAscent());
screen.repaint(card.x, card.y, 60, 90);
}
}
0622>>581 その9
05/03/02 16:00:30static final int SPADE = 0, CLUB = 1, DIA = 2, HEART = 3, JOKER = 4;
int type;
int no;
int x = -1, y = -1;
boolean isReverse;
}
class CardHandler {
boolean hasJoker;
Card[] cards;
List cardList;
CardHandler(boolean hasJoker) {
this.hasJoker = hasJoker;
reset();
}
void shuffleCard() {
List list = Arrays.asList(cards);
Collections.shuffle(list, new Random(System.currentTimeMillis()));
cards = (Card[]) list.toArray(cards);
}
Card getOneCard() {
return (Card) cardList.remove(0);
}
void reset() {
if (hasJoker) {
cards = new Card[54];
int idx = 0;
0623>>581 その10
05/03/02 16:01:16for (int k = 1; k <= 13; k++) {
cards[idx] = new Card();
cards[idx].type = i;
cards[idx++].no = k;
}
}
cards[idx] = new Card();
cards[idx++].type = Card.JOKER;
cards[idx] = new Card();
cards[idx].type = Card.JOKER;
} else {
cards = new Card[52];
int idx = 0;
for (int i = 0; i < 4; i++) {
for (int k = 1; k <= 13; k++) {
cards[idx] = new Card();
cards[idx].type = i;
cards[idx++].no = k;
}
}
}
shuffleCard();
cardList = new ArrayList(Arrays.asList(cards));
}
}
class Player {
List myCard = new ArrayList();
Rectangle space;
HW87 gameObj;
0624:>>581 その11
05/03/02 16:13:15this.space = space;
this.gameObj = gameObj;
}
void receiveCard(Card card, boolean reverse) {
card.x = myCard.size() * 60 + space.x + myCard.size() * 4;
card.y = space.y;
card.isReverse = reverse;
myCard.add(card);
}
void showReceivedCard(Card card) {
gameObj.drawCard(card);
gameObj.screen.repaint();
}
void reverseCard(int index) {
Card card = (Card) myCard.get(index);
card.isReverse ^= true;
gameObj.drawCard(card);
}
int getTotalNumber() {
int num = 0;
Set bjj = new TreeSet();
for (int i = 0; i < myCard.size(); i++) {
Card card = (Card) myCard.get(i);
if (card.no == 1) {
num += 11;
bjj.add(new Integer(1));
} else if (card.no >= 10) {
num += 10;
bjj.add(new Integer(2));
0625>>581 その12
05/03/02 16:13:46num += card.no;
bjj.add(new Integer(0));
}
if (i == 1) {
if (bjj.contains(new Integer(1))
&& bjj.contains(new Integer(2)))
return 100;
}
}
if (num > 21) {
for (int i = 0; i < myCard.size(); i++) {
Card card = (Card) myCard.get(i);
if (card.no == 1) {
num -= 10;
if (num <= 21)
break;
}
}
}
return num;
}
}
0627デフォルトの名無しさん
05/03/02 21:25:00その検定試験は無用。
特にSJC-Pは、例えるなら受験英語以上の非実用的な問題ばかりだ。
日本じゃ本来の英語運用とかけ離れた「受験英語」が批判されて久しいのに、
あの検定試験は、まさにそれ以上だと言える。
0628デフォルトの名無しさん
05/03/02 23:16:53時間処理かかりますよ。
0630デフォルトの名無しさん
05/03/03 02:07:10問題は
ある販売店がある。その店の各月の売り上げを入力し、
配列に格納する(12回繰り返し)
売上高順に売上高と月を表示する。
売り上げの配列と月の配列が必要
以上です。どうかよろしくお願いします!
0631デフォルトの名無しさん
05/03/03 02:31:15こんな教え方するなんてどこのどいつだ。
各月の売り上げをまとめたクラス作ってクラスの配列作れ。
0632630
05/03/03 02:40:27クラスを作れ とは何をすることですか?
0633デフォルトの名無しさん
05/03/03 05:49:56javaの話だよな・・?
クラスというものをまだ習ってないのか・・
0634デフォルトの名無しさん
05/03/03 11:05:37import java.io.*;public class S{public static void main(String[]s)throws
Exception{long d[]=new long[12];int i=0;for(;i<12;)try{d[i]=r(i++);}catch(
RuntimeException e){i--;}java.util.Arrays.sort(d);for(;i>0;)System.out.println(
(d[--i]&15)+1+"月:"+(d[i]>>>32)+"円");}static long r(int i)throws Exception{
System.out.print(i+1+"月売上:");return(((long)Integer.parseInt(new
BufferedReader(new InputStreamReader(System.in)).readLine()))<<32)+i;}}
0635デフォルトの名無しさん
05/03/03 13:47:220636M.B.
05/03/03 14:07:04誰かJava用のプリティプリンタを上げてくれる香具師はおらんのか
0637デフォルトの名無しさん
05/03/03 14:44:23プリティプリンタって、eclipse の、source->format みたいなやつのこと?
0638M.B.
05/03/03 14:57:09Eclipse はちょっと触っただけなので知らんのだけど、
つまるところインデントとかを工夫して、
括弧の対応とかを分かりやすくし、
プログラム構造が見えるような形に整形してくれるプログラム。
*コメントの切り出し(唯一複数行にまたがる解析処理)
*文字定数のエスケープの処理(括弧の対応が以外に難物)
の部分を、非推奨のStringTokenizer を使うでもなく、
split みたいなString のメソッドを使うでもなく、
どう処理するかが見てみたい。
正規表現でうまく片付けるというのは難しそうなので。
0639637
05/03/03 15:32:27単に、括弧の対応だけなら簡単かもしれないけど、ダブルクォートの中に
出てくる括弧は無視しなきゃならないし、(文字列だから)。コメント部分に
ある括弧も無視しなきゃならないし、で、結局、ソース全体を読んで、
字句解析→構文解析しなきゃならないんじゃない?それって正規表現とか、
String#split() とかのレベルじゃないと思われ。ほとんどコンパイラ。
っていうか、eclipse は内部にコンパイラを持ってる、ソースの中の
plugins\org.eclipse.jdt.core\compiler の下あたりに入ってるよ。
もちろん Java で書いてあるから、気合入れて読んでみたら?
0640デフォルトの名無しさん
05/03/03 16:27:35public class JavaH1{
public static void main(String[]args){
FileIn fi = new FileIn();
if(! fi.open("hyouka.csv")){
System.out.println("ファイルを開けません、終了します");
System.exit(1);
}
????
???? = new int[rec.hyouji.length];
String buf=null;
????
if(! rec.parseRec(buf, ":")){
fi.close();
System.exit(1);
}
hyoukaCount[rec.conv()]++;
rec.dispRec();
}
if(! fi.close()){
System.out.println("ファイルを閉じられません、終了します");
System.exit(1);
}
for(int i =0; ???? i++){
if(hyoukaCount[i] !=0){
System.out.println(rec.hyouji[i] + "は"
+ hyoukaCount[i]+ "人です");
}}}}
0641デフォルトの名無しさん
05/03/03 16:57:25import java.util.regex.*;
public class HyoukaRec1 extends HyoukaRec0{
KeyIn ki = new KeyIn();
private String readString(String key){
String str = ki.readKey(key);
while(str.length()==0){
System.out.println("空文字列は不可です");
str=ki.readKey("再入力");
}
return str;
}
public boolean keyInNewRec(int count){
System.out.println((count + 1) + "人目のデータ");
this.bangou=ki.readInt("番号");
if(this.bangou <= 0)return false;
this.shimei=this.readString("氏名");
this.hyouka=this.readString("評価");
return true;
}
public boolean parseRec(String buf,String dlm){
Pattern p = Pattern.compile(dlm);
try{
String [ ] result = p.split(buf);
this.bangou = Integer.parseInt(result[0]);
this.shimei = result[1];
????
int count;
for(count = 0; rec.keyInNewRec(count); count++){
0642641続き
05/03/03 16:58:28fo.close();
System.out.println("ファイルに出力できません、終了します");
System.exit(1);
}}
if(!fo.close()){
System.out.println("ファイルを閉じられません、終了します");
System.exit(1);
}
System.out.println(count + "件のデータをファイルに出力しました");
}}
0643M.B.
05/03/03 19:18:32> plugins\org.eclipse.jdt.core\compiler の下あたりに入ってるよ。
> もちろん Java で書いてあるから、気合入れて読んでみたら?
あ、そうなんだ。てっきりコンパイラはJavac を呼んでるだけかと
思ってた(たしかForte とかそうだったし)し、やるにしてもJavacc
とか使ってLALR かなんかで片付けてそうに思ってた。
文法的にはC からそう離れてないわけだし、単純にyacc 程度のカラクリで
なんとかなりそうだしね(とはいえJavac のエラーメッセージを見た
感じだと、なんか内部的にけっこう凝ったことをやってそうな気も
するのだが)。
IBM 純正のコードってちょっと読んでみたい気がするな。
頑張ってみる。サンクスコ。
0644M.B.
05/03/03 19:40:56> なんか内部的にけっこう凝ったことをやってそうな気も
> するのだが
セルフつっこみ。
そういえばプログラムの最後に /* をつけると、
> コメントが閉じられていません。
というエラーが出るのは分かるのだが、
> 'class' または 'interface' がありません。
と出るのは、ちょっと謎な気がする……
0646デフォルトの名無しさん
05/03/03 20:19:41同じく。
FileInってAPIにあったっけ?
とりあえず>>640の2番目と4番目は、
int[] hyoukaCount (or int hyoukaCount[])
i < hyoukaCount.length
だと思われ。
1、3番目はrecの所属クラスが分からんとむりぽ。
recの所属クラスで分かる事は、
・hyoujiと言う配列メンバを持つ。(型は多分String)
・parseRec、conv、dispRec、というメソッドを持つ
こういうクラスがどこかにあるはずだから(名前はシラネ)、それを
探して教えてケロ。> >>640
0647640-642
05/03/03 20:22:44二つとも番号、氏名、評価(A,B,C,Dで)を入力して、hyouka.csvに出力するだけのプログラムです。
あと参照用で↓のプログラムを忘れてました、すいませんorz
public class HyoukaRec0{
int bangou;
String shimei, hyouka;
final String DLM=",";
final String [] code={"A","B","C","D"};
final String [] hyouji={"優","良","可","不可"};
public String toString(String dlm){
return this.bangou + dlm +this.shimei +dlm
+ this.hyouka.toUpperCase();
}
public String toString(){
return this.toString(DLM);
}
public int conv(){
int i;
String str = this.hyouka.toUpperCase();
for(i=0; i<code.length && !str.equals(code[i]); i++){
}
return i;
}
public String convString(String dlm){
return this.bangou + dlm +this.shimei +dlm
+ this.hyouji[this.conv()];
}
0648続き
05/03/03 20:23:19return this.convString(DLM);
}
public void dispRec(String dlm){
System.out.println(this.convString(dlm));
}
public void dispRec(){
System.out.println(this.convString(DLM));
}}
0649646
05/03/03 21:08:20無かったら俺のAPI見落としだが...
あと、番号、氏名、評価、は
% java 2 ひろゆき A
って感じの入力仕様で良いのかな?
>>640
括弧が足りないと思ったら、3番目は
for(???){
なのね...
0650646
05/03/03 21:11:51とりあえず、1番目は
HyoukaRec1 rec = new HyoukaRec1();
でFA。
(コンストラクタがこれしかないからな...)
2,4番目も上の答えであってるでしょう。
で3番目だが、FileInとKeyInの仕様が必要と思われ。
0651640
05/03/03 21:21:49import java.io.*;
public class KeyIn{
String buf = null;
BufferReader br=
new BufferReader(new InputStreamReader(System.in));
public String readKey(){
try{
buf=br.readLine();
}catch (IOException e){
System.out.println(e);
System.exit(1);
}
return buf;
}
public String readKey(String msg){
System.out.print(msg+">");
return readKey();
}
public int readInt(){
int inputIntValue;
while(true){
buf=readKey();
try{
inputIntValue=Integer.parseInt(buf);
break;
}catch(NumberFormatException e){
System.out.println("整数値を入力してください:" + buf);
System.out.print("再入力>");
}}
0652651続き
05/03/03 21:22:51}
public int readInt(String msg){
System.out.print(msg + ">");
return readInt();
}}
0653デフォルトの名無しさん
05/03/03 21:32:50import java.io.*;
public class FileIn{
BufferedReader br = null;
public boolean open(String fname){
boolean sts = true;
try{
br = new BufferedReader(new FileReader(fname));
}catch(IOException e){
System.out.println("ファイル名に誤りがあります\n" + e);
sts = false;
}
return sts;
}
public String readLine(){
String buff;
try{
buff=br.readLine();
}catch(IOException e){
System.out.println("読み込みエラー\n" + e);
buff null;
} return buff; }
public boolean close(){
boolean sts = true;
try{
br.close();
}catch(IOException e){
System.out.println("ファイルクローズエラー\n" + e);
sts=false;
}
return sts;
}}
0654デフォルトの名無しさん
05/03/03 21:35:48修正、KeyInのBufferedReaderのとこがBufferReaderになってます
連続ですいません
0655646
05/03/03 21:54:411. HyoukaRec1 rec = new HyoukaRec1();
2. int[] hyoukaCount (or int hyoukaCount[])
3. while(buf = rec.readLine()){
(or while((buf = rec.readLine()) != null){)
4. i < hyoukaCount.length ;
だと思ふ
3は"=="の書き間違いじゃなくて、あくまで"="ね。
インデントが無いから分からんのだが、多分3はrec.dispRec();
の次の } と同じレベルにあるんだよね?(3のwhileはそこで閉じる)
スマンが>>641はもうちっと待って
0656デフォルトの名無しさん
05/03/03 21:57:34ありがとうございます!
あと今見直してみたら641-642が変になってます
修正するのでおまちをo........rz
0658641-642修正
05/03/03 22:05:40そのとおりですたorz
import java.util.regex.*;
public class HyoukaRec1 extends HyoukaRec0{
KeyIn ki = new KeyIn();
private String readString(String key){
String str = ki.readKey(key);
while(str.length()==0){
System.out.println("空文字列は不可です");
str=ki.readKey("再入力");
}
return str;
}
public boolean keyInNewRec(int count){
System.out.println((count + 1) + "人目のデータ");
this.bangou=ki.readInt("番号");
if(this.bangou <= 0)return false;
this.shimei=this.readString("氏名");
this.hyouka=this.readString("評価");
return true;
}
public boolean parseRec(String buf,String dlm){
Pattern p = Pattern.compile(dlm);
try{
String [ ] result = p.split(buf);
this.bangou = Integer.parseInt(result[0]);
this.shimei = result[1];
????
0659658続き
05/03/03 22:06:03System.out.println("データに誤りがあります:" + buf);
System.out.println("プログラムを異常終了します:" + e);
return false;
}catch(NumberFormatException e){
System.out.println("データに誤りがあります:" + buf);
System.out.println("プログラムを異常終了します:" + e);
return false;
}catch(Exception e){
System.out.println("予期せぬエラーで異常終了します" + e);
return false;
}
return true;
}
public boolean parseRec(String buf){
return parseRec(buf, ",");
}}
0660646
05/03/03 22:14:06catch節が無いからcatch節が入るしかないと思ってた。
って事は、やっぱり>>641は
this.hyouka = result[2];
ですね。なんか簡単な気もするが...
>>640の3.はちょっと自信ナシ
間違ってたらゴメンなさい...
遅くてもいいので、答え分かったら教えてケロ。
0662デフォルトの名無しさん
05/03/03 23:04:07考えたら女のプログラマっつーのもおるんだよな。
愛が生まれたりすることもあるんだろうかw
0663デフォルトの名無しさん
05/03/03 23:28:14その話題はどこから出てきたんだ?
0664M.B.
05/03/03 23:41:100665デフォルトの名無しさん
05/03/04 11:19:530666M.B.
05/03/04 16:32:48> (話は全然違うが『囚人のジレンマ』問題は interface と抽象クラスの
> 手頃なサンプルになってなかなか演習向きだと思った)
なんかの参考になるかも知れんので晒しとく。
スレ汚しスマソ。
Player.java
import java.util.*;
public abstract class Player implements Responce {
abstract int get();
abstract void put( int x );
}
0667M.B.
05/03/04 16:33:51public interface Responce {
public static final int 協調 = 0;
public static final int 裏切り = 1;
}
0668M.B.
05/03/04 16:35:59public class 囚人のジレンマ implements Responce {
public static void main( String [] args ) throws Exception {
Player x = new 竹箆返し様();
Player y = new 正直者();
int x_の得点 = 0;
int y_の得点 = 0;
for (int cnt = 0;cnt < 1000;cnt += 1) {
int x_の出方 = x.get();
int y_の出方 = y.get();
x.put(y_の出方);
y.put(x_の出方);
if (x_の出方 == 協調) {
System.out.print("x:協調/");
} else {
System.out.print("x:裏切り/");
}
if (y_の出方 == 協調) {
System.out.println("y:協調");
} else {
System.out.println("y:裏切り");
}
0669M.B.
05/03/04 16:36:21// 裏切り同士 1点 : 1点
// 協調/裏切り 5点 : 0点。
if ((x_の出方 == 協調) && (y_の出方 == 協調)) {
x_の得点 += 3;
y_の得点 += 3;
}
if ((x_の出方 != 協調) && (y_の出方 != 協調)) {
x_の得点 += 1;
y_の得点 += 1;
}
if ((x_の出方 != 協調) && (y_の出方 == 協調)) {
x_の得点 += 5;
y_の得点 += 0;
}
if ((x_の出方 == 協調) && (y_の出方 != 協調)) {
x_の得点 += 0;
y_の得点 += 5;
}
}
System.out.println("x の得点:" + x_の得点 + ", y の得点:" + y_の得点);
}
}
0670M.B.
05/03/04 16:37:08public class 竹箆返し様 extends Player {
boolean 最初;
int 相手の出方;
竹箆返し様() {
最初 = true;
}
int get() {
int retval;
if (最初) {
retval = 協調;
最初 = false;
} else {
retval = 相手の出方;
}
return retval;
}
void put( int x ) {
相手の出方 = x;
}
}
0671M.B.
05/03/04 16:49:08import java.util.*;
public class 正直者 extends Player {
正直者() {
}
int get() {
return 協調;
}
void put( int x ) {
}
}
※でたらめ君
import java.util.*;
public class でたらめ君 extends Player {
でたらめ君() {}
int get() {
if ( Math.random() < 0.8 ) {
return 協調;
}
return 裏切り;
}
void put( int x ) {
}
}
0672デフォルトの名無しさん
05/03/04 22:40:030673デフォルトの名無しさん
05/03/05 10:44:510674dahoi
05/03/05 17:42:04こんなこと聞くのはどうかと思うんですけど
10進数を2進数に変化するプログラムが
分かりません〜〜!
誰か教えてくださぁ〜い
0675ぬ
05/03/05 19:05:35Controller.java:27: <identifier> がありません。
cart.add(ticketA);
^
Controller.java:28: <identifier> がありません。
cart.add(ticketB);
^
Controller.java:30: 型の開始が不正です。
try{
^
Controller.java:55: <identifier> がありません。
}
です。なぜに<identifier>なるのかが不明です。
すいません。何か助言お願い致します。
0676ぬ
05/03/05 19:06:24public class Controller {
//ユーザの作成
User user = new User("hoge","***-***","hege街","hoge@**.com",true);
//チケットの作成
Ticket ticketA = new Ticket("111−111","ほげほげZ",1900,new Date(104,7,31),"hoge");
Ticket ticketB = new Ticket("389-756","hogehoge",2000,new Date(104,12,24),"hoge");
Cart cart = new Cart();
cart.add(ticketA);
cart.add(ticketB);
try{
〜略〜
} catch (ResourceNotFoundException e) {
e.printStackTrace();
} catch (ParseErrorException e) {
e.printStackTrace();
} catch (MethodInvocationException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
0677ぬ
05/03/05 19:06:580678デフォルトの名無しさん
05/03/05 19:13:29質問は質問スレへ。
0679デフォルトの名無しさん
05/03/05 20:31:41// ToBin.java
import java.io.*;
public class ToBin {
public static void main(String[] args) throws IOException {
System.out.print("Input a number: ");
BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
String line = br.readLine();
int number = Integer.parseInt(line);
System.out.println( Integer.toBinaryString(number) );
}
}
0680dahoi
05/03/05 21:11:46プログラムを打ったんですが動きません・・・
こんなエラーが出ます↓
Exception in thread "main" java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:436)
at yomikomi.Yomini.main(Yomini.java:38)
0682M.B.
05/03/05 21:24:56関数として使おうとか、なんか変なことしてないか?
(だいたい Yomini.java って何なんだよ)
キモになっているのは、
Integer.toBinaryString(number)
の部分であって、number のところに整数型(int)で渡せば
String 型で値が返ってくるはずだが。
0683ぬ
05/03/05 21:30:06なぜにスルー・・・質問スレでも…むなしいです。
これってクラス定義されてないってことなんでしょうか・・?
でも、CartクラスはLinkedLidt継承してそのaddメソッド
呼びたいのですが、そうではないってことなのですかね・・?
0684ぬ
05/03/05 21:32:15LinkedListです。すいませんです。
0685デフォルトの名無しさん
05/03/05 21:38:00Controllerのコンストラクタ内でaddやtryを使えば大丈夫
0686デフォルトの名無しさん
05/03/05 21:41:41どこの質問スレで訊いたんだ?
0687ぬ
05/03/05 22:09:24なんと。了解です。
>685さん
ここの「スレ立てるまでもない〜」です( ´-`)ショボン
0688dahoi
05/03/05 22:17:05>>681,682
ちゃんと動きました。
なんか変な事してました。
例えば、足し算なんかをしてから
それを2進数表示するにはどうすればいいんですか?
0689ぬ
05/03/05 22:27:34コンストラクタで行ったら先ほどのエラーは回避しましたが、
今度はimportされているVelocityのクラスが見えなくなりました…。
クラスパス通ってるのになぜでしょう…。意味わからなくなってきました。。。
0691ぬ
05/03/05 22:38:04思った私が間違ってましたね・・・。
ありがとうございました。_(._.)_
0692デフォルトの名無しさん
05/03/06 10:18:02忘れられてるか、スルーされてる恐れがあるのでまた書き込ませていただきました。
スレ汚しすみません。
ロボットをキーボードで操作してHOMEに帰すゲームをGUIを使って作りなさい。
以下がゲームの必要事項です。
スタートボタンを押すとロボット(プレイヤー)とロボット(コンピュータ)
HOMEをそれぞれランダムで格子状(gridLayoutを使って作ります)のステージに配置します。
ステージのマスの数(縦×横)はプレイヤーが数字を入力して選べます。
HOMEはプレイヤーにはわからないようにします。
プレイヤーとコンピュータのロボットは交互に一マスずつ動いていきます。
ロボットが一マス動くごとに1ドルのコストがかかります。
ロボットが一マス動くごとにステージをアップデートしてHOMEまでの距離を表示します。
ロボットはキーボード操作でマスを上下左右に移動できます。(斜めはなし)
上=I, 下=M, 右=L, 左=Jのキー配置です。
HOMEまでの道のりのマスにボーナス(20ドルゲットとか50ドルゲットとか)をランダムで配置します。
どちらかのロボットが先にHOMEについた時点でゴールです。
プレイヤーが先にゴールした場合、ボーナスとして100ドルを受け取れます。
最終スコアは勝った場合のボーナスとHOMEまでの道のりで得たボーナスから
コストを引いたものが最終スコアとなります。
スコアキーパー(デフォルトのTOP5のデータを入れておく。)からデータを読み取り、TOP5を記録。
このとき、現在プレイしたスコアがTOP5入りするようなら名前の入力を求める。
ゴール後ウィンドウをポップアップさせて最終スコアとリプレイするかしないかを表示します。
0693デフォルトの名無しさん
05/03/06 10:18:22スコアキーパーは3種類のソートアルゴリズムを使ってスコアをソートしなさい。
(提出用は1つのソートアルゴリズムだけでよい。残りの二つは分析(授業中にほかのプログラムを分析します)に使います。)
2つのアルゴリズムは以下の基本のソーティングアルゴリズムです。
挿入ソート(insertion sort)、選択整列(selection sort)、バブル・ソート(bubble sort)
以下のアルゴリズムは効率的なソーティングアルゴリズムです。
クイックソート(Quick sort)、シェルソート(Shell sort)、ヒープソート(heap sort)、マージソート(merge sort)、基数ソート(radix sort)
どのリストストラクチャーを使うかは自分で選択しなさい。自分のアレイ、リンクリストまたはArrayList、LinkedListから選択しなさい。
スコアのソーティングを実装するために:
スコアデータ型はオブジェクトを比較するメソッドを必要とします。
通常、これはequals()メソッドと同様にcompareTo()メソッドにかかわります
(Comparable Interfaceを使用してください)。
同スコアもリストにのせてください。(たとえば2位と3位が両方とも同スコアとか)
file input, outputを使用して、スコアを保存してください。
ファイルエラーに例外処理(exception)を使用してください。
0694デフォルトの名無しさん
05/03/06 10:19:22上に追加した要素のほかに、
ArrayList, LinkedList, Vector, Stack, または Queue
を使って新要素を追加しなさい。
例えば、Queueを使ってパックマンの敵のようにステージのどこかで待機していて
ある一定時間たつと一匹ずつステージに出てきてパックマンを追い回すやつを作るとか。
上の例は本当にその通りじゃなくてもいいらしいです。
他の面白そうなものを自分で考えてもいいそうです。
以上です。どなたかお願いします。
0696M.B.
05/03/06 13:01:39粘着で嫌われ者の私なのだが、
以前話題になった(たぶん前スレだ)「戻り値がvoid でないメソッドの
戻り値を受けないのはアリなのだろうか」という件で、
こんなものを見つけた。
ttp://homepage.mac.com/jane_doe/doskoic.html
宿題どころかJava の話題ですらないのだが、
基本にかかわる部分(Java の“参照”とオブジェクトの
関係を理解するにはいいかもしれない)と思ったので、
貼っとく。スレ違い&スレ汚しスマソ。
0697名無し
05/03/06 17:34:55どういう風にすればいいのか・・・
誰か分かりませんかぁ?
0698デフォルトの名無しさん
05/03/06 17:37:05>>678
0699古代帝國富士皇朝総帥・伯壬旭
05/03/06 17:50:22ここに回答プログラムを貼っておきました。
http://www.wikiroom.com/java/?%A5%BD%A1%BC%A5%B9%C5%BD%C9%D5%A4%B1
数値(金)を全部取ったらゴールに向かってください。
0700& ◆R7PNoCmXUc
05/03/07 06:47:43いつもスルーせずにきちんと答えていただき本当にありがとうございました。
きちんと動きました。本当にありがとうございます。
0701M.B.
05/03/07 08:52:27岩谷宏『Java によるテキスト処理入門』
p.34 UnicharValue.java
0702デフォルトの名無しさん
05/03/08 02:13:22だれかヘルプ頼みます。8ページまでしか理解できません。
0703M.B.
05/03/08 08:25:18翻訳しろというのならスレ違い
0704デフォルトの名無しさん
05/03/08 12:53:15遊びすぎて宿題の意味がわかりません。先輩、教えてください
1
Class名 mondai1
30から1まで-2ぞつ表示するプログラムを作成しなさい
ただし、4の倍数は表示しないようにする
2
class名 mondai2
コマンドラインから2つの整数をあたえて、それぞれ最大の約数を求めるプログラムを
作成しなさい。また、割り切ることができなければ"素数です"と表示させること
ただし最大の約数を求める計算はmaxYakusuメソッドを作成し、そこで行うこと
引数、戻り値は自由とする
どうかお願いします
0705デフォルトの名無しさん
05/03/08 12:57:460706デフォルトの名無しさん
05/03/08 13:05:20class mondai1 {
public static void main(String[] args){
for(int i = 30 ; i > 0 ; i -= 2){
if(i%4 != 0) System.out.println(i);
}
}
}
0707デフォルトの名無しさん
05/03/08 13:08:150708704
05/03/08 13:12:01神!これで春休み登校せずにすみます!
0709デフォルトの名無しさん
05/03/08 13:52:19ついでだから貼っておくか
class mondai2 {
public static void main(String[] args){
if(args.length != 2){
System.out.println("コマンド引数を2つ入力して下さい");
System.exit(1);
}
int num1 = 0;
int num2 = 0;
try {
num1 = Integer.parseInt(args[0]);
num2 = Integer.parseInt(args[1]);
}catch(NumberFormatException e){
System.out.println("コマンド引数は数値を入力して下さい");
System.exit(1);
}
int max = maxYakusu(num1, num2);
if(max != 0) {
System.out.println("最大公約数は " + max + " です。");
} else {
つづく
0710つづき
05/03/08 13:53:02boolean num2_is_prime = isPrime(num2);
if(num1_is_prime && num2_is_prime){
System.out.println(num1 + " と " + num2 + " は共に素数です。");
}
else if(num1_is_prime){
System.out.println(num1 + " は素数です。");
}
else if(num2_is_prime){
System.out.println(num2 + " は素数です。");
}
else {
System.out.println("内部エラー");
System.exit(1);
}
}
}
static int maxYakusu(int num1, int num2){
int max = 0;
for(int i = 2 ; i <= Math.min(num1, num2) ; i++){
if(num1%i == 0 && num2%i == 0) max = i;
}
return max;
}
static boolean isPrime(int x){
for(int i = 2; i < x ; i++){
if(x%i == 0) return false;
}
return true;
}
}
0711↑訂正
05/03/08 13:59:00(正)System.out.println("最大公約数はありません");
0712デフォルトの名無しさん
05/03/08 14:03:26if(max != 0) {
System.out.println("最大公約数は " + max + " です。");
} else {
の後は、"素数です"と表示して終わりで良いかも。
isPrimeメソッドもいらなくなるし、そっちの方がスッキリ
一応、そっちバージョンも作っておくか...
0713デフォルトの名無しさん
05/03/08 14:05:55class mondai2 {
public static void main(String[] args){
if(args.length != 2){
System.out.println("コマンド引数を2つ入力して下さい");
System.exit(1);
}
int num1 = 0;
int num2 = 0;
try {
num1 = Integer.parseInt(args[0]);
num2 = Integer.parseInt(args[1]);
}catch(NumberFormatException e){
System.out.println("コマンド引数は数値を入力して下さい");
System.exit(1);
}
int max = maxYakusu(num1, num2);
if(max != 0) {
System.out.println("最大公約数は " + max + " です。");
} else {
System.out.println("素数です。");
}
}
static int maxYakusu(int num1, int num2){
int max = 0;
for(int i = 2 ; i <= Math.min(num1, num2) ; i++){
if(num1%i == 0 && num2%i == 0) max = i;
}
return max;
}
}
0714デフォルトの名無しさん
05/03/08 14:16:09編集距離の代表的なアルゴリズムを紹介してるだけだが・・・
英語もそんなに難しいレベルのものじゃないし。
図表もあるのだから、そこからイメージして理解しる
0715M.B.
05/03/08 15:16:42漏れも会社を辞めずに済んだのだが
0716デフォルトの名無しさん
05/03/08 17:00:34static int maxYakusu(int num1, int num2){
int max = 0;
for(int i = 2 ; i <= Math.min(num1, num2) ; i++){
if(num1%i == 0 && num2%i == 0) max = i;
}
return max;
}
0717713
05/03/08 17:26:04int min = Math.min(num1, num2);
for(int i = 2 ; i <= min ; i++){
くらいしか思いつかないぽ
||
||
∧||∧
( ⌒ ヽ <<713
∪ ノ
∪∪
0718デフォルトの名無しさん
05/03/08 18:17:01おいおい... いくらなんでも宿題スレでそれは無責任だろ
間違ってるなら訂正してやれよ >>704が混乱するぞ
0719M.B.
05/03/08 18:18:42つーか「ユークリッド(Euclides)の互除法」でググれ。
0720デフォルトの名無しさん
05/03/08 18:41:06了解。
アルゴリズムという用語の説明として、「ユークリッドの互除法」が解説されています。
Javaのソース付き。
http://hwb.ecc.u-tokyo.ac.jp/current/CDD1B8ECBDB82FA5A2A5EBA5B4A5EAA5BAA5E0.html
ほとんどの場合において、ユークリッドの互助法を使ったほうが速い。
maxYakusu(100, 100)
と呼ばれた場合、2から100まで順に調べるのと、いきなり num1 を num2 割ってみるのとでは、速度の差は歴然。
あと、>>716 に引用したメソッドには、バグがある。パラメタ num1 と num2 の両方に、
int 型の最大値である 2147483647 を渡した場合、for ループの中でいったん正しい値 (=2147483647)
をみつけて変数 max に代入するが、ループを抜けるかどうかの条件を調べる前に i++ が行われて
i の値が -2147483648 (マイナスの数!) になってしまい、ループを永遠に抜け出せない。
そのまま i の値はマイナスのまま絶対値を減らし続け、i == 0 となった時に、
「java.lang.ArithmeticException: / by zero」と、例外を吐いて落ちる。
0721No.1
05/03/08 18:52:47のせてあります.
ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=22207
課題
1. プロジェクトを変更してBlueJ以外で動作するようにしなさい.
2. 部屋に任意のアイテムを設置出来るようにしなさい.例として本や鍵など.アイ
テムには説明と重さの情報を付加しなさい.
3. プロジェクトを変更して現在のplayerの部屋の状態を保持するPlayer classを付
け加えなさい.
4. さらにPlayer classを拡張して,playerがアイテムを持ち運べるようにしなさい
.アイテムを選択するコマンドは"take"と"drop"とする.
5. player情報を付け加えて,playerが持ち運べる最高重量を決められるようにしな
さい.
6. testWeightLimit()を含むTest classを実装して,playerが最高重量までしかアイ
テムを保持出来ないことを確認しなさい.Testコードを実行するにはplayerとアイテ
ム,それを呼び出すcallが必要となる.
0722No.2
05/03/08 18:53:52を食べる"eat cookie"コマンドを付け加えなさい.クッキーを食べる事によってplayer
が持ち運べる最高重量を増やしなさい.
8. testCookieコードをTestクラスに実装しクッキーを食べる動作によってplayerの持
ち運べる最高重量が変更されることを確認しなさい.
9. playerではないキャラクタ達を加えなさい(Non-Plyaer Characters = NPCs).NPCを
各部屋に配置してplayerが同じ部屋に来たときにアイテムを交換するか否かをplayerに
問いかけなさい.アイテムを交換する時のコマンドは"tarde X"とし,Xはplayerの持っ
ているアイテムから選択出来るようにする.NPCは一つしかアイテムを持たない.
10. processCommandはコマンド処理を行う.このデザインはよく出来ていない.なぜな
らば毎回コマンドの記述をソースコードに追加していかないといけない.簡単にコマン
ドを増やすことができるようにクラスを改造しプログラムに実装しなさい.
イギリスから交換研究者として赴任された先生からの課題です.英語にも一苦労ですが
JAVAには触れた事がなく途方に暮れています.
よろしくお願いします.
0723デフォルトの名無しさん
05/03/08 19:10:37勉強になりますた(´・ω・`) <<713
あと、コマンド引数がマイナスの場合も考慮してませんでした
このまま逃げると漏れも無責任とか言われそうなので、
>>704の2の改訂版貼っておきます↓
class mondai2 {
public static void main(String[] args){
if(args.length != 2){
System.out.println("コマンド引数を2つ入力して下さい");
System.exit(1);
}
int num1 = 0;
int num2 = 0;
try {
num1 = Integer.parseInt(args[0]);
num2 = Integer.parseInt(args[1]);
if(num1 < 1 || num2 < 1){
System.out.println("コマンド引数は自然数を入力して下さい");
System.exit(1);
}
}catch(NumberFormatException e){
System.out.println("コマンド引数は数値を入力して下さい");
System.exit(1);
}
int max = maxYakusu(num1, num2);
if(max != 1) {
System.out.println("最大公約数は " + max + " です。");
} else {
System.out.println("素数です。");
}
}
0724つづき
05/03/08 19:11:06int a = Math.max(num1, num2);
int b = Math.min(num1, num2);
while( b != 0){
int c = a%b;
a = b;
b = c;
}
return a ;
}
}
0725M.B.
05/03/08 20:08:15いい人だ……
0726M.B.
05/03/08 20:33:35> マジッククッキー(majic cookie)
> イギリスから交換研究者として赴任された先生からの課題です.
その先生が使っているコンピュータには、
スペルチェッカがインストールされていないのか。
0727デフォルトの名無しさん
05/03/08 20:53:10ゲームって書いてあったので楽しみにしてたのに、
5つの部屋をうろつくことしか出来ないのね・・・。今は。
>>722 の 10番のやつって、どうやればいいんだろう・・・。
宿題出された者ではないけれど、興味あり。
0728デフォルトの名無しさん
05/03/08 21:07:54> ゲームって書いてあったので楽しみにしてたのに、
> 5つの部屋をうろつくことしか出来ないのね・・・。今は。
それを改造するのがこの宿題の趣旨なんでしょ。
プログラム板でプレイヤサイドに立ってちゃーだめっしょ。
0729M.B.
05/03/09 00:04:28> >>722 の 10番のやつって、どうやればいいんだろう……。
> 宿題出された者ではないけれど、興味あり。
C だと関数へのポインタを配列かなんかに持てば楽勝なのだが、
Java だと「オブジェクトそのもの(class)」ではなくて
インスタンスを持つのが普通なので、綺麗に(抽象的に)
実装すると、オブジェクト志向に慣れていないプログラマには
訳がわかんないものになると思われ。
前にうpした「囚人のジレンマ」プログラムも、プログラムで総当り戦を
やろうとしたら、「自分自身との対戦」の実装で禿死苦悩んだ。
けっきょくオブジェクトの配列を二つ(自分と相手)持つことにしたが。
0730デフォルトの名無しさん
05/03/09 01:55:430731モー
05/03/09 02:14:32作りました。
ttp://203.141.155.121/~dev105/homework/20050309/HomeWork.zip
10番はインターフェースを定義して、Factoryクラスからインスタンス化
する方法です。
コールバック関数のイメージですね。
0732デフォルトの名無しさん
05/03/09 08:04:55Rockクラスを定義し、10個のRockオブジェクトを作成して、それらの合計の重さを
計算するアプリケーションを作成しなさい。
Rockオブジェクトは配列に格納します。また、Rockオブジェクトを作成するときには、
岩石の重さを1〜10キログラムの値から無作為に選びます(Math.Random()を用いること)。
宜しくお願いします。
0733デフォルトの名無しさん
05/03/09 09:24:53private final double weight;
public Rock(double weight) {
this.weight = weight;
}
public double getWeight() {
return weight;
}
}
public class Main {
public static void main(String[] args) {
Rock[] rocks = new Rock[10];
for (int i=0; i<rocks.length; i++) {
rocks[i] = new Rock(Math.random()*10);
}
double total = 0;
for (int i=0; i<rocks.length; i++) {
total += rocks[i].getWeight();
}
System.out.println("totalWeight=" + total);
}
}
0734733
05/03/09 09:33:50重さの無い岩石はありえない、っていう考え方をしたので、
Rock クラスのインスタンスを生成する際に、重さを指定させるようにした。
(重さがまだ指定されていない Rock オブジェクトは作れない。)
岩石の重さは変えられない、という設計方針にした。
weight フィールドを final にしたことや、 setWeight(double) メソッドを
作らなかったことで、そのことを表現した。
あ、今気が付いたけど、
「岩石の重さを1〜10キログラムの値から無作為に選びます」
↑この仕様に反するコードを書いちまった。ゴメン。
0735デフォルトの名無しさん
05/03/09 10:50:54まあ、
public Rock(double weight) {
this.weight = weight;
}
を
public Rock() {
this.weight = Math.random()*10;
}
にして、
rocks[i] = new Rock(Math.random()*10);
を
rocks[i] = new Rock();
にする、ですかね?
0736M.B.
05/03/09 10:52:03> あ、今気が付いたけど、
> 「岩石の重さを1〜10キログラムの値から無作為に選びます」
> ↑この仕様に反するコードを書いちまった。ゴメン。
rocks[i] = new Rock(Math.random()*10);
↓
rocks[i] = new Rock(1.0 + Math.random()*9.0);
0738Java初心者
05/03/09 18:32:35配列の中身を合計するプログラムです。?を埋めてください。
また、除算(/)を小数2桁まで出力するプログラムを作成してください。
0での除算の時のエラー処理も忘れないでください。
public class ArrayCount
{
public int total(int[] x)
{
int t= 0;
for(??????)
{
t+=x[i++];
}
return t;
}
public static void main(String args[])
{
ArrayCount ac = new ArrayCount();
int [] x = new int [args.length];
for (???????)
{
x[i] = ??????;
}
System.out.println(ac.total(x));
}
}
問題文そのまま載せました。
よろしくお願いします。
0739デフォルトの名無しさん
05/03/09 19:16:41{
t+=x[i++];
}
int [] x = new int [args.length];
for (int i = 0; i < x.length; i++)
{
x[i] = i;
}
public static void main(String[] args) {
try {
System.out.println(new java.text.DecimalFormat("0.##").format(
Double.parseDouble(args[0]) / Double.parseDouble(args[1])));
} catch (ArithmeticException ex) {
System.out.println("0で除算をしました");
} catch (Exception ex) {
System.out.println("数値入力が不正です");
}
}
0740デフォルトの名無しさん
05/03/09 20:07:18動作確認してから載せてあげろって。
3つめの??????は
Integer.parseInt(args[i])
だし、
浮動小数点数の割り算ではArithmeticException投げない。
0741デフォルトの名無しさん
05/03/10 05:17:30String patient[][] = new String[500][2];
if (e.getSource() == btnSave) //セーブボタンがおされたら
{
patient[0][0] = tfID.getText(); //患者Aの番号をとる
patient[0][1] = tfFN.getText(); //患者Aの名前をとる
int intArrLen = (patient[0].length); //配列長さをとって
for(int intLoop = 0; intLoop < intArrLen; ++intLoop) //ループさせて
{
fw.write(patient[0][intLoop]);
fw.write("\r\n"); //TXTにセーブする。
}
}
という、SQLを使わない簡単なデータベースみたいなものを
多次元配列を使ってやってるんですが、
patient[1][0] = tfID.getText(); //患者Bの番号
patient[1][1] = tfFN.getText(); //患者Bの名前
patient[2][0] = tfID.getText(); //患者Cの番号
patient[2][1] = tfFN.getText(); //患者Cの名前
を同じTXTファイルに、上書きしないで(追記で)セーブするのはどうやってやればいいんでしょうか。。?
どうしても患者Bの番号と名前が患者Aの番号と名前に上書きされてしまうのです。
よろしければどなたかご教授ください。
0742デフォルトの名無しさん
05/03/10 07:05:21public FileWriter(String fileName, boolean append)
ってのがあるよ。
public FileWriter(String fileName, boolean append) throws IOException
書き込まれたデータを追加するかどうかを示す boolean とファイル名を指定して、FileWriter オブジェクトを構築します。
パラメータ:
fileName - システムに依存するファイル名の文字列
append - boolean が true の場合、データはファイルの先頭ではなく最後に書き込まれる
0743デフォルトの名無しさん
05/03/10 10:35:193つめの???は>>740の言うとおり、Integer.parseInt(args[i])
だろうね。ただ、問題文で配列の初期化についての言及がされてない
のが気になるけど、まあ、コマンド引数で与えるんだろうな。
浮動少数の0割は例外じゃないから自分でエラー処理書くしか
ないのかね?おいらにはそれ以外おもいつかんが。
あと>>739への追加指摘として、
"0.##" は "0.00" ではなかろうか?
浮動小数点2桁まで表示するって事は、
1 / 2 の結果を 0.50 って出せ、って事だと思うのだが
もう遅いかも知れないが、貼っとく>>738
0744743
05/03/10 10:39:12コマンド引数の第1引数を第2引数で割った結果を小数点2桁まで表示します
第2引数が0だと、「0での除算は無効です」というメッセージを吐いて
プログラムを停止します
class Div {
public static void main(String[] args){
if(args.length != 2) {
System.out.println("引数を2つ指定してください");
System.exit(1);
}
try{
double x = Double.parseDouble(args[0]);
double y = Double.parseDouble(args[1]);
if(y == 0.0){
System.out.println("0での除算は無効です");
System.exit(1);
}
double result = x/y;
System.out.println(new java.text.DecimalFormat("0.00").format(result));
}
catch(NumberFormatException e){
System.out.println("入力引数が不正です");
System.exit(1);
}
}
}
0745デフォルトの名無しさん
05/03/10 18:57:25有難う。ちゃんと動いたよー。感謝です。
もう少し教えてほしいことがあるんですが、
TXTファイルに
001
Yamada
Taro
20
Dokaben
002
Iwaki
Masami
21
OtokoIwaki
003
以下略
と配列ごとに書き込まれてるとき、Textfieldに打ち込まれた文字から
その文字を含む配列を検索するプログラムはどうやって作るのでしょうか?
たとえばiwakiとTextfieldに打ち込んで
サーチボタンを押したら、ファイルから配列を探し出して、
002からOtokoIwakiまで表示してくれるようなやつです
もし複数候補(Iwakiを含む配列が2つ以上)が見つかったら、
どっちを開くか聞いてくれるやつだといいです。。
わからないサブプログラム丸投げなのは承知していますが、
もしおひまな方いらっしゃいましたら重ねて宜しくお願いします。
0746デフォルトの名無しさん
05/03/10 19:47:51何が知りたいんだ?
「ボタンを押したら、なんか動作するようにしたい。」
「ファイルの内容を配列に読み込む方法がわからない」
「ある文字列が、別なある文字列を含んでいるかどうかを確認する方法を知りたい」
宿題丸投げするなら、その宿題の内容を全て書け。
どこまで実装することが求められているのか、だけでなく、
どこまで実装することが求められていないのか、ということも知りたいから。
そのTXTファイルのデータ構造は、私が見るとすごく変な構造だと思う。
なんで1個のデータで1行を使わないの?
001,Yamada,Taro,20,Dokaben
002,Iwaki,Masami,21,OtokoIwaki
↑こういう構造になっていない理由が、「>>745が馬鹿だから」なのか、
「そういう仕様で書くことを求められているから」なのかによって、解答も
違ってくると思うぞ。
0747721, 722
05/03/10 22:58:15ありがとうございました.動作確認しました.モー様のUpして頂いた時間を確認
してみると.......夜遅い時間まで本当にありがとうございました。
0749デフォルトの名無しさん
05/03/12 12:57:410750デフォルトの名無しさん
05/03/12 20:11:24サブクラスとして宣言してください。
・位置を表すint型のフィールドx,yを持つ
・3つのコンストラクタを持つ
(1)引数なし
(2)位置付き
(3)位置と大きさ付き
・位置を変更するメソッドsetLocationを持つ
・標準的な文字列表現を返すメソッドtoStringを持つ
x=12,y=34,width=123,height=45の時、
[ (12,34) [123,45] ]
class Rectangle{
int width;
int height;
Rectangle()
{setSize(0,0);}
Rectangle(int width,int height)
{setSize(width,height);}
void setSize(int width,int height)
{
this.width = width;
this.height= height;
}
public String toString()
{return"["+ width + "," + height + "]";}
}
どなたかご教授ください。
0752デフォルトの名無しさん
05/03/13 16:33:29class PlaceRectangle extends Rectangle {
int x;
int y;
PlaceRectangle() {
setPoint(0, 0);
setSize(0, 0);
}
PlaceRectangle( int x, int y ) {
setPoint(x, y);
setSize(0, 0);
}
PlaceRectangle( int x, int y, int width, int height ) {
setPoint(x, y);
setSize( width, height );
}
void setPoint( int x, int y ) {
this.x = x;
this.y = y;
}
public void setLocation( int new_x, int new_y ) {
setPoint( new_x, new_y );
}
public String toString() {
return "[ (" + x + "," + y + ") [" + width + "," + height + "] ]";
}
}
位置だけを定義したコンストラクタを作る意味があるのかどうかイマイチよく分からんが、
問題の通りに実装するとこんな感じだと思う。
0753デフォルトの名無しさん
05/03/13 20:18:36すみませんがどなたか教えてく頂けないでしょうか。
クラスTestThreadはThreadをextendsし、
コンストラクタの引数より取得したインスタンスを実行するメソッドを持つ。
クラスTestAdditionはインスタンス変数、AとBを持ち、AからBを積算し結果を表示するメソッドを持つ。
クラスTestDivideはインスタンス変数、AとBを持ち、AからBを除算し結果表示をするメソッドを持つ。
上記クラスはコンストラクタより値を取得する、そのときの引数は(short A,short B)とする。
メインクラスはTestThreadをインスタンス化しそのときの引数はTestAddition、もしくはTestDivideとす。
各スレッドは異なる引数を持ち、起動、終了後はその旨を運用者に通知する。(メインクラスにてスレッド単位で通知すること)
TestThreadは下記に示すものを????を修正し用いること????以外は修正を行なってはいけない。
上記の条件全てを満たすプログラムを作成せよ。
ここで????はワイルドカードの*と同様の扱いとする。
import ????
public class TestThread extends Thread {
???? execute;
????(????){
execute = ????;
}
????(){
sleep(5000);
execute.????;
}
}
0754デフォルトの名無しさん
05/03/13 20:39:55クラスTestAdditionとクラスTestDivideは同じスーパークラスを継承していないといけない気がしますが、
それについて問題文で言及されていませんか?
0755デフォルトの名無しさん
05/03/13 21:47:19あきらかに情報が不足している。
ちゃんと宿題全部晒せ。
0756753
05/03/13 22:35:58問題文には先ほどの記述以外載っていませんでした。
0757デフォルトの名無しさん
05/03/13 22:59:440758デフォルトの名無しさん
05/03/13 23:37:11よろしくお願いします。
スレッドを二つ作成し、お互い同期を取りながら共通の資源
(この場合同じ変数)を10づつ加算するプログラムを作成せよ。
終了判定は任意とする。
0759デフォルトの名無しさん
05/03/13 23:50:08class Data{
private int num = 0;
Object o = new Object();
public void add(int n){
syncronized(o){
num += n;
}}}
class TestThread extends Thread{
private Data data;
void setData(Data data){ this.data = data;}
void run(){
for(int i=0;i<10;i++){
data.add(10);
}}}
class Test{
public static void main(String[] arg){
TestThread t1 = new TestThread();
TestThread t2 = new TestThread();
Data data = new Data();
t1.setData(data);
t2.setData(data);
t1.start();
t2.start();
t1.join();
t2.join();
}}
0760デフォルトの名無しさん
05/03/13 23:51:41例えば、
JavaBean Property-A Property-B Property-C
-----------------------------------------
Bean1 1 1 1
Bean2 1 3 1
Bean3 1 2 1
というListがあるとき、(Property-A, Property-B)をキーとしてソートすると、
Bean1
Bean3
Bean2
の順にソートしたリストが欲しいのです。
Collectionフレームワークについて調べてみたのですが、こういうことが出来るのかわかりませんでした。
0761デフォルトの名無しさん
05/03/13 23:54:49Comparator
0762Java天才プログラマ
05/03/14 00:24:36compareToメソッドを実装しましょう。
あとはそれをArrays.sort()やSortedSetにaddすればソートされます。
0763デフォルトの名無しさん
05/03/14 02:58:33質問です。よろしくお願いします。
ある数値までの平方根までカウントさせたいときはどうしたらいいのでしょうか。
今、maxという数値があったとき、
√maxまでカウントしたいので
for(int i=2; i<sqrt(max); i++)
としたのですが、シンボルを解決できません、
とエラーが出てしまいました。
よろしくお願いします。
0764デフォルトの名無しさん
05/03/14 03:21:100765デフォルトの名無しさん
05/03/14 04:16:55携帯Javaでなく、J2SEなら……
sqrtはjava.lang.Mathのstaticメソッドのはず。
あとは考えれ。
あと、どうでもいいけど、
for (int i = 2, n = (int)sqrt(max) + 1; i < n; i++) { ... }
のほうがこころもち速くなるかもね。
0766デフォルトの名無しさん
05/03/14 04:22:380767デフォルトの名無しさん
05/03/14 06:56:550768デフォルトの名無しさん
05/03/14 08:13:13>>767
コンパイル時の最適化って、可能なんでしょうか。
逆に、コンパイル時には、最適化してはいけないような気がする。
(私の「最適化」という言葉から想像する「最適化」の定義が、
みんなの定義と違ってるかもしれないという可能性もあるけど…)
Math#sqrt(double) が、同じ値を引数として渡している限り同じ値を返す、
かどうかは、実行時までわからないんじゃないか、と思う。
(実行時になら、最適化してもよいかどうか、は、私はよくわからない。
「実行時の最適化」って言葉にも、いろいろ定義が考えられそうで。)
0769デフォルトの名無しさん
05/03/14 08:46:42コンパイラが max が for の中では変更されないことが分かれば
最初の一回計算するだけで(・∀・)イイ!!わけで
maxの値がコンパイル時に分かればさらに定数で置き換えても(・∀・)イイ!!ってはなしで
じっさいどうしているかは知りません
まあ予想で言ってもしょうがない気がするけど
0770768
05/03/14 09:43:14> コンパイラが max が for の中では変更されないことが分かれば
> 最初の一回計算するだけで(・∀・)イイ!!わけで
計算って、Math.sqrt(max) の呼び出しのことを指してるんだろうか。
0771M.B.
05/03/14 15:11:21「計算によるループ」と「値によるループ」っつー言葉があって
(共立出版から出ている『やさしいコンパイラのつくりかた』という
本に出てくる)、Java は「計算によるループ」(その都度計算する)
なのだが、「ループの中で、引数の書き換えが行なわれて
いないので、たぶんコンパイル時に『値によるループ』(最初に
計算された値がずっと使われる)を使うようにしてくれるだろう」
と勝手に思っちゃうわけだ(・∀・)。
「最適化」は英語でオプチマイズで、「楽観主義者」は
オプチミストだったりするのである。「ペシミストはC を使って
全部自分でやればいい」と漏れは思う。
ついでながら、平方根の計算というのは、数値演算パッケージが
標準的なCORDIC という手法を使っているならば、
たかだか掛け算一回分程度の手間しかかからない。
詳しくは一松信先生の『初等関数の数値計算』を嫁。
0772768
05/03/14 15:39:48何を言いたいのか、よくわからない。
多分わたしの疑問の書き方がまずかったのだろうと思うので、改めて書いてみる。
ループ内の、Math.sqrt(double) の呼び出しが、もしコンパイラによって
一回だけの呼び出し(2回目以降は一回目の呼び出しの際の戻り値を使う)に、
置き換えられるとしたら、
あとから Math クラス内の sqrt(double)の実装が変更された場合に、
再コンパイルが必要になってしまわないか?
sqrt(double) 内部で、値を返すための動作以外の動作(副作用)が
行われていた場合、それが一度しか実行されないことにならないか?
(例えば、呼ばれた回数をカウントするような実装。)
今回は、Math クラスのスタティックメソッド sqrt が題材になっているが、
コンパイラから見れば、単なる「或るクラスの或るスタティックメソッド」なので、
人間から見れば、「副作用が起るようなことはやってないに違いない」と、
あたりまえに思えることも、コンパイラにとってはそうではないのではないか?
0773デフォルトの名無しさん
05/03/14 15:46:390774763
05/03/14 15:52:54プログラムの先頭に
import java.lang.Math.*;
を追加したのですが、まだsqrtでエラーがでてしまいます。
なんでなのかよくわかりません。。。
申し訳ありませんが、
教えてください(>_<)
0775デフォルトの名無しさん
05/03/14 15:58:28それから、java.lang以下はimportしなくても使える。
0776デフォルトの名無しさん
05/03/14 15:58:500777デフォルトの名無しさん
05/03/14 16:05:00import static java.lang.Math.sqrt;
という記法(static import)を使えば、
そのファイルの中では単にsqrtと書けるようになった。
0778763
05/03/14 18:39:00ありがとうございました!!!
0779デフォルトの名無しさん
05/03/14 20:09:57> あとから Math クラス内の sqrt(double)の実装が変更された場合に、
> 再コンパイルが必要になってしまわないか?
意味が分からない
> sqrt(double) 内部で、値を返すための動作以外の動作(副作用)が
> 行われていた場合、それが一度しか実行されないことにならないか?
> (例えば、呼ばれた回数をカウントするような実装。)
たとえそうだとして何が問題なの?
何を言いたいのか、よくわからない。
問題だと思うことを具体的に書いて下さい
0780モー
05/03/14 21:03:021度しか行われないような形で最適化されてしまった場合、仮にsqrt(double)
が毎回異なる値を返したりsqrt内でカウントを行うような実装があった
場合困るじゃないか!と言いたいわけだ。
そんな最適化は行われないから、現実問題には何も問題はないわけだけど。
0781M.B.
05/03/14 21:15:47呼ばれる側のオブジェクトが変更されたら、呼ぶ側の
「再コンパイルが必要」なのは当然。
「最適化が可能かどうか」は、実行時に「定義域と値域の
一意対応が成立しているかどうか」の情報が、呼ばれる側
から呼ぶ側に伝わるかとか、呼ばれる側で「定義域と
値域の一意対応が成立している場合」に、一度使われた
入力値に対して同じ出力値を使い回すような実装が
されているか等、処理系の実装に深く関わっているので、
開発者が気にしてもあんまり意味がない。
まあ、コードがstatic かどうかはコンパイラが
文脈(コンテキスト)をチェックしているので、
内部状態を持たないオブジェクトかどうか
(つまりは「定義域と値域の一意対応が成立して
いるかどうか」)くらいは(1.4 でも)
コンパイラが見てそうに思う。
0782デフォルトの名無しさん
05/03/14 21:34:53カウントしようがしまいがプログラマにはどうでもいい
0783デフォルトの名無しさん
05/03/14 22:00:20JITは、「Javaのバイトコード」から「プラットフォームのネイティブコード」へのコンパイルを
するものだと認識しております。私が今「コンパイル」と呼んでおるものは、「Javaのソースコード」
から「Javaのバイトコード」へのコンパイルのことです。単に「コンパイル」という言葉を用いた
ことで、誤解を招いたのだとしたら大変申し訳ありません。ご容赦ください。
>>780
> (略)困るじゃないか!と言いたいわけだ。
はい。大体そういうことです。
> そんな最適化は行われないから、現実問題には何も問題はないわけだけど。
うーむ。あっさり「そんな最適化は行われない」って答えを言われちゃうと、アレなんですが。^^;
>>766 さんは、「それくらいコンパイル時に最適化されてるんじゃないか?」とご発言ですので、
ここで >>780 さんと意見(予想?)が対立したわけですね。さて、どっちが正解なのか、がんがん
議論してくださいな。w (>>779 さん。ごめんなさい。あなたに説明する能力が、私にはありません。)
>>781
> 呼ばれる側のオブジェクトが変更されたら、呼ぶ側の
> 「再コンパイルが必要」なのは当然。
「オブジェクトの変更」という用語を持ち出されると、これまた非常に解答が難儀ですが、
なんだかずいぶん不便な Java をお使いのようですね。私が使っている Java は、
「Write Once, Run Anywhere」でありまして、呼ばれる側の API の実装の内部は幾度となく
変更されておりますが、私の書いたプログラムは、大体のところ再コンパイル無しで動いております。
0784デフォルトの名無しさん
05/03/14 22:05:080785デフォルトの名無しさん
05/03/14 22:29:081.5で初登場のAPI使ったら1.4では動かんわな。
0786デフォルトの名無しさん
05/03/14 22:30:13ちゃんと1.4でもコンパイル通るYO
学校のコンパイラは1.4だからNE
0787デフォルトの名無しさん
05/03/14 22:31:011.5でコンパイルしたら1.4では動かんよ
0788デフォルトの名無しさん
05/03/14 22:31:370789M.B.
05/03/14 22:36:42>「オブジェクトの変更」という用語を持ち出されると、
> これまた非常に解答が難儀ですが、
戻り値をvoid にしてたのが、ステータスを返したくなって
int に変更したりとかした場合、呼び側の記述自体は
(値を変数で受けたりしていないので)そのまんまでも
ちゃんと動くが、再コンパイルしないと実行時エラーで落ちる。
これに対して、C 言語だと、int とvoid は「レジスタに
残っている値を利用するかしないか」だから、再コンパイルの
必要はない(だからmain() はint だったり void だったりする。
つーかvoid という宣言自体、コンパイラが「呼ばれる側が
値を返しているかどうか」をチェックする以上の意味を持たない)。
……このあたりの議論は以前にもやったので、過去ログを参照して
いただけるとよろしいかと。
0790デフォルトの名無しさん
05/03/14 22:39:000791デフォルトの名無しさん
05/03/14 22:47:32○Write Once, Debug Everywhere.
0792デフォルトの名無しさん
05/03/14 22:51:380793デフォルトの名無しさん
05/03/14 22:51:510794デフォルトの名無しさん
05/03/14 22:58:110796デフォルトの名無しさん
05/03/14 23:00:271.5で初登場のAPIはつかってないYO
0797デフォルトの名無しさん
05/03/14 23:21:380798デフォルトの名無しさん
05/03/14 23:41:14ちがうか
0800デフォルトの名無しさん
05/03/15 00:47:41文法エラーになるという意味だから、出来るバイトコードは1.5でないと
動かなかったりしない?
0801デフォルトの名無しさん
05/03/15 00:53:000802デフォルトの名無しさん
05/03/15 03:35:320803デフォルトの名無しさん
05/03/15 05:20:23キーボードから任意の回数数値を入力し
メジアン(中央の値、偶数なら中二つの平均)
モード(もっとも出現頻度の高い数) を求める
その際、それぞれ引数としてデータの配列を受け取り
値を返すメソッドを作成せよ。
実行例は
10
20
30
40
10
モード10 メジアン20
よろしくお願いします
0804デフォルトの名無しさん
05/03/15 06:33:15芋虫ゲームの方が面白そうだな
0808デフォルトの名無しさん
05/03/15 15:13:28まあ、宿題の内容がそういう要求なら止めはせんが...
こういう場合は、最初に入力された値を返す、とかの方が自然じゃないか?
例えば、入力データが1つしかなかった場合を考えてみると...?
(任意回数とあるから1回もアリだよね?)
さらにもう少し言うと、10,10,20,20 って入力の時は
メジアンとして何を返すの?
メソッドの返却値は1つしかないから、2つは返せないよ。
0809803
05/03/15 15:56:51言われてみれば最初の値を返すというのがしっくりきますね。
10,10,20,20のときはまんなかの2つ10,20の平均値の15を返します。
メジアンは小さい順に並べた時の配列の真ん中の値
配列が偶数この場合は、真ん中2つの平均値ということです
(10,20,30,40,50では30を、10,20,30,40では25を返す)
0810デフォルトの名無しさん
05/03/15 16:52:18値は1つしか返してはいけないとは書いてないから
全部のモード値を返せばよい
0811808
05/03/15 17:26:23ゴメン、>>810は気づいてるけど、モードの間違いだ
メジアンは了解。一瞬平均値との違いが分からなかったorz
>>810
「値を返すメソッドを作れ」と言ってるのだから
1つだけ返すと解釈するのが自然だと思う
もちろん配列を返せば出来ないこともないが
まあ、宿題の仕様による
0812デフォルトの名無しさん
05/03/15 17:50:21浮動小数マンドクセ('A`)
宿題に書いてないけど、入力配列のソートが必要なのね...>>809
ソートマンドクセ('A`)
まあ、やるけど...
0813デフォルトの名無しさん
05/03/15 18:06:09メジアンだけ
モードはもうちっと仕様がハッキリしたらカく
double median(double[] ary){
java.util.Arrays.sort(ary);
if(ary.length %2 != 0){ // 奇数のとき
return ary[(ary.length-1)/2] ;
}else{ // 偶数のとき
int n = (ary.length - 1)/2;
int m = n + 1;
return (ary[n] + ary[m])/2.0;
}
}
0814デフォルトの名無しさん
05/03/15 18:07:36人は合ってると思うけど...
0815デフォルトの名無しさん
05/03/15 20:03:56最頻値を昇順に格納した配列を返す
import java.util.*;
double[] mode(double[] ary){
HashMap map = new HashMap();
for(int i = 0 ; i < ary.length ; i++){
Object key = new Double(ary[i]);
if(!map.containsKey(key)){
map.put(key, new Integer(1));
}
else{
int value = ((Integer)map.get(key)).intValue();
map.put(key, new Integer(++value));
}
}
int maxCount = 0;
ArrayList list = new ArrayList();
Iterator ite = map.keySet().iterator();
while(ite.hasNext()){
Object key = ite.next();
int count = ((Integer)map.get(key)).intValue();
if(count > maxCount) {
maxCount = count;
list.clear();
list.add((Double)key);
}
else if(count == maxCount){
list.add((Double)key);
}
}
0816つづき
05/03/15 20:04:31ite = list.iterator();
int i = 0;
while(ite.hasNext()){
result[i++] = ((Double)ite.next()).doubleValue();
}
Arrays.sort(result);
return result ;
}
0817デフォルトの名無しさん
05/03/15 20:06:28genericsが使えればもうちっと見た目は綺麗になりそうだけど
0818デフォルトの名無しさん
05/03/15 20:16:130821デフォルトの名無しさん
05/03/16 17:58:434ってのは何?辺の長さ?
正方形分の渦巻きを作ればいいの?
【初心者】Java の宿題ここで答えます 5.0【歓迎】
http://pc5.2ch.net/test/read.cgi/tech/1107350368/
ここのひとらがそういうの好きだよ
0822821
05/03/16 17:59:170823691さんありがとう。
05/03/16 18:05:02たとえば
4を受け取った場合。
1 2 3 4
1213145
1116156
10 9 8 7
と渦巻状の左回りで順番に数字を並べたいんです。
どなたかご教授くださ
ちなみに
3の場合。
1 2 3
8 9 4
7 6 5
となります
4や3というのは辺の長さです。
0824デフォルトの名無しさん
05/03/16 18:08:59自己レスですがただしくは821さんありがとう。です。
とちくるってました。すいません。
0825デフォルトの名無しさん
05/03/16 18:12:10時計の12からどっちに回るかが基準な。
まずどれだけ配列を確保すればよいか考える。何次元かとかね。
次に辺を描いていく上での距離がどんどん短くなることに着目する。4→3→3→3→2→2→1だな。
最後に数字の最大値を求めて、0なり半角スペースで体裁を整えることを考えろ。
全部は教えんぞ。やってみれ。
0826デフォルトの名無しさん
05/03/16 18:13:58例が間違ってんのか?
0827デフォルトの名無しさん
05/03/16 18:21:50すいません右回り(時計回り)ですね。
もう6時間ほどこれにつきっきりでそれでもわからないので(3と4と5のときしかうまくできない)
おかしくなってました。
すいません。
>>825
すこし休憩してからまたがんばってみます。
ですが、もう少しヒントをいただけたらありがたいです。。。。
08281/2
05/03/16 18:25:01BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );
int size = 0;
try {
size = Integer.parseInt( reader.readLine() );
} catch (NumberFormatException e) {
System.err.println( "整数を入力してください。" );
return;
}
int[][] sq = new int[size][];
for ( int i = 0; i < size; i++ ) {
sq[i] = new int[size];
}
int p = 0, q = 0;
int way = 0; // 0右, 1下, 2左, 3上
for ( int i = 1; i <= size*size; i++ ) {
sq[p][q] = i;
switch ( way ) {
case 0:
q++;
if ( q >= size || sq[p][q] != 0 ) {
q--;
p++;
way = 1;
}
break;
case 1:
p++;
if ( p >= size || sq[p][q] != 0 ) {
p--;
08292/3
05/03/16 18:26:04way = 2;
}
break;
case 2:
q--;
if ( q < 0 || sq[p][q] != 0 ) {
q++;
p--;
way = 3;
}
break;
case 3:
p--;
if ( p < 0 || sq[p][q] != 0 ) {
p++;
q++;
way = 0;
}
break;
}
}
int len = Integer.toString( size*size ).length();
StringBuffer buf = new StringBuffer(len+1).append( " " );
for ( int i = 0; i < len; i++ ) {
buf.append( "0" );
}
DecimalFormat format = new DecimalFormat();
format.applyPattern( buf.toString() );
for ( int i = 0; i < size; i++ ) {
for ( int j = 0; j < size; j++ ) {
08303/3
05/03/16 18:27:15}
System.out.println();
}
2回じゃおさまらんかった
0831825
05/03/16 18:28:05ごめん、すこし間違えてた。
だからヒントを多めに出してやる。
辺5なら
5→4→4→3→3→2→2→1→1でend
辺4なら
4→3→3→2→2→1→1でend
辺3なら
3→2→2→1→1でend
更にヒント(ほとんど答えだな)
渦巻きのベクトル方向には規則性がある。
→↓←↑→・・・
0832デフォルトの名無しさん
05/03/16 18:34:25すまんが、それは自分で入れてくれ
0833デフォルトの名無しさん
05/03/16 18:36:570834デフォルトの名無しさん
05/03/16 18:48:43ありがとうございます。しかし習ってないことが含まれているので参考までに受け取っておきます。
>>831
わかったような気がしないでもないですが提出までの残り3時間がんばってみます。
0835デフォルトの名無しさん
05/03/16 18:50:48そしてお前らすぐ答えだしすぎ。
0836デフォルトの名無しさん
05/03/16 18:50:57習ったことだけでできる事なんてほんの少しだ
0837デフォルトの名無しさん
05/03/16 18:51:54ここは質問者を育てるためのスレじゃない
回答者が頭の体操をして自己満足するためのスレだ
0838デフォルトの名無しさん
05/03/16 19:00:59そうだったのか。よしおじさん答え作っちゃうぞ!
UPLOADER用意してYO!
0839デフォルトの名無しさん
05/03/16 19:04:08http://sourcepost.sytes.net/
0840デフォルトの名無しさん
05/03/16 20:41:18http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=22444
ぐるぐる。
0841デフォルトの名無しさん
05/03/16 20:57:11クラス?何それ、食えるの?
0842M.B.
05/03/16 21:15:13『人は最初に習った方法に執着する性質がある。それでたとえば
“教育上の都合”でEuler 法だけを示すにとどめると、卒業論文に
までEuler 法による解を用いたりする例が出てくるおそれがある。』
森口繁一『数値計算工学』(岩波書店)p.208
0843M.B.
05/03/16 21:17:30いや、将来顧客になりそうな香具師に、開発側が
「どういうふうに発注したら、自分が思っているような
システムが上がってくるか」を教えるスレだ。
0844デフォルトの名無しさん
05/03/17 00:58:56public class Q5_823 {
public static int
Triangle( int pX, int pY, int p_1 ) {
if ( pX >= pY && pX + pY < p_1 ) return 0;
if ( pX > pY && pX + pY >= p_1 ) return 1;
if ( pX <= pY && pX + pY > p_1 ) return 2;
if ( pX < pY && pX + pY <= p_1 ) return 3;
return 0;
}
public static int
V_4( int pX, int pY, int p_1, int pTriangle ) {
int v = 0;
for ( int i = 0; i < pY; i++ ) {
v += p_1;
p_1 -= 2;
}
return v * 4 + pX - pY + p_1 * pTriangle;
}
0845デフォルトの名無しさん
05/03/17 00:59:28V( int pX, int pY, int p_1 ) {
switch ( Triangle( pX, pY, p_1 ) ) {
case 0: return V_4( pX, pY, p_1, 0 );
case 1: return V_4( pY, p_1 - pX, p_1, 1 );
case 2: return V_4( p_1 - pX, p_1 - pY, p_1, 2 );
case 3: return V_4( p_1 - pY, pX, p_1, 3 );
default: throw new RuntimeException();
}
}
public static void
Body( int p ) {
for ( int y = 0; y < p; y++ ) {
for ( int x = 0; x < p; x++ ) System.out.print( " " + ( V( x, y, p - 1 ) + 1 ) );
System.out.println();
}
}
public static void
main( String[] p ) { Body( Integer.parseInt( p[ 0 ] ) ); }
}
0846840
05/03/17 01:29:26面白いです。
何をやっているのか掴むために、main method を変更して、
Triangle だけを呼んでみた。
public static void main(String[] p) {
int test = 7;
for (int y = 0; y < test; y++) {
for (int x = 0; x < test; x++)
System.out.print(" " + Triangle(x, y, test-1));
System.out.println();
}
}
0 0 0 0 0 0 1
3 0 0 0 0 1 1
3 3 0 0 1 1 1
3 3 3 0 1 1 1
3 3 3 2 2 1 1
3 3 2 2 2 2 1
3 2 2 2 2 2 2
でも、全体としてどうやってるのかは、まだわからん。
0847844
05/03/17 14:11:21Triangle が 0 を返す領域の計算ができれば他の領域は座標変換して調整すればなんとかなりそうってのが発想だよ。
メソッド V で1の領域は左に90度、2は180度、3は270度回してる。
0848デフォルトの名無しさん
05/03/17 14:52:09ダンブエディタとはバイナリファイルをバイトごとに16進数で表示し
さらにその編集もできるというものです。
セーブデータなどバイナリファイルを一部修正するツールが欲しいのですが、
ネット上を見てもなかなかその様なツールがないんです。
(ただ表示するだけのダンプリストツールはあったのですが)
C宿題スレで頼もうと思いましたが、あそこは規模が小さい宿題しか扱って
ないみたいだったので、長文プログラムも扱ってるここJavaスレの方が
適当かと思って、ここに書き込みました。
自分はJavaのコンパイルと実行はできます。誰かお願いします。
0849デフォルトの名無しさん
05/03/17 14:59:08foxbinでぐぐれハゲ
0850デフォルトの名無しさん
05/03/17 15:02:11いくらでもあると思うけど
0851age
05/03/17 15:11:05Apacheの設定でNetwork DomainとServer Nameにlocal hostと入力し
Apacheの動作確認をしたところ、ブラウザを開き
http://www.localhost/ または、
http://(コンピュータ名、ipアドレス)と入力するとあります。
すると、ドットゲートサービスと出てユーザ名とパスワードがでました。
設定した覚えがないので、進めることができません。
OS:xp Apache:1.3.24 メーカー:NECです。
わかるかたお願いします。
0852デフォルトの名無しさん
05/03/17 15:14:26http://localhost/
でアクセスしろ。
それとスレ違いだ。Apacheスレにでも行け。
0853デフォルトの名無しさん
05/03/19 05:13:25クリック位置に描画されたボール(円)が動き回るアプレット。
ボールのサイズ、色、動き回るスピード、動き出す方向は、ランダムな値にし、
ウインドウの上下左右の境界線に達した場合は、ボールが跳ね返るようにする。
0854デフォルトの名無しさん
05/03/19 12:09:36whileを使わずに20人分の成績を降順に並べ替えるプログラムの作成。
成績データは学籍番号1番から20番までとし、以下の通り。
[85,40,89,72,84,53,23,68,78,94,16,54,81,68,30,70,48,65,80,87]
あと、このプログラムのフローチャートもお願いします。
0855デフォルトの名無しさん
05/03/19 12:55:20while を使わずにって、どういう意図なんだろう。
(for ならいいのかな?)
ソートのアルゴリズムをJavaで書かせることを目的とした
宿題なのかな?そうじゃなくて、とりあえずソートして表示
すればいいってことなら、成績と学籍番号をフィールドと
して持ち、インタフェース Comparableを実装したクラスを
作り、このクラスのインスタンスを20個生成して List に突
っ込んで Collections.sort(List) に入れてやるんだけど。
でもそうすると、ソートのアルゴリズムはソース上に表わ
されてこないけど。
0856デフォルトの名無しさん
05/03/19 13:34:34http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=22527
0857デフォルトの名無しさん
05/03/19 13:40:420858デフォルトの名無しさん
05/03/19 14:17:18ありがとうございます!
見てみます
0859デフォルトの名無しさん
05/03/19 14:22:12これは、オブジェクトの生成してるんですよね?
「?」.getServlet().getServletContext(); これって、どこのクラスのメソッド?
頭になにもつけなくていいの?
0860デフォルトの名無しさん
05/03/19 14:25:33死ね。
そのクラスか、継承元クラスかだろ
0861デフォルトの名無しさん
05/03/19 16:01:32マルチ
0863853
05/03/20 02:56:28正直スマンカッタorz
ってことでよろしくお願いしたい
次のようなアプレット
クリック位置に描画されたボール(円)が動き回るアプレット。
ボールのサイズ、色、動き回るスピード、動き出す方向は、ランダムな値にし、
ウインドウの上下左右の境界線に達した場合は、ボールが跳ね返るようにする。
0864デフォルトの名無しさん
05/03/20 10:14:570865>>863 その1
05/03/20 14:43:59import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.util.List;
import javax.swing.Timer;
public class HW90 extends JApplet implements ActionListener {
Graphics2D g;
Timer tim = new Timer(25, this);
Rectangle top, left, bottom, right;
int screenW, screenH;
List ballList = new ArrayList();
public void init() {
final JLabel screen = new JLabel();
screen.setOpaque(true);
screen.setBackground(Color.white);
addComponentListener(new ComponentAdapter() {
public void componentShown(ComponentEvent e) {
g = (Graphics2D) screen.getGraphics();
screenW = screen.getWidth();
screenH = screen.getHeight();
top = new Rectangle(0, 0, screenW, 1);
left = new Rectangle(0, 0, 1, screenH);
bottom = new Rectangle(0, screenH, screenW, 1);
right = new Rectangle(screenW, 0, 1, screenH);
}
});
screen.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
ballList.add(new Ball(e.getX(), e.getY()));
}
});
0866>>863 その2
05/03/20 14:44:34tim.start();
}
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < ballList.size(); i++) {
((Ball) ballList.get(i)).action();
}
}
class Ball {
double crtX, crtY, prevX, prevY, degree;
int width, height, speed;
Color col;
Ball(int x, int y) {
width = height = (int) (Math.random() * 24 + 16);
degree = Math.random() * 360;
speed = (int) (Math.random() * 25 + 5);
switch ((int) (Math.random() * 6)) {
case 0:
col = Color.blue; break;
case 1:
col = Color.red; break;
case 2:
col = Color.green; break;
case 3:
col = Color.yellow; break;
case 4:
col = Color.cyan; break;
default:
col = Color.magenta; break;
}
0867:>>863 その3
05/03/20 14:45:05crtY = prevY = y;
g.setColor(col);
g.fillArc((int) Math.round(crtX) - width / 2,
(int) Math.round(crtY) - height / 2, width, height, 0, 360);
}
void action() {
g.setColor(Color.white);
g.fillRect((int) Math.round(prevX) - width / 2, (int) Math.round(prevY) - height /2,
width, height);
crtX += speed * Math.cos(Math.toRadians(degree));
if (crtX <= 0)
crtX = 0;
if (crtX >= screenW)
crtX = screenW;
crtY += speed * Math.sin(Math.toRadians(degree));
if (crtY <= 0)
crtY = 0;
if (crtY >= screenH)
crtY = screenH;
g.setColor(col);
g.fillArc((int) Math.round(crtX) - width / 2, (int) Math.round(crtY) - height / 2,
width, height, 0, 360);
prevX = crtX;
prevY = crtY;
0868>>863 その4
05/03/20 14:45:34degree = 90 + (90 - (degree + 180));
} else if (left.contains(crtX, crtY)) {
degree = 0 + (0 - (degree + 180));
} else if (bottom.contains(crtX, crtY)) {
degree = 270 + (270 - (degree + 180));
} else if (right.contains(crtX, crtY)) {
degree = 180 + (180 - (degree + 180));
} else {
return;
}
degree += Math.random() * 30 - 15;
degree %= 360;
}
}
}
0869デフォルトの名無しさん
05/03/20 14:46:27import java.util.*;
import java.util.List;
0870デフォルトの名無しさん
05/03/20 14:54:030871デフォルトの名無しさん
05/03/20 15:25:17/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< ぱいちんこぱいちんこ!
\_/ \_________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< ぱいちんこ!
ぱいちんこ〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」  ̄ / /
0872デフォルトの名無しさん
05/03/20 15:33:23なんか結構がんばって書いたのがソースから読み取れる。
ボールの色を決める switch 文なんかは、こんな風にするのがスッキリしてよい。
final Color[] colorArr = new Color[] {Color.blue, Color.red, Color.green, Color.yellow, Color.cyan, Color.magenta};
... 中略
col = colorArr[(int)(Math.random() * 6)];
0873デフォルトの名無しさん
05/03/20 15:46:31改行もしてないし構造も直線的だし、適当に書き殴ってるだけの
コードにも見えるなw
0874M.B.
05/03/20 16:00:50反論はコードでしろアフォ
ここは動くコードを晒したもんが神じゃ
0875>>863訂正 その1
05/03/20 21:31:33import java.util.List;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Timer;
public class HW90 extends JApplet {
Graphics2D g;
Rectangle top, left, bottom, right;
int screenW, screenH;
List ballList = new ArrayList();
static final Color[] cols = { Color.blue, Color.red, Color.green, Color.yellow,
Color.cyan, Color.magenta };
Timer tim = new Timer(25, new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < ballList.size(); i++) {
((Ball) ballList.get(i)).action();
}
}
});
public void init() {
final JLabel screen = new JLabel();
screen.setOpaque(true);
screen.setBackground(Color.white);
0876:>>863訂正 その2
05/03/20 21:32:13public void componentShown(ComponentEvent e) {
g = (Graphics2D) screen.getGraphics();
screenW = screen.getWidth();
screenH = screen.getHeight();
top = new Rectangle(0, 0, screenW, 1);
left = new Rectangle(0, 0, 1, screenH);
bottom = new Rectangle(0, screenH, screenW, 1);
right = new Rectangle(screenW, 0, 1, screenH);
}
});
screen.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
ballList.add(new Ball(e.getX(), e.getY()));
}
});
getContentPane().add(screen);
tim.start();
}
class Ball {
double crtX, crtY, prevX, prevY, degree;
int width, height, speed, halfW, halfH;
Color col;
0877>>863訂正 その3
05/03/20 21:34:23width = height = (int) (Math.random() * 24 + 16) | 0x01;
halfW = width / 2;
halfH = height / 2;
degree = Math.random() * 360;
speed = (int) (Math.random() * 25 + 5);
col = cols[(int) (Math.random() * cols.length)];
crtX = prevX = x;
crtY = prevY = y;
g.setColor(col);
g.fillArc((int) Math.round(crtX) - halfW, (int) Math.round(crtY)
- halfH, width, height, 0, 360);
}
void action() {
g.setColor(Color.white);
g.fillRect((int) Math.round(prevX) - halfW, (int) Math.round(prevY)
- halfH, width, height);
crtX += speed * Math.cos(Math.toRadians(degree));
if (crtX <= halfW)
crtX = halfW;
else if (crtX >= screenW - halfW)
crtX = screenW - halfW;
crtY += speed * Math.sin(Math.toRadians(degree));
if (crtY <= halfH)
crtY = halfH;
else if (crtY >= screenH - halfH)
crtY = screenH - halfH;
0878>>863訂正 その4
05/03/20 21:34:51g.fillArc((int) Math.round(crtX) - halfW, (int) Math.round(crtY)
- halfH, width, height, 0, 360);
prevX = crtX;
prevY = crtY;
if (top.intersects(crtX - halfW, crtY - halfH, width, height)) {
degree = 90 + (90 - (degree + 180));
} else if (left.intersects(crtX - halfW, crtY - halfH, width, height)) {
degree = 0 + (0 - (degree + 180));
} else if (bottom.intersects(crtX - halfW, crtY - halfH, width, height)) {
degree = 270 + (270 - (degree + 180));
} else if (right.intersects(crtX - halfW, crtY - halfH, width, height)) {
degree = 180 + (180 - (degree + 180));
} else {
return;
}
degree -= Math.random() * 20 - 10;
degree = (int) degree % 360;
}
}
}
0879デフォルトの名無しさん
05/03/20 23:49:25import java.util.*;
import java.util.List;
0880デフォルトの名無しさん
05/03/21 01:37:15何を言いたいんだ?
0882デフォルトの名無しさん
2005/03/21(月) 09:59:44太陽系をモデル化するアプリケーションを作成しなさい。
Planetというクラスを作成して、惑星の名前と衛星の数をカプセル化します。
さらに、SolarSystemというクラスを作成して、9つの惑星オブジェクトを配列に格納します。
両方のクラスには、カプセル化された情報を表示するdisplay()というメソッドを用意します。
mainメソッドでは、SolarSystemクラスをインスタンス化して、display()メソッドを呼び出しなさい。
[実行例]
"Mercure",0
"Venus",0
"Earth",1
"Mars",2
"Jupiter",16
"Saturn",18
"Urans",21
"Neptune",8
"Pluto",1
0883デフォルトの名無しさん
2005/03/21(月) 10:06:38Planet#displayはSystem#printlen("\""+name+"\","+st);とするだけ
0884デフォルトの名無しさん
2005/03/21(月) 10:24:58ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=22562
SolarSystem
ttp://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=22561
0885デフォルトの名無しさん
2005/03/21(月) 12:26:440886デフォルトの名無しさん
2005/03/21(月) 12:34:26解説の解説をお願いしますw
http://logic.is.tsukuba.ac.jp/~kam/ppl_ss04/ishizaki.pdf
↑ここのpdfですが、AcrobatReaderから検索で
「register allocation」で「レジスタ割付」という項目で引っ掛けられます。
題目は最適化・高速化についてなんですが、PG暦5年ですが、さっぱりです。
よろしくお願いします。
0887デフォルトの名無しさん
2005/03/21(月) 12:49:33マシンの持つデータ領域の中でアクセス速度の速いもん順では以上のようになる
レジスタが2つしかない場合
もっとも参照回数の多いaと演算処理の入るcをレジスタに割り振れば
実処理時間に換算したときアクセス効率がもっともいいって説明だよ
0888デフォルトの名無しさん
2005/03/21(月) 13:35:01AudioClip ac = getAudioClip(getDocumentBase(),"foo/sound.au");
これをjarの中のメインクラスから呼び出しても、サウンドが読めず、jarの外のフォルダにサウンドを置くとそっちを読み込んでしまいます。
0889デフォルトの名無しさん
2005/03/21(月) 13:44:34getDocumentBaseはAppletを動かしてるhtmlのディレクトリURLじゃなかったっけ?
0890デフォルトの名無しさん
2005/03/21(月) 13:46:37まさか間違いを指摘してるつもりなのか?
それがないとコンパイルエラーになるのだが・・・
0891デフォルトの名無しさん
2005/03/21(月) 13:57:58import java.util.List;
下はいらんだろ?
*はあんま使わんほうがいいけどな。
EclipseでCtrl+Shift+Oするといいよ。
0892デフォルトの名無しさん
2005/03/21(月) 13:59:34なるほど。説明の内容はよく分かりました。で、例として、
a=2;(mem)
b=2;(mem)
c=4;(mem)
という定義をするよりも、、
a=1;(register)
b=2;(mem)
c=a+3;(register)
a=b;(mem)
と、ロジック変更することで速く処理されると?
つまり、、、2つのロジックをA、Bとした場合
Aはmemを3回使用
Bはmemを2回使用、registerを2回使用
処理が速いのはBであると?
私が勘違い野郎でしたら、レスきぼーんw
0893デフォルトの名無しさん
2005/03/21(月) 14:13:59import java.util.*;
import java.util.List;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Timer;
これを見てもまだimport java.util.List; がいらないと言うのか?
0894デフォルトの名無しさん
2005/03/21(月) 14:17:48試しにa:R1とb:MEMをa:MEMとb:R1に入れ替えると
mem_a = 1
R1 = 2
mem_b = R1
R1 = mem_a
R2 = R1 + 3
R1 = mem_b
になるんでない?
0895デフォルトの名無しさん
2005/03/21(月) 14:32:54よっく分かりました!さすがに10分ぐらいぶつぶつつぶやきながら、
最終的に紙&ペンで、メモリ領域増やしてでしたがw
なんかアセンブラ勉強してたころ思い出すなー。
計算するときレジスタに逐一渡さないと計算できないって知ったとき、
しょぼーと思ったけど、うんうんあのころは若かったw
CやJavaからPG初めた人はついてきてる?
0897ミキ
2005/03/21(月) 20:30:16丸投げですが、よろしくお願いします。
【問題】
iappli(java)でGPS情報取得するサンプルプログラムを作成する。
エミュレーターで動作確認できるレベルのこと。
エラー処理(フリーズしない程度)が入っていること。
実現可能ならば、プッシュでのGPS情報の取得、プルでのGPS取得の
サンプルプログラムも作成すること。
----------------------------------------------------------
マジでわかりません。。。(T-T)
よろしくお願いします。。
0898デフォルトの名無しさん
2005/03/22(火) 17:31:46ttp://www.nttdocomo.co.jp/p_s/corporations/dlp/tag/index.html
iAppliからは利用できへんのと違う?電話して聞いてみれ
0899882です
2005/03/22(火) 21:19:24>>883
説明どうもありがとうございます。参考になりました。
>>884
動きました!ありがとうございます。
0900デフォルトの名無しさん
2005/03/24(木) 10:43:32いつも自分の宿題にきちんと回答を下さってありがとうございます。
いつもここの皆様には感謝してますし、勉強させていただいてます。
ほんとうにありがとうございます。<(_ _)>
今回もどなたかお願いいたします。
ロボットをキーボードで操作してHOMEに帰すゲームをGUIを使って作りなさい。
以下がゲームの必要事項です。
スタートボタンを押すとロボット(プレイヤー)とロボット(コンピュータ)
HOMEをそれぞれランダムで格子状(gridLayoutを使って作ります)のステージに配置します。
ステージのマスの数(縦×横)はプレイヤーが数字を入力して選べます。
HOMEはプレイヤーにはわからないようにします。
プレイヤーとコンピュータのロボットは交互に一マスずつ動いていきます。
ロボットが一マス動くごとに1ドルのコストがかかります。
ロボットが一マス動くごとにステージをアップデートしてHOMEまでの距離を表示します。
ロボットはキーボード操作でマスを上下左右に移動できます。(斜めはなし)
上=I, 下=M, 右=L, 左=Jのキー配置です。
HOMEまでの道のりのマスにボーナス(20ドルゲットとか50ドルゲットとか)をランダムで配置します。
どちらかのロボットが先にHOMEについた時点でゴールです。
プレイヤーが先にゴールした場合、ボーナスとして100ドルを受け取れます。
最終スコアは勝った場合のボーナスとHOMEまでの道のりで得たボーナスから
コストを引いたものが最終スコアとなります。
スコアキーパー(デフォルトのTOP5のデータを入れておく。)からデータを読み取り、TOP5を記録。
このとき、現在プレイしたスコアがTOP5入りするようなら名前の入力を求める。
ゴール後ウィンドウをポップアップさせて最終スコアとリプレイするかしないかを表示します。
0901900続き
2005/03/24(木) 10:44:22(提出用は1つのソートアルゴリズムだけでよい。残りの二つは分析(授業中にほかのプログラムを分析します)に使います。)
2つのアルゴリズムは以下の基本のソーティングアルゴリズムです。
挿入ソート(insertion sort)、選択整列(selection sort)、バブル・ソート(bubble sort)
以下のアルゴリズムは効率的なソーティングアルゴリズムです。
クイックソート(Quick sort)、シェルソート(Shell sort)、ヒープソート(heap sort)、マージソート(merge sort)、基数ソート(radix sort)
どのリストストラクチャーを使うかは自分で選択しなさい。自分のアレイ、リンクリストまたはArrayList、LinkedListから選択しなさい。
スコアのソーティングを実装するために:
スコアデータ型はオブジェクトを比較するメソッドを必要とします。
通常、これはequals()メソッドと同様にcompareTo()メソッドにかかわります
(Comparable Interfaceを使用してください)。
同スコアもリストにのせてください。(たとえば2位と3位が両方とも同スコアとか)
file input, outputを使用して、スコアを保存してください。
ファイルエラーに例外処理(exception)を使用してください。
0902901続き
2005/03/24(木) 10:45:30ArrayList, LinkedList, Vector, Stack, または Queue
を使って新要素を追加しなさい。
例えば、Queueを使ってパックマンの敵のようにステージのどこかで待機していて
ある一定時間たつと一匹ずつステージに出てきてパックマンを追い回すやつを作るとか。
上の例は本当にその通りじゃなくてもいいらしいです。
他の面白そうなものを自分で考えてもいいそうです。
0903902続き
2005/03/24(木) 10:46:20ハッシュテーブルを追加し、ロボット、robot eater、その他の動きのある
ものをハッシュテーブルにストアしなさい。
ハッシュテーブルにストアする物のタイプはIDを必要とします。
ハッシュテーブルに追加する際、物とIDが必要となります。
ハッシュテーブルから削除する際、IDを必要とします。
ハッシュテーブルから物を探すとき、IDを使って探します。
ハッシュテーブルは75%以上に物を含んではいけません。
もし、いっぱいになった場合、ハッシュテーブルは拡張されます。
以下は先生がくれた案です。
上の要求を満たして下の例と同じものを作れとのことです。
各robot eaterと彼の現在の位置を格納するrobot eaterに関するハッシュ表を使用することです。
ユーザが「キー」を拾ったら、robot eaterを攻撃して消すすことができます。
robot eaterはステージ上を移動できます。
様々なポイントでゲームでrobot eaterを加えることができます。
以上です。長くなって申し訳ないのですが、お願いいたします。
皆様、いつもありがとうございます。
0904デフォルトの名無しさん
2005/03/24(木) 10:50:57これはまあともかくとして
> 勉強させていただいてます。
これは嘘だろ?
0905デフォルトの名無しさん
2005/03/24(木) 12:24:590906デフォルトの名無しさん
2005/03/24(木) 12:55:360907デフォルトの名無しさん
2005/03/24(木) 13:49:35自分で解決しろ、いや解決する努力をしろ
どうしても分からなかったら質問スレなりで聞け、それが勉強だ
ここは「勉強すんのマンドクセーから誰か宿題やってくれ」スレだ
0908デフォルトの名無しさん
2005/03/24(木) 18:30:30頼むのが一番利口なやり方だよ。
空いた時間を、自分の本当の将来の為の勉強に使える訳だし。
0909デフォルトの名無しさん
2005/03/24(木) 18:51:22とはいえ、ここで頼んで空いた時間に勉強するやつなんているとは思えないが
0910M.B.
2005/03/24(木) 22:14:50動くプログラムが書けるようになるまでは早くても
そこから先に進めない香具師もいれば、
プログラムの全体像が構成できなくて
動くプログラムを書けるようになるまでめちゃくちゃ苦労して
書けるようになったらどんどん先に進んでく香具師もいる。
動くプログラムを追って理解することで、結果的に
プログラムが書けるようになるということも
あると思われ。
……てなワケで質問者は回答から学べ。わかったか。
0911デフォルトの名無しさん
2005/03/24(木) 22:17:560912デフォルトの名無しさん
2005/03/24(木) 22:29:44さすがにウザイっす。
>いつも答えだしてる人
もうやめてあげてくれ。>>900-903のためにも。
0913デフォルトの名無しさん
2005/03/24(木) 22:32:24これが既にこのスレ向きじゃないよな
前回例に出たって・・・なんでこのスレの住人が前回を記憶しなきゃいけないのかw
0914デフォルトの名無しさん
2005/03/24(木) 22:40:13ワロタw
0915デフォルトの名無しさん
2005/03/24(木) 22:44:14いいのではないか?
あの程度のゲームなら、3時間もあればコード書けるだろう。
0916デフォルトの名無しさん
2005/03/24(木) 22:55:22>いつも答えだしてる人
例のいつもここにコードを大量コピペする人か。
いつもHWっていうクラスで始めてる人。
彼も何のつもりなのか。大分前から常駐してる?
いつも思うのだが、彼のコードってなんか雑然としてるね。
あれじゃ参考になるとは言い難いと思うよ。
0917デフォルトの名無しさん
2005/03/24(木) 23:04:12回答者を追い出すのはヤメレ、参考になろうがなろまいがこのスレに関係ない
0918M.B.
2005/03/25(金) 00:16:39> いつも思うのだが、彼のコードってなんか雑然としてるね。
とりあえず動くコードを晒せば神。プロんなりゃ厭でも分かる。
> あれじゃ参考になるとは言い難いと思うよ。
他人のコードに後から難癖つける暇があったら、
自分がもっと綺麗なコードを相手より先に晒せ。
書きなぐりのソースでも、リファクタリングの腕前は
モジュールや制御構造の構成や変数名の命名法を見りゃあ
風情で分かる。だいいち使いまわしの利く磨いた&枯れたソースを
相当量抱えてなかったら、短時間で「動くコード」は吐けん。
質問者が自分で書き換えながらいじりまわしてみれば、そのあたりは
よく分かるはず。見た目の乱雑さだけを取り上げて「参考になるとは
言い難い」とか言ってる香具師は、プログラミングを知らんと思われても
仕方ないと思われ。
0919デフォルトの名無しさん
2005/03/25(金) 06:26:250920M.B.
2005/03/25(金) 09:51:12あれは総帥。漏れは帝士(w
0921デフォルトの名無しさん
2005/03/25(金) 10:15:490922デフォルトの名無しさん
2005/03/25(金) 11:56:41Zion シオン(旧:金環蝕)の内情を公開 Part12
http://hobby5.2ch.net/test/read.cgi/uranai/1107727485/l50
0923デフォルトの名無しさん
2005/03/25(金) 21:55:05>>900-903も
なぜかコテハンな人も
HWではじまるクラスで答えを載せる人も
「個人が特定される」ような書き込みをするから話がこじれるわけで。
せっかくの匿名掲示板なんだからそれを有効に使えよと。
0924M.B.
2005/03/26(土) 15:16:14> 「個人が特定される」ような書き込みをするから話がこじれるわけで。
いや、どうせ洒落っつーかガセネタなんで……(-_-!)
漏れなんかそもそも「個人」じゃなくて複数人で寄ってたかって書いてるし。
0925デフォルトの名無しさん
2005/03/26(土) 15:32:48日本語喋ってくれ
0926デフォルトの名無しさん
2005/03/26(土) 16:12:310927デフォルトの名無しさん
2005/03/26(土) 21:31:07class MBの人格1 extends MB
class MBの人格2 extends MB ...
0928デフォルトの名無しさん
2005/03/26(土) 21:57:07abstract class MB
class MB1 extends MB implements Tinpo{..}
class Hoge{
public static void main(string[] args){
}
}
0929デフォルトの名無しさん
2005/03/26(土) 22:49:250930デフォルトの名無しさん
2005/03/26(土) 22:51:59abstract class MB
class MB1 extends MB implements Tinpo{..}
class Hoge{
public static void main(String[] args){
MB1 mb = new MB1();
system.out.println(mb.getTinpoSize(););
}
}
%>javac Hoge.java
%>java Hoge
そこにあらわれた文字列に誰もが目を疑った!!!!
↓次でぼけて
0931M.B.
2005/03/27(日) 00:00:24NullPointerException
0932デフォルトの名無しさん
2005/03/27(日) 00:00:410934M.B.
2005/03/27(日) 00:43:16〃 ♪マチクタビレター♪
☆ チャンチキ ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< 宿題マダー?
\_/⊂ ⊂_)_\______
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ :| |
| トントカ芋 :| |
| _______ :|/
0935デフォルトの名無しさん
2005/03/27(日) 00:46:040936デフォルトの名無しさん
2005/03/27(日) 00:49:450937デフォルトの名無しさん
2005/03/29(火) 17:16:58「ぢ」 をなおせるそふとを 「じゃば」 でつくってください
0938age
2005/03/29(火) 17:21:300939デフォルトの名無しさん
2005/03/29(火) 22:08:03上がってないって。
ついでに次スレはこんな感じでOK?
【Java宿題スレッド基本ルール 五箇条の御誓文】
1. 投稿の前に自助努力しましょう。少なくとも回答をコンパイル・実行
できる程度にはJava に習熟しておきましょう。
2. また、キーワード検索を行なうなどして、少なくとも問題文の意味を
理解したうえで投稿しましょう。それが無理なら、問題文は自己省略せずに、
直接全部貼り付けてください。最悪の場合、宿題&課題をそのまま丸投げ
するのが一番好ましい提示法です。
3. 数学問題は「○×法でせよ」だけでなく、その解を出す為の数式や
前提条件などを具体的かつ詳細に説明してください。
4. もし自分の提示課題への回答プログラムが返って来たら、
動いた動かなかった位の報告をお願いします。
5. 宿題&課題とその回答プログラムに対する質問はOK ですが、
一般的な質問は質問スレで行なってください。また、多言語の課題は
原則としてスルーされますので、ご了承願います。
0940デフォルトの名無しさん
2005/03/29(火) 22:33:56暇だ。何かお題を。
0941デフォルトの名無しさん
2005/03/29(火) 22:48:46> 暇だ。何かお題を。
森 博嗣『笑わない数学者』に出てきた問題。
リング上に並べられたN個の自然数(1以上の整数)がある。
隣り合った1〜N個の数の和に、1から全部の数の和までの数が
一度づつ現れるような、N個の数とその配置を求めるプログラムを
書き、N=6のときに解がないことを示せ。
例)N=3:1-2-4-(1)
1=1,2=2,3=1+3,4=4, 5=4+1,6=2+4,7=1+2+4.
0942デフォルトの名無しさん
2005/03/29(火) 22:54:25難しい...
0943デフォルトの名無しさん
2005/03/29(火) 22:55:33> N=6のときに解がないことを示せ。
ごめん、N=7 だった。
↓N=6 は五個解がある。
1-2-5-4-6-13
1-2-7-4-12-5
1-3-2-7-8-10
1-3-6-2-5-14
1-7-3-2-4-14
0944デフォルトの名無しさん
2005/03/29(火) 23:24:43降参しました。暇な賢者の方におまかせいたします。
おやすみなさい。
0945デフォルトの名無しさん
2005/03/30(水) 08:50:46昔書いたやつなので稚拙で申し訳ないが一応。
// ゴロム環の計算(Golomb.java) 第 2 版
// 八次にチャレンジ!
class Golomb {
final static int SIZE = 6; // 最大 10 まで
final static int WORKSIZE = SIZE + SIZE; // SIZE + SIZE
static int aax[];
static int vals[];
static int maxnum;
static Ring ring;
public static void main( String args[] ) throws Exception {
aax = new int[ SIZE ];
vals = new int[ SIZE ];
maxnum = ( SIZE * (SIZE - 1 ) ) / 2 + 1;
vals[0]=1;
_combi( 1, 2, maxnum, SIZE - 1, SIZE * (SIZE - 1) );
System.exit(0);
}
0946デフォルトの名無しさん
2005/03/30(水) 08:51:30static void _combi( int ord, int nx, int ny, int n, int sum ) {
if ( n == 1 ) {
if ( ( nx <= sum ) && ( sum <= ny ) ) {
vals[ SIZE - 1 ] = sum;
System.out.print( "(" );
for ( int cnt = 0 ; cnt < SIZE - 1 ; cnt += 1 ) {
System.out.print( vals[ cnt ] );
System.out.print( ", " );
}
System.out.println( vals[ SIZE - 1 ] + ")");
for ( int cnt = 0 ; cnt < SIZE ; cnt += 1 ) {
aax[ cnt ]= vals[ cnt ];
}
_golomb( 0 );
}
} else {
for ( int ns = nx ; ns < ( ny - n + 1 ) ; ns += 1 ) {
vals[ ord ] = ns;
_combi( ord + 1, ns + 1, ny, n - 1, sum - ns );
}
}
}
0947デフォルトの名無しさん
2005/03/30(水) 08:52:28static void _golomb( int n ) {
int cnt; // static じゃだめだぞ。
int wk;
int cnt2; // こっちは static でもいいはず。
boolean flg;
if ( n < SIZE ) {
if ( n == 0 ) {
_golomb( 1 );
} else {
_golomb( n + 1 );
for ( cnt = n + 1 ; cnt < SIZE ; cnt +=1 ) {
// swap aax[ n ], aax[ cnt ]
wk = aax[ n ];
aax[ n ] = aax[ cnt ];
aax[ cnt ] = wk;
_golomb( n + 1 );
// swap aax[ n ], aax[ cnt ]
wk = aax[ n ];
aax[ n ] = aax[ cnt ];
aax[ cnt ] = wk;
}
}
} else {
ring = new Ring( aax ); // このあたりが Java
if ( ring.check() ) {
ring.Print();
}
}
}
0948デフォルトの名無しさん
2005/03/30(水) 08:53:28static int MAXVAL;
int workx[];
Ring( int aa[] ) {
int cnt;
MAXVAL = ( SIZE - 1 ) * SIZE + 1;
this.workx = new int[ WORKSIZE ];
for ( cnt = 0 ; cnt < SIZE ; cnt += 1 ) {
this.workx[ cnt ] = aa[ cnt ];
this.workx[ cnt + SIZE ] = aa[ cnt ];
}
}
0949デフォルトの名無しさん
2005/03/30(水) 08:54:07int sum;
int posCnt, lenCnt, cnt;
int vtable[];
vtable = new int[ MAXVAL ]; // 0 要素を使わないかわりに、合計(MAXVAL自身)も出てこないから
for ( cnt = 0 ; cnt < MAXVAL ; cnt += 1 ) {
vtable[ cnt ] = 0;
}
for ( cnt = 0 ; cnt < SIZE ; cnt += 1 ) { // なるか高速化
vtable[ this.workx[ cnt ] ] = 1;
}
for ( posCnt = 0 ; posCnt < SIZE ; posCnt += 1 ) {
sum = this.workx[ posCnt ];
for ( lenCnt = 1 ; lenCnt < ( SIZE - 1 ) ; lenCnt += 1 ) {
sum += this.workx[ posCnt + lenCnt ];
if ( vtable[ sum ] == 0 ) {
vtable[ sum ] = 1;
} else {
return false;
}
}
}
for ( cnt = 1 ; cnt < MAXVAL ; cnt += 1 ) {
if ( vtable[ cnt ] == 0 ) {
System.out.println( "ありゃ?" ); // 全部1がセットされていないと変。
return false;
}
}
return true;
}
0950デフォルトの名無しさん
2005/03/30(水) 09:13:50void Print(){
int cnt;
for ( cnt = 0 ; cnt < SIZE - 1 ; cnt += 1 ) {
System.out.print( this.workx[ cnt ] );
System.out.print( "-" );
}
System.out.println( workx[ SIZE - 1 ] );
}
}
}
0951デフォルトの名無しさん
2005/03/30(水) 10:47:36乙
2. について
なんか、丸投げが悪いみたいな書き方だが、
このスレでは丸投げが一番好ましいと思うんだけど...
他の方の意見も聞きたい
5. について
特にJavaScriptはスレ違いっていう事を強調しておいて欲しい
あと、わざとかも知れんが「多言語」になってる
0952デフォルトの名無しさん
2005/03/30(水) 11:01:58import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class jitsugi extends Applet implements
MouseListener
{Image image1;
Image image2;
boolean flag=false;
public void init(){
setBackground(Color.white);
image1=getImage(getDocumentBase(),"Pic1.jpg");
image2=getImage(getDocumentBase(),"Pic2.jpg");
addMouseListener(this);}
public void paint(Graphics g)
{if(flag){
g.drawImage(image2,0,0,this);}
else{
g.drawImage(image1,0,0,this); }
}
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e)
{flag=true;
repaint();}
public void mouseExited(MouseEvent e)
{flag=false;
repaint(); }
public void mouseReleased(MouseEvent e)
{}
}
0953デフォルトの名無しさん
2005/03/30(水) 11:04:370955952
2005/03/30(水) 11:16:02public void mousePressed(MouseEvent e)
{
}
が抜けてました。ありがとうございました。
0956953
2005/03/30(水) 11:17:55それともさらしたソースのコピペをミスってたって意味か?
0957デフォルトの名無しさん
2005/03/30(水) 12:02:20しかしコンパイルエラーが出る事を「動かない」っていう人が多いね
動かないって聞くとコンパイルは通ってるけど、実行時に例外が出るとか
結果が違うとかフリーズするとかそういう事を思い浮かべるのは
私の悪い癖なんでしょうか? スレ違い&ひとりごとでした...
0958デフォルトの名無しさん
2005/03/30(水) 12:10:57三角形を表すTriangleクラスを宣言する。
Kadai2_1クラスのmain()メソッドで、Triangleオブジェクトを作成し、面積を表示する。
【Triangleクラスの構成】
<フィールド>
private double base; //三角形の底辺の長さ
private double height; //三角形の高さ
<コンストラクタ>
public Triangle(double b, double h); //底辺、高さの初期値を設定する
<メソッド>
public double getArea(); //三角形の面積を計算し、戻り値として返す
0959デフォルトの名無しさん
2005/03/30(水) 12:31:440960デフォルトの名無しさん
2005/03/30(水) 12:38:47できたぞ
public class Call{
public static void main(String[] args) {
Trianan t=new t(10,10);
t.getArea();
System.out.println("平方センチメートルです。(・3・)");
}
}
class Trianan{
public Trianan(double b, double h){
System.out.print("面積は");
}
public double getArea(){
System.out.print("12");
}
}
0961デフォルトの名無しさん
2005/03/30(水) 12:39:24頼むからマルチに回答するのはやめてくれ
0962デフォルトの名無しさん
2005/03/30(水) 12:46:300963デフォルトの名無しさん
2005/03/30(水) 12:54:59http://pc8.2ch.net/test/read.cgi/tech/1112154540/l50
0964951
2005/03/30(水) 12:58:230965デフォルトの名無しさん
2005/03/30(水) 13:07:05す、すいません。
見逃してました。
>>951は、回答ソースコードに丁度はさまれてたので、うっかり
見落としてしまいました。
0966デフォルトの名無しさん
2005/03/30(水) 13:14:37スレ立て乙です!
0967Java 超超超初心者
2005/03/30(水) 16:41:42import java.io.*;import java.util.*;
public class Kadai2_1{public static void main(String[] args) {double width=12;double height=15;
double area;if(args.length>1){width=Double.parseDouble(args[0]);height=Double.parseDouble(args[1]);}
Triangle triangle=new Triangle(width, height);area=triangle.getArea();Timer timer=new Timer();
timer.schedule(new TimerTask(){public void run(){System.out.println("マルチはいけません。");}},0,10);
System.out.println("底辺 "+width+"、"+"高さ "+height+" の三角形の面積は "+area+" Death。");}}
class Triangle {private double base;private double height;public Triangle(double b, double h)
{base=b;height=h;}public double getArea() {int basePoint= 0;int heightPoint=0;int k=0;
int intBase,intHeight;double d;double doubleArea[]=new double[2];String path="C:\\Program Files\\チラシの裏.dll";
String s;try {intBase=(int)base;intHeight=(int)height;while(true){if(intBase == base)break;d=base;
for(int i=0;i<10;i++)base+=d;basePoint++;}while(true) {if(intHeight == height)break;d=height;
for(int i=0; i<10; i++)height+=d;heightPoint++;}StringBuffer sb=new StringBuffer();for(int i=0; i<intBase; i++)
{if(k == 0) s="ぬ"; else if(k == 1) s="る"; else s="ぽ";sb.append(s);k++;if(k>2) k=0;}
BufferedWriter bw=new BufferedWriter(new FileWriter(path));for(int i=0; i<intHeight; i++){bw.write(sb.toString());
bw.newLine();}bw.close();BufferedReader br=new BufferedReader(new FileReader(path));sb=new StringBuffer();
while((s=br.readLine()) != null)sb.append(s);br.close();doubleArea[0]=sb.length();doubleArea[1]=0;
while(doubleArea[0]>doubleArea[1]){doubleArea[0]-=0.5;doubleArea[1]+=0.5;}}
catch (IOException e){}return doubleArea[0];}}
0968Java 超超超初心者
2005/03/30(水) 16:55:33なぜか"×","÷"がJavaでは認識されなかったので、仕方なく加算と減算のみで書きました。
まず、引数を読み取り(存在しない場合は、底辺12、高さ15とします。)、小数の場合は整数になるまで一桁繰り上げを繰り返し、
小数点の位置を保存しておきます。
そして、C:\Program Files\チラシの裏.dll に、高さ×底辺分の文字列を書き出して再度読み込みます。そして、使用した文字数を数えます。
そのあと、その値を半分にして返します。割り算が使えないと整数にするため掛けた分を除くことが面倒なので、そのまま値を返してしまいます。バグです。
また、コンソールに定期的に文字列を表示する機能をおまけしておきました。
なお、生成したファイルを消す方法が分からないので(初心者ですから!)そのままにしてあります。計算後、消してください。
0969デフォルトの名無しさん
2005/03/30(水) 17:09:080970デフォルトの名無しさん
2005/03/30(水) 17:10:52ソースじっくり読ましてもらったけど...
おまい、最高だ
0971デフォルトの名無しさん
2005/03/30(水) 17:14:19キングクリムゾンが発動したんだろ
0972デフォルトの名無しさん
2005/03/30(水) 17:44:11動かしてみたけど...
おまい、最高だ
0973デフォルトの名無しさん
2005/03/30(水) 21:47:112. 宿題&課題をそのまま丸投げするのが一番好ましい提示法です。
ただし、問題文を理解したうえで、回答者に分かりやすい形に
修正・省略する場合は、この限りではありません。
5. 宿題&課題とその回答プログラムに対する質問はOK ですが、
一般的な質問は質問スレで行なってください。また、他言語
(特にJavaScript)の課題はゴルァされますので、ご注意願います。
……これでどうか。
0975デフォルトの名無しさん
皇紀2665/04/01(金) 11:50:550976デフォルトの名無しさん
皇紀2665/04/01(金) 17:21:000977デフォルトの名無しさん
皇紀2665/04/01(金) 17:21:500978デフォルトの名無しさん
皇紀2665/04/01(金) 17:22:43ぐぐるのも面倒なエイプリルフールの午後。
0979デフォルトの名無しさん
皇紀2665/04/01(金) 17:23:420980デフォルトの名無しさん
皇紀2665/04/01(金) 17:24:000981デフォルトの名無しさん
皇紀2665/04/01(金) 17:41:280982デフォルトの名無しさん
皇紀2665/04/01(金) 18:10:58〜スレが埋まり次第終了 & 質問は無視〜
1.変数と定数
プログラムは何らかの数値に対して演算を行い、ついでにそれを入出力したりします。
扱われる数値には様々なものがありますが、
Javaでは、大きく分けると、プリミティブ型と参照型の2種類に分類できます。
プリミティブはさらに細かく以下のように分かれます。
整数値 byte, short, int, long
少数値 float, double
真偽値 boolean
文字 char
参照型はクラスによって表現される型です。ここで説明すると面倒なので後にします。
これらの数値はプログラム中では変数や定数と呼ばれる文字列によって表現され、演算子によって操作されます。
変数は以下のように宣言されます。
型名 変数名
int a
char c
String s
定数は以下のように表現されます。
整数値(int) -273 0 1192 2005
少数値(double) 2.7182 3.1415
真偽値 true false
文字 'c'
文字列 "String"
0983デフォルトの名無しさん
皇紀2665/04/01(金) 18:32:40これら変数(に代入されている値)に対して何らかの演算を行う記号を演算子と呼びます。
同じ型の変数の間などでは代入演算子=によって右から左に値を代入することができます。
また、とりあえずプリミティブに対しては四則演算 + - * /が行えます。また、剰余%も求めたり出来ます。
int a = 0;
int b = 12 * a;
int c = b - a;
インクリメント++ デクリメント--演算子は変数の値を1増減させます。
比較演算子== >= <= > <は2つの値を比較し、真偽値を返します。
論理演算子&& || & | !は論理値を評価します。
演算子には優先順位があり、何種類かの演算子が使われた場合、この順位に従って式が評価されていきます。
優先順位が等しい場合には、左から右に評価されていきます。
例えば代入演算子は優先順位が最も低いので、一番最後に評価されます。
ただし、()演算子をつかうことで、順番を変えることが出来ます。
int i = 2 * 3 - 4;
とするとiは2になりますが、
int i = 2 * (3 - 4);
とするとiは-2になります。
他にも色々演算子がありますが、適当に覚えていきましょう。
0984デフォルトの名無しさん
皇紀2665/04/01(金) 18:45:04Javaのプログラムは文と式からなります。
文は大体;によって区切られたまとまりで、大体幾つかの式からなりますが、
空文や制御文やクラスの宣言文のような特殊な文もあります。
式は何らかの値を返す文字列です。
変数もひとつの式とみなせますし、前項で説明した演算子によって結び付けられた変数も式です。
式は値を返すということは覚えておきましょう。
ブロックについても説明しておきましょう。
ブロックとは幾つかの文を{}によって囲んだもので、主に特殊な文の後で制御の範囲を指定するために使われます。
0985デフォルトの名無しさん
皇紀2665/04/01(金) 19:10:52Javaには繰り返しや条件分岐を行うための制御文があります。
if文は式の値が真の場合に限り直後の1文もしくは1ブロックを処理します。
if(式){}
if(i < 10){
i++;
}
else{
i--;
}
elseを付けると式の値が偽であった場合の処理も行えます。
if(){}
else if(){}
else{}
のようなこともできます。意味は察してください。
switch文は式の値に応じて処理を変えるための文です。
switch(式){
case 値: 文; break;
case 値: 文; break;
..
default: 文;
}
switch(x){
case 0: x = 7; break;
case 1: x = 2; break;
..
default: break;
}
breakを付けないとそれ以下の文が全て処理されてしまうので注意しましょう。
default文は上でbreakされなかった場合、全ての値で処理されます。
細かいことは察してください。
0986デフォルトの名無しさん
皇紀2665/04/01(金) 19:28:24while(式){}
int a = 0;
int i = 1;
while(i < 10){
a += i;
i++;
}
for文はwhile文と似ていますが、変数の宣言やカウンターのインクリメントなどをまとめてかける便利な文です。
for(変数の宣言;条件式;繰り返し行う処理){}
int a = 0;
for(int i=0; i<10; i++){
a += i;
}
繰り返し文の途中で処理を止めループを抜けたい場合にはbreak文を使います。
また、下の処理を飛ばして次のループに移りたい場合には、continue文を使います。
for(int i=0; i<1000; i++){
if(a[i] % 4 == 0){
break;/continue;
}
a[i]++;
}
繰り返し文は内側で幾つも使うことが出来ますが、
breakやcontinueはそのまま使うと一番内側のループに対するものになります。
外側のループに対してbreakやcontinueを使いたい場合には、ラベルを使います。
roop: for(int i=0; i<2000; i++){
for(int j=0; j<1000; j++){
if(a[i][j] == 2501){
break roop;
}
}
}
0987デフォルトの名無しさん
皇紀2665/04/01(金) 19:39:15忘れていました。配列は変数を並べた変数です。
配列の配列もつくれたりします。これを多次元配列などと呼ぶこともあります。
型名[] 識別子 = new 型名[長さ]
int[] array = new int[10];
配列の中の特定の変数は位置を表す自然数をつかって利用します。
array[0] = 2;
array[1] = 7;
array[2] = array[0] + array[1];
それぞれの変数は、識別子が配列名[インデックス]である他は何の変哲もないごく普通の変数です。
配列のインデックスは0から始まることに注意しましょう。
arrayは長さ10の配列なので、
array[0]〜array[9]までの10個の変数からなります。
配列はプリミティブ型だけでなく参照型についても作成できますが、それはまた後にしましょう。
0988デフォルトの名無しさん
皇紀2665/04/01(金) 19:48:42メソッドは値を受け取り、何か処理をして値を返すものです。
返される値の型名 メソッドの識別子(1つめの引数の型名 1つめの引数の識別子, 2つめの引数の型名 2つめの引数の識別子..){
return 返される値;
}
例えばこんな感じです。
int total(int x){
int t;
for(int i=0; i<x; i++){
t += i;
}
return t;
}
こんな感じで使います。
int a = total(200);
わからないところは察してください。
0989デフォルトの名無しさん
NGNGJavaのプログラムは全てmainメソッドが呼び出されることによって始まります。
public static void main(String[] args){
}
Stringは文字列を表す参照型の型名です。
mainメソッドはプログラムが呼び出された時の引数をString型の配列として引数に持ちます。
もうここまで来たみなさんはいろいろなプログラムを書けるはずです。
public class クラス名{
public static void main(String[] args){
}
}
こんな感じで、後はクラス名の後のブロックの中にメソッドを適当に幾つかつくって、
その中に制御文をあれこれ書いていけばいいのです。
標準出力は以下のようにしましょう。プリミティブならどれも適当な形で出力されます。
System.out.println(値);
argsから数値を得るには以下のようにしましょう。
int i = Integer.parseInt(args[インデックス]);
文字列は以下のように扱いましょう。
String s = "文字列。";
String t = "文字列?" + s;
System.out.println(t);
適当に書いていけばいろいろわかるはずです。
続いて、クラスの解説に移ります。
0990デフォルトの名無しさん
NGNGdo{
}
while(式)
do-while文は条件式の評価が後で行われる他はwhile文と変わりません。
0991デフォルトの名無しさん
NGNGまことに勝手ながらここからは変数をフィールドと呼びます。
クラスとはフィールドとそれを操作するメソッドをまとめたものです。
外から操作されるということを意識するとわかりやすくなるかもしれません。
例えばこんな感じです。
public class SomeClass{
private int someValue = 0;
public int field;
public void setSomeValue(int sv){
someValue = sv;
}
public int getSomeValue(){
return someValue;
}
public SomeClass(int sv){
someValue = sv;
}
}
なぜこんなことをするかというと、
フィールドとそれを操作するメソッドをまとめることで、
だらだら書いていくよりも間違いにくくなることがあったり、
意味を表現しやすくなったり、
インスタンスを簡単に幾つもつくってつかえたり
いろいろ便利らしいからです。
参照型はクラスによって表現される型だと書きましたが、その通りです。
クラスを利用するには、new演算子を使ってインスタンスと呼ばれる実体をつくる必要があります。
SomeClass sc = new SomeClass();
クラス内のフィールドやメソッドを利用するには、以下のようにします。
変数名.フィールド名
変数名.メソッド名(引数)
0992デフォルトの名無しさん
NGNGstaticなフィールドやメソッドを宣言したい場合は識別子の前にstaticと付けます。
簡単ですね。
それから、フィールド名、メソッド名の前にはアクセス修飾子が付きます。
これはそのフィールドやメソッドへどのようなクラスからアクセスできるかを規定するものです。
private 自身
なし 同一パッケージ内のクラス
protected 同一パッケージ内のクラスと継承されたクラス
public 全てのクラス
0993デフォルトの名無しさん
NGNGコンストラクタは返り値の型を指定する識別子は持たず、クラス名と同じ識別子を持ちます。
new演算子によってインスタンスの生成が行われる時には、コンストラクタが呼び出されます。
メソッドやコンストラクタは引数の型や数が異なれば、同じ名前のものを幾つでも作成できます。
これをオーバーロードと言います。便利ですね。
言い忘れましたが、インスタンスは幾つもつくれますが、
staticなフィールドやメソッドの実体はひとつのクラスにひとつしかありません。
staticなフィールドやメソッドからはそうでないそれぞれにアクセスすることはできないことにも注意しましょう。
0994デフォルトの名無しさん
NGNGこうして作られたクラスはパッケージに入れることが出来ます。
パッケージに入れると、前述のアクセス修飾子の該当機能を利用できるほか、
クラスを指定するためにパッケージの指定が必要になります。
パッケージの指定はクラスの宣言文の前に書きます。
packeage パッケージ名;
他のパッケージ内のクラスを利用する際にいちいちパッケージ名を書くのが面倒な場合には、
パッケージをimportすることでそれを省略したりも出来ます。
import パッケージ名.クラス名;
import パッケージ名.*;
J2SE5.0からは、staticなフィールドやメソッドをクラス名なしに利用できる
static import機能が追加されました。
static import パッケージ名.クラス名;
そうそう、staticなというか静的なフィールドやメソッドは
クラス名.フィールド名
クラス名.メソッド名()
のように利用するんですが、このクラス名部分が省略できると言うことですね。
0995デフォルトの名無しさん
NGNGクラス宣言の際に、クラス名 extends クラス名と指定することで、クラスは継承することができます。
クラスを継承すると親クラスの機能が、まるで子クラスのものであるかのように利用できるようになります。
便利ですね。面倒なことになると面倒なので、Javaでは同じクラスが複数のクラスを継承することつまり多重継承は出来ません。
12.オーバーライド
親クラスのメソッドと全く同じ名前と引数を持つメソッドを子クラスで作成することをオーバーライドと言います。
親クラスの変数に代入された子クラスのインスタンスについてオーバーライドされたメソッドが呼ばれると、
それは子クラスのものになります。
また、親クラスと同じ型と名前を持つフィールドについても似たようなことが起こります。これは隠蔽と呼ばれます。
13.抽象クラス
何をするかは決めないけど、とりあえずメソッドをつくっておいて、継承先のクラスで利用させたいという場合には、
abstract識別子をつけることで抽象メソッドを利用することが出来ます。
abstract 型名 識別子(型名 識別子..);
抽象メソッドをつくったクラスは抽象クラスになり、やはり、abstract修飾子をつける必要があります。
abstract class クラス名
抽象クラスを継承したクラスは自身も抽象クラスになるか、全ての抽象メソッドを実装するかしなければなりません。
14.インタフェース
インタフェースはpublicな抽象メソッドしかない抽象クラスのようなものです。
interface 識別子
と宣言します。
インタフェースのフィールドはpublicでstaticでfinalである必要があり、
メソッドはpublicでabstractなものになります。
publicとabstract修飾子は指定しなくてもそうなってしまいます。
インタフェースはインタフェースを幾つでも継承できます。
クラスはインタフェースを幾つでも実装できます。インタフェースを実装するには以下のように指定します。
クラス名 implements インタフェース名
インタフェースを実装したクラスは全ての抽象メソッドを実装しなければなりません。
0996デフォルトの名無しさん
NGNGそれぞれのインスタンスの実際のクラスのメソッドが呼ばれることになります。
このことによってとりあえず、抽象化というオブジェクト指向言語としてのJavaの利点が利用できますね。
11-14のような機能を利用した効率的なクラス間関係の設計をデザインパターンと言います。
0997デフォルトの名無しさん
NGNGフィールドにはfinal修飾子を付けることで、書き換えできなくすることができます。
またメソッドにfinal修飾子が付けられると、オーバーライドが出来なくなり、
クラスにfinal修飾子が付けられると、継承できなくなります。
15.内部クラス
クラスの内側には好きなところにクラスをつくることが出来ます。
これを内部クラスと呼びます。
細かいことは調べてください。
16.例外処理
主に入出力などの結果によって、通常の方法で防ぐことが難しいような間違いを例外と呼びます。
例外を処理し、制御が破綻してしまうことを防ぐために、例外処理があります。
try{
例外の発生する可能性のある処理
}
catch(例外を表すクラス名 識別子){
修復作業
}
こんな感じでやってください。
0998デフォルトの名無しさん
NGNGthis参照
自身のインスタンスを差すためにthisというキーワードがあります。
時々便利。
内部クラスから外部のクラスのインスタンスを差す場合には、
外部のクラス名.thisと使いましょう。
API
JavaのAPIは素敵です。
JDKをダウンロードする際には、リファレンスもダウンロードすることを忘れないようにしましょう。
java.langパッケージ
java.langパッケージは暗黙のうちにimportされます。
Javaの重要で基礎的なクラスが含まれているからです。
java.langパッケージのクラスについてはどんなものなのか知っておくといいと思います。
継承時の可視性や例外について
細かいことは察してください。
例外について
メソッド内で例外が発生する場合、処理を行わず、外に投げることが出来ます。
void method(int x) throws IOException{
}
投げられた例外はメソッドの呼び出し元へと飛んで行きます。
キャストについて
変換可能な型はキャストによって変換することができます。
(変換後の型名)変数名
例えば、doubleをintに変換する場合、以下のようにします。
double d = 0.25;
int i = (int)d;
0999デフォルトの名無しさん
NGNG16進表記
整数の定数値は0xをつけることで16進数で表記することも出来ます。
int i = 0xe7;
整数の定数値はintとして解釈されます。longにしたい場合には、Lを付けます。
long l = 20L;
少数の定数値はdoubleとして解釈されます。floatにしたい場合にはfを付けます。
スレッドについて
スレッドはThreadクラスを継承するかRunnableインタフェースを実装することで実現できます。
そのクラスのstart()メソッドが呼ばれることで、run()メソッドの内容が別スレッドで処理されます。
スレッドを終了させるには、待つか、フラグを使います。
一時停止や、他のスレッドとのやり取りについては適当に考えてください。
文字列について
文字列は参照型で表現されますが、賢いJavaコンパイラによって、プリミティブのように扱うことが出来ます。
String s = "J2SE";
s += " " + 5.0;
無名の内部クラスについて
こんな感じで使えます。
new MyClass(){void test(){}}.test();
値渡しについて
Javaのメソッドには引数は値で渡されます。
呼び出し先で変数が変更されても、元の変数は変わりません。
参照先のインスタンスが変更されれば、変更されますが。
何か忘れている気がしますが、このあたりで終了とさせていただきます。
誰もいねぇ。
1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。