Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ファイルを出力して平均を入力する

長文失礼します。

/////Javaプログラム/////

package pa;
import java.io.*;
import pb.Student;

class ex14_2
{
    public static void main(String args[])
    {
        try{        
            int number[]=new int[100];
            int data[][]=new int[100][3];
            int average[]=new int[3];
            int num[]=new int[3];

            Student stu=new Student();
            stu.member();

            FileReader fr = new FileReader("data2.csv");
            BufferedReader br = new BufferedReader(fr);

            String str=br.readLine();
            int startIndex=0;
            int count=0;
            for(int i=0;i<stu.numStudent;i++){
                for(int j=0; j<str.length(); j++){
                    if(str.charAt(j)!=',') continue;
                    if(count==0)
                        num[i]=Integer.parseInt(str.substring(startIndex, j));
                    else
                        data[i][count-1]=Integer.parseInt(str.substring(startIndex, j));
                    startIndex=j+1;
                    count++;
                }
                data[i][count-1]=Integer.parseInt(str.substring(startIndex, str.length()));
            }

            for(int i=0;i<str.length();i++){
                for(int j=0;j<stu.numStudent;j++){
                    average[i]+=data[j][i];
                }
            }

            PrintWriter pw=new PrintWriter
            (new BufferedWriter(new FileWriter("out2.csv")));

            pw.println("英語:"+average[0]+" 数学:"+average[1]+" 物理:"+average[2]);
            pw.close();

            System.out.println("英語:"+average[0]+" 数学:"+average[1]+" 物理:"+average[2]);
        }
        catch(Exception e){
            System.out.println("Exception:"+e);
        }
    }
}

package pb;
import java.io.*;

public class Student
{
    public int numStudent;

    public void member()
    {
        try{
            FileReader fr = new FileReader("data2.csv");
            BufferedReader br = new BufferedReader(fr);

            String str=br.readLine();
            int num=0;
            while((str=br.readLine())!=null){
                num++;
            }

            numStudent=num;

            br.close();
            fr.close();
        }
        catch(Exception e){
            System.out.println("Exception:"+e);
        }
    }
}


/////data2.csv/////
各行左から学籍番号、英語、数学、物理の点数

91001,    100,    39,    40,
91002,    30,    40,    50,
91003,    40,    50,    60,
91005,    80,    50,    90,
91006,    60,    70,    70,
91007,    80,    90,    80,
91008,    50,    60,    20,
91009,    80,    80,    90,
91010,    100,    90,    80,

/////実行結果//////

Exception:java.lang.StringIndexOutOfBoundsException: String index out of range:-8



 英語、数学、物理の平均点をout2.csvに出力する問題です。ここから先の修正が分からないので、アドバイスをお願いします。



10

回答

3674

閲覧

10件の回答

評価

0

まず、出たエラーを検索してみたらどうかな。

評価

0

 >まず、出たエラーを検索してみたらどうかな。

Errorの意味はなんとなく分かるのですが、その修正方法が分からないのです。

評価

0

エラーの意味さえ理解できれば、
次は、場所を特定できれば、修正はできます。

何となく、じゃなくて、しっかりと理解できるようにしましょう。

評価

0

>エラーの意味さえ理解できれば、
次は、場所を特定できれば、修正はできます。
何となく、じゃなくて、しっかりと理解できるようにしましょう。

とりあえず、意味をしっかり理解するところからやってみようと思います。

即答有難うございます。

評価

0

時間がかかりましたが、何とかできました。

評価

0

成功おめでとうございます。

気が向いたら、次の人のために、
自分がどう解決に至ったかを書いてくれると、
とても嬉しかったりします。

評価

0

String index out of range:-8
for(int i...)のところで
最後にstartIndex,countを0にしなかったため、
2行目を読み込むsubstringの際にきちんと文字列を
読み込めなかった。
(15文字目から5文字目 見たいな感じになってしまった)

なので
startIndex=0;
count=0;

をfor(int i=...)の最後に挿入することで、次の行の読み込みの際に
1文字目から正常に読み込めるようになりました。

余談ですが
        catch(Exception e){
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            e.printStackTrace(pw);
            System.out.println(sw.toString().trim());
        }

を入れると、エラーの発生している行がわかるみたいです。

評価

0

catch(Exception e){
   e.printStackTrace();
}

との違いが分からない・・・

評価

0

>catch(Exception e){
   e.printStackTrace();
}

との違いが分からない・・・

この部分はネットで見つけたものをそのまま使ってみただけなので、プログラムの内容までは分かりません。
申し訳ないです。

評価

0

じゃ、今後は1行で済ませられる、と覚えとけばいいよ。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。