• ベストアンサー
  • すぐに回答を!

読み込んだ行からランダムに選ぶ

外部テキストからBufferedReaderで読み込んだ行をStringTokenizerで * の前と後ろに分けて、 nichi ="" + st.nextToken(); ei ="" + st.nextToken(); というように取得しています。 これをsetTextメソッドで文字列として表示しているのですが、順に読み込んだ中からランダムに選ぶ場合はどうすれば良いでしょうか import java.applet.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.*; public class examination extends Applet implements ActionListener{ Button Check, Next; TextField jap, eng, seigo; String wrs; String nichi, ei; public void init(){ setBackground(new Color(200, 200, 200)); add(new Label("[ japanese ]")); jap = new TextField("", 30); add(jap); add(new Label("[ english ]")); eng = new TextField("", 30); add(eng); Check = new Button("正誤判定"); Check.addActionListener(this); add(Check); seigo = new TextField("", 3); add(seigo); Next = new Button("次の問題へ進む"); Next.addActionListener(this); add(Next); } public void actionPerformed(ActionEvent e){ try{ if(e.getSource() == Next){ BufferedReader wordsfile = new BufferedReader(new FileReader("D:/list.txt")); while ((wrs=wordsfile.readLine())!= null){ StringTokenizer st = new StringTokenizer(wrs," * "); nichi ="" + st.nextToken(); ei ="" + st.nextToken(); jap.setText(nichi); ← } wordsfile.close(); }(以下省略) ←の部分ですが、このままだと最後に読み込んだ行のnichiが表示されますよね? これを読み込んだ中からランダムに一行選んで表示するにはどうすれば良いでしょうか。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数154
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • _ranco_
  • ベストアンサー率58% (126/214)

全行をArrayListに収めておいて、乱数で取り出す行を決める。 なお、StringTokenizerは、古い、非推奨のAPIなので、Stringクラスのsplit()メソッドを代わりに使ってください。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 小数の2進数変換について教えてください。

    10進数を2進数に変換するプログラムを作ったのですが、 小数の2進数変換が出来ません。 小数を2進数に変換するにはどうしたらいいのでしょうか? よろしくお願いします。 import java.awt.*; import java.applet.*; import java.awt.event.*; public class Applet1 extends Applet { TextField textField1 = new TextField(10); TextField textField2 = new TextField(10); Button displayButton1 = new Button("2進数変換"); public void init() { displayButton1 = new Button("2進数変換"); add(new Label("10進数")); add(textField1); add(textField2); add(displayButton1); displayButton1.addActionListener(new ToBinaryAction()); } class ToBinaryAction implements ActionListener{ public void actionPerformed(ActionEvent e) { int x = Integer.valueOf(textField1.getText()).intValue(); textField2.setText(Integer.toBinaryString(x)); } } }

    • ベストアンサー
    • Java
  • java applet

    import java. applet.*; import java. awt. Button; import java. awt. Label; import java. awt. TextField; import java. awt. event.*; public class 1120 extends Applet implements ActionListener { private TextField box1 = new TextField(5); private TextField box2 = new TextField(5); private TextField box3 = new TextField(5); private Label moji1 = new Label(" と "); private Label moji2 = new Label(" の和は "); private Label moji3 = new Label(" である。 "); private Button ok = new Button("OK"); public void init() { resize( 320 , 240); add( box1 ); add( moji1 ); add( box2 ); add( moji2 ); add( box3 ); add( moji3 ); add( ok ); ok.addActionListener( this ); } public void actionPerformed( ActionEvent e ) { int i=0 ,j =0 , k; String t1 = box1.getText(); String t2 = box2.getText(); i = Integer.parseInt( t1 ); j = Integer.parseInt( t2 ); k = i + j; String s = Integer.toString( k ); box3. setText( s ); } } //上記のプログラムを書いたのですが、なぜかエラーが出てしまいます。勿論、自分でも見直しましたが、その理由がわかりませんでした。知識のある方、ご回答の方お願いします。

  • 読み込んだテキストの改行表示

    javaを用いて、プログラミングしているのですが 読み込んだテキストの改行表示の仕方で困っています。 プログラムは、日本語か英語で単語を入力(例:一、one)すると 読み込むwords.txtから対応するスペイン語(例:一 * one * UNO ⇒UNO)を textareaに表示するというものです。 このとき、読み込んだwords.txtは現在は 一 * one * UNO 二 * two * DOS … となっているのですが、このスペイン語の部分に日本語の注釈をつけ 数行に渡ってtextareaに表示したいと思っています。 説明が拙く少し分かりづらいですが、画像などを参照してくださると助かります。 具体的には、今はスペイン語のtextareaに  UNO とだけ表示されているものを  UNO  [数]一つの といったように表示するにはどうすれば良いでしょう? 一応、該当部分のソースコードも載せておきます。 質問の仕方も悪いですが、どうかよろしくお願いします。 public void actionPerformed(ActionEvent e){ try{ if(e.getSource() == Honyaku){ BufferedReader wordsfile = new BufferedReader(new FileReader("Z:/09sotsuron/words.txt")); while ((wrs=wordsfile.readLine())!= null){ StringTokenizer st = new StringTokenizer(wrs," * "); nichi ="" + st.nextToken(); ei ="" + st.nextToken(); supe = "" + st.nextToken(); if ((jap.getText()).equals(nichi)){ eng.setText(ei); spa.setText(supe); } else if ((eng.getText()).equals(ei)){ jap.setText(nichi); spa.setText(supe); } } wordsfile.close(); } else if(e.getSource() == Clear){ nichi = ""; ei =""; supe = ""; jap.setText(nichi); eng.setText(ei); spa.setText(supe); } } catch(IOException ie){ System.exit(1); } }

    • ベストアンサー
    • Java
  • java アプレット

    学校の授業でアプレットを学んでいます。 しかし・・・ 下のプログラムで、計算した結果をlabel3にはりつけたいのですが、計算結果がでてくれません・・・ボタンを押しても何もでてきません。 コマンドプロンプトで、エラーはでてきません。 お手数ですが、誰かどこがいけないのか教えて下さい。 import java.awt.*; import java.awt.event.*; public class B extends java.applet.Applet implements ActionListener { Label label3 = new Label(); Button button2 = new Button(); TextField textfield1= new TextField(10); TextField textfield2= new TextField(10); public void init() { button2.setLabel("入力したらクリック!"); button2.setBounds(new Rectangle(50, 465, 120, 20)); this.setLayout(null); label3.setBackground(Color.blue); label3.setBounds(new Rectangle(325, 80, 200, 35)); textfield1.setBounds(100, 425, 100, 25); textfield2.setBounds(150, 350, 100, 25); this.add(textfield2, null); this.add(label3, null); this.add(textfield1, null); this.add(button2, null);} public void actionPerformed(ActionEvent event) {if(event.getSource() == button2) {int diff = Integer.parseInt(textfield1.getText()) - Integer.parseInt(textfield2.getText()); String otsuri; otsuri ="お釣りは"+ diff +"円です。"; label3.setText(otsuri);} }} よろしくお願いします。

    • ベストアンサー
    • Java
  • 整数を好きなだけ入力し、個数、合計、平均値を表示するプログラム

    appletviewerに、ボックスの中に整数を好きなだけ入力し、個数、合計、平均値を以下のように表示させるようなプログラムを作りたいです。(1,2,3を入力した場合)     データ□ (入力)        (計算)   個数=3   合計=6   平均値=2 ※□はボックスです。(入力)(計算)はクリックするボタンです。 どなたかご指導やアドバイスをお願いいたします。まだまだ初心者でとても困っています。。 ちなみに途中まで考えたのが以下のプログラムです。 import java.applet.*; import java.awt.Button; import java.awt.Label; import java.awt.TextField; import java.awt.event.*; public class Lec1106 extends Applet implements ActionListener { private TextField box1 = new TextField(5); private Label moji1 = new Label("データ"); private Label moji2 = new Label("個数="); private Label moji3 = new Label("合計="); private Label moji4 = new Label("平均値="); private Button nyuuryoku = new Button("入力"); private Button keisan = new Button("計算"); public void init() { resize(320,240); add(moji1); add(box1); add(nyuuryoku); nyuuryoku.addActionListener(this); add(keisan); keisan.addActionListener(this); add(moji2); add(moji3); add(moji4); } public void actionPerformed(ActionEvent e)  {int i; String t1=box1.getText(); i=Integer.parseInt(t1);

    • ベストアンサー
    • Java
  • アプレットと自作パッケージのimportについて

    以下のような、アプレットのプログラムを作ったのですが、コンパイルは通るのですが、アプレットの初期化のところで止まってしまいます。理由と解決策を教えてください。 javac dev_java\TargetApplet\*.java ← これはOK appletviewer dev_java\TargetApplet\TargetApplet.java ←init() で止まる。 (ソース一部抜粋) package dev_java.TargetApplet ; import java.applet.* ; import java.awt.* ; import java.awt.event.* ; import dev_java.Target.* ;  // 自作のpackage /* <applet code="TargetApplet" width=500 height=400> </applet> */ public class TargetApplet extends Applet implements ActionListener, TextListener{ TextField Word ; TextField Mean ; TextArea Result ; Button Search ; Button Entry ; EnglishDictionary ed ; /* 自作package dev_java.Target で宣言されているクラス*/ public void init() { Word = new TextField(20) ; Mean = new TextField(20) ; Search = new Button("Search") ; Entry = new Button("Entry") ; Result = new TextArea(20,40) ; Word.addActionListener(this) ; Word.addTextListener(this) ; Mean.addActionListener(this) ; Mean.addTextListener(this) ; Search.addActionListener(this) ; Entry.addActionListener(this) ; // EnglishDictionary ed = new EnglishDictionary("dic/Target1900.dic") ; this.add(Word) ; this.add(Mean) ; this.add(Search) ; this.add(Entry) ; this.add(Result) ; } }

    • ベストアンサー
    • Java
  • SampleCanvasのシンボルが見つからない

    Javaの初心者です。JDK6を使用していますが、次のようなエラーが出ます。 シンボルが見つかりません。 場所:SampleCanvas sampleCanvas; ^ もともとのソースはこちらです //<applet code="circgene.class" width="200" height="200"></applet> import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class circgene extends Applet implements ActionListener{ //コンポーネントの変数を定義 TextField textField; SampleCanvas sampleCanvas; public void init(){ //オブジェクトの生成 textField = new TextField("50"); sampleCanvas = new SampleCanvas(); //テキストフィールドをリスナーに登録する textField.addActionListener( this); //レイアウトの設定 this.setLayout(new BorderLayout()); //コンポーネントをアプレットに追加する this.add(textField,BorderLayout.NORTH); this.add(sampleCanvas,BorderLayout.CENTER); } //イベントの処理 public void actionPerformed(ActionEvent ev){ if(ev.getSource()==this.textField){ int r = Integer.parseInt( this.textField.getText()); this.sampleCanvas.setRadius( r); this.sampleCanvas.repaint(); } } } これは自分の入門書に乗っていたソースのまる写しなのですが、対処法が分かりません。初心者故、質問内容が不十分かもしれませんが、ご教示願います。

  • テキストファイルに書きこむにはどうすれば・・・

    ここまでできました。ソーのせます。かなり長いです&#8659; import java.awt.*; import java.awt.event.*; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class MyMemo { TextField textField; TextArea textArea; public MyMemo(){ /* フレームを作成します。*/ Container frm = new Frame(); frm.setSize(new Dimension(450,350)); /* レイアウトを設定します。*/ frm .setLayout(new BorderLayout()); /* コンポーネントを作ります。*/ textField = new TextField(25); textArea = new TextArea(25,10); /* リスナーを登録します。*/ textField.addActionListener(new TextFieldAction()); /* フレームに登録します。*/ frm.add(textField, BorderLayout.NORTH); frm.add(textArea , BorderLayout.CENTER); /* フレームを表示させます。*/ frm.setVisible(true); } /* TextFieldでリターンキーが押されたら次にフォーカスを与える */ class TextFieldAction implements ActionListener{ public void actionPerformed(ActionEvent e){ textArea.insert(textField.getText() + "\n" ,0); textField.setText(""); } } public static void main(String args[]){ new MyMemo(); } } class MyWindowListener1 extends WindowAdapter { public void windowClosing(WindowEvent e){ System.exit(0); // PrintWriterで文字列をファイルに書き出す。 // コンストラクタの第2引数にtrueを与えると,printlnの // 呼び出しが「追記」扱いになる。 try { File file = new File("c:&#165;&#165;tmp&#165;&#165;test.txt"); if (checkBeforeWritefile(file)){ PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); String str = "これはテストだってば!"; pw.println(str); pw.println(str); pw.println(str); pw.close(); // 計3行を書き出して終了(追記でなければ1行だけになる) }else{ System.out.println("ファイルに書き込めません"); } }catch (IOException a) { // TODO 自動生成された catch ブロック a.printStackTrace(); } } private boolean checkBeforeWritefile(File file) { // TODO Auto-generated method stub return false; } } エラーはなく例外処理はtry&#65374;cath文でしました。 今回の題として、テキストエリアに文字を打ち込みデスクトップ画面にある memo.txtに書きこむという内容です。 これ以上よっっっくわからなくてかなり途方にくれてます。 こうしたらいいとか解決策とかお願いします。

    • ベストアンサー
    • Java
  • javaでストップウォッチが上手く作れません

    あるサイトを参考にして作ってみたんですが うまく動いてくれません、多分おかしいところだらけですが どこがダメか教えてもらえるとありがたいです package timeP; import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.EmptyBorder; public class timeC extends JFrame implements Runnable { private JPanel contentPane; private JTextField textField; private Thread th = null; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { timeC frame = new timeC(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public timeC() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 85); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS)); JPanel panel_3 = new JPanel(); contentPane.add(panel_3); panel_3.setLayout(new BorderLayout(0, 0)); textField = new JTextField(); panel_3.add(textField, BorderLayout.CENTER); textField.setColumns(10); JPanel panel_2 = new JPanel(); contentPane.add(panel_2); panel_2.setLayout(new BorderLayout(0, 0)); JButton JButtonstart = new JButton(" 開始 "); JButtonstart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if ( th == null ) { th = new Thread ( ); th.start(); } } }); panel_2.add(JButtonstart, BorderLayout.CENTER); JPanel panel_1 = new JPanel(); contentPane.add(panel_1); panel_1.setLayout(new BorderLayout(0, 0)); JButton JButtonstop = new JButton(" 停止 "); JButtonstop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if ( th != null ){ th = null; } } }); panel_1.add(JButtonstop, BorderLayout.CENTER); JPanel panel = new JPanel(); contentPane.add(panel); panel.setLayout(new BorderLayout(0, 0)); JButton btnNewButton_2 = new JButton("New button"); panel.add(btnNewButton_2, BorderLayout.CENTER); } @Override public void run() { //TODO 自動生成されたメソッド・スタブ int i; while ( th != null ){ i = Integer.parseInt( textField.getText() ); try { Thread.sleep(10000); if ( th == null ) break; } catch ( InterruptedException e ){ break; } textField.setText( Integer.toString( i + 1 ) ); } } }

  • JAVAアプレット(簡易計算機)のプログラム

    足し算を行うだけのプログラムを組むことができたのですが、 四則演算を行いたいと考えています。 下記のようなプログラムでは、ボタンが=のボタンなのですが、 そのボタンを+,-,*,/の4つにおきかえて、各ボタンを押したときに 各ボタンの処理を行うのはどのようにすればいいのでしょうか? 分かる方、ご教授よろしくおねがいします。 import java.applet.Applet; import java.awt.*; // java.awtパッケージのインポート import java.awt.event.*; public class SampleD10L2 extends Applet { private Button btn_culc; // +ボタン private TextField txt_A, txt_B, txt_answer; // 数値入力用テキストボックス public void init() { // ボタンのインスタンスを作成 btn_culc = new Button("="); // ボタンのイベント処理を定義 btn_culc.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { // txt_Aに入力された値 + txt_Bに入力された値を計算 int intAnswer = Integer.parseInt(txt_A.getText()) + Integer.parseInt(txt_B.getText()); // 答えをtxt_answerに表示 txt_answer.setText(Integer.toString(intAnswer)); } }); // コンポーネントの初期化 txt_A = new TextField("0", 3); txt_B = new TextField("0", 3); lbl_plus = new Label(" + "); txt_answer = new TextField("0", 5); // コンポーネントを追加 this.add(txt_A); // 自分自身のaddメソッドを呼び出す(this.は省略可能) this.add(lbl_plus); this.add(txt_B); this.add(btn_culc); this.add(txt_answer); } }

    • ベストアンサー
    • Java