JustAnswer のしくみ:
  • 専門家に質問
    知識豊富な専門家があらゆる質問にお答えするために常に待機しています。
  • 専門家が丁寧に対応
    E メールやサイト内オンラインメッセージなど、さまざまな手段で回答を通知。必要に応じてフォローアップの質問をすることもできます。
  • 満足度 100% 保証
    専門家からの回答を確認し評価をすることで、支払うかどうかを決めます。
rushqkに今すぐ質問する
rushqk
rushqk, プログラマー
カテゴリ: プログラミング
満足したユーザー: 9
経験:  AV機器開発、ソフトウェア設計
60440014
ここに プログラミング に関する質問を入力してください。
rushqkがオンラインで質問受付中

プログラミングの課題が解けません

質問者の質問

 


 


 


 



・テキストファイルを読み込み,2 分木に格納された英単語をC 曲線ふうに表示(この部分は既に授業にて作成済み. 解答例は授業フォルダ内のMondai20130704Ans.java を参照) ・上記のプログラムにボタンを1 つ追加し,そのボタンを押すと,A~Z(大文字,小文字の区別はしない)の英字で始 まる単語の出現回数を,それぞれ表示する 例: A(a)で始まる単語:10 回 B(b)で始まる単語:5 回 … Z(z)で始まる単語:0 回 期末課題2(任意) 期末課題 1 で作成したプログラムに,独自機能を追加せよ.安易なものは採点外とします. 独自機能の例(これに従う必要は全くない): 単語の先頭文字によって三角形を色分けする(例えば,「A」または「a」で始まる単語はHSB カラーで赤(色相値1), 「Z」または「z」で始まる単語はHSB カラーで紫(色相値1.0)を割り当て,それ以外の英字で始まる単語は赤と紫の 間の色を連続的に割り当てる.数字など,英字で始まらない単語は白を割り当てる)


 


という課題がでました。 かなり完成したものの、A~Z(大文字,小文字の区別はしない)の英字で始 まる単語の出現回数を,それぞれ表示する 例: A(a)で始まる単語:10 回 B(b)で始まる単語:5 回 … Z(z)で始まる単語:0 回 という部分で苦戦しています。 いったいどのようにすればいいでしょう。 二分木を使うそうなのですが


以下がここまでのプログラムです


 


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public class Kimatu implements ActionListener {
static Tnode root = new Tnode(); //最初のノードオブジェクト(2分木の根)


public void actionPerformed(ActionEvent e) { //ボタンが押されたときの処理
char z [] = new char [25];
for (char c = 'a'; c <='z'; c++) {
System.out.println(c+"で始まる単語:" +root.getTotalA(c));
}
}

public static void main(String[] args) {
Kimatu ac_Listener = new Kimatu();

BufferedReader reader;//ファイルを読むオブジェクト
String line;//行を格納する文字列
String delim = " \t,.\"'(){}[]"; //単語の区切り記号
StringTokenizer st;//文字列を単語に区切るオブジェクト

try { //ファイル読み込み中の例外検出
reader = new BufferedReader(new FileReader("text.txt"));
while ((line = reader.readLine()) != null) {//行がある限り繰り返し
st = new StringTokenizer(line, delim);//行を単語に分割
while (st.hasMoreTokens()) {//単語が存在する限り繰り返し
root.addTree(st.nextToken());//2分木に単語を登録
}
}
} catch (Exception e) { e.printStackTrace(); }
root.disp_count();//各単語の出現回数を表示

JFrame jf = new JFrame("C-curve");
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //クローズボタンで終了
MyCanvas mc = new MyCanvas(root); //キャンバスオブジェクトを作る(2分木のノードオブジェクトを渡す)
mc.setPreferredSize(new Dimension(700,700)); //キャンバスのサイズを設定
jf.getContentPane().add(mc); //フレームにパネルを貼り付け
jf.pack(); //フレームの大きさを自動調整
jf.setVisible(true); //画面にフレームを表示

JButton b1;
b1 = new JButton("検索開始");//ボタンを追加
mc.add(b1);//ボタンを貼り付け
b1.setLayout(null);//ボタンのレイアウト
b1.setVisible(true);
b1.addActionListener(ac_Listener); //ボタン1にリスナー登録

}
}
class MyCanvas extends JPanel {
int width = 0, height = 0; //キャンバスの横と縦の長さ
Tnode root;
MyCanvas(Tnode _root) { //コンストラクタ(2分木オブジェクトを受け取る){
root = _root;
}
public void paintComponent( Graphics g ) {
super.paintComponent(g); //親クラスのpaintメソッドを呼出す
width = getWidth(); height = getHeight(); //キャンバスの横と縦の長さを得る
root.disp_tree((double)width/3, (double)height/3, (double)width/3, 0, g);//図形を表示
}
}
class Tnode {
String word = null;
int count = 0;
Tnode left = null;
Tnode right = null;
void addTree(String w) {//単語の登録およびカウントメソッド
int cond;
if (word == null) { //新しい単語が来た
word = w;//単語を格納
count = 1;//出現カウントは1
left = right = null;//子ノードは左右共にいない
} else if ( (cond = word.compareToIgnoreCase(w)) == 0) {//同じ単語が来た
count++;//出現カウントを1増やす
} else if (cond > 0) { //wがwordより辞書的に前
if (left == null)//左に子ノードがないときは
left = new Tnode();//左に子ノードを追加
left.addTree(w);//左の子ノードに単語を送る
} else {
if (right == null)//右に子ノードがないときは
right = new Tnode();//右に子ノードを追加
right.addTree(w);//右の子ノードに単語を送る
}
}
void disp_count() {//単語の出現回数を表示するメソッド
if (left != null)
left.disp_count();
System.out.println(word+" の出現回数: "+count);
if(right != null)
right.disp_count();
}

int getTotal() {//自分自身および自分より下にあるノード数を返すメソッド

int sum = 0;

if(left != null) {
sum += left.getTotal();//値を返す
}
if (right != null){
sum += right.getTotal();//値を返す
}
return sum+1;//最後に自分の値も含めて返す
}
int getTotalA ( char c ){ // ここを変える dousiyou
int sum = 0;
int sum2 = 0;
int a = word.charAt(0);//頭文字を取り出す
{
if(left != null) {
sum +=left.getTotal();
}
if (right != null ) {
sum += right.getTotal();
}
}
if(a != c){
if(left != null ) {
sum2 += left.getTotal();
}
if (right != null ) {
sum2 += right.getTotal();
}
}return sum-sum2;

}
void disp_tree(double x, double y, double L, double a, Graphics g) {
double x1 = x + L*Math.cos(a+Math.PI/4)/Math.sqrt(2);
double y1 = y + L*Math.sin(a+Math.PI/4)/Math.sqrt(2);
double x2 = x + L*Math.cos(a);
double y2 = y + L*Math.sin(a);
int ix = (int)Math.rint(x), iy = (int)Math.rint(y);
int ix1 = (int)Math.rint(x1), iy1 = (int)Math.rint(y1);
int ix2 = (int)Math.rint(x2), iy2 = (int)Math.rint(y2);
g.drawLine(ix, iy, ix1, iy1);
g.drawLine(ix1, iy1, ix2, iy2);
g.drawLine(ix2, iy2, ix, iy);
if (left != null) {
left.disp_tree(x, y, L/Math.sqrt(2), a+Math.PI/4, g);
}
if (right != null) {
right.disp_tree(x1, y1, L/Math.sqrt(2), a-Math.PI/4, g);
}

}
}


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 

投稿: 4 年 前.
カテゴリ: プログラミング