質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.22%

javaについて

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 825

yugdm2

score 7

前提・実現したいこと

ここに質問したいことを詳細に書いてください
javaで部活動の名前と部員数が記録されているファイルを読み込み、部活動の名前をリストに表示し、クリックすると選択した部活動の部員数をテキストフィールドに表示するプログラムです。

以前回答してもらいましたが、なかなか思うような結果になりません
前回の質問
ファイルを読み込む機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

このようなエラーが出ました

Rei4_09.java:140: エラー: 変数cItemは初期化されていない可能性があります
while(cItem==null && i<MAX){
^
注意:Rei4_09.javaの操作は、未チェックまたは安全ではありません。
注意:詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。
エラー1個

該当のソースコード

package reidai;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JScrollPane;
import javax.swing.JList;
import javax.swing.JTextField;
import java.awt.FlowLayout;
import javax.swing.JLabel;
import java.awt.Dimension;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import java.awt.GridLayout;
import java.awt.Component;
import javax.swing.SwingConstants;
import javax.swing.ScrollPaneConstants;
import java.util.ArrayList;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.JRadioButton;
import javax.swing.JComboBox;

public class Rei4_09 extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel contentPane;
    private JPanel panelCenter;
    private JTextField textField01;
    private JTextField textField02;
    private JTextField textField03;
    private JLabel label01;
    private JLabel label02;
    private JScrollPane scrollPane;
    private JList list;
    private JList list1;
    private JLabel label03;
    private JButton button;
    private JPanel panel4;
    private JPanel panel3;
    private JPanel panel2;
    private JPanel panel1;
    private JRadioButton radioButton01;
    private JRadioButton radioButton02;
    private JComboBox comboBox;
    private JRadioButton aBunkabu;
    private JRadioButton aUndoubu;
    private final static int MAX=60;
    private int buinsu[];
    private int buinsu1[];

    private String[] aseito=new String[MAX];
    private String[] bseito=new String[MAX];

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Rei4_09 frame = new Rei4_09();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


    public Rei4_09() {

        setTitle("リストとファイル");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 700,250);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        panelCenter = new JPanel();
        contentPane.add(panelCenter, BorderLayout.CENTER);
        panelCenter.setLayout(new GridLayout(2, 1, 0, 0));


        panel1 = new JPanel();
        panel1.setAlignmentY(Component.BOTTOM_ALIGNMENT);
        panelCenter.add(panel1);
        panel1.setLayout(new GridLayout(6, 1, 0, 0));

        label01 = new JLabel("クラブ名");
        panel1.add(label01);
        label01.setHorizontalAlignment(SwingConstants.LEFT);

        textField01 = new JTextField();
        panel1.add(textField01);
        textField01.setColumns(10);

        label02 = new JLabel("部員数");
        label02.setHorizontalAlignment(SwingConstants.LEFT);
        panel1.add(label02);

        textField02 = new JTextField();
        panel1.add(textField02);
        textField02.setColumns(10);

        label03 = new JLabel("クラブ名2");
        panel1.add(label03);
        label03.setHorizontalAlignment(SwingConstants.LEFT);

        textField03 = new JTextField();
        panel1.add(textField03);
        textField03.setColumns(10);

        panel2 = new JPanel();
        FlowLayout fl_panel2 = (FlowLayout) panel2.getLayout();
        fl_panel2.setAlignment(FlowLayout.RIGHT);
        panelCenter.add(panel2);

        radioButton01 = new JRadioButton("運動部");
        radioButton01.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                    ArrayList<String> tmpAL=new ArrayList<String>(MAX);
                buinsu=new int[MAX];
                int i=0;
                File fl = new File("./undoubu.txt");
                try{
                    BufferedReader br = new BufferedReader(new FileReader(fl));
                    String cItem;
                      while(cItem==null && i<MAX){
                         tmpAL.add(cItem);
                         if(cItem==null)
                             break;
                         buinsu[i]=Integer.parseInt(cItem);
                         i++;
                      }
                      br.close();
                }catch(IOException fe){
                      textField01.setText(fe.toString());
                }

                tmpAL.trimToSize();
                list.setListData(tmpAL.toArray(new String[tmpAL.size()]));
        String[] tmpS=tmpAL.toArray(new String[tmpAL.size()]);
                String suuA;
                int suuB;
                for(int j=0;j<i-1;j++){
                    for(int k=j+1;k<i;k++){
                        if(buinsu[j]<buinsu[k]){
                            suuB=buinsu[j];
                            buinsu[j]=buinsu[k];
                            buinsu[k]=suuB;
                            suuA=tmpS[j];
                            tmpS[j]=tmpS[k];
                            tmpS[k]=suuA;
                        }
                    }
                }        
               }
    });
            panelCenter.add(radioButton01);

        radioButton02 = new JRadioButton("文化部");
            radioButton02.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                    ArrayList<String> tmpAL=new ArrayList<String>(MAX);
                buinsu1=new int[MAX];
                int i=0;
                File fl = new File("./bunkabu.txt");
                try{
                    BufferedReader br = new BufferedReader(new FileReader(fl));
                    String cItem ;
                      while((cItem=br.readLine())!=null && i<MAX){
                         tmpAL.add(cItem);
                         if(cItem==null)
                             break;
                         buinsu1[i]=Integer.parseInt(cItem);
                         i++;
                      }
                      br.close();
                }catch(IOException fe){
                      textField03.setText(fe.toString());
                }

                tmpAL.trimToSize();
                list.setListData(tmpAL.toArray(new String[tmpAL.size()]));
        String[] tmpS1=tmpAL.toArray(new String[tmpAL.size()]);
                String suu1;
                int suu2;
                for(int j=0;j<i-1;j++){
                    for(int k=j+1;k<i;k++){
                        if(buinsu1[j]<buinsu1[k]){
                            suu2=buinsu1[j];
                            buinsu1[j]=buinsu1[k];
                            buinsu1[k]=suu2;
                            suu1=tmpS1[j];
                            tmpS1[j]=tmpS1[k];
                            tmpS1[k]=suu1;
                        }
                    }
                }        

    }
                });

        panelCenter.add(radioButton02);



        ButtonGroup bGroup=new ButtonGroup();
        bGroup.add(radioButton01);
        bGroup.add(radioButton02);
        bGroup.add(aUndoubu);
        bGroup.add(aBunkabu);

        scrollPane = new JScrollPane();
        scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPane.setPreferredSize(new Dimension(120, 2));
        contentPane.add(scrollPane, BorderLayout. WEST);

        list = new JList();
        list.addListSelectionListener(new ListSelectionListener() {
                public void valueChanged(ListSelectionEvent e) {
                textField01.setText((String)list.getSelectedValue());
                textField02.setText(String.valueOf(buinsu[list.getSelectedIndex()]));
            }
        });
                scrollPane.setViewportView(list);
    }

}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2016/11/25 16:20

    こちらの質問が他のユーザから広告だという指摘を受けました
    個人のサービスやプロダクトなどの広告を目的とした投稿は、質問ではないため禁止しています。
    投稿した意図に反し広告と受け取られている場合は、「質問を編集する」ボタンから編集を行い、質問内容と解決したいことを明確に記述しなおしてください。

