★★ Java の宿題ここで答えます Part 53 ★★
■ このスレッドは過去ログ倉庫に格納されています
0001ザイン帝國軍帥・伯魔壬旭(小島露観)
2005/08/10(水) 11:04:35【Java宿題スレッド基本ルール・五箇条の御誓文】
1:問題文は自己省略せずに、直接全部貼り付けてください。
2:課題の「丸投げ」が最も好ましい提示法です。なるべく丸投げしてください。
3:数学問題は「○×法でせよ」だけでなく、その数式、前提条件も説明してください。
4:課題&宿題関連の質問はOKですが、それ以外の一般的な質問は禁止です。
5:もし回答プログラムがアップされたら、その返答と動作報告をお願いします。
【課題提示用テンプレ】
【 課題 】与えられた課題文をそのまま書きます 《必須》
【 用語 】数学用語、専門用語の意味、説明を書きます 《あれば必須》
【 期限 】提出期限、又は解答希望日を書きます
【 Ver 】希望するJavaバージョンがあれば書きます(1.5 とか 1.4以前とか)
【 補足 】課題について自分なりに補足する事、何か思う事があれば書きます。
丸投げでない場合は、途中までのソースとその経過報告、
質問点、疑問点を書きます(なるべく丸投げにしてください)
【回答プログラムの掲載場所】
Java質問スレWiki http://www.wikiroom.com/java/
ソースポストネット http://sourcepost.sytes.net/
0232デフォルトの名無しさん
2005/10/02(日) 11:18:09「英語の文を解析し、その文に含まれる単語の長さと平均を求めるプログラムを作成せよ。」
1、概要
�@適当な文字列変数に英語の文を代入する。
例:String sentence = new Stirng("This is a pen.”)
�Aプログラムを実行すると、その文における各単語の長さと平均を表示する。
2、プログラムの条件
英語の文章は、「.」 「!」 「?」で終わっているものとする。また、単語の区切りは
1文字分の空白に限定してよい。
3、プログラムの動作例
次の1文を入力する:Do you love me? その出力結果は次のとおり。
単語数 :4
平均語長:2.75
語長 単語数
1 0
2 2
3 1
4 1
5 0
【 期限 】10月3日午前0時
【 Ver 】1.5
【 補足 】英文はキーボード入力です。
丸投げですがよろしくお願いします。
0233デフォルトの名無しさん
2005/10/02(日) 14:37:33public class Q232 {
private static final String sentence = "Do you love me?";
public static void main(String[] args) {
if (!sentence.matches(".*[\\.\\?!]")) {
System.err.println("英語の文章は、「.」 「!」 「?」で終わっているものとする");
System.exit(0);
}
String[] list = sentence.split("[\\.\\?!]")[0].split(" ");
int max = 0, totalLength = 0;
for (String str : list)
if (str.length() > max) max = str.length();
int[] wordLengthList = new int[max];
for (String str : list) {
totalLength += str.length();
wordLengthList[str.length() - 1]++;
}
System.out.printf("単語数: %d\n平均語長: %.2f\n語長\t単語数\n", list.length, (double) totalLength / list.length);
for (int i = 0; i < wordLengthList.length; i++)
System.out.printf("%d\t%d\n", i + 1, wordLengthList[i]);
}
}
実行結果
単語数: 4
平均語長: 2.75
語長単語数
10
22
31
41
0235デフォルトの名無しさん
2005/10/02(日) 14:39:43英文はキーボード入力なんじゃないの?
0236デフォルトの名無しさん
2005/10/02(日) 14:54:351、概要
(1)適当な文字列変数に英語の文を代入する。
例:String sentence = new Stirng("This is a pen.”)
(2)プログラムを実行すると、その文における各単語の長さと平均を表示する。
とあるんだけど…
とりあえずコンソールからの入力の場合
import java.io.*;
public class Q232 {
public static void main(String[] args) throws IOException {
String sentence = new BufferedReader(new InputStreamReader(System.in)).readLine();
if (!sentence.matches(".*[\\.\\?!]")) {
// 以下略
これは動作確認してませんが
0238232
2005/10/02(日) 18:03:36レスありがとうございます。
233,236の両方とも無事動きました。
ちょっと課題が分かりにくかったようですいません。
本当にありがとうございました。助かりました。
0239デフォルトの名無しさん
2005/10/05(水) 02:08:38【 用語 】なし
【 期限 】10月7日まで
【 Ver 】指定なし
【 補足 】サンプルプログラムですが、なにも改造しないままエラーが4つもでるという悲惨な状況です。
問題点というかなぜエラーがでるのかがわかりません。
コンパイルできるようにしたいです。
0240239
2005/10/05(水) 02:10:08package jspbean;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;
import java.util.Hashtable;
public class BBSModel {
private int mCurrentArticleIndex;
private Article mCurrentArticle;
private Vector mArticles;
DBSimpleInterface mDB;
public BBSModel() {
mDB = new DBSimpleInterface();
}
private void dbConnect() {
mDB.connect(
"org.gjt.mm.mysql.Driver",
"jdbc:mysql://localhost:3306/bbs?useUnicode=true&characterEncoding=Shift_JIS",
"root",
""
);
}
0241239
2005/10/05(水) 02:11:00if (setCurrentArticle(mCurrentArticleIndex)) {
mCurrentArticleIndex++;
return true;
}
return false;
}
public boolean setCurrentArticle(int index) {
if (mArticles == null || mArticles.size() <= index) {
return false;
}
Hashtable article = (Hashtable)mArticles.get(index);
int id = ((Integer)article.get("id")).intValue();
String title = (String)article.get("title");
String name = (String)article.get("name");
String mail = (String)article.get("mail");
String date = new SimpleDateFormat().format((Date)article.get("date"));
String body = (String)article.get("body");
mCurrentArticle = new Article(id, title, name, mail, date, body);
mCurrentArticleIndex = index;
return true;
}
}
よろしくお願いします。
0242デフォルトの名無しさん
2005/10/05(水) 02:33:20Interfaceでないなら、xxxxInterfaceなんて付けるな
もし、ほんとにInterfaceならnewできないぞ
DBSimpleInterface mDB;
public BBSModel() {
mDB = new DBSimpleInterface();
}
0243デフォルトの名無しさん
2005/10/07(金) 10:00:05インスタンスメソッドがprintName
クラスがSeminar
ゼミのメンバーを2人作る(名前を入れる・初期化する)
プリントアウトする
【 期限 】今日の午後2時まで
【 補足 】丸投げでお願いします あとゼミの宿題です
これが詳しく書ける限界ですみません
0244243
2005/10/07(金) 10:01:100245デフォルトの名無しさん
2005/10/07(金) 11:00:13適当だがこーいうことか?
// Student.java
public class Student
{
private String name ;
public Student( String name ) {
this.name = name ;
}
public void printName() {
System.out.println(name) ;
}
}
// Seminar.java
public Seminar
{
public static void main( String[] args ) {
Student member1 = new Student("名前1") ;
Student member2 = new Student("名前2") ;
member1.printName() ;
member2.printName() ;
}
}
0246243
2005/10/07(金) 12:45:35そうです、ありがとうございます!
あとコンパイルしようとしたらclass interfaceがありませんと言われたのですが・・・・・・
0247デフォルトの名無しさん
2005/10/08(土) 20:13:05public Seminar{
という行の public と Seminar の間に
「 class 」を入れる。
0248デフォルトの名無しさん
2005/10/09(日) 22:53:34ありがとうございます
0250デフォルトの名無しさん
2005/10/09(日) 23:13:060251デフォルトの名無しさん
2005/10/09(日) 23:33:590252たわし
2005/10/09(日) 23:39:53..,,,,.,.,,
ミ・д・ミ
"''''''"
0253デフォルトの名無しさん
2005/10/11(火) 02:30:08【 期限 】朝まで。
【 補足 】基本的にまだGUIとかSwingとかを理解できてません。
API見ながらやれと言われたのですが、APIを読んでも理解できるほどjavaの理解度がまだありません。
かなり初歩的なところでつまづいています。
持ってる本には参考にできる記述が無いので困ってます。
とりあえず見本みたいなのが欲しいです。お願いします。
0254デフォルトの名無しさん
2005/10/11(火) 04:09:55は以下の式で計算できる。
a=1/n*Σ[i=1,n]xi
s=√1/n*Σ[i=1,n](xi-a)^2
この時以下の問いに答えよ。
1.int型の配列を受け取りその平均をdouble型で返すメソッドaverageを作成せよ
2.int型の配列を受け取りその分散をdouble型で返すメソッドvarianceを作成せよ
3.上記二つのメソッドの動作を確認するmainメソッドを作成し実行せよ。
【 期限 】朝
【 補足 】どうにもメソッドの関係がわからなくて、配列を作って
どう利用すればいいのかとかがさっぱりです。
配列を受け取る時のpublic static double average()の()の中とか全くわからないので・・・
参考例をどうかお願いします。
0255デフォルトの名無しさん
2005/10/11(火) 05:51:01朝は時間ないんで適当だ、すまん。
import javax.swing.*;
public class Sample extends JTabbedPane{
private static final String[][] sampleStrings={
{"これらは","タブペイン","ボタングループ","チェックボックスの","サンプルです"},
{"この課題は","2ちゃんねる","プログラム板の","Javaの宿題個々で答えますスレに","丸投げされました"}};
public static void main(String[] args){
JFrame frame=new JFrame( "課題");
Sample sample=new Sample();
sample.addTab("タブ1",sample.getTabPanel(sampleStrings[0]));
sample.addTab("タブ2",sample.getTabPanel(sampleStrings[1]));
frame.getContentPane().add(sample);
frame.pack();
frame.setVisible(true);
}
private JPanel getTabPanel(String[] checkBoxText){
JPanel panel =new JPanel();
panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
ButtonGroup group =new ButtonGroup();
for(int roop=0;roop<checkBoxText.length;roop++){
JCheckBox checkBox=new JCheckBox(checkBoxText[roop]);
group.add(checkBox);
panel.add(checkBox);
}
return panel;
}
}
0257デフォルトの名無しさん
2005/10/11(火) 11:11:50public class Main{
public static void main(String[] args){
int[] input={0,1,2,3,4,5,6,7,8,9};
System.out.println("Ave = "+average(intput));
System.out.println("Var = "+variance(intput));
}
public static double average(int[] array){
double sum=0.0;
int n=array.size();
for(int i=0;i<n;i++)sum+=array[i];
return(sum/n);
}
public static double variance(int[] array){
double ave=average(array);
int n=array.size();
double sum=0.0;
for(int i=0;i<n;i++)sum+=(array[i]-ave)*(array[i]-ave);
return(sum/n);
}
}
0258デフォルトの名無しさん
2005/10/11(火) 15:27:50例)test.xmlを読み込んでtitleとnameタグの要素を表示。
<title>あい</title>
<neme>うえお</name>
標準出力)あい
うえお
のような感じに表示させる。
【 用語 】
【 期限 】10/12
【 Ver 】1.5以降
【 補足 】ゼミの課題です、よろしくお願いします
0259デフォルトの名無しさん
2005/10/11(火) 16:04:57Purchase Price: $ 34.80
Amount Tendered: $ 40.00
Your change is: $ 5.20
5 one-dollar bill(s)
0 quarter(s)
2 dime(s)
0 nickel(s)
0 penn(y/ies)
Thank you for your business. Come back soon.
【 用語 】one-dollar bill〜Pennyはアメリカで使われている通貨です。quarterは¢25、dimeは¢10、nickelは¢5、pennyは¢1です。
【 期限 】10/12
【 Ver 】1.5以降 コンパイラはBorland JBuilder 2005 Foundation ver11.0を使用。
【 補足 】Integerを使えと言われました。プログラムの内容としては、Amount Tendered - Purchase Price = Your change を出して、
そのchange(お釣り)を、下のそれぞれの小銭に分担するというプログラムです。
この場合は、$5.20のお釣りなので、5枚one-dollor billがあり、2枚dime(¢10)があるという事です。
なので、$3.36の場合は3枚one-dollor bill、1枚quarter、2枚dime、1枚pennyという風に出力されます。
これらの出力には、$5.20の場合、520と認識させて520/100で5枚のone-dollor bill、520%100で20なので、
20/10で2枚のdimeという事になります。
よろしくお願いします。
0260259
2005/10/11(火) 16:54:49「$5.20のお釣りなので、5枚one-dollor billがあり、2枚dime(¢10)」といった分担が出来ません。
書いたソースを貼り付けておきます。
package dollars;
//Development Exercises 24.
import javax.swing.*;
import java.util.*;
import java.text.*;
public class changedollors {
public static void main(String[] args) {
double yourMoney, yourBought, yourChange;
double dollar, dollar2, dollar3, dollar4, dollar5, dollar6, dollar7, dollar8, dollar9;
String strmoney;
String strbought;
String strchange;
strmoney = JOptionPane.showInputDialog (null, "Enter your purchase Price" );
strbought = JOptionPane.showInputDialog (null, "Enter your Amount Tendered" );
yourMoney = Double.parseDouble(strmoney);
yourBought = Double.parseDouble(strbought);
0261259
2005/10/11(火) 16:55:25dollar = yourChange / 100;
dollar2 = yourChange % 100;
dollar3 = dollar2 / 25;
dollar4 = dollar2 % 25;
dollar5 = dollar3 / 10;
dollar6 = dollar3 % 10;
dollar7 = dollar5 / 5;
dollar8 = dollar5 % 5;
dollar9 = dollar5 / 1;
System.out.println("*********************************************");
System.out.println("Purchase Price: $" +(yourMoney));
System.out.println("Amount Tendered: $" +(yourBought));
System.out.println(" ");
System.out.println("Your change is: $" +(yourChange));
System.out.println(" ");
System.out.println(" " +(dollar)+ "one-dollar bill(s)");
System.out.println(" " +(dollar3)+ "quarter(s)");
System.out.println(" " +(dollar5)+ "dime(s)");
System.out.println(" " +(dollar7)+ "nickel(s)");
System.out.println(" " +(dollar9)+ "penn(y/ies)");
System.out.println(" ");
System.out.println("Thank you for your business. Come back soon.");
System.out.println("*********************************************");
}
}
0262259
2005/10/11(火) 16:56:06*********************************************
Purchase Price: $3480.0
Amount Tendered: $4000.0
Your change is: $520.0
5.2one-dollar bill(s)
0.8quarter(s)
0.08dime(s)
0.016nickel(s)
0.08penn(y/ies)
Thank you for your business. Come back soon.
*********************************************
0263デフォルトの名無しさん
2005/10/11(火) 18:25:38Integer の使いどころがないな・・・ int じゃなくて?
int yourMoney, yourBought;
//セント単位で入力
System.out.println("Purchase Price: $" +(yourMoney/100.0)); //とか
int[] units = {
100, 25, 10, 5, 1
};
String[] names = {
"one-dollar bill(s)", "quarter(s)", "dime(s)", "nickel(s)", "penn(y/ies)"
};
int rest = yourChange; //全部ペニーだとして・・・
int i = 0; //両替対象の紙幣〜硬貨の index
while (rest > 0) {
int (rest >= units[i]) { //両替対象以上の枚数があれば換算可能
int count = rest/units[i];//両替対象の枚数
rest = rest%units[i]; //両替しきれなかったペニーの枚数にする
System.out.println(count + "枚" + names[i]);
}
}
0枚の場合も表示したければ、for を使って if も while も使わない感じ・・
0264259
2005/10/12(水) 00:38:37ご指導ありがとうございます。
ただ、まだunitsや、for、if、while文は習っていないので、
それらを使わずに「520と認識させて520/100で5枚のone-dollor bill、520%100で20なので〜」
という風に出力しろとの事です。
0265デフォルトの名無しさん
2005/10/12(水) 02:40:57263 を配列とループを使わずに展開しただけこれなら問題ないのか?
int units0=100;
int units1=25;
int units2=10;
int units3=5;
int units4=1;
String names0="one-dollar bill(s)";
String names1="quarter(s)";
String names2="dime(s)";
String names3="nickel(s)";
String names4="penn(y/ies)";
int rest = yourChange;
count = rest/units0;
rest = rest%units0;
System.out.println(count + "枚" + names0);
count = rest/units1;
rest = rest%units1;
System.out.println(count + "枚" + names1);
....
同様にunits2 -> units4 , names2 -> names4 まで展開。
習っていないので使ってはいけません。って文部省教育の弊害だな。
ゼミなんだから、「自分はさらに調べた。こちらの方法のほうがより効率的に書け美しい」とか発展してもよさそうだが・・・。
0266デフォルトの名無しさん
2005/10/12(水) 03:18:03import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.io.*;
class Main{
public static void main(String args[])throws Exception{
SAXParserFactory.newInstance().newSAXParser().parse(new File("test.xml"),new MyParser());
}
}
class MyParser extends DefaultHandler {
private final static String[] target={"title","name"};
private boolean print;
MyParser(){super();}
public void startDocument() {}
public void startElement(String uri,String localName,String qName,Attributes attributes){
print=false;
for(int i=0;i<target.length;i++){
if(qName.compareToIgnoreCase(target[i]) == 0){
print=true;
break;
}
}
}
public void characters(char[] ch,int offset,int length) {if(print)System.out.println(new String(ch, offset, length));}
public void endElement(String uri,String localName,String qName){print=false;}
public void endDocument() {}
}
0267259
2005/10/12(水) 05:29:09申し訳ないのですが、ソース解答の丸投げをしてはいただけないでしょうか。
補足してもらったソースと自分で書いたソースを合わせたら、何度書き直してもエラーを吐いてきます。
0268259
2005/10/12(水) 06:38:13package dollars;
import javax.swing.*;
import java.util.*;
import java.text.*;
public class changedollars {
public static void main(String[] args) {
changedollars changedollars = new changedollars();
int yourMoney, yourBought, yourChange;
int onebill, onebill2, qua, qua2, dime, dime2, nic, nic2, penn;
String strmoney, strbought, strchange;
strmoney = JOptionPane.showInputDialog(null, "Enter the your purchase Price");
strbought = JOptionPane.showInputDialog(null, "Enter the your Amount Tendered");
yourMoney = Integer.parseInt(strmoney);
yourBought = Integer.parseInt(strbought);
yourChange = yourBought - yourMoney;
0269259
2005/10/12(水) 06:39:17onebill2 = yourChange % 100;
qua = onebill2 / 25;
qua2 = onebill2 % 25;
dime = qua2 / 10;
dime2 = qua2 % 10;
nic = dime2 / 5;
nic2 = dime2 % 5;
penn = nic2 / 1;
System.out.println("***********************************************");
System.out.println("Purchase Price: $" +(yourMoney));
System.out.println("Amount Tendered $" +(yourBought));
System.out.println(" ");
System.out.println("Your change is: $" +(yourChange));
System.out.println(" ");
System.out.println(" " +(onebill)+ " one-dollar bill(s)");
System.out.println(" " +(qua)+ " quarter(s)");
System.out.println(" " +(dime)+ " dime(s)");
System.out.println(" " +(nic)+ " nickel(s)");
System.out.println(" " +(penn)+ " penn(y/ies)");
System.out.println(" ");
System.out.println("Thank you for your business. Come back soon.");
System.out.println("***********************************************");
}
}
0270259
2005/10/12(水) 06:43:27***********************************************
Purchase Price: $3480
Amount Tendered $4000
Your change is: $520
5 one-dollar bill(s)
0 quarter(s)
2 dime(s)
0 nickel(s)
0 penn(y/ies)
Thank you for your business. Come back soon.
***********************************************
※Your change is: $520 から下は課題の出力結果と合っているのですが、
Purchase Price: $3480、Amount Tendered $4000、Your change is: $520を、
それぞれ、Purchase Price: $34.80、Amount Tendered $40.00、Your change is: $5.20
と表示されるようにしたいのですが、どのようにすれば出来るのでしょうか?
色々やってみたのですが、int yourMoney, yourBought, yourChange;を
double yourMoney, yourBought, yourChange; にすると、
onebill = yourChange / 100;
onebill2 = yourChange % 100;
のところがエラーを吐きます。
0271デフォルトの名無しさん
2005/10/12(水) 10:17:45出力するときに
System.out.println("Purchase Price: $" +(yourMoney/100.0));
とすればいい。計算中に double が現れると、結果も double になる。
(double の結果を int 変数に入れようとするからコンパイルエラーになっている)
ただこれだと x.x0 のようにはならず x.x と 0 がはぶかれるので、どうしても 0つけたければ、
(yourMoney/100) + "." + ((yourMoney%100)/10) + (yourMoney%10)
みたいなことをせにゃならん。つまり一桁づつ作るわけ。
(ほんとはもっと流儀に沿ったやり方があるが「習ってない」だろうから避けておこう)
0272デフォルトの名無しさん
2005/10/12(水) 10:18:24○ x.x となり 0 が
0273259
2005/10/12(水) 12:15:21ありがとうございました。
完璧に仕上がりました。
0274デフォルトの名無しさん
2005/10/12(水) 12:28:39できたようだからまぁいいか。
0275デフォルトの名無しさん
2005/10/12(水) 16:03:46どなたか教えてください。
0276デフォルトの名無しさん
2005/10/12(水) 16:07:21【課題提示用テンプレ】
【 課題 】与えられた課題文をそのまま書きます 《必須》
【 用語 】数学用語、専門用語の意味、説明を書きます 《あれば必須》
【 期限 】提出期限、又は解答希望日を書きます
【 Ver 】希望するJavaバージョンがあれば書きます(1.5 とか 1.4以前とか)
【 補足 】課題について自分なりに補足する事、何か思う事があれば書きます。
丸投げでない場合は、途中までのソースとその経過報告、
質問点、疑問点を書きます(なるべく丸投げにしてください)
0277275
2005/10/12(水) 16:20:534×4の升目状の絵合わせパズル。
正方形に近い画像データを4×4の16個のピースに分割し、
右下のピースを取り除いた残りのピースをランダムに升目に配置する。
ピースが割り当てられていない場所の上下左右のピースをクリックすると、
そのピースが空白の場所へ移動し、ピースの場所は空白になる。
ピースを並べ直して、元の画像が再現できればパズルが完成する。
【 期限 】10月18日
【 補足 】JAVA Swing Application
よろしくお願いします。
0278デフォルトの名無しさん
2005/10/12(水) 17:05:41画像形式はビットマップ?
0280デフォルトの名無しさん
2005/10/12(水) 18:41:48俺できたけど、277 が質問スレで言ってた状況にしては奇抜な発想のになっちゃった・・・
いいのかなこんなんで
その辺に関して親切なのを 278 が作ってるなら、よろしく
0281278
2005/10/12(水) 20:39:080282デフォルトの名無しさん
2005/10/12(水) 22:43:07import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.util.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.border.*;
public class P15 extends JPanel implements ActionListener {
public static void main(String[] args) throws Exception {
JFileChooser chooser = new JFileChooser();
if (chooser.showOpenDialog(JOptionPane.getRootFrame()) == JFileChooser.APPROVE_OPTION) {
BufferedImage img = ImageIO.read(chooser.getSelectedFile());
JOptionPane.showMessageDialog(JOptionPane.getRootFrame(), new P15(img), "", JOptionPane.PLAIN_MESSAGE);
}
System.exit(0);
}
0283デフォルトの名無しさん
2005/10/12(水) 22:43:45private JLabel empty;
public P15(BufferedImage img) {
setLayout(new GridLayout(4, 4)); //4x4で配置する
int w = img.getWidth()/4, h = img.getHeight()/4; //1ピースの縦横サイズ
Border border = new EmptyBorder(0, 0, 0, 0); //邪魔なエッジを外すための Border
buttons = new JButton[15]; //画像部分(右下は要らないので 4x4 - 1個)
for (int i=0; i<buttons.length; i++) { //左上から水平方向に作り、かつ配置する
int x = (i%4)*w, y = (i/4)*h; //部分画像を表示するボタンを作成(x, yは画像の座標値)
buttons[i] = new JButton(new ImageIcon(img.getSubimage(x, y, w, h)));
buttons[i].addActionListener(this);
buttons[i].setBorder(border);
add(buttons[i]);
}
empty = new JLabel(new ImageIcon(new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB))); //空白部分
empty.setBorder(border);
add(empty); //右下に空白を足す
//ランダムな入れ替え作業。※偶数回の入れ替えで無いとクリアできない
Random random = new Random();
int count = 0;
while (count < 100) {
int index1 = random.nextInt(15), index2 = random.nextInt(15);
if (index1 != index2) {
swap(index1, index2);
count++;
}
}
}
0284デフォルトの名無しさん
2005/10/12(水) 22:43:59//押されたボタンと空白部分の x, y を調べる
List components = Arrays.asList(getComponents()); //indexOf を使うと楽なので List を作る
int buttonIndex = components.indexOf(ev.getSource()); //ev 発生元=押されたボタン
int emptyIndex = components.indexOf(empty);
int ex = emptyIndex%4, ey = emptyIndex/4; //4x4マトリクスの座標値に変換
int bx = buttonIndex%4, by = buttonIndex/4;
if (Math.abs(ex - bx) + Math.abs(ey - by) == 1) { //縦横差分の絶対値が、片方1で片方0なら入れ替える
swap(buttonIndex, emptyIndex);
for (int i=0; i<buttons.length; i++) { //初回生成時の順にボタンが配置されてるかどうか調べる
if (buttons[i] != getComponent(i)) return; //1つでも異なればメソッド終了してしまう
}
JOptionPane.showMessageDialog(this, "クリア", "", JOptionPane.PLAIN_MESSAGE); //メッセージ表示
}
}
private void swap(int index1, int index2) {
Component[] components = getComponents(); //配列を作る
Component tmp = components[index1]; //入れ替え作業
components[index1] = components[index2];
components[index2] = tmp;
removeAll(); //一旦全部外す
for (int i=0; i<components.length; i++) { //入れ替え後の順番で再配置
add(components[i]);
}
revalidate(); //再配置の終了を宣言(=再描画の要求)
}
}
0285デフォルトの名無しさん
2005/10/12(水) 22:50:24という発想だろうと思うのね
ふつーのゲームならそうだし、AWT のみならそれしかないし
でもせっかく Swing と指定されてるし、
それだとボタンでも枠消せるからこんな感じで・・・多分このやり方の方がソースも短い
時間はあるみたいだから仕組み眺めといてね >>277
0286277
2005/10/13(木) 02:12:33解答ありがとうございます!ただ今バイトからあがりました。
こんなに早く、しかも丁寧に答えていただいて、本当に助かりました。
これからまたじっくり眺めて自分でも書いてみて仕組み等勉強したいと思います。
質問スレを読んでくださったのなら状況はご存知の通りですが、
しっかり勉強して、教授を見返してやろうと思います。
本当にありがとうございました。
0287デフォルトの名無しさん
2005/10/13(木) 18:54:020288デフォルトの名無しさん
2005/10/14(金) 01:17:39public static void main(String[] args) {
double iam = 167.2;
double youre;
System.out.println("I am "+iam+" cm tall.");
//I am really 165cm.But,health center said 167.
System.out.print("In inch,");
iam = iam * 2.54;
youre = iam % 1;
iam = iam - youre;
if (youre > 0.5){
iam = iam +1;
}
System.out.println("I am "+iam+" inch tall.");
System.out.print("But if I am "+iam+" inch tall,");
iam = iam * 0.393700787;
youre = iam % 1;
iam = iam - youre;
if (youre > 0.5){
iam = iam +1;
}
System.out.println("I am "+iam+" cm tall.");
youre = 167.2 - iam;
System.out.println("Then, I have become "+youre+"cm smaller.");
}
}
0289デフォルトの名無しさん
2005/10/14(金) 01:18:260.1999…と表示されてしまいます。どこが可笑しいのでしょうか。
0290デフォルトの名無しさん
2005/10/14(金) 01:28:13小数の値を
0.5,
0.25
0.125
...
という 0.5 の累乗の値を組み合た和で表している。
例:
0.2 = 0*1.0 + 0*0.5 + 0*0.25 + 1*0.125 + 1*0.0625 + 0*0.3125 ...
そのため、
0.2 を表そうとして、 0.19999999... のようになる。
適当にぐぐった
ttp://www.stellar.ac/~komai/unix/c/float/
0291デフォルトの名無しさん
2005/10/14(金) 01:49:140292デフォルトの名無しさん
2005/10/14(金) 02:35:13class tall {
public static void main(String[] args) {
BigDecimal iam = new BigDecimal("167.2");
BigDecimal youre;
System.out.println("I am " + iam + " cm tall.");
//I am really 165cm.But,health center said 167.
System.out.print("In inch,");
iam = iam.multiply(new BigDecimal("2.54"));
youre = iam.subtract(iam.setScale(0, BigDecimal.ROUND_DOWN));
iam = iam.subtract(youre);
if (youre.compareTo(new BigDecimal("0.5")) > 0) {
iam = iam.add(new BigDecimal(1));
}
System.out.println("I am " + iam + " inch tall.");
System.out.print("But if I am " + iam + " inch tall,");
iam = iam.multiply(new BigDecimal("0.393700787"));
youre = iam.subtract(iam.setScale(0, BigDecimal.ROUND_DOWN));
iam = iam.subtract(youre);
if (youre.compareTo(new BigDecimal("0.5")) > 0) {
iam = iam.add(new BigDecimal(1));
}
System.out.println("I am " + iam + " cm tall.");
youre = new BigDecimal("167.2").subtract(iam);
System.out.println("Then, I have become " + youre + "cm smaller.");
}
}
有理数で話をするかぎりは BigDecimal 使えばいい。
0293デフォルトの名無しさん
2005/10/14(金) 02:35:38何かして欲しいなら、>>1 に従って答えないと分からないよ。
0294デフォルトの名無しさん
2005/10/14(金) 02:38:48>293 いや、0.2が0.199となるのは何故か、という質問でした。
ソース自体は解決しました。
0295デフォルトの名無しさん
2005/10/17(月) 05:01:25四角の中に文字列を表示させたいのですが、ちょうど真ん中に来るようにするにはどうすればいいでしょうか?
四角の中ちょうどいっぱいの大きさに表示させるのではなく、四角よりもだいぶん小さな文字をちょうど中央に書くには。
お願いします。
0296デフォルトの名無しさん
2005/10/17(月) 05:29:240297295
2005/10/17(月) 05:45:420298デフォルトの名無しさん
2005/10/17(月) 07:21:24ttp://wisdom.sakura.ne.jp/system/java/awt/Gjava7.html
0299デフォルトの名無しさん
2005/10/17(月) 13:25:26String txt; //テキスト (drawString の引数)
FontMetrics fm = g.getFontMetrics();
int tw = fm.stringWidth(txt);
int th = fm.getHeight();
int ascent = fm.getAscent();
//座標系原点から矩形左上までのベクタ
Point vr = new Point(rx, ry);
//矩形左上から矩形中心までのベクタ
Point vc = new Point(rw/2, rh/2);
//座標系原点から矩形中心までのベクタ Vo = Vr + Vc
Point vo = new Point(vr.x + vc.x, vr.y + vc.y);
//テキスト左上からテキスト中央までのベクタ
Point vt = new Point(tw/2, th/2);
//テキスト左上からテキストベースライン左端までのベクタ
Point va = new Point(0, ascent);
//テキスト中央からテキストベースライン左端までのベクタ Vx = -Vt + Va
Point vx = new Point(-vt.x + va.x, -vt.y + va.y);
//座標系原点から、テキストを描画すべき位置までのベクタ Vz = Vo + Vx
Point vz = new Point(vo.x + vx.x, vo.y + vx.y);
//描画
g.drawRect(rx, ry, rw, rh);
g.drawString(txt, vz.x, vz.y);
冗長に書くとこうなる。どう改変するかは今のソースがどーなってるか次第
0300デフォルトの名無しさん
2005/10/17(月) 16:08:24右のカメラで撮った画像のどの点に対応するかを求め,対応する点の組を出力せよ。
また得られた対応する点をもとに左のカメラの画像の各点の3次元位置を,三角測量の
原理により計算するプログラムを作成せよ。得られた3次元空間中の点の集合の様子を
描画するプログラムを作成せよ.
【 用語 】SSDA法についての説明です。以下の数式になります。
S(i,j)=Σ[u=1,m]Σ[v=1,l]|f(u,v)-t(u,v)|
S(i,j):画素位置(i,j)における残差
f(u,v):基準画像のテンプレート位置
t(u,v):探索画像のテンプレート位置
l×m:テンプレートサイズ
【 期限 】10月21日 PM13:00まで
【 補足 】まる投げですがよろしくおねがいします。
0301デフォルトの名無しさん
2005/10/17(月) 18:51:27基準画像、探査画像、テンプレートがそれぞれ何を指しどんな関係なのか、
今ひとつ分からず
0302デフォルトの名無しさん
2005/10/17(月) 21:14:34説明不足ですみません。
基準画像は左画像,探索画像は右画像,テンプレートはl×m画素の小領域のことです。
(i,j)はテンプレートの中心座標です。
左画像の点(x,y)を中心とするl×m画素の小領域をテンプレートとみなして
右画像上で一番一致度の高い位置を求めて,その位置でのテンプレートの
中心の点(x,y)を対応点とするということだそうです。
左画像のテンプレートと右画像のテンプレートの画素ごとの階調値の差分の
総和が最も小さくなる位置を対応点とするそうです。
どなたかよろしくお願いします。
0303デフォルトの名無しさん
2005/10/17(月) 22:29:46数を用いて文字を表現する方法である。
さて,この逆である,文字からUNIコードを得るにはどうしたらよいか?
例えば,'峯' という文字のUNIコードは幾らになるのだろうか,
文字からUNIコードを得る方法を考えよ。
スレ違いかもしれませんがJavaの講義で出された課題なのでここが正しいかと思いました
Javaの初歩的な知識で可能だとかなんとか言っていたので。
しかしさっぱりわかりません
よろしくお願いします
0304デフォルトの名無しさん
2005/10/17(月) 23:18:50int code = (int)'峯';
System.out.println(Integer.toString(code, 16));
0305デフォルトの名無しさん
2005/10/17(月) 23:34:03ありがとうございました
0306デフォルトの名無しさん
2005/10/17(月) 23:38:36private static int[] setGray(BufferedImage img) {
int[] array = img.getRGB(0, 0, img.getWidth(), img.getHeight(), null, 0, img.getWidth());
for (int i=0; i<array.length; i++) {
int rgb = array[i];
int r = (rgb >> 16) & 0xff;
int g = (rgb >> 8 ) & 0xff;
int b = (rgb ) & 0xff;
array[i] = (int)( 0.298912f * r + 0.586611f * g + 0.114478f * b );
}
return array;
}
private int[] leftPixels, rightPixels;
private int l, m, leftWidth, leftHeight, rightWidth, rightHeight;
private Point[] points;
public Q300(BufferedImage left, BufferedImage right, int l, int m) {
this.leftWidth = left.getWidth();
this.leftHeight = left.getHeight();
this.rightWidth = right.getWidth();
this.rightHeight = right.getHeight();
this.leftPixels = setGray(left);
this.rightPixels = setGray(right);
this.l = l;
this.m = m;
}
0307デフォルトの名無しさん
2005/10/17(月) 23:38:45points = new Point[leftWidth*leftHeight];
int index = 0;
for (int j=0; j<leftHeight; j++) {
System.out.println(j);
for (int i=0; i<leftWidth; i++) {
points[index] = calc(i, j);
index++;
}
}
//不要になったものは消す
leftPixels = null;
rightPixels = null;
}
public Point getPoint(int i, int j) {
return points[j*leftWidth + i];
}
0308デフォルトの名無しさん
2005/10/17(月) 23:39:15int min = Integer.MAX_VALUE;
Point p = null;
for (int y=0; y<rightHeight; y++) {
for (int x=0; x<rightWidth; x++) {
int s = compare(i, j, x, y, min);
if (s < min) {
min = s;
p = new Point(x, y);
}
}
}
return p;
}
private int compare(int i, int j, int x, int y, int min) {
int sx = Math.max(Math.max(-l/2, -i), -x);
int sy = Math.max(Math.max(-l/2, -j), -y);
int ex = Math.min(Math.min(l/2, leftWidth - i - 1), rightWidth - x - 1);
int ey = Math.min(Math.min(m/2, leftHeight - j - 1), rightHeight - y - 1);
int s = 0;
int loff = (sy + j)*leftWidth, roff = (sy + y)*rightWidth;
for (int ty=sy; ty<=ey; ty++) {
for (int tx=sx; tx<=ex; tx++) {
s += Math.abs(leftPixels[loff + tx + i] - rightPixels[roff + tx + x]);
if (min <= s) return Integer.MAX_VALUE;
}
loff += leftWidth; roff += rightWidth;
}
return s;
}
0309デフォルトの名無しさん
2005/10/17(月) 23:40:45BufferedImage left = ImageIO.read(どっかから読んで);
BufferedImage right = ImageIO.read(どっかから読んで);
Q300 q300 = new Q300(left, right, L, M); //L, M なんとかして決めて
q300.ssda();
JPanel pane = new JPanel(new GridLayout(2, 2));
pane.add(new JLabel("左画像", new ImageIcon(left), JLabel.LEFT));
pane.add(new JLabel("右画像", new ImageIcon(right), JLabel.LEFT));
pane.add(new JLabel("抽出", new ImageIcon(createImage(q300, left, right)), JLabel.LEFT));
JFrame f = new JFrame();
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane().add(pane, BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
private static BufferedImage createImage(Q300 q300, BufferedImage left, BufferedImage right) {
BufferedImage img = new BufferedImage(right.getWidth(), right.getHeight(), BufferedImage.TYPE_INT_RGB);
for (int j=0; j<left.getHeight(); j++) {
for (int i=0; i<left.getWidth(); i++) {
Point p = q300.getPoint(i, j);
int c = left.getRGB(i, j);
img.setRGB(p.x, p.y, c);
}
}
return img;
}
0310デフォルトの名無しさん
2005/10/17(月) 23:46:13import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
public class Q300 {
}
で包んで。
どういう画像が対象になってるか分からないけど、
ImageIO.read(new URL("http://〜 ..."));で
ttp://www.ne.jp/asahi/okuyuki/stereo/0stp.htm この辺からとればいいんじゃない?
でも LxM は相当とらないと、あるいはのっぺりした画像だと、
マッチングに失敗しまくるっぽいね。しかもでかい画像だと時間かかるよなぁ。
三角測量ってのはカメラの位置や被写体との距離が関係するのかな?
も少し数式やらなにやら必要じゃないのかな・・・
3次元はどこまでやればいいのか。3面図でいいのか、それともマウスでぐりぐり?うぎゃー
とりあえず誰かにバトンタッチ。高速化の余地もあろうて。
0311デフォルトの名無しさん
2005/10/18(火) 05:50:41public void paint(Graphics g) {
g.drawOval(50,50,100,75);
g.drawRect(100,100,100,75);
}
これを一気に描けるようメソッド化したい場合はどうすればいんでしょうか?
例えば始点と終点の引数を入れればdrawLineを組み合わせて矢印を描けるメソッドとか。
その場合public void paint(int x1,int y1,int x2,int y2) と始点終点を引数に入れたら
Graphics gはどこに書くんでしょうか?
0312デフォルトの名無しさん
2005/10/18(火) 11:35:04*
* @param letterString 調べる文字列
* @return letterStringがa〜zのみで構成されている場合、trueを返す。<br>
* letterStringにa〜z以外の文字が含まれている場合、falseを返す。
*/
public static boolean isSmallLetterString(String letterString) {
// TODO: ここに処理を実装する。
return false;
}
0313デフォルトの名無しさん
2005/10/18(火) 11:39:33スレ違い。
つ http://pc8.2ch.net/test/read.cgi/tech/1129019555/l50
ちなみに、結局は自分で書くしかない。g も与えるしかない。
public void paint(Graphics g) {
paint(g, x1, y1, x2, y2);
}
矢印程度だったら Shape を使うというやり方もある。
GeneralPath path = new GeneralPath(); //Shape の一つ。Rectangle も Shape。
path.moveTo(0, 0); path.lineTo(0, 10);
path.moveTo(0, 0); path.lineTo(-5, 5);
path.moveTo(0, 0); path.lineTo(5, 5);
//以上、インスタンス変数などで持っておく。
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
//古いバージョンとの互換性のため、実体は Graphics2D だが Graphics な変数を会して渡される。
//ので、キャストして 2D な変数に入れ直す
g2.draw(path); //これだけで書ける。
ただし、頂点位置を変えたり回転したりとややこしい。
少し試してから、自分の要望をもう少し具体的に沿えて、改めて質問スレできくべし。
0314デフォルトの名無しさん
2005/10/18(火) 13:05:57返信ありがとうごさいます。
本当に助かります。
手元の画像を読み込みたいのですが,エラーがでてうまくいきません。
手元の画像を読み込む方法もお願いできないでしょうか?
またまた説明不足ですみません。
以下の数式で3次元座標が求まるそうです。
X=d*xL/xL-xR,Y=d*yL/xL-xR,Z=d*f/xL-xR
xLとxRは対応する点の組です。
dはカメラ間距離で60mm,fは焦点距離で5.5mmの設定になっています。
3次元はxyz座標を用いて立体的に表示させることはできないでしょうか?
どなたかどうか宜しくお願いします。
0315デフォルトの名無しさん
2005/10/18(火) 16:05:52こんな10進数文字列からカンマを取ってlong型で返したいんだけど、どうしたらできますか?
0316デフォルトの名無しさん
2005/10/18(火) 16:16:18【 課題 】DNA 配列を入力し、それをRDNAに変換し、またTRNAに変換し、たんぱく質結合を出力する。
【 用語 】DNA配列はC,G,T,Aのいずれかで構成される。RDNAはDNA配列を逆に並び替えた配列。
TRNAはAをU、TをA、GをC、CをGに変更する。
たんぱく質結合はTRNAを三個づつに区切りその組み合わせに対応するたんぱく質の結合。
【 期限 】今日中
【 補足 】最後のTRNAを3個づつに区切り、対応するたんぱく質結合を出力するのができません。
0317デフォルトの名無しさん
2005/10/18(火) 16:17:59String str = "123,456,789";
long l = Long.parseLong(str.replaceAll(",", ""));
0318316
2005/10/18(火) 16:31:29DNA :TATACGAGCGC
RDNA:CGCGAGCATAT
TRNA:GCGCUCGUAU
たんぱく質:AlaLeuVal
0319デフォルトの名無しさん
2005/10/18(火) 16:32:59サンクスコです。
こんなに簡単だったのか orz
0320デフォルトの名無しさん
2005/10/18(火) 16:51:46生物弱いんで、
TRNAとたんぱく質の対応表くれたら書けるが?
0321デフォルトの名無しさん
2005/10/18(火) 17:03:45exception NullPointerException numbersがnull
numbersに格納されている全要素の中で最も大きい値を返すには、どのように書いたら良いですか?
0322デフォルトの名無しさん
2005/10/18(火) 17:11:31こんなんでいいか?
public static double max(double[] numbers){
double max=numbers[0];
for(int i=1;i<numbers.length;i++){
max=Math.max(a[i],max);
}
return(max);
}
0323デフォルトの名無しさん
2005/10/18(火) 17:15:140324デフォルトの名無しさん
2005/10/18(火) 17:36:55>>321の様な文の全要素の合計を出したい場合はどうすればよいのですか?
0325デフォルトの名無しさん
2005/10/18(火) 17:39:22こんなんでいいか?
public static double sum(double[] numbers){
double sum=0.0;
for(int i=0;i<numbers.length;i++){
sum+=a[i];
}
return(sum);
}
0326デフォルトの名無しさん
2005/10/18(火) 17:40:470327316
2005/10/18(火) 17:56:41TRNA対応表
DNA RNA
A U
T A
G C
C G
たんぱく質結合 RNAに含まれる配列
Ala GCU GCC GCA GCG
Arg CGU CGC CGA CGG AGA AGG
Asn AAU AAC
Asp GAU GAC
Cys UGU UGC
Gln CAA CAG
Glu GAA GAG
Gly GGU GGC GGA GGG
His CAU CAC
Ile AUU AUC AUA
Leu UUA UUG CUU CUC CUA CUG
Lys AAA AAG
Met AUG
Phe UUU UUC
Pro CCU CCC CCA CCG
Ser UCU UCC UCA UCG AGU AGC
Thr ACU ACC ACA ACG
Trp UGG
Tyr UAU UAC
Val GUU GUC GUA GUG
… UAA UAG UGA
0328デフォルトの名無しさん
2005/10/18(火) 18:10:05俺はコード書いた本人じゃないけど、このコードだと
桁あふれとか精度は考慮してないから、使い方には注意したほうが良いと思われ。
0329デフォルトの名無しさん
2005/10/18(火) 18:31:20表されていないならfalseを返すのってどうやったらできますかね?
0330デフォルトの名無しさん
2005/10/18(火) 18:42:12//1/2
import java.io.*;
import java.util.*;
class Main{
public static void main(String[] args)throws IOException{
Scanner s=new Scanner(System.in);
System.out.print("DNA:");
String dna=s.nextLine();
String rdna=DNAToRDNA(dna);
System.out.println("RDNA:"+rdna);
String tdna=RDNAToTDNA(rdna);
System.out.println("TDNA:"+tdna);
String protein=TDNAToProtein(tdna);
System.out.println("protein:"+protein);
}
public static String DNAToRDNA(String dna){
return(((new StringBuffer(dna)).reverse()).toString());
}
0331デフォルトの名無しさん
2005/10/18(火) 18:45:33//2/2
public static String RDNAToTDNA(String rdna){
String tdna=rdna;
tdna=tdna.replaceAll("A","U");
tdna=tdna.replaceAll("T","A");
tdna=tdna.replaceAll("G","X");
tdna=tdna.replaceAll("C","G");
tdna=tdna.replaceAll("X","C");
return(tdna);
}
public static String TDNAToProtein(String tdna){
Hashtable ht=new Hashtable();
ht.put("GCU","Ala");ht.put("GCC","Ala");ht.put("GCA","Ala");ht.put("GCG","Ala");ht.put("CGU","Arg");ht.put("CGC","Arg");ht.put("CGA","Arg");ht.put("CGG","Arg");
ht.put("AGA","Arg");ht.put("AGG","Arg");ht.put("AAC","Asn");ht.put("AAU","Asn");ht.put("GAU","Asp");ht.put("GAC","Asp");ht.put("UGU","Cys");ht.put("UGC","Cys");
ht.put("CAG","Gln");ht.put("CAA","Gln");ht.put("GAG","Glu");ht.put("GAA","Glu");ht.put("GGU","Gly");ht.put("GGC","Gly");ht.put("GGA","Gly");ht.put("GGG","Gly");
ht.put("CAC","His");ht.put("CAU","His");ht.put("AUU","Ile");ht.put("AUC","Ile");ht.put("AUA","Ile");ht.put("UUA","Leu");ht.put("UUG","Leu");ht.put("CUU","Leu");
ht.put("CUC","Leu");ht.put("CUA","Leu");ht.put("CUG","Leu");ht.put("AAG","Lys");ht.put("AAA","Lys");ht.put("AUG","Met");ht.put("UUC","Phe");ht.put("UUU","Phe");
ht.put("CCU","Pro");ht.put("CCC","Pro");ht.put("CCA","Pro");ht.put("CCG","Pro");ht.put("UCU","Ser");ht.put("UCC","Ser");ht.put("UCA","Ser");ht.put("UCG","Ser");
ht.put("AGU","Ser");ht.put("AGC","Ser");ht.put("ACU","Thr");ht.put("ACC","Thr");ht.put("ACA","Thr");ht.put("ACG","Thr");ht.put("UGG","Trp");ht.put("UAC","Tyr");
ht.put("UAU","Tyr");ht.put("GUU","Val");ht.put("GUC","Val");ht.put("GUA","Val");ht.put("GUG","Val");ht.put("UAA","xxx");ht.put("UAG","xxx");ht.put("UGA","xxx");
String protein="";
for(int i=0;i+3<=tdna.length();i+=3){
protein+=ht.get(tdna.substring(i,i+3));
}
return(protein);
}
}
■ このスレッドは過去ログ倉庫に格納されています