dポイントプレゼントキャンペーン実施中!

質問内容 課題
・ファイル student.txt に学生データ(学籍番号、氏名、所属学部)が入っている。
・半角文字で学籍番号を入れて、検索ボタンを押すと、氏名と学部が表示される。

・存在しない学籍番号を入れて、検索ボタンを押すと、「該当なし」が表示される。




・ファイル student.txt の内容。
 学籍番号 氏名 学部の間は半角スペースで区切る。 0521201 金城花子 文学部
0533101 守山春子 生活環境学部
0561101 大森夏子 人間科学部
0552130 名城秋子 現代文化学部
0571201 鶴舞冬子 薬学部

プログラムソース↓
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

class kadai2Frame extends JFrame {
private JTextField tf1,tf2,tf3;
public kadai2Frame() {
setSize(200,100);
addWindowListener(new WindowAdapter() { // ×クリック時の終了処理
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});


Container c=getContentPane();
c.setLayout(new GridLayout(4,2)); // グリッドレイアウト4 行2 列を指定
c.add(new JLabel("学籍番号")); // 最初のラベルを作成して[名前]と表示
c.add(tf1=new JTextField("",8));
c.add(new JLabel("氏名")); // 最初のラベルを作成して[名前]と表示
c.add(tf2=new JTextField("",8));
c.add(new JLabel("学部")); // 次のラベルを作成して[年齢]と表示
c.add(tf3=new JTextField("",8));
JButton bt;
c.add(bt=new JButton("検索")); // ボタンbt を作成して[検索]と表示
bt.addActionListener(new ActionListener() { // ボタンbt のリスナーを登録
public void actionPerformed(ActionEvent e) { // ボタンが押された時

string s6 = tf1.getText();
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]);


}


public static void main(String[] args) {
JFrame w=new kadai2Frame();
w.setVisible(true);


try{
BufferedReader br =
new BufferedReader(new FileReader("student.txt"));
}
catch (FileNotFoundException e) {


String str1 = br.readLine();
String str2 = br.readLine();
String str3 = br.readLine();
String str4 = br.readLine();
String str5 = br.readLine();

String[] str1Ary = str1.split(" ");
for (int i=0; i<str1Ary.length; i++) {
System.out.println(str1Ary[i]);
}



String[] str2Ary = str2.split(" ");
for (int i=0; i<str2Ary.length; i++) {
System.out.println(str2Ary[i]);
}

String[] str3Ary = str3.split(" ");
for (int i=0; i<str3Ary.length; i++) {
System.out.println(str3Ary[i]);
}

String[] str4Ary = str4.split(" ");
for (int i=0; i<str4Ary.length; i++) {
System.out.println(str4Ary[i]);
}

String[] str5Ary = str5.split(" ");
for (int i=0; i<str5Ary.length; i++) {
System.out.println(str5Ary[i]);
}


String s1 = "str1Ary[0]";
String s6 = "tf1";
String s2 = "str2Ary[0]";
String s3 = "str3Ary[0]";
String s4 = "str4Ary[0]";
String s5 = "str5Ary[0]";

}
}
});
}
}

以上です。誰か教えてください!!(ToT)

A 回答 (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行目はいらない。

そうすると,シンボルが見つからない云々というエラーだらけになります。

これは,変数の宣言位置とスコープの問題なのでそのエラーとは別に解決してください。

変数宣言をきちんとやれば,コンパイルは通るはずです。
#思い通りには動かないと思うけど。
    • good
    • 0

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;
}
}
    • good
    • 2
この回答へのお礼

ご親切にありがとうございます。
もう一度参考に作ってみます。
一ついい忘れてましたが、
public static void main(String[] args){
^
の部分が式の開始が不正ですと出ました。
括弧が対応してないからなのでしょうか?

お礼日時:2008/01/16 01:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!