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

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

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

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

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

【回答プログラムの掲載場所】
Java質問スレWiki  http://www.wikiroom.com/java/
ソースポストネット http://sourcepost.sytes.net/
0232デフォルトの名無しさん2005/10/02(日) 11:18:09
【 課題 】
「英語の文を解析し、その文に含まれる単語の長さと平均を求めるプログラムを作成せよ。」
1、概要
  �@適当な文字列変数に英語の文を代入する。
  例:String sentence = new Stirng("This is a pen.”)
  �Aプログラムを実行すると、その文における各単語の長さと平均を表示する。
2、プログラムの条件
  英語の文章は、「.」 「!」 「?」で終わっているものとする。また、単語の区切りは
  1文字分の空白に限定してよい。
3、プログラムの動作例
  次の1文を入力する:Do you love me? その出力結果は次のとおり。

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

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

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

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

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

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

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

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

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

package jspbean;

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

public class BBSModel {

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

DBSimpleInterface mDB;

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

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

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

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

DBSimpleInterface mDB;

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

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

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

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

// Student.java

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

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

// Seminar.java

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

  ..,,,,.,.,,
 ミ・д・ミ
  "''''''"
0253デフォルトの名無しさん2005/10/11(火) 02:30:08
【 課題 】タブを2つ付くって、その中にそれぞれボタングループとチェックボックスを作る。

【 期限 】朝まで。

【 補足 】基本的にまだGUIとかSwingとかを理解できてません。
      API見ながらやれと言われたのですが、APIを読んでも理解できるほどjavaの理解度がまだありません。
      かなり初歩的なところでつまづいています。
      持ってる本には参考にできる記述が無いので困ってます。
      とりあえず見本みたいなのが欲しいです。お願いします。

0254デフォルトの名無しさん2005/10/11(火) 04:09:55
【 課題 】ある配列Aに格納されている要素をx1,x2,・・・xnとした時、その平均aと分散s
      は以下の式で計算できる。
      
      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
>>253
朝は時間ないんで適当だ、すまん。
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;
}
}
02562532005/10/11(火) 05:59:59
>>255
時間ないところ本当にありがとうございます(つД`)
参考にさせていただきます!
ありがとうございました!!
0257デフォルトの名無しさん2005/10/11(火) 11:11:50
>>254
public 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
【 課題 】 xmlファイルを読み込み、特定のタグで囲まれた要素のみを画面に表示せよ。
例)test.xmlを読み込んでtitleとnameタグの要素を表示。
<title>あい</title>
<neme>うえお</name>
標準出力)あい
うえお
のような感じに表示させる。
【 用語 】
【 期限 】10/12
【 Ver  】1.5以降
【 補足 】ゼミの課題です、よろしくお願いします
0259デフォルトの名無しさん2005/10/11(火) 16:04:57
【 課題 】以下の出力結果になるよう、プログラムを組め。ただし、入力する数値は整数で、3480は$34.80、70は$0.70と表示されるようにせよ。

Purchase 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という事になります。

よろしくお願いします。
02602592005/10/11(火) 16:54:49
一応、自分で打ってみたのですが、Integerの使い方、
「$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);
02612592005/10/11(火) 16:55:25
yourChange = yourBought - yourMoney;
dollar = 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("*********************************************");
}
}
02622592005/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:38
そこまでできてるならこれだけ貼れば分かるかな? doller なんちゃらは全部要らない。
Integer の使いどころがないな・・・ 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 も使わない感じ・・
02642592005/10/12(水) 00:38:37
>>263
ご指導ありがとうございます。
ただ、まだunitsや、for、if、while文は習っていないので、
それらを使わずに「520と認識させて520/100で5枚のone-dollor bill、520%100で20なので〜」
という風に出力しろとの事です。
0265デフォルトの名無しさん2005/10/12(水) 02:40:57
>>259
263 を配列とループを使わずに展開しただけこれなら問題ないのか?
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:03
>>258
import 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() {}
}
02672592005/10/12(水) 05:29:09
>>265
申し訳ないのですが、ソース解答の丸投げをしてはいただけないでしょうか。
補足してもらったソースと自分で書いたソースを合わせたら、何度書き直してもエラーを吐いてきます。
02682592005/10/12(水) 06:38:13
一応、265さんのソースを元にして自分で書き直してみたソースを貼っておきます。

package 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;
02692592005/10/12(水) 06:39:17
onebill = yourChange / 100;
onebill2 = 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("***********************************************");

}
}
02702592005/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
変数は int のままでいい。
出力するときに
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 が
○  x.x となり 0 が
02732592005/10/12(水) 12:15:21
>>271
ありがとうございました。
完璧に仕上がりました。
0274デフォルトの名無しさん2005/10/12(水) 12:28:39
あ、小数点以下は (yourMoney%100) でもいいのかな。
できたようだからまぁいいか。
0275デフォルトの名無しさん2005/10/12(水) 16:03:46
はじめまして。JAVA(Swing)で15パズル(スライドパズル)を作る課題が出ました。
どなたか教えてください。
0276デフォルトの名無しさん2005/10/12(水) 16:07:21
>>275
【課題提示用テンプレ】
【 課題 】与えられた課題文をそのまま書きます 《必須》
【 用語 】数学用語、専門用語の意味、説明を書きます 《あれば必須》
【 期限 】提出期限、又は解答希望日を書きます
【 Ver  】希望するJavaバージョンがあれば書きます(1.5 とか 1.4以前とか)
【 補足 】課題について自分なりに補足する事、何か思う事があれば書きます。
       丸投げでない場合は、途中までのソースとその経過報告、
       質問点、疑問点を書きます(なるべく丸投げにしてください)
02772752005/10/12(水) 16:20:53
【 課題 】15Puzzle。
4×4の升目状の絵合わせパズル。
正方形に近い画像データを4×4の16個のピースに分割し、
右下のピースを取り除いた残りのピースをランダムに升目に配置する。
ピースが割り当てられていない場所の上下左右のピースをクリックすると、
そのピースが空白の場所へ移動し、ピースの場所は空白になる。
ピースを並べ直して、元の画像が再現できればパズルが完成する。
【 期限 】10月18日
【 補足 】JAVA Swing Application

よろしくお願いします。
0278デフォルトの名無しさん2005/10/12(水) 17:05:41
>>277
画像形式はビットマップ?
02792772005/10/12(水) 17:24:09
>>278
特に指定はありませんでした。
0280デフォルトの名無しさん2005/10/12(水) 18:41:48
278 は作ってんの?
俺できたけど、277 が質問スレで言ってた状況にしては奇抜な発想のになっちゃった・・・
いいのかなこんなんで
その辺に関して親切なのを 278 が作ってるなら、よろしく
02812782005/10/12(水) 20:39:08
スマン、聞いてみただけだ
0282デフォルトの名無しさん2005/10/12(水) 22:43:07
じゃ、まず貼っちゃおう
import 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:45
private JButton[] buttons;
private 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
public void actionPerformed(ActionEvent ev) {
//押されたボタンと空白部分の 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
ふつーはきっと「JComponent と MouseListener を使おう」
という発想だろうと思うのね
ふつーのゲームならそうだし、AWT のみならそれしかないし

でもせっかく Swing と指定されてるし、
それだとボタンでも枠消せるからこんな感じで・・・多分このやり方の方がソースも短い
時間はあるみたいだから仕組み眺めといてね >>277
02862772005/10/13(木) 02:12:33
>>280
解答ありがとうございます!ただ今バイトからあがりました。
こんなに早く、しかも丁寧に答えていただいて、本当に助かりました。
これからまたじっくり眺めて自分でも書いてみて仕組み等勉強したいと思います。
質問スレを読んでくださったのなら状況はご存知の通りですが、
しっかり勉強して、教授を見返してやろうと思います。
本当にありがとうございました。
0287デフォルトの名無しさん2005/10/13(木) 18:54:02
なにこのネ申スレ
0288デフォルトの名無しさん2005/10/14(金) 01:17:39
class tall {
public 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:26
上のプログラムで、0.2cmと表示されるところが、
0.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:14
>>290 ありがとうございました。ちなみに、ソース自体は組み直して大丈夫です。
0292デフォルトの名無しさん2005/10/14(金) 02:35:13
import java.math.BigDecimal;

class 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
>>291
何かして欲しいなら、>>1 に従って答えないと分からないよ。
0294デフォルトの名無しさん2005/10/14(金) 02:38:48
>>292すみません。
>293 いや、0.2が0.199となるのは何故か、という質問でした。
ソース自体は解決しました。
0295デフォルトの名無しさん2005/10/17(月) 05:01:25
グラフィックをやってるのですが、
四角の中に文字列を表示させたいのですが、ちょうど真ん中に来るようにするにはどうすればいいでしょうか?
四角の中ちょうどいっぱいの大きさに表示させるのではなく、四角よりもだいぶん小さな文字をちょうど中央に書くには。
お願いします。
0296デフォルトの名無しさん2005/10/17(月) 05:29:24
何を使って絵を描くのかちゃんと明示しないと答えられないよ。
02972952005/10/17(月) 05:45:42
グラフィッククラスのdrawRect();で四角を書いて中にdrawString();で字を書くって感じです。
0298デフォルトの名無しさん2005/10/17(月) 07:21:24
>>297
ttp://wisdom.sakura.ne.jp/system/java/awt/Gjava7.html
0299デフォルトの名無しさん2005/10/17(月) 13:25:26
int rx, ry, rw, rh; //矩形座標・サイズ (drawRect の引数)
String 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
【 課題 】 SSDA法をもちいてステレオマッチングを行い,左のカメラの画像の全ての点について,
右のカメラで撮った画像のどの点に対応するかを求め,対応する点の組を出力せよ。
       また得られた対応する点をもとに左のカメラの画像の各点の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
>>301
説明不足ですみません。
基準画像は左画像,探索画像は右画像,テンプレートはl×m画素の小領域のことです。
(i,j)はテンプレートの中心座標です。
左画像の点(x,y)を中心とするl×m画素の小領域をテンプレートとみなして
右画像上で一番一致度の高い位置を求めて,その位置でのテンプレートの
中心の点(x,y)を対応点とするということだそうです。
左画像のテンプレートと右画像のテンプレートの画素ごとの階調値の差分の
総和が最も小さくなる位置を対応点とするそうです。
どなたかよろしくお願いします。
0303デフォルトの名無しさん2005/10/17(月) 22:29:46
UNIコードを用いた場合,\uXXXX(X=16進数)と書けば,ある16進数の数値が持つ文字を表現できる。
数を用いて文字を表現する方法である。
さて,この逆である,文字からUNIコードを得るにはどうしたらよいか?
例えば,'峯' という文字のUNIコードは幾らになるのだろうか,
文字からUNIコードを得る方法を考えよ。


スレ違いかもしれませんがJavaの講義で出された課題なのでここが正しいかと思いました
Javaの初歩的な知識で可能だとかなんとか言っていたので。
しかしさっぱりわかりません
よろしくお願いします
0304デフォルトの名無しさん2005/10/17(月) 23:18:50
>>303
int code = (int)'峯';
System.out.println(Integer.toString(code, 16));
0305デフォルトの名無しさん2005/10/17(月) 23:34:03
>>304
ありがとうございました
0306デフォルトの名無しさん2005/10/17(月) 23:38:36
とりあえず対応点検出は作れたことになんのかな・・・?
private 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:45
public void ssda() {
points = 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:15
private Point calc(int i, int j) {
int 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:45
public static void main(String[] args) throws IOException {
BufferedImage 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:13
以上、全部

import 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:41
普通、グラフィックはこうやって書きますが、
public 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
>>311
スレ違い。
つ 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
>>306-310
返信ありがとうごさいます。
本当に助かります。
手元の画像を読み込みたいのですが,エラーがでてうまくいきません。
手元の画像を読み込む方法もお願いできないでしょうか?
またまた説明不足ですみません。
以下の数式で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
123,456,789
こんな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:59
>>315

String str = "123,456,789";
long l = Long.parseLong(str.replaceAll(",", ""));
03183162005/10/18(火) 16:31:29
出力例です。
DNA :TATACGAGCGC
RDNA:CGCGAGCATAT
TRNA:GCGCUCGUAU
たんぱく質:AlaLeuVal
0319デフォルトの名無しさん2005/10/18(火) 16:32:59
>>317
サンクスコです。
こんなに簡単だったのか orz
0320デフォルトの名無しさん2005/10/18(火) 16:51:46
>>318
生物弱いんで、
TRNAとたんぱく質の対応表くれたら書けるが?
0321デフォルトの名無しさん2005/10/18(火) 17:03:45
public static double sum(double[] numbers) throws NullPointerException {

exception NullPointerException numbersがnull

numbersに格納されている全要素の中で最も大きい値を返すには、どのように書いたら良いですか?
0322デフォルトの名無しさん2005/10/18(火) 17:11:31
>>321
こんなんでいいか?
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:14
>>322 ありがとうございました。いけました。
0324デフォルトの名無しさん2005/10/18(火) 17:36:55
すいません、もう一ついいでしょうか?
>>321の様な文の全要素の合計を出したい場合はどうすればよいのですか?
0325デフォルトの名無しさん2005/10/18(火) 17:39:22
>>323
こんなんでいいか?
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:47
センキューです〜
03273162005/10/18(火) 17:56:41
>>320
TRNA対応表
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
>>328
俺はコード書いた本人じゃないけど、このコードだと
桁あふれとか精度は考慮してないから、使い方には注意したほうが良いと思われ。
0329デフォルトの名無しさん2005/10/18(火) 18:31:20
ある文字列が2進数で表されているならtrue、
表されていないならfalseを返すのってどうやったらできますかね?
0330デフォルトの名無しさん2005/10/18(火) 18:42:12
>>316
//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
>>316
//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);
}
}
■ このスレッドは過去ログ倉庫に格納されています