• ベストアンサー

実用的なjavaプログラムを作りたい

実用的なプログラムを作りたいのですが、 入力を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以上が肥満です ( )は表示しなくてよいです。 よろしくお願いします。

  • Java
  • 回答数5
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.4

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[ ][ ]に代入できると思います。 ------------------------------------------------------------------ たか

aitizaijuu
質問者

お礼

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

その他の回答 (4)

回答No.5

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を算出し、 そのあと、数値を文字列に変換して配列に戻せば期待通りじゃないでしょうか? もう一息だと思います。がんばってください。

aitizaijuu
質問者

お礼

どうもありがとうございます。 先ほど完成しました。 皆さんのおかげでここまでこれたし、応援されてやる気が出ました。 とても感謝しています。

  • auty
  • ベストアンサー率58% (284/486)
回答No.3

「データを数値として扱えない」ということに関してですが、 Integer.parseInt(String s) Double.parseDouble(String s) 等で、数値に変換できます。 ------------------------------------ たか

aitizaijuu
質問者

お礼

ありがとうございます。 おかげさまでだいぶ進みました。 double bmi=taijuu/sintyou/sintyou*10000; とういう形式でBMIの計算式を作ったのですが String[][]hairetuのなかのhairetu[i][3]の箱の中へBMIの数値を入れるのに戸惑ってます。 Double.parseDouble(String s)をつかってもうまくいかないです。 bmi=Double.parseDouble(hairetu[i][3]); と直してもコンパイルは通っても実行でエラーになります。 これが終われば完成すると思うので、どうすればいいのかどなたか教えてください。

回答No.2

何がどう進まないのかわかりませんが 今の時点で回答できることとしたら、こんなトコですかね。 ファイルを開く。 一行ずつ取り込む。 カンマ区切りで分けて変数に移す。 必要な計算を適宜実施する。 結果をファイルに出力する。 この通り作っても実用レベルかどうかと言われるとアレですが。

aitizaijuu
質問者

お礼

ありがとうございます。 地道に作業したいと思います。

noname#77845
noname#77845
回答No.1

まずは、数十時間格闘した結果を補足しましょう。 いまのままでは、丸投げと同じで削除対象になってしまいます。 ここまで出来たけど、こうなってしまうorこうならない等を示しましょう。

aitizaijuu
質問者

補足

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( ); } } ================================ となっております。 入力したファイルを出力する手順は行えるのですが、 このままではデータを数値として扱えないので計算もできません。 しかし、その方法がどうにもわかりません。 質問補足たりなくて申し訳ありませんでした。

