- ベストアンサー
エラーで式の開始が不正ですと出ます
- 質問内容: ファイル student.txt に学生データ(学籍番号、氏名、所属学部)が入っている。半角文字で学籍番号を入れて、検索ボタンを押すと、氏名と学部が表示される。存在しない学籍番号を入れて、検索ボタンを押すと、「該当なし」が表示される。
- プログラムソース: グリッドレイアウトを使用してGUIを作成するJavaプログラム。学生データをファイルから読み込み、学籍番号を検索して氏名と学部を表示する機能が実装されている。
- 解決方法: エラーメッセージ「式の開始が不正です」とは、変数やメソッドの宣言や定義の位置が間違っていることを意味します。このエラーを解決するためには、変数やメソッドの宣言や定義の位置を修正する必要があります。具体的には、各変数の宣言やメソッドの定義を適切な場所に移動させることでエラーを解消できます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
動かないこと前提に。 まず, if文の構文がおかしいので直します。最後に}をつける if(s1.equals(s6)){tf2.setText(str1Ary[1]);} string s6 = tf1.getText(); if(s2.equals(s6)){tf2.setText(str2Ary[1]);} string s6 = tf1.getText(); if(s3.equals(s6)){tf2.setText(str3Ary[1]);} string s6 = tf1.getText(); if(s4.equals(s6)){tf2.setText(str4Ary[1]);} string s6 = tf1.getText(); if(s5.equals(s6)){tf2.setText(str5Ary[1]);} 53行目の閉じ括弧に対応するのは 28行目の括弧です。 つまり public static void mainも bt.addActionListener(new ActionListener(){ 27行目 }) 111行目 の中に入っているのでしょうが, おそらくメソッドを二つ入れる形になっているのでエラーがでているんだと思います。 111行目を取り除いて 54行目に }); を記述します 次に mainの前に public kadai2Frame() { を閉じていないことがわかるので 55行目に } を補います。 これで応急処置は終わりです。それまでに閉じているはずのものを全然閉じてないからエラーが出ていたんです。 61行目のtry{は64行目 65行目のcatch{はfor文は対応関係が正しいから無視して}109行目。 mainの終了は 110行目。 すると 112行目がクラスの終わりだから 113行目はいらない。 そうすると,シンボルが見つからない云々というエラーだらけになります。 これは,変数の宣言位置とスコープの問題なのでそのエラーとは別に解決してください。 変数宣言をきちんとやれば,コンパイルは通るはずです。 #思い通りには動かないと思うけど。
その他の回答 (1)
- himajin100000
- ベストアンサー率54% (1660/3060)
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.*; class Q3683613A extends JFrame { /* クラス名が違うのは俺の教えてgooの質問管理上の都合。 personクラスを作った上にArrayList使った関係上,元と全く違うコードになってしまった。 二次元配列で最初作ろうとしたら凄く混乱した。 設計的にクラスでいいのかはわからん。 注意点。 1.元と違って,テキストファイルの文字符号化方式をUTF-8と明示的に指定している。 Windowsで普通にテキスト作っているときはShift_JISが多いから気をつけてね。 2.ファイル読み込み時の例外処理とか多分不完全。 3.本当はテキストファイルが本当に正しい形式で書かれているのかも検証する必要がある。 4.今のところ,personクラスが持つフィールドは3つだが,将来の拡張を見据える必要がある。 5.ファイル名をコマンドラインから与えるようにした方が本当は汎用性があると思う。 6.各メソッドや変数がPascalCaseかCamelCaseかまでは検討していない 7.JavaDocとかは書き方を知らないので勘弁してください。 元のコードは・・・ if文の終了時の閉じ括弧が抜けていることが多かった。 宣言位置および変数のスコープを理解しているようには見えなかった。 配列とかを上手に使うことを目指してみよう! */ private JTextField tf1,tf2,tf3; private JButton bt; private ArrayList<person> Data = new ArrayList<person>(); private void LoadData(){ BufferedReader br = null; try{ br = new BufferedReader(new InputStreamReader(new FileInputStream("student.txt"), "UTF-8")); String str = br.readLine(); while(str != null){ System.out.println(str); String[] pdata = str.split(" "); person p = new person(pdata[0],pdata[1],pdata[2]); Data.add(p); str = br.readLine(); } }catch (java.io.FileNotFoundException e) { System.out.println(e.getStackTrace().toString()); System.exit(0); }catch (java.io.IOException e){ System.out.println(e.getStackTrace().toString()); System.exit(0); }finally{ } } private void InitializeComponent(){ setSize(200,500); addWindowListener( new WindowAdapter() { // ×クリック時の終了処理 public void windowClosing(WindowEvent e) { System.exit(0); } } ); Container c=getContentPane(); c.setLayout(new GridLayout(4,2)); // グリッドレイアウト4 行2 列を指定 tf1 = new JTextField("",8); c.add(new JLabel("学籍番号")); // 最初のラベルを作成して[名前]と表示 c.add(tf1); tf2 = new JTextField("",8); c.add(new JLabel("氏名")); // 最初のラベルを作成して[名前]と表示 c.add(tf2); tf3 = new JTextField("",8); c.add(new JLabel("学部")); // 次のラベルを作成して[年齢]と表示 c.add(tf3); bt = new JButton("検索"); c.add(bt); // ボタンbt を作成して[検索]と表示 bt.addActionListener(new ActionListener() { // ボタンbt のリスナーを登録 public void actionPerformed(ActionEvent e) { // ボタンが押された時 boolean Foundflag = false; for(int i = 0;i < Data.size();i++){ if(tf1.getText().equals(Data.get(i).getID())){ tf2.setText(Data.get(i).getName()); tf3.setText(Data.get(i).getMajor()); Foundflag = true; } } if(!Foundflag){ tf2.setText("該当なし"); tf3.setText("該当なし"); } } }); } Q3683613A() { LoadData(); InitializeComponent(); } public static void main(String[] args) { JFrame w=new Q3683613A(); w.setVisible(true); } } class person{ private String ID = null; private String Name = null; private String Major = null; person(String id,String name,String major){ ID = id; Name = name; Major = major; } public String getID(){ return ID; } public String getName(){ return Name; } public String getMajor(){ return Major; } public void setID(String str){ ID = str; } public void setName(String str){ Name = str; } public void setMajor(String str){ Major = str; } }
お礼
ご親切にありがとうございます。 もう一度参考に作ってみます。 一ついい忘れてましたが、 public static void main(String[] args){ ^ の部分が式の開始が不正ですと出ました。 括弧が対応してないからなのでしょうか?