Japanese
72
99
40
Math
88
48
32
English
13
77
96
というデータファイル(test.dat)があります。数字は省略しましたが各200ずつ計600で、データ数はJapanese・Math・Englishの行含め全部で603です。上から順に出席番号1番2番・・・となりますので200人分の成績データということになります。
これら数値データを用いて各教科ごとの平均点を出したり、成績順に並べ替えたりしたいのです。
そのためにこのデータファイルの数値の部分だけ配列にしたいのですが、外部のファイル、しかも数値と文字が混じったデータを配列に変換するにはどうすればよいでしょうか。
[00],[01],[02]・・・・・・・・(以下200人分)
[10],[11],[12]・・・・・・・・
[20],[21],[22]・・・・・・・・
というのをイメージしているのですが(列は出席番号・行は各教科)、他に良いアイデアはありますでしょうか。
申し訳ありませんが、ご教授願います。
No.2
- 回答日時:
外部リソースとなる、外部ファイルのデーター構造がいまいちわかりにくいのですが、、、
---------------------------------------------
Japanese
72
99
40
(以下200人分つづく)
Math
88
48
32
(以下200人分つづく)
English
13
77
96
(以下200人分つづく)
---------------------------------------------
といった形でしょうか?
わかりづらくて申し訳ないです。
データ構造はそのとおりです。
念のためこちらにscore.datを置いておきます。(質問にはtest.datとありますが、中身は同じです)
http://jp.y42.briefcase.yahoo.co.jp/bc/hsawqipg/ …
もしよろしければアドバイスをいただけると嬉しいです。
よろしくお願いします。
No.3
- 回答日時:
Excelとかに貼り付けた方が簡単な気がしますが…
私なら…
int japanese
int math
int english
をプロパティに持つクラスを作って、
それをArrayListに持つクラスを作って、
親のクラスにソートや集計のメソッドを持ちます。
ご回答、ありがとうございます!
しかしせっかくお教えくださったのですが、ArrayListがわかりません…。
なにぶん応用が利かないもので、もしよろしければ質問のArrayList使用例をご記述くださると助かります…。なるべくオブジェクト指向が好ましいので…。
No.4
- 回答日時:
どのあたりでつまずいているのでしょう?
a外部ファイルにアクセスする方法は出来ている?
b外部ファイルから1行ずつ読むのはできている?
c読んだ1行のデータを、文字列型変数に代入することはできている?
d読んだデータは文字列型なのでそれを数値型(intやdouble)に変換する関数は知っている?
e2次元配列の宣言の仕方、書式は知っている?
配列の添え字が0から始まることは知っている?
fデータの並び方や個数は常に同じか?
No2の方の発言にある通りだとして以下のように配列を用意してみます。
→教科項目用に文字列型配列 配列の個数3
→数値データに2次元配列 3×200
g読み込み行カウント変数を用意して、0行目から開始
h. whileで1行ずつ読み込む、終了条件はファイルエンド
i 行数を201で割った余りが0なら項目用文字列型配列に代入、配列番号は201で割った商
j 行数を201で割った余りが0ではないときは、数値型配列に代入
[項目番号:201で割った商][出席番号-1:201で割った余り-1]
k 行カウント変数をインクリメントして次の行
No3の方のように、ArrayListをつくる方がよりオブジェクト指向な作りだとは思います。
ご回答ありがとうございます。
なんとか外部ファイルを読み込んで、IFで条件分けをして教科項目を除いて、成績データを多次元配列にするところまでいきました。
このような感じです。
国語 数学 英語
[1][1] [2][1] [3][1]
: : :
[1][200] [2][200] [3][200]
しかし、各教科の平均を出したりするため、文字列を数値に変換したいのですが、方法がわかりません。
出来たところまでのソースをはります。
import java.io.*;
public class java05 {
public static void main(String args[]) throws IOException{
String ss;
int i=0, j=0, k=0, m=0, n=0, x=0;
int data[] =new int[200];
String a[][] =new String[4][201];
BufferedReader fin = new BufferedReader(
new FileReader("score.dat"));
for(i=1; i<=3; i++){
for(j=0; j<=200; j++){
ss=fin.readLine();
if(j!=0){
a[i][j]=ss;
System.out.println("("+i+","+j+")="+a[i][j]);
}
}
}
fin.close();
}
}
データ構造はNo2の方のおっしゃるとおりです。
一応、score.dat(test.dat)を置いておきます。
http://jp.y42.briefcase.yahoo.co.jp/bc/hsawqipg/ …
重ねてアドバイスいただけたら幸いです。
No.5
- 回答日時:
>文字列を数値に変換したいのですが、方法がわかりません。
JavaDocでjava.lang.Integerクラスを調べましょう。
参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/inde …
No.6ベストアンサー
- 回答日時:
ANo#3さんの言われるようにexcelが簡単でしょうがjavaでやりたいなら、以下のコード参考にしてください。
合計と平均はプログラムの中で計算しています。なおtest.datの最終行に
END
という文字列を追加してください。
import java.io.*;
public class LineCalc {
public static void main(String args[]){
String[] item= {new String("Japanese"),
new String("Math"),
new String("English"),
new String("END")};
int[][] intArray=new int[3][200];
try{
BufferedReader br=new BufferedReader(new FileReader("test.dat"));
String line=null;
for(int i=0;i<item.length-1;i++){
int sum=0;
int point=0;
intcounter=0;
if(i==0)
line=br.readLine();
if(line.equals(item[i])){
while(!(line=br.readLine()).equals(item[i+1] )){
point=Integer.parseInt(line);
intArray[i][counter]=point;
sum=sum+point;
counter++;
}
System.out.println(item[i]+":合計:"+sum);
System.out.println(item[i]+":平均:"+sum/counter);
}
}
for(int k=0;k<3;k++){
for(int j=0;j<200;j++){
System.out.print(intArray[k][j]+" ");
}
}
br.close();
}catch(Exception ex){
ex.printStackTrace();
}
//
}
}
ご回答ありがとうございます!
ソースを参考にして、無事希望するものを作成することができました!!
本当に助かりました。こころよりお礼申し上げます。
No.7
- 回答日時:
No.3の補足です。
java.util.ArrayListは、可変長配列を扱えるクラスです。
普通の配列のように、宣言時に要素数を決めるのではなく
処理しながら要素を追加していくような使い方をします。
使い方の詳細はAPIドキュメントを参照いただくとして
簡単に書くと、こんな使い方ができます。
addで追加、getで取得、iteratorで反復子を取り出します。
-----------------
import java.util.ArrayList;
import java.util.Iterator;
public class Test {
public static void main(String args[]) {
// コマンドライン引数をArrayListに移し替え
ArrayList list = new ArrayList();
for(int i = 0 ; i < args.length ; i++) {
list.add(args[i]);
}
// ArrayListの要素数を表示
System.out.println("要素数=" + list.size());
// ArrayListの内容を順次表示(get)
System.out.println("getで内容表示");
for(int i = 0 ; i < list.size() ; i++) {
System.out.println((String)list.get(i));
}
// ArrayListの内容を順次表示(Iterator)
System.out.println("Iteratorで内容表示");
Iterator it = list.iterator();
while(it.hasNext() == true) {
System.out.println((String)it.next());
}
}
}
-----------------
$ java Test あいう abc 123
要素数=3
getで内容表示
あいう
abc
123
Iteratorで内容表示
あいう
abc
123
-----------------
データも今の形式より、もし変えられるようであれば
以下のような形式の方が扱いやすいでしょう(CSVです)。
-----------------
No,Japanese,Math,English
1,72,88,13
2,99,48,77
3,40,32,96
:
:
-----------------
ArrayListをわかりやすくご教授くださりどうもありがとうございました!
たいへん勉強になりました。参考にして頑張ってみます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) VBAで大量データの処理 3 2022/11/15 21:53
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Microsoft ASP プログラミング関係で質問です。 3 2022/10/11 16:06
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列をセッションに割り当てた後で
-
JavaBeansの配列の値取得方法に...
-
多次元配列はなぜ必要???
-
ページング
-
ArrayListからBean配列に値をセ...
-
csvファイルを2次元配列に格納
-
String[] とVectorの使い分け
-
sqlparamaterでIN句を使いたい。
-
C言語でunsigned char配列を連...
-
無名配列の作成方法について質問
-
配列で、値の入っている要素数...
-
n番目に大きな値を探索する
-
配列について
-
Javaで文字と数字が混ざったも...
-
main(String[] args) の args...
-
javaの問題
-
配列の中で入れ換えをして逆順...
-
javaでEUC-JP文字列→UTF-8への変換
-
配列の中に複数存在する数がい...
-
Java 配列に1から25以外の値が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaで文字と数字が混ざったも...
-
[Ljava.lang.Stringってなんですか
-
この警告はどうすれば?
-
Java配列の問題を教えてくださ...
-
配列の中に複数存在する数がい...
-
配列で、値の入っている要素数...
-
java
-
『args[]』とは?
-
javaで大容量テキストファイル...
-
C#で動的配列Listの中身をListB...
-
csvファイルを2次元配列に格納
-
Javaで文字を漢字であるか否か...
-
フローチャート
-
javaについて
-
【C#】ハッシュテーブル(連想...
-
セッションを使ったint型の値の...
-
C言語でunsigned char配列を連...
-
配列について
-
n番目に大きな値を探索する
-
cloneメソッドについて (java)
おすすめ情報