関連するQ&A

  • javaプログラミングについて

    身長、体重を入力して、肥満型、標準型、痩せ型かを判断し表示するjavaプログラムを作りたいのですがまったくわかりません。 一体どういうプログラミングになるのでしょうか?if-else文でお願いします。 一応、標準体重=(身長-100)*0.9、体重が標準体重の1.1倍以上ならば「肥満型」、0.9倍~1.1倍ならば「標準型」、0.9倍以下ならば「痩せ型」と表示したいです。

  • 正規分布についての問題です。

    あるクラスの生徒40人のBMI(ボディマス指数)は平均20.2、標準偏差4.6の正規分布に従っています。BMIが18.5未満は低体重とされ、25以上は肥満とされます。BMIが低体重または肥満と判定された生徒の数がクラスの全生徒数の10%以下になる確率を教えてください。

  • BMIについて

    身長162センチ、体重50キロ、妊婦です。 身長・体重から計算する肥満度の判定方法のBMI指数だと19くらいです。 ですが、体重計で量るBMIでは28もあり、肥満になります。 やはり体重計のBMIが正しいのでしょうか? 痩せ型ですが、最近妊娠5ヶ月で最近つわりが終わったのもありすごい食べています。(甘いものなども) でも体重は増えてません。 肥満ということになるのでしょうか?

  • プログラミングのC言語について質問です。

    プログラミングのC言語について質問です。 身長をS(cm)T(kg)に入力して、身体比bmiをしたの式で計算し、体型を判定して身長、体重、及び体型を出力するプログラムを作成せよ。ただし、入力データは4種類あるので{データの入力、計算、判定、出力}を繰り返し命令によって、4回繰り返すようにする。 身長比 (body mass index) : bmi = 体重÷身長の二乗×10000 <体型判定基準> bmi<19ならば「痩せ型」 bmi>24ならば「肥満型」 19≦bmi≦24ならば「標準型」 <出力形式> 身長は 173.5cm 体重は 63.5kg 身長比(bmi)はXXX.Xで、標準型の体型です。 ifを使ってやるのですが、書き方が分からないので分かる方よろしくお願いします。

  • BMIの数値って全然アテにならないのでは?

    BMIの数値って全然アテにならないのでは? ※BMI=体重 ÷ 身長(m)の2乗 22前後が標準体重とされる。18.5以下が痩せ。25以上が肥満。 が基本です。 私は身長163cmで体重52kg(体脂肪8%)の標準体型ですが 理想体重は58kgと出ました。私が体脂肪15%の時ですら55kgです。 正直、163cmの身長で58kgってどんだけデブなんだよって思ったぐらいです。 実際に私と同じぐらいの身長で59kgの人いますが、デブです。お腹とかポッチャリしてます BMIの計算方法を考えた人ってデブ専の人なんじゃないでしょうか? 体重と体脂肪率をこまめに見てた方がよっぽど参考になると思うんですが・・・ そりゃ基準ってあるだろうけど、BMIの基準数値の体重って高すぎじゃないですかね?

  • エラーはでないが数値がおかしい(BMI値計算プログラム)

    今以下のようなプログラムを製作中なのですがどうしてもうまくいきません; (1)ユーザに身長と体重を入力してもらう (2)(1)の値からBMI値を計算し、その結果から「太りすぎ」などの判定を表示し (3)身長・体重から計算した標準体重と現在の体重との差を表示する 問題は以下です。 ・身長と体重の数値を変えても結果(BMI値)は毎回同じで、 100万台の桁違いな数値がでる;(しかし「太りすぎ」などの判定は変化する) どこがおかしいのかチェックするために(1)の部分のあとに改めて身長と体重を 表示させてみたところ、そこからすでに数値が変なことになっていたので、 おかしいとしたら(1)のscanfなどの部分か型宣言だと思うのですが… 回答よろしくお願いします;; プログラム ------------------------------------------------ /* bmi.c */ #include <stdio.h> main() { int sintyo, taizyu; double sintyo2, bmi, hyozyun, sa; //入力 printf("身長(cm)を入力してください\n"); scanf("%d", &sintyo); printf("体重(kg)を入力してください\n"); scanf("%d", &taizyu); //※チェック(身長・体重) printf("%d\n", &sintyo); printf("%d\n", &taizyu); //計算 sintyo2 = sintyo / 100; //cm→m bmi= taizyu / (sintyo2 *sintyo2); //BMI値計算 hyozyun = (sintyo2 *sintyo2) * 22;//標準体重 sa = hyozyun - taizyu; //※チェック(BMI値) printf("%d\n", &bmi); //出力 if(bmi>=25) printf("BMI値:%f\nあなたは太りすぎです\n", &bmi); else if(bmi>=23 && bmi<25) printf("BMI値:%f\nあなたは太りぎみです\n", &bmi); else if(bmi>=21 && bmi<23) printf("BMI値:%f\nあなたは標準です\n", &bmi); else if(bmi>=18.5 && bmi<21) printf("BMI値:%f\nあなたは痩せぎみです\n", &bmi); else printf("BMI値:%f\nあなたは痩せすぎです\n", &bmi); if(sa>=0) printf("標準体重:%fkg\n標準体重を+%fkgオーバーしています\n",&hyozyun, &sa); else printf("標準体重:%fkg\n標準体重より-%fkgです\n",&hyozyun, &sa); return 0; } 結果(身長160、体重50で入力) ------------------------------------------------ 身長(cm)を入力してください 160 体重(kg)を入力してください 50 1310600 (←身長チェック 以下3つの値は不動です;) 1310596 (←体重チェック) 1310580 (←BMI値チェック) BMI値:0.000000 あなたは太りすぎです 標準体重:0.000000kg 標準体重より-+NANkgです

  • 適正体重について。

    BMIというのは身長体重から割り出して肥満かどうかを調べるそうですが、体脂肪率を含めないと正しく肥満か、痩せかというのはわからないですよね? 筋肉のある方であればお腹が出ていないのに肥満とでてしまう方もいると思います。 体脂肪率や筋肉量を考えたうえで身長などから計算できる適正体重を調べる方法はありますか?

  • マッチョ体型は肥満?

    肥満かどうかは一般的に、 BMIと呼ばれる、身長と体重だけから計算される式により判断されます。 背が低くて体重が大きいと肥満ということになります。 ふと、疑問がわいたのですが、 脂肪よりも筋肉の方が密度が高いため、 マッチョ体質の人は、普通の人よりも脂肪が少ないにも拘わらず、 体重が大きなものとなり、BMIも大きなものとなるはずですが、 マッチョ体質であってもBMIが大きすぎると 肥満と判定されてしまうのでしょうか?

  • ファイルの入出力

    氏名・身長・体重が入っているファイルからデータを構造体として読み取りその人の肥満度を表示するプログラムを作りたいのですが一考にわかりません。。。誰か知恵を貸してくれませんか 肥満度は20未満が「やせすぎ」20以上25未満は「普通」25以上は「肥満」としています。ファイルには27にんのデータが入っています。肥満度の計算は関数を作成で、関数名はbmiで引数は構造体、戻り値は実数です。肥満度の計算は体重÷身長÷身長です。 構造体は自分で定義します。よろしくお願いします

  • 標準体重とBMI体重

    BMI体重とは病気になりにくい体重というのは知っているのですが、標準体重とは何なのかよくわかりません。根本的にどう違うのでしょうか。また、身長や年齢などで『標準』や『痩せ』を区別していますが、どういう基準なのでしょうか。 この場合、理想体重とはどちらの方でしょうか。 質問が多くてすみません。