回答 4

checkベストアンサー

+1

そのエラーが出ている文の1行前を
String cItem;
から
String cItem="";
にするだけでコンパイル通ったんですが・・・

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/25 15:34

    確かにコンパイルは通ったのですが、ファイル内に書かれたものが出力されません…

    キャンセル

  • 2016/11/25 16:34

    while(cItem==null && i<MAX){
    ではなく
    while(cItem!=null && i<MAX){
    ですよ

    キャンセル

  • 2016/11/25 16:52

    ありがとうございます!
    火曜日に一度試してみます!

    キャンセル

0

String cItem;
while(cItem==null && i<MAX){
}


whileの条件で、cItem==nullとしているが、この条件の前ではcItemに何も代入してません。cItemを参照する前に値をセット(初期化)してください。


コメントを受けて追記

String cItem = "";
wihle(cItem==null && i<MAX){
//・・・略・・・
}

whileの条件を見直しましょう。
「cItemがnullでかつ iがMAX未満のときwhileのブロック内を実行する」という条件なので一度もwhileの中は実行されません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/25 15:37

    ありがとうございます。String cItem=""; にすればいいとの回答が来たので、その文をいれました。

    キャンセル

  • 2016/11/25 17:09

    ありがとうございます!
    whileの文を直してみます!

    キャンセル

0

BufferedReaderから文字列を取得して、
cItemに代入する処理が抜けている?だけのようですが・・・

処理の意味をちゃんと理解できていますか?
理解しようとしていますか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

結局何も理解せずに修正しても何も改善しませんよ。
私が前回の質問で一度のループでreadLineを複数回呼ぶなと回答しました。
その意味を理解せずにまったく呼ばないように修正するとは思いませんでした。

また、同じ質問を何回もしないと自分で言っていたのにさっそく同じ質問をしていますよね?前回の質問はどうなるんですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/25 16:08

    高校の授業でjavaを始めたばかりなので卒業課題を自分で作ることになり、サンプルもとに改造しているので、エラーの直し方が具体的にわからないので、しつこいようですが細かい説明をお願いします。

    キャンセル

  • 2016/11/25 16:27 編集

    卒業課題ってことはあなたの実力を図るものですよね?それを人の実力で解決してもいいんですか?teratailを使うことは学校の許可は取っているんですよね?
    カンニングの共犯にはなりたくないです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る