![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
質問内容 課題
・ファイル 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)
No.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行目はいらない。
そうすると,シンボルが見つからない云々というエラーだらけになります。
これは,変数の宣言位置とスコープの問題なのでそのエラーとは別に解決してください。
変数宣言をきちんとやれば,コンパイルは通るはずです。
#思い通りには動かないと思うけど。
No.1
- 回答日時:
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){
^
の部分が式の開始が不正ですと出ました。
括弧が対応してないからなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- 数学 領域の問題について質問です。 実数s, tは,s^2+t^2≦1, s≧0, t≧0 を同時に満たし 3 2023/05/18 20:59
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JTable の 列幅を個別に設定す...
-
JPanelの切り替えと再描画
-
KeyListenerの使い方について
-
タスクトレイのメニュからウィ...
-
キャレットの幅を設定したい。
-
eclipse java swing
-
JavaでのSwingを使った簡易電卓...
-
javaで文字数制限するには?
-
JPanelの重ね方/OverlayLayout他
-
最後の行に移動するには?
-
TextAreaでの文字の色
-
java junit list同士の比較方法
-
JSPやサーブレットでSystem.out...
-
変数を動的に利用するには?
-
C言語のポインターに関する警告
-
System.err. printlnとSystem.o...
-
getStringの値がNULLの時の処理
-
Java配列でNullPointerExceptio...
-
JSPでImportエラーになります
-
[JAVA]try 内の変数を外で!?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
java junit list同士の比較方法
-
javaで文字数制限するには?
-
JPanelの切り替えと再描画
-
連番をオブジェクト名の最後に...
-
JPanelの重ね方/OverlayLayout他
-
JavaのswingでCardLayoutの画面...
-
JavaでのSwingを使った簡易電卓...
-
ArrayListの使い方について(初...
-
4択クイズでのランダム出題の...
-
KeyListenerの使い方について
-
JDialogを閉じた時の処理
-
BMI測定を作ろうとしている...
-
TextAreaでの文字の色
-
EXECLの行を削除
-
Java-Swing TextAreaにスクロー...
-
setPrefferedSizeとsetSize
-
【Swing】JPanel クラス外から...
-
最後の行に移動するには?
-
あるコンボボックスを選択する...
-
JButton-背景の透明化
おすすめ情報