「夫を成功」へ導く妻の秘訣 座談会

実用的なプログラムを作りたいのですが、
入力をcsvファイルで

名前1,172.3,65.8(名前,身長,体重)
名前2,164.5,47.9
名前3,180.3,94.7




といったファイルを呼び出したときに
出力をcsvファイルで

平均身長:172.4,平均体重:69.5
名前1,172.3,65.8,22.2,標準(名前,身長,体重,BMI,判定)
名前2,164.5,47.9,17.7,痩せ
名前3,180.3,94.7,29.1,肥満




といった具合にcsvファイルを作ることができるjavaを作ろうと思ったのですが、数十時間格闘してまったく進展がありません。

どうかアドバイスをください。

BMI判定は20以下が痩せで25以上が肥満です
( )は表示しなくてよいです。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

String[ ][ ]は、String型の配列ですから、今度は、数値をString型へ変換する必要があります。


J2SE 5.0以降、C言語でよく使われるprintf()に相当する機能が追加されました。

次のサンプルを参考にしてみてはどうでしょうか。

------------------------------------------------------------------
import java.util.Formatter;

public class Format {
public static void main(String args[]) {
int nn = 1234;
String ss;
Formatter fmt = new Formatter(); // Formatterオブジェクト

fmt.format("nn=%d", nn);
System.out.println(fmt.toString());
System.out.println(fmt);

ss = String.format("nn=%d", nn);
System.out.println(ss);

System.out.printf("nn=%d\n\n", nn);


// double の場合

double dd = 1234.567;
Formatter fmt2 = new Formatter(); // Formatterオブジェクト
fmt2.format("dd=%f", dd);
ss = fmt2.toString();
System.out.println(ss);


Formatter fmt3 = new Formatter(); // Formatterオブジェクト
fmt3.format("dd=%7.2f", dd);
ss = fmt3.toString();
System.out.println(ss);
}
}
------------------------------------------------------------------
   実行結果
------------------------------------------------------------------
nn=1234
nn=1234
nn=1234
nn=1234

dd=1234.567000
dd=1234.57
------------------------------------------------------------------
   このssをString[ ][ ]に代入できると思います。
------------------------------------------------------------------

たか
    • good
    • 0
この回答へのお礼

サンプルまでつけていただき本当にありがとうございます。

とてもわかりやすかったので順調に作業でき、先ほど完成しました。
本当に感謝しています、ありがとうございました。

お礼日時:2008/01/29 17:53

No.2です。

No.2では助言にならない助言で失礼しました。
ずいぶん頑張っておられるようでもう一息というところですね。

まず確認しておきたいのは、hairetu[][]という配列が
bmimaker#readCSV()のreturnで得られる配列のままかどうかですね。

仮にreturnで得られてモノの場合、もとのCSVが','(カンマ)2つで区切られた3要素しかないものなので、hairetu[][]の2つ目のindexは0~2にしかなりません。
この場合、範囲外の添え字を指定したとかってExceptionが出ていませんか?

また、配列が別で用意した[numData][4]になっているものの場合、
入力の文字列を先にDouble.parseDouble(String s)で計算用の数値に変換して、BMIを算出し、
そのあと、数値を文字列に変換して配列に戻せば期待通りじゃないでしょうか?

もう一息だと思います。がんばってください。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
先ほど完成しました。

皆さんのおかげでここまでこれたし、応援されてやる気が出ました。
とても感謝しています。

お礼日時:2008/01/29 17:56

「データを数値として扱えない」ということに関してですが、


Integer.parseInt(String s)
Double.parseDouble(String s)
等で、数値に変換できます。
------------------------------------
たか
    • good
    • 0
この回答へのお礼

ありがとうございます。

おかげさまでだいぶ進みました。

double bmi=taijuu/sintyou/sintyou*10000;
とういう形式でBMIの計算式を作ったのですが

String[][]hairetuのなかのhairetu[i][3]の箱の中へBMIの数値を入れるのに戸惑ってます。

Double.parseDouble(String s)をつかってもうまくいかないです。
bmi=Double.parseDouble(hairetu[i][3]);

と直してもコンパイルは通っても実行でエラーになります。

これが終われば完成すると思うので、どうすればいいのかどなたか教えてください。

お礼日時:2008/01/29 03:42

何がどう進まないのかわかりませんが


今の時点で回答できることとしたら、こんなトコですかね。

ファイルを開く。
一行ずつ取り込む。
カンマ区切りで分けて変数に移す。
必要な計算を適宜実施する。
結果をファイルに出力する。

この通り作っても実用レベルかどうかと言われるとアレですが。
    • good
    • 0
この回答へのお礼

ありがとうございます。

地道に作業したいと思います。

お礼日時:2008/01/29 00:34

まずは、数十時間格闘した結果を補足しましょう。



いまのままでは、丸投げと同じで削除対象になってしまいます。

ここまで出来たけど、こうなってしまうorこうならない等を示しましょう。

この回答への補足

Bmimaker.java(主のプログラム)は
================================
class Bmimaker {
static String[ ][ ] readCSV(String filename) throws java.io.FileNotFoundException, java.io.IOException {
int numData = CountLine.count(filename);
java.io.FileReader freader = new java.io.FileReader(filename);
java.io.BufferedReader breader = new java.io.BufferedReader(freader);
String[ ][ ] data = new String[numData][ ];
String currentLine;
for(int i = 0; i < numData; i = i + 1){
currentLine = breader.readLine( );
data[ i ] = currentLine.split(",");
}

breader.close( );
freader.close( );

return data;
}
public static void main(String[ ] args)
throws java.io.FileNotFoundException, java.io.IOException {


String[ ][ ] newData = readCSV(args[0]);



for(int i = 0; i < newData.length; i = i + 1){
for(int j = 0; j < newData[i].length; j = j + 1){

System.out.print(" ");
System.out.print(newData[i][j]);

}
System.out.println( );
}
CSVmaker.outputCSV(newData, "read.csv");
}
}
================================
となっております。またCSVmakerのほうは
================================
class CSVmaker {
static void outputCSV(String[ ][ ] data, String filename)
throws java.io.FileNotFoundException {
java.io.PrintStream writer = new java.io.PrintStream(filename);

for(int i = 0; i < data.length;i= i+1){
for(int j = 0; j < data[i].length;j= j+1){
writer.print(data[i][j]);
if(j < data[i].length-1){
writer.print(",");
}
}
writer.println( );
}

writer.close( );
}
}
================================
となっております。

入力したファイルを出力する手順は行えるのですが、
このままではデータを数値として扱えないので計算もできません。

しかし、その方法がどうにもわかりません。
質問補足たりなくて申し訳ありませんでした。

補足日時:2008/01/28 18:40
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード


人気Q&Aランキング