質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

4166閲覧

樹形図を作成したい

Yoshi-5630

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/01/26 10:34

###前提・実現したいこと
Javaで結果を樹形図で表示させたい

###該当のソースコード

Java

1import java.io.BufferedReader; 2import java.io.FileReader; 3import java.io.IOException; 4import java.util.HashMap; 5 6public class DendrogramMax { 7 8 9 public static void main(String[] args) throws IOException { 10 int N = 647; //要素647 11 HashMap<String, Integer> elemList = LoadDepth(); //elemListという名前のハッシュマップにLoadDepthを割り当てる 12 double[][] similarity = LoadSimilarity(N, elemList); //double [][] similarityを(N,elemList)とする 13 14 HashMap<Integer, ElemPair> objectList = new HashMap<Integer, ElemPair>(); //objectListを初期化 15 16 for(int i = 0; i < N; i++){ 17 objectList.put(i, new ElemPair(i+"", i, null, 1)); 18 System.out.println(i+": "+i+", null, 1"); 19 } //要素の数647だけ要素のペアの作成を繰り返す 20 21 System.out.println("---------------------------"); 22 23 String result = null; 24 while(objectList.size()>1){ 25 double max_value = 0; 26 int max_i = 0; //max_iに0を代入 27 int max_j = 0; //max_jに0を代入 28 int max_key1 = 0; //max_key1に0を代入 29 int max_key2 = 0; //max_key2に0を代入 30 for(int key1 : objectList.keySet()){ 31 ElemPair elemPair1 = objectList.get(key1); 32 String[] elems1 = elemPair1.elems.replace("{", "").replace("}", "").split(","); 33 for(int i = 0; i<elems1.length; i++){ 34 for(int key2 : objectList.keySet()){ 35 ElemPair elemPair2 = objectList.get(key2); 36 String[] elems2 = elemPair2.elems.replace("{", "").replace("}", "").split(","); 37 for(int j = 0; j<elems2.length; j++){ 38 if(similarity[Integer.parseInt(elems1[i])][Integer.parseInt(elems2[j])] > max_value && !elems1[i].equals(elems2[j]) && key1 != key2){ 39 max_i = Integer.parseInt(elems1[i]); 40 max_j = Integer.parseInt(elems2[j]); 41 max_key1 = key1; //類似度の高い要素をkey1とする 42 max_key2 = key2; ///類似度の高い要素をkey2とする 43 max_value = similarity[Integer.parseInt(elems1[i])][Integer.parseInt(elems2[j])]; 44 } 45 } 46 } 47 } 48 } 49 ElemPair elemLeft = objectList.get(max_key1); //要素の左側(〇, )にmax_key1を格納 50 ElemPair elemRight = objectList.get(max_key2); //要素の右側( , 〇 )にmax_key1を格納 51 objectList.remove(max_key1); //ObjectListからmax_key1を削除 52 objectList.remove(max_key2); //ObjectListからmax_key2を削除 53 objectList.put(max_key1, new ElemPair("{"+elemLeft.elems+","+elemRight.elems+"}", elemLeft, elemRight, max_value)); 54 result = "{"+elemLeft.elems+","+elemRight.elems+"}"; 55 System.out.println(objectList.size()); 56 System.out.println(" {"+elemLeft.elems+","+elemRight.elems+" }: "+elemLeft+", "+elemRight+", "+max_value); 57 58 } 59 60 61 System.out.println("---------------------------"); 62 System.out.println("Elements list:"); 63 for(String key: elemList.keySet()){ //アルファベット順に振った要素番号を647個表示されるまで繰り返す 64 System.out.println(key+": "+elemList.get(key)); 65 } 66 System.out.println(); 67 System.out.println("Dendrogram:"); 68 System.out.println(result); //結果を表示 69 70 } 71 72 private static HashMap<String, Integer> LoadDepth() throws IOException{ 73 HashMap<String, Integer> elemList = new HashMap<String, Integer>(); 74 FileReader fr = new FileReader("depth.csv"); //depthの読み込み 75 BufferedReader br = new BufferedReader(fr); 76 String line = null; 77 int count = 0; 78 while ((line = br.readLine()) != null) { 79 elemList.put(line.split(",")[0], count); 80 count++; 81 } 82 return elemList; 83 } 84 85 private static double[][] LoadSimilarity(int N, HashMap<String, Integer> elemList) throws NumberFormatException, IOException{ 86 String line = null; 87 double[][] similarity = new double[N][N]; //MとNで多次元配列を初期化 88 FileReader fr = new FileReader("similarity.csv"); //similarity.csvを読み込み 89 BufferedReader br = new BufferedReader(fr); 90 while ((line = br.readLine()) != null) { 91 similarity[elemList.get(line.split(",")[2])][elemList.get(line.split(",")[3])] = Double.parseDouble(line.split(",")[1]); 92 } 93 94 return similarity; //similarityに返す 95 } 96 97} 98 99class ElemPair{ 100 String elems; 101 Object elem1; 102 Object elem2; 103 double distance; 104 105 public ElemPair(String elems, Object elem1, Object elem2, double distance){ 106 this.elems = elems; 107 this.elem1 = elem1; 108 this.elem2 = elem2; 109 this.distance = distance; 110 } 111} 112

###実行結果

Java

1Dendrogram: 2{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{0,{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{4,562},6},84},181},262},384},554},552},522},585},641},58},66},130},221},266},325},621},592},352},363},400},418},454},452},616},590},603},185},191},292},366},408},382},474},586},385},526},597},375},546},318},599},373},589},596},444},420},466},77},470},523},7},{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{27,467},43},41},81},116},132},189},237},253},284},315},336},372},369},376},421},461},500},569},580},406},100},34},64},107},137},194},239},276},265},347},360},479},465},488},630},605},44},141},161},179},293},374},381},442},446},417},547}},193},380},286},371},637},257},584},136},312},389},99},126},206},319},290},390},424},472},555},567},628},495},165},18},29},277},301},413},426},508},542},620},50},49},153},146},184},222},216},236},224},244},241},285},291},439},501},549},530},539},625},578}},247},398},545},59},69},294},233},507},37},73},148},169},166},164},198},212},235},254},351},321},353},425},536},62},85},106},125},131},159},147},167},187},190},182},207},201},226},243},283},305},327},505},553},532},138},214},317},273},289},433},320},456},636},338},412},90},114},270},533},32},297},55},142},274},98},407},579},583},158},157},119},83},188},299},334},431},314},489},139},288},395},387},225},386},192},486},151},45},246},337},362},560},570},576},2},205},326},333},518},513},89},451},529},627},638},9},38},42},60},71},86},82},103},97},105},117},127},154},150},170},174},180},223},208},240},272},260},303},393},427},485},564},573},531},624},591},607},610},46},94},110},156},177},348},378},359},397},471},511},613},626},588},3},70},438},416},415},432},475},450},341},28},409},392},388},278},514},340},234},255},261},310},391},26},183},367},15},121},23},264},639},543},623},635},95},21},175},10},30},88},350},144},24},355},499},36},39},594},306},401},31},168},492},335},324},484},145},581},370},544},256},280},343},346},428},329},609},227},342},483},203},411},506},615},510},76},619},493},307},344},357},494},186},608},331},419},248},535},47},503},645},571},614},345},447},482},304},509},364},618},178},12},78},296},101},118},173},504},487},550},527},16},96},160},323},74},68},113},140},496},490},561},515},521},540},537},617},632},601},414},61},574},115},396},92},512},404},163},410},383},437},124},379},269},349},54},1},602},577},572},8},122},282},252},455},91},612},316},251},464},176},263},459},582},538},332},210},598},534},644},595},354},402},93},502},308},87},213},643},209},5},75},{22,149}},{{{{219,429},640},516},463}},{232,629}},{497,575}},{559,565}},445},218},469},435},195},{{{{67,200},245},313},631}},281},295},267},481},520},368},48},199},377},642},476},457},17},162},220},622},135},{{{{{{{{{{{{{{{{{{{{13,356},365},517},230},40},322},563},460},172},{{{{102,358},403},443},449}},{{250,311},519}},462},{{20,478},120}},{{25,593},171}},80},{{108,196},399}},{197,238}},{{228,259},328}},143},541}},{{{{{{{{{53,453},634},{52,480}},109},{229,524}},{287,477}},441},{448,548}},422}},498},568},{{{{{{{{{{{{{{{{{{{{{{35,202},215},468},33},57},128},249},309},302},361},430},556},211},339},558},134},133},{{63,587},242}},155},{{{298,611},606},330}},405},{394,528}}},{{{19,551},{{56,436},104}},{{{279,258},423},633}}},525},440},300},14},123},152},217},458},557},600},65},231},271},{{{{{{{{{{11,275},491},51},79},112},129},204},268},434},473}},566},{{{72,646},111},604}} 3

###用語説明
Elem・・・要素
{〇,〇}・・・類似度の高いペアを表している

###イメージ
樹形図

イメージ図のような表示を実現したいのです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuba

2017/01/26 10:43

表示と一言に言っても、この図をデスクトップアプリで出したいのですか、Webアプリで出したいのですか、Androidアプリ、それとも画像ファイルを生成したいのですか?
Yoshi-5630

2017/01/26 12:51

yuba様 毎度ご質問ありがとうございます。 表示は、実行されたら、画像ファイルとして、樹形図を出力したいです
guest

回答2

0

自己解決

とりあえず、現状の{での表現で了承して頂きました。

ご意見ありがとうございました。

投稿2017/02/19 05:14

Yoshi-5630

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そもそも課題はなんなのか記載をしないと。

投稿2017/02/15 07:28

liguofeng29

総合スコア801

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問